Skip to content

Zk server compatibility #1089

Zk server compatibility

Zk server compatibility #1089

Workflow file for this run

name: CI
on:
merge_group:
push:
branches: [main]
pull_request:
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
env:
CARGO_TERM_COLOR: always
RUST_VERSION: 1.78.0
BRANCH_NAME: ${{ github.head_ref || github.ref_name }}
jobs:
compile:
name: Compile
runs-on: ubuntu-latest
steps:
- name: Checkout sources
uses: actions/checkout@v4
- name: Rustup toolchain install
uses: dtolnay/rust-toolchain@stable
with:
toolchain: ${{ env.RUST_VERSION }}
- name: Run cargo check
run: cargo check --workspace --all-features --all-targets
lint:
name: Lint
runs-on: ubuntu-latest
steps:
- name: Checkout sources
uses: actions/checkout@v4
- name: Install stable toolchain
uses: dtolnay/rust-toolchain@stable
with:
toolchain: ${{ env.RUST_VERSION }}
components: rustfmt, clippy
- name: Run cargo fmt
run: cargo fmt --all -- --check
- name: Run clippy
run: cargo clippy --workspace --all-features --benches --examples --tests -- -D warnings
build-compiler-tester:
name: Build Compiler Tester Bundle
runs-on: ubuntu-latest
env:
ROCKSDB_LIB_DIR: /usr/lib
SNAPPY_LIB_DIR: /usr/lib
LLVM_SYS_170_PREFIX: ${{ github.workspace }}/zksync-llvm/target-llvm/target-final
steps:
- name: Checkout vm sources
uses: actions/checkout@v4
with:
path: ${{ github.workspace }}/era_vm
- name: System Dependencies
uses: awalsh128/cache-apt-pkgs-action@latest
with:
packages: llvm clang clang-tools build-essential lld ninja-build librocksdb-dev libsnappy-dev
version: 1.0
- uses: dtolnay/[email protected]
with:
components: clippy
- name: Setup compiler-tester submodule
working-directory: ${{ github.workspace }}/era_vm
run: make submodules
- uses: Swatinem/rust-cache@v2
with:
workspaces: |
era_vm
era_vm/era-compiler-tester
- name: Fetch zksync-llvm
uses: dawidd6/action-download-artifact@v6
with:
github_token: ${{secrets.GITHUB_TOKEN}}
workflow: build-binaries.yml
repo: matter-labs/era-compiler-llvm
if_no_artifact_found: fail
path: ${{ github.workspace }}/zksync-llvm
workflow_conclusion: success
name: llvm-bins-Linux-X64
search_artifacts: true
- name: Download zksolc compiler
working-directory: ${{ github.workspace }}/era_vm/era-compiler-tester
run: |
curl -L https://github.com/matter-labs/zksolc-bin/releases/download/v1.5.1/zksolc-linux-amd64-musl-v1.5.1 --output zksolc
chmod +x zksolc
sudo cp zksolc /usr/bin/zksolc
# We use zkvyper v1.5.1 since v1.5.3 breaks with these tests
- name: Download zkvyper compiler
working-directory: ${{ github.workspace }}/era_vm/era-compiler-tester
run: |
curl -L https://github.com/matter-labs/zkvyper-bin/releases/download/v1.5.1/zkvyper-linux-amd64-musl-v1.5.1 --output zkvyper
chmod +x zkvyper
sudo cp zkvyper /usr/bin/zkvyper
- name: Download solc compiler
working-directory: ${{ github.workspace }}/era_vm/era-compiler-tester
run: |
curl -L https://github.com/ethereum/solidity/releases/download/v0.8.25/solc-static-linux --output solc
chmod +x solc
sudo cp solc /usr/bin/solc
- name: Install zkLLVM
working-directory: ${{ github.workspace }}/zksync-llvm
run: |
rm -rfv llvm
tar -xvf Linux-X64-target-final.tar.gz
- name: Build compiler tester with Lambdaclass VM
working-directory: ${{ github.workspace }}/era_vm/era-compiler-tester
run: |
cargo build --features lambda_vm --release --bin compiler-tester
mv target/release/compiler-tester compiler-tester-lambda_vm
cargo build --release --bin compiler-tester
mv target/release/compiler-tester compiler-tester-vm1
- name: Compile system contracts
working-directory: ${{ github.workspace }}/era_vm/era-compiler-tester
run: |
./compiler-tester-lambda_vm --path tests/none --save-system-contracts system-contracts-prod.o
./compiler-tester-lambda_vm --path tests/none --save-system-contracts system-contracts-test.o --use-test-encoding
- name: Upload Bundle
uses: actions/cache/save@v3
with:
# Use github.sha in the key because this is valid only for this commit
key: compiler-tester-bundle-${{ github.sha }}
path: |
${{ github.workspace }}/era_vm/era-compiler-tester/system-contracts-prod.o
${{ github.workspace }}/era_vm/era-compiler-tester/system-contracts-test.o
${{ github.workspace }}/era_vm/era-compiler-tester/compiler-tester-vm1
${{ github.workspace }}/era_vm/era-compiler-tester/compiler-tester-lambda_vm
${{ github.workspace }}/era_vm/era-compiler-tester/solc-bin
${{ github.workspace }}/era_vm/era-compiler-tester/vyper-bin
${{ github.workspace }}/era_vm/era-compiler-tester/solc
${{ github.workspace }}/era_vm/era-compiler-tester/zksolc
${{ github.workspace }}/era_vm/era-compiler-tester/zkvyper
test-with-compiler-tester:
needs: build-compiler-tester
strategy:
fail-fast: false
matrix:
testgroup: [
tests/solidity/complex/interpreter,
tests/llvm,
"tests/solidity/complex/array_one_element,balance,call_by_signature,call_chain,create,default,default_single_file,evaluation_order,forwarding,immutable_delegate_call,import_library_inline,indirect_recursion_fact,interface_casting,internal_function_pointers,invalid_signature,library_call_tuple,many_arguments,nested_calls,solidity_by_example}",
"tests/solidity/complex/{storage,sum_of_squares,try_catch,value,voting}",
"tests/solidity/complex/yul_instructions/{calldatasize,extcodehash,extcodesize}",
tests/solidity/complex/yul_instructions/call/,
tests/solidity/complex/yul_instructions/calldatacopy,
tests/solidity/complex/yul_instructions/calldataload,
tests/solidity/complex/yul_instructions/create,
tests/solidity/complex/yul_instructions/create2,
tests/solidity/complex/yul_instructions/codecopy,
tests/solidity/complex/yul_instructions/delegatecall,
tests/solidity/complex/yul_instructions/staticcall,
tests/solidity/ethereum/*.sol,
"tests/solidity/ethereum/{abiEncoderV[12],abiencodedecode}",
"tests/solidity/ethereum/{accessor,arithmetics,asmForLoop,builtinFunctions,c99_scoping_activation.sol,cleanup,constantEvaluator}",
"tests/solidity/ethereum/array/{*.sol,inline_*.sol,array_memory_allocation,concat,push,slices}",
tests/solidity/ethereum/array/copying,
"tests/solidity/ethereum/array/{delete,indexAccess,pop}",
"tests/solidity/ethereum/{calldata,constants,constructor,conversions,deployedCodeExclusion,ecrecover,enums,errors}",
"tests/solidity/ethereum/{events,experimental,exponentiation,expressions,externalContracts,externalSource}",
"tests/solidity/ethereum/{fallback,freeFunctions,functionCall,functionSelector,functionTypes}",
"tests/solidity/ethereum/{getters,immutable,inheritance,inlineAssembly,integer,interfaceID,isoltestTesting}",
"tests/solidity/ethereum/{libraries,literals,memoryManagement,metaTypes,modifiers,multiSource}",
"tests/solidity/ethereum/{operators,optimizer,payable,receive}",
"tests/solidity/ethereum/{reverts,revertStrings,salted_create,shanghai,smoke,specialFunctions,state}",
"tests/solidity/ethereum/{statements,storage,strings,structs}",
"tests/solidity/ethereum/{tryCatch,types,underscore,uninitializedFunctionPointer}",
"tests/solidity/ethereum/{userDefinedValueType,using,variables,various,virtualFunctions}",
"tests/solidity/simple/{algorithm,array,block,call_chain,conditional,constant_expressions,constants,constructor,context}",
"tests/solidity/simple/{destructuring,error,events,expression,fallback,fat_ptr,function,gas_value,immutable,interface,internal_function_pointers}",
"tests/solidity/simple/{linearity,loop,match,modular,order,overflow,pointer,recursion,return}",
tests/solidity/simple/operator/arithmetic,
tests/solidity/simple/operator/assignment,
"tests/solidity/simple/operator/{bitwise,casting,logical}",
tests/solidity/simple/operator/comparison,
"tests/solidity/simple/{solidity_by_example,storage,structure,system,try_catch,unused}",
"tests/solidity/simple/yul_instructions/{[a-j]*,lt}.sol",
"tests/solidity/simple/yul_instructions/m*.sol",
"tests/solidity/simple/yul_instructions/[n-p]*.sol",
"tests/solidity/simple/yul_instructions/s[a-h]*.sol",
"tests/solidity/simple/yul_instructions/s[i-z]*.sol",
"tests/solidity/simple/yul_instructions/[t-z]*.sol",
tests/solidity/simple/yul_instructions/returndatacopy.sol,
tests/solidity/simple/yul_instructions/returndatasize.sol,
tests/solidity/simple/yul_semantic,
"tests/vyper/complex/{array_one_element,call_by_signature,call_chain,create_from_blueprint}",
"tests/vyper/complex/{create_minimal_proxy_to,default,defi}",
"tests/vyper/complex/ethereum/[a-e]*",
"tests/vyper/complex/ethereum/[f-i]*",
"tests/vyper/complex/ethereum/[j-z]",
tests/vyper/complex/interface_casting,
tests/vyper/complex/nested_calls,
"tests/vyper/complex/{indirect_recursion_fact,invalid_signature,many_arguments}",
"tests/vyper/complex/{solidity_by_example,storage,sum_of_squares,value,voting}",
tests/vyper/ethereum/*.vy,
tests/vyper/ethereum/abiEncoderV1,
tests/vyper/ethereum/abiEncoderV2,
tests/vyper/ethereum/abiencodedecode,
tests/vyper/ethereum/accessor,
tests/vyper/ethereum/arithmetics,
tests/vyper/ethereum/array,
tests/vyper/ethereum/builtinFunctions,
tests/vyper/ethereum/calldata,
tests/vyper/ethereum/cleanup,
tests/vyper/ethereum/constantEvaluator,
tests/vyper/ethereum/constants,
tests/vyper/ethereum/constructor,
tests/vyper/ethereum/conversions,
tests/vyper/ethereum/ecrecover,
tests/vyper/ethereum/events,
tests/vyper/ethereum/expressions,
tests/vyper/ethereum/fallback,
tests/vyper/ethereum/functionCall,
tests/vyper/ethereum/getters,
tests/vyper/ethereum/immutable,
tests/vyper/ethereum/integer,
tests/vyper/ethereum/interfaceID,
tests/vyper/ethereum/isoltestTesting,
tests/vyper/ethereum/literals,
tests/vyper/ethereum/memoryManagement,
tests/vyper/ethereum/operators,
tests/vyper/ethereum/optimizer,
tests/vyper/ethereum/revertStrings,
tests/vyper/ethereum/reverts,
tests/vyper/ethereum/smoke,
tests/vyper/ethereum/specialFunctions,
tests/vyper/ethereum/state,
tests/vyper/ethereum/storage,
tests/vyper/ethereum/strings,
tests/vyper/ethereum/structs,
tests/vyper/ethereum/types,
tests/vyper/ethereum/underscore,
tests/vyper/ethereum/variables,
tests/vyper/ethereum/various,
tests/vyper/ethereum/viaYul,
tests/vyper/simple/*.vy,
tests/vyper/simple/algorithm,
tests/vyper/simple/array,
tests/vyper/simple/block,
tests/vyper/simple/built_in_functions,
tests/vyper/simple/conditional,
tests/vyper/simple/constructor,
tests/vyper/simple/destructuring,
tests/vyper/simple/error,
tests/vyper/simple/events,
tests/vyper/simple/expression,
tests/vyper/simple/fallback,
tests/vyper/simple/function,
tests/vyper/simple/immutable,
tests/vyper/simple/interface,
tests/vyper/simple/loop,
tests/vyper/simple/modular,
tests/vyper/simple/operator,
tests/vyper/simple/order,
tests/vyper/simple/overflow,
tests/vyper/simple/return,
tests/vyper/simple/revert_on_failure,
tests/vyper/simple/solidity_by_example,
tests/vyper/simple/storage,
tests/vyper/simple/structure,
tests/vyper/simple/unchecked_math,
tests/vyper/simple/unused,
"tests/yul/{*}",
]
mode: ['']
# Special case the slowest tests to parallelize on execution mode as well
include:
- testgroup: tests/solidity/simple/yul_instructions/keccak256.sol
mode: '--mode M0'
- testgroup: tests/solidity/simple/yul_instructions/keccak256.sol
mode: '--mode M1'
- testgroup: tests/solidity/simple/yul_instructions/keccak256.sol
mode: '--mode M2'
- testgroup: tests/solidity/simple/yul_instructions/keccak256.sol
mode: '--mode M3'
- testgroup: tests/solidity/simple/yul_instructions/keccak256.sol
mode: '--mode Ms'
- testgroup: tests/solidity/simple/yul_instructions/keccak256.sol
mode: '--mode Mz'
- testgroup: tests/solidity/simple/yul_instructions/log0.sol
mode: '--mode M0'
- testgroup: tests/solidity/simple/yul_instructions/log0.sol
mode: '--mode M1'
- testgroup: tests/solidity/simple/yul_instructions/log0.sol
mode: '--mode M2'
- testgroup: tests/solidity/simple/yul_instructions/log0.sol
mode: '--mode M3'
- testgroup: tests/solidity/simple/yul_instructions/log0.sol
mode: '--mode Ms'
- testgroup: tests/solidity/simple/yul_instructions/log0.sol
mode: '--mode Mz'
- testgroup: tests/solidity/simple/yul_instructions/log1.sol
mode: '--mode M0'
- testgroup: tests/solidity/simple/yul_instructions/log1.sol
mode: '--mode M1'
- testgroup: tests/solidity/simple/yul_instructions/log1.sol
mode: '--mode M2'
- testgroup: tests/solidity/simple/yul_instructions/log1.sol
mode: '--mode M3'
- testgroup: tests/solidity/simple/yul_instructions/log1.sol
mode: '--mode Ms'
- testgroup: tests/solidity/simple/yul_instructions/log1.sol
mode: '--mode Mz'
- testgroup: tests/solidity/simple/yul_instructions/log2.sol
mode: '--mode M0'
- testgroup: tests/solidity/simple/yul_instructions/log2.sol
mode: '--mode M1'
- testgroup: tests/solidity/simple/yul_instructions/log2.sol
mode: '--mode M2'
- testgroup: tests/solidity/simple/yul_instructions/log2.sol
mode: '--mode M3'
- testgroup: tests/solidity/simple/yul_instructions/log2.sol
mode: '--mode Ms'
- testgroup: tests/solidity/simple/yul_instructions/log2.sol
mode: '--mode Mz'
- testgroup: tests/solidity/simple/yul_instructions/log3.sol
mode: '--mode M0'
- testgroup: tests/solidity/simple/yul_instructions/log3.sol
mode: '--mode M1'
- testgroup: tests/solidity/simple/yul_instructions/log3.sol
mode: '--mode M2'
- testgroup: tests/solidity/simple/yul_instructions/log3.sol
mode: '--mode M3'
- testgroup: tests/solidity/simple/yul_instructions/log3.sol
mode: '--mode Ms'
- testgroup: tests/solidity/simple/yul_instructions/log3.sol
mode: '--mode Mz'
- testgroup: tests/solidity/simple/yul_instructions/log4.sol
mode: '--mode M0'
- testgroup: tests/solidity/simple/yul_instructions/log4.sol
mode: '--mode M1'
- testgroup: tests/solidity/simple/yul_instructions/log4.sol
mode: '--mode M2'
- testgroup: tests/solidity/simple/yul_instructions/log4.sol
mode: '--mode M3'
- testgroup: tests/solidity/simple/yul_instructions/log4.sol
mode: '--mode Ms'
- testgroup: tests/solidity/simple/yul_instructions/log4.sol
mode: '--mode Mz'
- testgroup: tests/solidity/simple/operator
mode: '--mode M0'
- testgroup: tests/solidity/simple/operator
mode: '--mode M1'
- testgroup: tests/solidity/simple/operator
mode: '--mode M2'
- testgroup: tests/solidity/simple/operator
mode: '--mode M3'
- testgroup: tests/solidity/simple/operator
mode: '--mode Ms'
- testgroup: tests/solidity/simple/operator
mode: '--mode Mz'
- testgroup: tests/solidity/simple/yul_instructions/return.sol
mode: '--mode M0'
- testgroup: tests/solidity/simple/yul_instructions/return.sol
mode: '--mode M1'
- testgroup: tests/solidity/simple/yul_instructions/return.sol
mode: '--mode M2'
- testgroup: tests/solidity/simple/yul_instructions/return.sol
mode: '--mode M3'
- testgroup: tests/solidity/simple/yul_instructions/return.sol
mode: '--mode Ms'
- testgroup: tests/solidity/simple/yul_instructions/return.sol
mode: '--mode Mz'
- testgroup: tests/solidity/simple/yul_instructions/revert.sol
mode: '--mode M0'
- testgroup: tests/solidity/simple/yul_instructions/revert.sol
mode: '--mode M1'
- testgroup: tests/solidity/simple/yul_instructions/revert.sol
mode: '--mode M2'
- testgroup: tests/solidity/simple/yul_instructions/revert.sol
mode: '--mode M3'
- testgroup: tests/solidity/simple/yul_instructions/revert.sol
mode: '--mode Ms'
- testgroup: tests/solidity/simple/yul_instructions/revert.sol
mode: '--mode Mz'
- testgroup: tests/solidity/complex/parser
encoding: 'test'
- testgroup: tests/solidity/complex/defi
encoding: 'test'
name: Run Compiler Tester
runs-on: ubuntu-latest
steps:
- name: System Dependencies
uses: awalsh128/cache-apt-pkgs-action@latest
with:
packages: llvm clang clang-tools build-essential lld ninja-build librocksdb-dev libsnappy-dev
version: 1.0
- name: Checkout vm sources
uses: actions/checkout@v4
with:
path: ${{ github.workspace }}/era_vm
- name: Setup compiler-tester submodule
working-directory: ${{ github.workspace }}/era_vm
run: make submodules
- name: Download Bundle
uses: actions/cache/restore@v3
with:
# Use github.sha in the key because this is valid only for this commit
key: compiler-tester-bundle-${{ github.sha }}
# This should be guaranteed to hit
fail-on-cache-miss: true
path: |
${{ github.workspace }}/era_vm/era-compiler-tester/system-contracts-prod.o
${{ github.workspace }}/era_vm/era-compiler-tester/system-contracts-test.o
${{ github.workspace }}/era_vm/era-compiler-tester/compiler-tester-vm1
${{ github.workspace }}/era_vm/era-compiler-tester/compiler-tester-lambda_vm
${{ github.workspace }}/era_vm/era-compiler-tester/solc-bin
${{ github.workspace }}/era_vm/era-compiler-tester/vyper-bin
${{ github.workspace }}/era_vm/era-compiler-tester/solc
${{ github.workspace }}/era_vm/era-compiler-tester/zksolc
${{ github.workspace }}/era_vm/era-compiler-tester/zkvyper
- name: Install Bundle
working-directory: ${{ github.workspace }}/era_vm/era-compiler-tester
run: sudo cp zksolc zkvyper solc /usr/bin/
- name: Run compiler-tester tests
working-directory: ${{ github.workspace }}/era_vm/era-compiler-tester
env:
system-contracts: system-contracts-${{ matrix.encoding == 'test' && 'test' || 'prod' }}.o
encoding: ${{ matrix.encoding == 'test' && '--use-test-encoding' || '' }}
run: ./compiler-tester-lambda_vm --load-system-contracts ${{ env.system-contracts}} ${{ env.encoding }} --target EraVM ${{ matrix.mode }} --path ${{ matrix.testgroup }}
ergs-comparison:
needs: build-compiler-tester
strategy:
fail-fast: false
matrix:
type: ["vm1", "lambda_vm"]
name: Run Ergs Comparison
runs-on: ubuntu-latest
steps:
- name: System Dependencies
uses: awalsh128/cache-apt-pkgs-action@latest
with:
packages: llvm clang clang-tools build-essential lld ninja-build librocksdb-dev libsnappy-dev
version: 1.0
- name: Checkout vm sources
uses: actions/checkout@v4
with:
path: ${{ github.workspace }}/era_vm
- name: Setup compiler-tester submodule
working-directory: ${{ github.workspace }}/era_vm
run: make submodules
- name: Download Bundle
uses: actions/cache/restore@v3
with:
# Use github.sha in the key because this is valid only for this commit
key: compiler-tester-bundle-${{ github.sha }}
# This should be guaranteed to hit
fail-on-cache-miss: true
path: |
${{ github.workspace }}/era_vm/era-compiler-tester/system-contracts-prod.o
${{ github.workspace }}/era_vm/era-compiler-tester/system-contracts-test.o
${{ github.workspace }}/era_vm/era-compiler-tester/compiler-tester-vm1
${{ github.workspace }}/era_vm/era-compiler-tester/compiler-tester-lambda_vm
${{ github.workspace }}/era_vm/era-compiler-tester/solc-bin
${{ github.workspace }}/era_vm/era-compiler-tester/vyper-bin
${{ github.workspace }}/era_vm/era-compiler-tester/solc
${{ github.workspace }}/era_vm/era-compiler-tester/zksolc
${{ github.workspace }}/era_vm/era-compiler-tester/zkvyper
- name: Install Bundle
working-directory: ${{ github.workspace }}/era_vm/era-compiler-tester
run: sudo cp zksolc zkvyper solc /usr/bin/
- name: Run interpreter ergs comparison
working-directory: ${{ github.workspace }}/era_vm/era-compiler-tester
run: ./compiler-tester-${{ matrix.type }} --path tests/solidity/complex/interpreter/test.json --mode "Y+M3B3 0.8.26" --benchmark ${{ matrix.type }}.json
- uses: actions/upload-artifact@v4
if: always()
with:
name: ergs-comparison-${{ matrix.type }}
path: ${{ github.workspace }}/era_vm/era-compiler-tester/${{ matrix.type }}.json
analysis:
name: "Ergs comparison analysis"
runs-on: ubuntu-latest
permissions:
pull-requests: write
needs: ergs-comparison
if: failure() || success()
steps:
- name: Checkout vm sources
uses: actions/checkout@v4
with:
path: ${{ github.workspace }}/era_vm
- name: Setup compiler-tester submodule
working-directory: ${{ github.workspace }}/era_vm
run: make submodules
- uses: actions/download-artifact@v4
with:
pattern: ergs-comparison-*
merge-multiple: true
- name: Comparing the LLVM framework benchmark results
working-directory: ${{ github.workspace }}/era_vm/era-compiler-tester
run: |
cargo run --release --bin benchmark-analyzer -- \
--reference ${{ github.workspace }}/vm1.json --candidate ${{ github.workspace }}/lambda_vm.json --output-file result.txt
- name: Posting the LLVM benchmark results to the summary
run: |
printf "Ergs comparison results:\n" | tee -a $GITHUB_STEP_SUMMARY
echo '```' | tee -a $GITHUB_STEP_SUMMARY
cat ${{ github.workspace }}/era_vm/era-compiler-tester/result.txt | tee -a $GITHUB_STEP_SUMMARY
echo '```' | tee -a $GITHUB_STEP_SUMMARY
cat $GITHUB_STEP_SUMMARY > result.txt
- name: Posting the LLVM benchmark results to a PR comment
if: github.event_name == 'pull_request' && !github.event.pull_request.head.repo.fork
uses: mshick/add-pr-comment@v2
with:
message-path: result.txt
benchmark-run:
name: Run benchmarks
runs-on: ubuntu-latest
steps:
- name: Checkout sources
uses: actions/checkout@v4
- name: Zksync-era + perf dependencies
uses: awalsh128/cache-apt-pkgs-action@latest
with:
packages: clang clang-tools build-essential librocksdb-dev linux-tools-common linux-tools-generic linux-perf
version: 1.0
- name: Setup nodejs + yarn
uses: actions/setup-node@v4
with:
node-version: 18.20.2
cache-dependency-path: |
${{ github.workspace }}/zksync-era/contracts-test-data/yarn.lock
${{ github.workspace }}/zksync-era/contracts/l1-contracts/yarn.lock
${{ github.workspace }}/zksync-era/contracts/l2-contracts/yarn.lock
${{ github.workspace }}/zksync-era/contracts/system-contracts/yarn.lock
- name: Fetch submodules
run: make submodules
- name: Download zksolc compiler
working-directory: ${{ github.workspace }}/era-compiler-tester
run: |
curl -L https://github.com/matter-labs/zksolc-bin/releases/download/v1.5.1/zksolc-linux-amd64-musl-v1.5.1 --output zksolc
chmod +x zksolc
sudo cp zksolc /usr/bin/zksolc
- name: Download solc compiler
working-directory: ${{ github.workspace }}/era-compiler-tester
run: |
curl -L https://github.com/ethereum/solidity/releases/download/v0.8.25/solc-static-linux --output solc
chmod +x solc
sudo cp solc /usr/bin/solc
- name: Fetch toolchain version from zksync-era + set zksync home
run: |
cd ${{ github.workspace }}/zksync-era
echo "ERA_TOOLCHAIN=$(head ./rust-toolchain)" >> $GITHUB_ENV
echo "ZKSYNC_HOME=${{ github.workspace }}/zksync-era" >> $GITHUB_ENV
- name: Rustup toolchain install
uses: dtolnay/rust-toolchain@nightly
with:
toolchain: ${{ env.ERA_TOOLCHAIN }}
- name: Build benchmark contracts
working-directory: ${{ github.workspace }}
run: make bench-setup
- uses: Swatinem/rust-cache@v2
with:
workspaces: |
${{ github.workspace }}/zksync-era/core/tests/vm-benchmark
- uses: taiki-e/install-action@v2
with:
tool: flamegraph
- name: Check zksync-era benchmarks & era_vm build correctly
run: |
cd ${{ github.workspace }}/zksync-era
- name: Run benchmarks
working-directory: ${{ github.workspace }}
run: make bench
zksync_era_tests:
runs-on: ubuntu-latest
steps:
- name: Checkout vm sources
uses: actions/checkout@v4
with:
path: ${{ github.workspace }}/era_vm
- name: Setup era submodule
working-directory: ${{ github.workspace }}/era_vm
run: |
make submodules
- uses: Swatinem/rust-cache@v2
with:
workspaces: ${{ github.workspace }}
- name: Rustup toolchain install
uses: dtolnay/rust-toolchain@stable
with:
toolchain: ${{ env.RUST_VERSION }}
- name: Setup zksync-era
working-directory: ${{ github.workspace }}/era_vm/zksync-era
run: |
cargo install sqlx-cli --version 0.8.0
mkdir -p ./volumes/reth/data
mkdir -p ./volumes/postgres
docker compose -v up -d
sleep 15
export ZKSYNC_HOME=$(pwd)
export PATH=$PATH:./bin
zk
zk init
- name: Run tests
working-directory: ${{ github.workspace }}/era_vm
run: make era-test