From 0cc6ab9fc645c95489139fa1197a507a32ed64ba Mon Sep 17 00:00:00 2001 From: Valentin Chaboche Date: Mon, 6 Feb 2023 13:44:51 +0100 Subject: [PATCH 1/7] EVM: noop kernel --- .dockerignore | 5 +++++ .gitignore | 5 +++++ Makefile | 4 ++++ kernels.mk | 9 +++++++++ src/kernel_evm_mockup/Cargo.lock | 7 +++++++ src/kernel_evm_mockup/Cargo.toml | 7 +++++++ src/kernel_evm_mockup/Makefile | 5 +++++ src/kernel_evm_mockup/rust-toolchain | 1 + src/kernel_evm_mockup/src/lib.rs | 2 ++ 9 files changed, 45 insertions(+) create mode 100644 kernels.mk create mode 100644 src/kernel_evm_mockup/Cargo.lock create mode 100644 src/kernel_evm_mockup/Cargo.toml create mode 100644 src/kernel_evm_mockup/Makefile create mode 100644 src/kernel_evm_mockup/rust-toolchain create mode 100644 src/kernel_evm_mockup/src/lib.rs diff --git a/.dockerignore b/.dockerignore index 44c96706b782..d5cfaa60eb1e 100644 --- a/.dockerignore +++ b/.dockerignore @@ -73,3 +73,8 @@ _coverage_report .git .gitignore .gitlab-ci.yml + +# Rust +target + +evm_mockup_kernel.wasm \ No newline at end of file diff --git a/.gitignore b/.gitignore index 2d9df1df0698..5702ad8e2df1 100644 --- a/.gitignore +++ b/.gitignore @@ -88,3 +88,8 @@ __pycache__ # Output of the update_opam_repo script opam_repo.patch + +# Rust +target + +evm_mockup_kernel.wasm \ No newline at end of file diff --git a/Makefile b/Makefile index c42759d1c6d8..2e0dbd116f30 100644 --- a/Makefile +++ b/Makefile @@ -480,3 +480,7 @@ clean: coverage-clean clean-old-names @-${MAKE} -C docs clean @-${MAKE} -C tests_python clean @-rm -f docs/api/tezos-{baker,endorser,accuser}-alpha.html docs/api/tezos-{admin-,}client.html docs/api/tezos-signer.html + +.PHONY: build-kernels +build-kernels: + make -f kernels.mk build-kernels diff --git a/kernels.mk b/kernels.mk new file mode 100644 index 000000000000..c10d911473db --- /dev/null +++ b/kernels.mk @@ -0,0 +1,9 @@ +KERNELS = evm_mockup_kernel.wasm + +evm_mockup_kernel.wasm:: + @make -C src/kernel_evm_mockup + @cp src/kernel_evm_mockup/target/wasm32-unknown-unknown/release/evm_mockup_kernel.wasm $@ + @wasm-strip $@ + +.PHONY: build-kernels +build-kernels: ${KERNELS} diff --git a/src/kernel_evm_mockup/Cargo.lock b/src/kernel_evm_mockup/Cargo.lock new file mode 100644 index 000000000000..2ff60112556c --- /dev/null +++ b/src/kernel_evm_mockup/Cargo.lock @@ -0,0 +1,7 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 3 + +[[package]] +name = "evm_mockup_kernel" +version = "0.1.0" diff --git a/src/kernel_evm_mockup/Cargo.toml b/src/kernel_evm_mockup/Cargo.toml new file mode 100644 index 000000000000..1a1df1eb8164 --- /dev/null +++ b/src/kernel_evm_mockup/Cargo.toml @@ -0,0 +1,7 @@ +[package] +name = 'evm_mockup_kernel' +version = '0.1.0' +edition = '2021' + +[lib] +crate-type = ["cdylib"] diff --git a/src/kernel_evm_mockup/Makefile b/src/kernel_evm_mockup/Makefile new file mode 100644 index 000000000000..54856e56af7b --- /dev/null +++ b/src/kernel_evm_mockup/Makefile @@ -0,0 +1,5 @@ +all: + @rustup target add wasm32-unknown-unknown + @cargo fmt --check + @cargo clippy -- --deny warnings + @cargo build --target wasm32-unknown-unknown --release diff --git a/src/kernel_evm_mockup/rust-toolchain b/src/kernel_evm_mockup/rust-toolchain new file mode 100644 index 000000000000..17c6caaf5675 --- /dev/null +++ b/src/kernel_evm_mockup/rust-toolchain @@ -0,0 +1 @@ +1.66.0 \ No newline at end of file diff --git a/src/kernel_evm_mockup/src/lib.rs b/src/kernel_evm_mockup/src/lib.rs new file mode 100644 index 000000000000..27bd122a7240 --- /dev/null +++ b/src/kernel_evm_mockup/src/lib.rs @@ -0,0 +1,2 @@ +#[no_mangle] +pub extern "C" fn kernel_run() {} -- GitLab From 21eb86998921fab9fb7fd8647208c441f287485d Mon Sep 17 00:00:00 2001 From: Valentin Chaboche Date: Mon, 6 Feb 2023 13:51:09 +0100 Subject: [PATCH 2/7] EVM,CI: build EVM kernel --- .gitlab/ci/jobs/build/kernels.yml | 14 ++++++++++++++ .gitlab/ci/pipelines/before_merging.yml | 1 + 2 files changed, 15 insertions(+) create mode 100644 .gitlab/ci/jobs/build/kernels.yml diff --git a/.gitlab/ci/jobs/build/kernels.yml b/.gitlab/ci/jobs/build/kernels.yml new file mode 100644 index 000000000000..332d5c9d79f0 --- /dev/null +++ b/.gitlab/ci/jobs/build/kernels.yml @@ -0,0 +1,14 @@ +build_kernels: + extends: + - .default_settings_template + stage: build + image: "${PROD_AWS_ECR}/rust-toolchain:v1.0.2" + needs: [trigger] + script: + - make -f kernels.mk build-kernels + artifacts: + name: "build-kernels-$CI_COMMIT_REF_SLUG" + paths: + - evm_mockup_kernel.wasm + expire_in: 1 day + when: on_success diff --git a/.gitlab/ci/pipelines/before_merging.yml b/.gitlab/ci/pipelines/before_merging.yml index 443b768b4467..90af8ee56f14 100644 --- a/.gitlab/ci/pipelines/before_merging.yml +++ b/.gitlab/ci/pipelines/before_merging.yml @@ -12,6 +12,7 @@ include: - .gitlab/ci/jobs/build/static_x86_64_experimental.yml - .gitlab/ci/jobs/build/arm64.yml - .gitlab/ci/jobs/build/x86_64.yml + - .gitlab/ci/jobs/build/kernels.yml - .gitlab/ci/jobs/build/get_contracts.yml - .gitlab/ci/jobs/doc/build_all.yml - .gitlab/ci/jobs/build/docker_amd64_test_manual.yml -- GitLab From 9803844ed9d95abb7b49b5763f0a5be78d64b102 Mon Sep 17 00:00:00 2001 From: Valentin Chaboche Date: Fri, 10 Feb 2023 11:02:33 +0100 Subject: [PATCH 3/7] EVM,CI: tezt jobs depends on compiled kernel --- .gitlab/ci/jobs/test/tezt.yml | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/.gitlab/ci/jobs/test/tezt.yml b/.gitlab/ci/jobs/test/tezt.yml index 1afd9f021fcd..4226d422a6f5 100644 --- a/.gitlab/ci/jobs/test/tezt.yml +++ b/.gitlab/ci/jobs/test/tezt.yml @@ -30,6 +30,12 @@ tezt: - .tezt_template variables: TESTS: "/synchronisation_threshold" + dependencies: + - "build_x86_64" + - "build_kernels" + needs: + - "build_x86_64" + - "build_kernels" # WARNING: if you increase the number of parallel jobs, you need to # update test_coverage.yml with the new list of jobs. parallel: 30 -- GitLab From 7dd0a46086c6c5baac1e688bc00d1bfc4ee701cd Mon Sep 17 00:00:00 2001 From: Valentin Chaboche Date: Wed, 8 Feb 2023 15:25:18 +0100 Subject: [PATCH 4/7] EVM,Tezt: originate mock up kernel --- tezt/tests/sc_rollup.ml | 35 ++++++++++++++++++++++++++++------- 1 file changed, 28 insertions(+), 7 deletions(-) diff --git a/tezt/tests/sc_rollup.ml b/tezt/tests/sc_rollup.ml index 4259e1bc3a81..6c32c38d2071 100644 --- a/tezt/tests/sc_rollup.ml +++ b/tezt/tests/sc_rollup.ml @@ -71,12 +71,11 @@ let get_last_published_commitment = let hex_encode (input : string) : string = match Hex.of_string input with `Hex s -> s -let load_kernel_file name : string = +let load_kernel_file + ?(base = "src/proto_alpha/lib_protocol/test/integration/wasm_kernel") name : + string = let open Tezt.Base in - let kernel_file = - project_root // Filename.dirname __FILE__ - // "../../src/proto_alpha/lib_protocol/test/integration/wasm_kernel" // name - in + let kernel_file = project_root // base // name in read_file kernel_file (* [read_kernel filename] reads binary encoded WebAssembly module (e.g. `foo.wasm`) @@ -88,7 +87,8 @@ let load_kernel_file name : string = Note that this uses [Tezos_scoru_wasm.Gather_floppies.Complete_kernel], so the kernel must fit into a single Tezos operation. *) -let read_kernel name : string = hex_encode (load_kernel_file (name ^ ".wasm")) +let read_kernel ?base name : string = + hex_encode (load_kernel_file ?base (name ^ ".wasm")) (* Number of levels needed to process a head as finalized. This value should be the same as `node_context.block_finality_time`, where `node_context` is @@ -4429,6 +4429,26 @@ let test_recover_bond_of_stakers = in unit +(** {2 EVM Proxy server tests. } *) + +let evm_kernel () = read_kernel ~base:"./" "evm_mockup_kernel" + +let test_originate_evm_kernel = + Protocol.register_test ~__FILE__ ~tags:["evm"] ~title:"Originate EVM kernel" + @@ fun protocol -> + let* _tezos_node, tezos_client = setup_l1 protocol in + let* _sc_rollup = + originate_sc_rollup + ~kind:"wasm_2_0_0" + ~boot_sector:(evm_kernel ()) + ~parameters_ty:"string" + ~src:Constant.bootstrap1.alias + tezos_client + in + unit + +let register_evm_proxy_server ~protocols = test_originate_evm_kernel protocols + let register ~kind ~protocols = test_origination ~kind protocols ; test_rollup_node_running ~kind protocols ; @@ -4647,4 +4667,5 @@ let register ~protocols = register ~kind:"arith" ~protocols ; (* TODO: https://gitlab.com/tezos/tezos/-/issues/4652 re-enable Mumbai when DAC is separated from Dal node. *) - test_tx_kernel_e2e [Alpha] + test_tx_kernel_e2e [Alpha] ; + register_evm_proxy_server ~protocols -- GitLab From f9e0223b15db4950f37fb34d0f648bcc119d716f Mon Sep 17 00:00:00 2001 From: Thomas Letan Date: Fri, 10 Feb 2023 16:55:44 +0100 Subject: [PATCH 5/7] CI: lint rust-toolchain files --- Makefile | 1 + scripts/lint.sh | 17 +++++++++++++++++ 2 files changed, 18 insertions(+) diff --git a/Makefile b/Makefile index 2e0dbd116f30..519ef934b593 100644 --- a/Makefile +++ b/Makefile @@ -363,6 +363,7 @@ check-linting: @scripts/lint.sh --check-scripts @scripts/lint.sh --check-ocamlformat @scripts/lint.sh --check-coq-attributes + @scripts/lint.sh --check-rust-toolchain @dune build --profile=$(PROFILE) @fmt check-python-linting: diff --git a/scripts/lint.sh b/scripts/lint.sh index 8cd9059f74a1..792a679eda29 100755 --- a/scripts/lint.sh +++ b/scripts/lint.sh @@ -13,6 +13,7 @@ Where can be: * --check-scripts: check the .sh files * --check-redirects: check docs/_build/_redirects. * --check-coq-attributes: check the presence of coq attributes. +* --check-rust-toolchain: check the contents of rust-toolchain files * --help: display this and return 0. EOF } @@ -150,6 +151,20 @@ check_redirects () { exit $exit_code } +check_rust_toolchain_files () { + authorized_version=("1.66.0") + + declare -a rust_toolchain_files + mapfile -t rust_toolchain_files <<< "$(find src/ -name rust-toolchain)" + + for file in "${rust_toolchain_files[@]}"; do + if [[ ! "${authorized_version[*]}" =~ $(cat "${file}") ]]; then + say "in ${file}: version $(cat "${file}") is not authorized" + exit 1 + fi + done +} + update_gitlab_ci_yml () { # Check that a rule is not defined twice, which would result in the first # one being ignored. Gitlab linter doesn't warn for it @@ -204,6 +219,8 @@ case "$action" in action=check_redirects ;; "--check-coq-attributes" ) action=check_coq_attributes ;; + "--check-rust-toolchain" ) + action=check_rust_toolchain_files ;; "help" | "-help" | "--help" | "-h" ) usage exit 0 ;; -- GitLab From 2e09b3fe9284948303067b8b288ee3cb16a50b38 Mon Sep 17 00:00:00 2001 From: Valentin Chaboche Date: Mon, 13 Feb 2023 09:13:38 +0100 Subject: [PATCH 6/7] EVM: add MIT license --- src/kernel_evm_mockup/Cargo.toml | 4 ++++ src/kernel_evm_mockup/Makefile | 5 +++++ src/kernel_evm_mockup/src/lib.rs | 4 ++++ 3 files changed, 13 insertions(+) diff --git a/src/kernel_evm_mockup/Cargo.toml b/src/kernel_evm_mockup/Cargo.toml index 1a1df1eb8164..67b883ae66cc 100644 --- a/src/kernel_evm_mockup/Cargo.toml +++ b/src/kernel_evm_mockup/Cargo.toml @@ -1,3 +1,7 @@ +# SPDX-FileCopyrightText: 2023 Nomadic Labs +# +# SPDX-License-Identifier: MIT + [package] name = 'evm_mockup_kernel' version = '0.1.0' diff --git a/src/kernel_evm_mockup/Makefile b/src/kernel_evm_mockup/Makefile index 54856e56af7b..0b105cf74ffb 100644 --- a/src/kernel_evm_mockup/Makefile +++ b/src/kernel_evm_mockup/Makefile @@ -1,3 +1,8 @@ +# SPDX-FileCopyrightText: 2023 Nomadic Labs +# +# SPDX-License-Identifier: MIT + + all: @rustup target add wasm32-unknown-unknown @cargo fmt --check diff --git a/src/kernel_evm_mockup/src/lib.rs b/src/kernel_evm_mockup/src/lib.rs index 27bd122a7240..8da9bb4cc1b0 100644 --- a/src/kernel_evm_mockup/src/lib.rs +++ b/src/kernel_evm_mockup/src/lib.rs @@ -1,2 +1,6 @@ +// SPDX-FileCopyrightText: 2023 Nomadic Labs +// +// SPDX-License-Identifier: MIT + #[no_mangle] pub extern "C" fn kernel_run() {} -- GitLab From 2a0e001002b3d55d670c42316e638c4859ec8736 Mon Sep 17 00:00:00 2001 From: Valentin Chaboche Date: Mon, 13 Feb 2023 09:48:31 +0100 Subject: [PATCH 7/7] EVM,CI: cache [~/.cargo] --- .gitlab/ci/jobs/build/kernels.yml | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/.gitlab/ci/jobs/build/kernels.yml b/.gitlab/ci/jobs/build/kernels.yml index 332d5c9d79f0..693f316d8439 100644 --- a/.gitlab/ci/jobs/build/kernels.yml +++ b/.gitlab/ci/jobs/build/kernels.yml @@ -6,6 +6,11 @@ build_kernels: needs: [trigger] script: - make -f kernels.mk build-kernels + variables: + CARGO_HOME: $CI_PROJECT_DIR/cargo + cache: + - paths: + - cargo/ artifacts: name: "build-kernels-$CI_COMMIT_REF_SLUG" paths: -- GitLab