Skip to content

feat: support legacy zkevm-node and new zkevm sequence senders and aggregators #1500

feat: support legacy zkevm-node and new zkevm sequence senders and aggregators

feat: support legacy zkevm-node and new zkevm sequence senders and aggregators #1500

Workflow file for this run

---
# Basic deployment workflow.
# Note that more advanced use cases are tested in the nightly workflow.
name: Deploy
on:
pull_request:
push:
branches: [main]
concurrency:
group: deploy-${{ github.event.pull_request.number || github.ref }}
cancel-in-progress: true
env:
ENCLAVE_NAME: cdk
jobs:
# List all .yml files in the .github/tests directory.
list-ymls:
runs-on: ubuntu-latest
timeout-minutes: 5
outputs:
matrix: ${{ steps.set-matrix.outputs.matrix }}
steps:
- uses: actions/checkout@v4
- id: set-matrix
run: echo "matrix=$(ls ./.github/tests/*.yml | jq -R -s -c 'split("\n")[:-1]')" >> $GITHUB_OUTPUT
run-without-args:
runs-on: ubuntu-latest
timeout-minutes: 30
steps:
- uses: actions/checkout@v4
- name: Install Kurtosis CDK tools
uses: ./.github/actions/setup-kurtosis-cdk
- name: Run Starlark
run: |
kurtosis run \
--enclave=${{ env.ENCLAVE_NAME }} \
--show-enclave-inspect=false \
${{ github.workspace }}
- name: Inspect enclave
run: kurtosis enclave inspect ${{ env.ENCLAVE_NAME }}
- name: List databases
run: |
postgres_port=$(kurtosis port print ${{ env.ENCLAVE_NAME }} postgres-001 postgres | cut -d':' -f3)
PGPASSWORD=master_password psql --host 127.0.0.1 --port "$postgres_port" --username master_user --dbname master --list
- name: Monitor verified batches (Central RPC)
working-directory: .github/scripts
run: ./monitor-verified-batches.sh --rpc-url $(kurtosis port print ${{ env.ENCLAVE_NAME }} cdk-erigon-node-001 http-rpc)
run-with-args:
needs: list-ymls
runs-on: ubuntu-latest
timeout-minutes: 30
strategy:
fail-fast: false
matrix:
file_name: ${{ fromJson(needs.list-ymls.outputs.matrix) }}
steps:
- uses: actions/checkout@v4
- name: Install Kurtosis CDK tools
uses: ./.github/actions/setup-kurtosis-cdk
- name: Run Starlark
run: |
kurtosis run \
--enclave=${{ env.ENCLAVE_NAME }} \
--args-file=${{ matrix.file_name }} \
--show-enclave-inspect=false \
${{ github.workspace }}
- name: Inspect enclave
run: kurtosis enclave inspect ${{ env.ENCLAVE_NAME }}
- name: Monitor verified batches (Central RPC)
run: |
sequencer_type=$(yq --raw-output '.args.sequencer_type' ${{ matrix.file_name }})
rpc_name=""
if [[ "$sequencer_type" == "erigon" ]]; then
rpc_name="cdk-erigon-node-001"
elif [[ "$sequencer_type" == "zkevm" ]]; then
rpc_name="zkevm-node-rpc-001"
elif [[ "$sequencer_type" == "null" ]]; then
rpc_name="cdk-erigon-node-001"
else
echo "Unknown sequencer type: $sequencer_type"
exit 1
fi
echo "RPC name: $rpc_name"
./.github/scripts/monitor-verified-batches.sh --rpc-url $(kurtosis port print ${{ env.ENCLAVE_NAME }} $rpc_name http-rpc)
- name: Monitor verified batches (zkEVM Permissionless RPC)
run: |
result=$(yq --raw-output '.args.additional_services // [] | contains(["pless_zkevm_node"])' ${{ matrix.file_name }})
if [[ "$result" == "true" ]]; then
./.github/scripts/monitor-verified-batches.sh --rpc-url $(kurtosis port print ${{ env.ENCLAVE_NAME }} zkevm-node-rpc-pless-001 http-rpc)
else
echo "Skipping batch verification as there is no zkevm permissionless RPC in the environment"
fi
- name: Verify Blutgang RPC
run: |
if [ "${{ matrix.file_name }}" == "./.github/tests/additional-services.yml" ]; then
result=$(yq --raw-output '.args.additional_services | contains(["blutgang"])' ${{ matrix.file_name }})
if [[ "$result" == "true" ]]; then
cast bn --rpc-url $(kurtosis port print ${{ env.ENCLAVE_NAME }} blutgang-001 http)
else
echo "Blutgang RPC should be deployed"
exit 1
fi
else
echo "Skipping the verification of blutgang RPC"
fi
- name: Verify Prometheus collects Panoptichain metrics
run: |
if [ "${{ matrix.file_name }}" == "./.github/tests/additional-services.yml" ]; then
result=$(yq --raw-output '.args.additional_services // [] | contains(["prometheus_grafana"])' ${{ matrix.file_name }})
if [[ "$result" == "true" ]]; then
echo "Waiting for one minute while Prometheus gathers metrics..."
sleep 60
echo "Retrieving Panoptichain metrics from Prometheus..."
panoptichain_metric="panoptichain_system_uptime"
prometheus_url=$(kurtosis port print ${{ env.ENCLAVE_NAME }} prometheus-001 http)
prometheus_query=$(curl "$prometheus_url/api/v1/query?query=$panoptichain_metric")
echo $prometheus_query | jq
if [ "$(jq -r '.data.result[0].metric.__name__' <<<$prometheus_query)" == "$panoptichain_metric" ]; then
echo "Prometheus collected panoptichain metrics!"
else
echo "Prometheus did not collect any panoptichain metrics..."
exit 1
fi
else
echo "Prometheus and Grafana should be deployed"
exit 1
fi
else
echo "Skipping the verification of Prometheus metrics"
fi
attach_cdks:
runs-on: ubuntu-latest
timeout-minutes: 30
steps:
- uses: actions/checkout@v4
- name: Install Kurtosis CDK tools
uses: ./.github/actions/setup-kurtosis-cdk
# Deploy the CDK environment with cdk-erigon, serving as the sequencer.
# Set up the cdk-node for the remaining components.
# Additionally, deploy cdk-erigon and zkevm-node as permissionless nodes or RPCs.
- name: Deploy L1 chain and a first CDK L2 chain (new stack)
run: |
yq -Y --in-place '.args.sequencer_type = "erigon"' params.yml
yq -Y --in-place '.args.sequence_sender_aggregator_type = "cdk"' params.yml
yq -Y --in-place '.args.additional_services = ["pless_zkevm_node", "tx_spammer"]' params.yml
kurtosis run --enclave=${{ env.ENCLAVE_NAME }} --show-enclave-inspect=false --args-file=params.yml .
- name: Inspect enclave
run: kurtosis enclave inspect ${{ env.ENCLAVE_NAME }}
- name: List first CDK L2 chain databases (erigon)
run: |
postgres1_port=$(kurtosis port print ${{ env.ENCLAVE_NAME }} postgres-001 postgres | cut -d':' -f3)
PGPASSWORD=master_password psql --host 127.0.0.1 --port "$postgres1_port" --username master_user --dbname master --list
- name: Attach a second CDK L2 chain (new stack)
run: |
yq -Y --in-place '.args.additional_services = ["pless_zkevm_node", "tx_spammer"]' agglayer-attach-cdk-params.yml
kurtosis run --enclave=${{ env.ENCLAVE_NAME }} --show-enclave-inspect=false --args-file=agglayer-attach-cdk-params.yml .
- name: Inspect enclave
run: kurtosis enclave inspect ${{ env.ENCLAVE_NAME }}
- name: List second CDK L2 chain databases (erigon)
run: |
postgres2_port=$(kurtosis port print ${{ env.ENCLAVE_NAME }} postgres-002 postgres | cut -d':' -f3)
PGPASSWORD=master_password psql --host 127.0.0.1 --port "$postgres2_port" --username master_user --dbname master --list
- name: Update the agglayer config
run: |
# Download the agglayer config file.
kurtosis files download ${{ env.ENCLAVE_NAME }} agglayer-config-artifact
cd agglayer-config-artifact
# Update the config by adding the rpc and proof signer of the second chain.
tomlq -Y --toml-output --in-place '.FullNodeRPCs += {"2": "http://cdk-erigon-node-002:8123"}' agglayer-config.toml
proof_signer_2="$(yq --raw-output .args.zkevm_l2_sequencer_address ../agglayer-attach-cdk-params.yml)"
tomlq -Y --toml-output --arg proofSigner2 "$proof_signer_2" --in-place '.ProofSigners += {"2": $proofSigner2}' agglayer-config.toml
# Replace the agglayer config.
agglayer_container_id="$(docker ps --filter "name=zkevm-agglayer" --format "{{.ID}}")"
docker cp agglayer-config.toml "$agglayer_container_id:/etc/zkevm/agglayer-config.toml"
# Restart the agglayer service.
kurtosis service stop ${{ env.ENCLAVE_NAME }} zkevm-agglayer-001
kurtosis service start ${{ env.ENCLAVE_NAME }} zkevm-agglayer-001
- name: Monitor verified batches of the first L2 chain (CDK Erigon Permissionless RPC)
working-directory: .github/scripts
run: ./monitor-verified-batches.sh --rpc-url "$(kurtosis port print ${{ env.ENCLAVE_NAME }} cdk-erigon-node-001 http-rpc)"
- name: Monitor verified batches of the first L2 chain (zkEVM Node Permissionless RPC)
working-directory: .github/scripts
run: ./monitor-verified-batches.sh --rpc-url "$(kurtosis port print ${{ env.ENCLAVE_NAME }} zkevm-node-rpc-pless-001 http-rpc)"
- name: Monitor verified batches of the second L2 chain (CDK Erigon Permissionless RPC)
working-directory: .github/scripts
run: ./monitor-verified-batches.sh --rpc-url "$(kurtosis port print ${{ env.ENCLAVE_NAME }} cdk-erigon-node-002 http-rpc)"
- name: Monitor verified batches of the second L2 chain (zkEVM Node Permissionless RPC)
working-directory: .github/scripts
run: ./monitor-verified-batches.sh --rpc-url "$(kurtosis port print ${{ env.ENCLAVE_NAME }} zkevm-node-rpc-pless-002 http-rpc)"