diff --git a/.dockerignore b/.dockerignore index 44c96706b7824c8a105fac9910c518a06e8f067e..d5cfaa60eb1eb0b7d840b282055a6a08ee6b1c4c 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 2d9df1df069857b4b2dc79e0821a70a2366712ab..5702ad8e2df16362ea7452e8bfd417d676061bf2 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/.gitlab/ci/jobs/build/kernels.yml b/.gitlab/ci/jobs/build/kernels.yml new file mode 100644 index 0000000000000000000000000000000000000000..693f316d8439b4af378bd3b029bdffe3aec8d0c9 --- /dev/null +++ b/.gitlab/ci/jobs/build/kernels.yml @@ -0,0 +1,19 @@ +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 + variables: + CARGO_HOME: $CI_PROJECT_DIR/cargo + cache: + - paths: + - cargo/ + 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/jobs/test/tezt.yml b/.gitlab/ci/jobs/test/tezt.yml index 1afd9f021fcd4c7ee289ebac6f2c1b86ea49473a..4226d422a6f5216312fdbf174ff082f6bbc940ee 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 diff --git a/.gitlab/ci/pipelines/before_merging.yml b/.gitlab/ci/pipelines/before_merging.yml index 443b768b4467983391a2ac8da00b161ea4efb180..90af8ee56f14d0b027e29acfc5a3c9a0ce28f70e 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 diff --git a/Makefile b/Makefile index c42759d1c6d8499085aeb4d8a4742a7ea776065c..519ef934b59314ec8cd97f8b9a9c7ab722a13272 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: @@ -480,3 +481,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 0000000000000000000000000000000000000000..c10d911473db2c16c265f6029f94f45387c19a4f --- /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/scripts/lint.sh b/scripts/lint.sh index 8cd9059f74a1492476f7ef02fedf8206c67be455..792a679eda2965c6001e73075c69093cb083d9a2 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 ;; diff --git a/src/kernel_evm_mockup/Cargo.lock b/src/kernel_evm_mockup/Cargo.lock new file mode 100644 index 0000000000000000000000000000000000000000..2ff60112556c90aae5d098e0cf0f1ba5a712c99d --- /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 0000000000000000000000000000000000000000..67b883ae66ccfdcf709c2c0a9476166f5fd59c14 --- /dev/null +++ b/src/kernel_evm_mockup/Cargo.toml @@ -0,0 +1,11 @@ +# SPDX-FileCopyrightText: 2023 Nomadic Labs +# +# SPDX-License-Identifier: MIT + +[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 0000000000000000000000000000000000000000..0b105cf74ffb1ea4e3ca581b8e074ac929ae948f --- /dev/null +++ b/src/kernel_evm_mockup/Makefile @@ -0,0 +1,10 @@ +# SPDX-FileCopyrightText: 2023 Nomadic Labs +# +# SPDX-License-Identifier: MIT + + +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 0000000000000000000000000000000000000000..17c6caaf567573a9791f3da8d61be0087a348c32 --- /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 0000000000000000000000000000000000000000..8da9bb4cc1b0309507f58b7f2d272be1ba2da737 --- /dev/null +++ b/src/kernel_evm_mockup/src/lib.rs @@ -0,0 +1,6 @@ +// SPDX-FileCopyrightText: 2023 Nomadic Labs +// +// SPDX-License-Identifier: MIT + +#[no_mangle] +pub extern "C" fn kernel_run() {} diff --git a/tezt/tests/sc_rollup.ml b/tezt/tests/sc_rollup.ml index 4259e1bc3a81d667f98d57c08d2002f71c02572d..6c32c38d20713c7ba03a5cec8232112e5b6bc48a 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