Skip to content

Commit 87824d9

Browse files
authored
Merge pull request #656 from 0xPolygon/atanmarko/integrate-sp1-5
feat: update components to sp1-sdk 5.0
2 parents aac591b + 07b24c8 commit 87824d9

10 files changed

Lines changed: 249 additions & 24 deletions

File tree

.github/workflows/kurtosis-deploy.yml

Lines changed: 47 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -44,8 +44,40 @@ jobs:
4444
4545
- name: Run bridge tests
4646
run: |
47-
kurtosis service exec ${{ env.ENCLAVE_NAME }} test-runner "bats --filter 'bridge native ETH from L1 to L2' tests/agglayer/bridges.bats"
48-
kurtosis service exec ${{ env.ENCLAVE_NAME }} test-runner "bats --filter 'bridge native ETH from L2 to L1' tests/agglayer/bridges.bats"
47+
kurtosis service stop ${{ env.ENCLAVE_NAME }} bridge-spammer-001
48+
kurtosis service exec ${{ env.ENCLAVE_NAME }} test-runner "export CLAIM_WAIT_DURATION=20m && bats --filter 'bridge native ETH from L1 to L2' tests/agglayer/bridges.bats"
49+
kurtosis service exec ${{ env.ENCLAVE_NAME }} test-runner "export CLAIM_WAIT_DURATION=20m && bats --filter 'bridge native ETH from L2 to L1' tests/agglayer/bridges.bats"
50+
kurtosis service start ${{ env.ENCLAVE_NAME }} bridge-spammer-001
51+
52+
- name: Check for error logs in aggkit service
53+
working-directory: .github/scripts
54+
run: |
55+
LOGS=$(kurtosis service logs ${{ env.ENCLAVE_NAME }} aggkit-001 2>&1)
56+
echo "$LOGS"
57+
if [[ -z "$LOGS" ]]; then
58+
echo "Error: No logs found for aggkit service! Service may not be functioning."
59+
exit 1 # Fail the workflow if logs are empty
60+
elif echo "$LOGS" | grep "ERRO\|FATA\|panic"; then
61+
echo "Critical errors found in container logs!"
62+
exit 1 # Fail the workflow if errors are found
63+
else
64+
echo "No errors found in logs."
65+
fi
66+
67+
- name: Check for error logs in agglayer service
68+
working-directory: .github/scripts
69+
run: |
70+
LOGS=$(kurtosis service logs ${{ env.ENCLAVE_NAME }} agglayer 2>&1)
71+
echo "$LOGS"
72+
if [[ -z "$LOGS" ]]; then
73+
echo "Error: No logs found for agglayer service! Service may not be functioning."
74+
exit 1 # Fail the workflow if logs are empty
75+
elif echo "$LOGS" | grep -i "error\|exception\|failed\|fatal"; then
76+
echo "Errors found in container logs!"
77+
exit 1 # Fail the workflow if errors are found
78+
else
79+
echo "No errors found in logs."
80+
fi
4981
5082
- name: Post kurtosis run
5183
if: always()
@@ -155,8 +187,8 @@ jobs:
155187
156188
- name: Run bridge tests
157189
run: |
158-
kurtosis service exec ${{ env.ENCLAVE_NAME }} test-runner "bats --filter 'bridge native ETH from L1 to L2' tests/agglayer/bridges.bats"
159-
kurtosis service exec ${{ env.ENCLAVE_NAME }} test-runner "bats --filter 'bridge native ETH from L2 to L1' tests/agglayer/bridges.bats"
190+
kurtosis service exec ${{ env.ENCLAVE_NAME }} test-runner "export CLAIM_WAIT_DURATION=20m && bats --filter 'bridge native ETH from L1 to L2' tests/agglayer/bridges.bats"
191+
kurtosis service exec ${{ env.ENCLAVE_NAME }} test-runner "export CLAIM_WAIT_DURATION=20m && bats --filter 'bridge native ETH from L2 to L1' tests/agglayer/bridges.bats"
160192
161193
- name: Post kurtosis run
162194
if: always()
@@ -281,8 +313,8 @@ jobs:
281313
282314
- name: Run bridge tests
283315
run: |
284-
kurtosis service exec ${{ env.ENCLAVE_NAME }} test-runner "bats --filter 'bridge native ETH from L1 to L2' tests/agglayer/bridges.bats"
285-
kurtosis service exec ${{ env.ENCLAVE_NAME }} test-runner "bats --filter 'bridge native ETH from L2 to L1' tests/agglayer/bridges.bats"
316+
kurtosis service exec ${{ env.ENCLAVE_NAME }} test-runner "export CLAIM_WAIT_DURATION=20m && bats --filter 'bridge native ETH from L1 to L2' tests/agglayer/bridges.bats"
317+
kurtosis service exec ${{ env.ENCLAVE_NAME }} test-runner "export CLAIM_WAIT_DURATION=20m && bats --filter 'bridge native ETH from L2 to L1' tests/agglayer/bridges.bats"
286318
287319
- name: Post kurtosis run
288320
if: always()
@@ -304,7 +336,10 @@ jobs:
304336
docker_token: ${{ secrets.DOCKER_TOKEN }}
305337

306338
- name: Kurtosis run
307-
run: kurtosis run --enclave=${{ env.ENCLAVE_NAME }} --args-file=./.github/tests/chains/op-succinct.yml .
339+
run: |
340+
# Add test runner and tx spammer to the args file
341+
yq --in-place --yaml-roundtrip '.args.additional_services += ["test_runner"]' ./.github/tests/chains/op-succinct.yml
342+
kurtosis run --enclave=${{ env.ENCLAVE_NAME }} --args-file=./.github/tests/chains/op-succinct.yml .
308343
309344
- name: Inspect enclave
310345
run: kurtosis enclave inspect ${{ env.ENCLAVE_NAME }}
@@ -331,6 +366,11 @@ jobs:
331366
echo "No errors found in logs."
332367
fi
333368
369+
# - name: Run optimistic-mode test
370+
# run: |
371+
# kurtosis service exec ${{ env.ENCLAVE_NAME }} test-runner "export ENCLAVE_NAME=${{ env.ENCLAVE_NAME }} TIMEOUT=2500 && bats --filter 'Enable OptimisticMode' tests/op/optimistic-mode.bats"
372+
# kurtosis service exec ${{ env.ENCLAVE_NAME }} test-runner "export ENCLAVE_NAME=${{ env.ENCLAVE_NAME }} TIMEOUT=2500 && bats --filter 'Disable OptimisticMode' tests/op/optimistic-mode.bats"
373+
334374
- name: Post kurtosis run
335375
if: always()
336376
uses: ./.github/actions/kurtosis-post-run

aggkit.star

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,9 @@ def run(
2222
)
2323
(ports, public_ports) = get_aggkit_prover_ports(args)
2424

25+
# Fetch evm-sketch-genesis-conf artifact
26+
evm_sketch_genesis_conf = get_evm_sketch_genesis(plan, args)
27+
2528
prover_env_vars = {
2629
# TODO one of these values can be deprecated soon 2025-04-15
2730
"PROPOSER_NETWORK_PRIVATE_KEY": args["sp1_prover_key"],
@@ -40,6 +43,7 @@ def run(
4043
"/etc/aggkit": Directory(
4144
artifact_names=[
4245
aggkit_prover_config_artifact,
46+
evm_sketch_genesis_conf,
4347
]
4448
),
4549
},
@@ -274,3 +278,28 @@ def get_agglayer_endpoint(plan, args):
274278
return "grpc"
275279
else:
276280
return "readrpc"
281+
282+
283+
# Fetch the parsed .config section of L1 geth genesis.
284+
def get_evm_sketch_genesis(plan, args):
285+
# Upload file to files artifact
286+
evm_sketch_genesis_conf_artifact = plan.store_service_files(
287+
service_name="temp-contracts",
288+
name="evm-sketch-genesis-conf-artifact.json",
289+
src="/opt/op-succinct/evm-sketch-genesis.json",
290+
description="Storing evm-sketch-genesis.json for evm-sketch-genesis field in aggkit-prover.",
291+
)
292+
293+
# Fetch evm-sketch-genesis-conf artifact
294+
evm_sketch_genesis_conf = plan.get_files_artifact(
295+
name="evm-sketch-genesis-conf-artifact.json",
296+
description="Fetch evm-sketch-genesis-conf-artifact.json files artifact",
297+
)
298+
299+
# Remove temp-contracts service after extracting evm-sketch-genesis
300+
plan.remove_service(
301+
name="temp-contracts",
302+
description="Remove temp-contracts service after extracting evm-sketch-genesis",
303+
)
304+
305+
return evm_sketch_genesis_conf

deploy_zkevm_contracts.star

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -187,6 +187,7 @@ def run(plan, args, deployment_stages, op_stack_args):
187187
},
188188
description="Create deploy_op_succinct_contract files artifact",
189189
)
190+
190191
# Mount op-succinct specific artifacts
191192
files["/opt/op-succinct/"] = Directory(
192193
artifact_names=[fetch_rollup_config_artifact]

ethereum.star

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,7 @@ def run(plan, args):
6363
# Enable the Electra hardfork.
6464
# Note: The electra fork epoch is set to 1 instead of 0 to avoid the following error in the CL node (lighthouse).
6565
# Mar 11 11:56:46.595 CRIT Failed to start beacon node reason: Built-in genesis state SSZ bytes are invalid: OffsetOutOfBounds(522733568)
66-
"electra_fork_epoch": 1,
66+
"electra_fork_epoch": derive_l1_preset(args),
6767
},
6868
"additional_services": args["l1_additional_services"],
6969
"port_publisher": port_publisher,
@@ -117,3 +117,10 @@ def _wait_for_l1_startup(plan, cl_rpc_url):
117117
),
118118
wait="5m",
119119
)
120+
121+
122+
def derive_l1_preset(args):
123+
if args["l1_preset"] == "mainnet":
124+
return 0
125+
else:
126+
return 1

input_parser.star

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -40,8 +40,8 @@ DEFAULT_DEPLOYMENT_STAGES = {
4040

4141
DEFAULT_IMAGES = {
4242
"aggkit_image": "ghcr.io/agglayer/aggkit:0.4.0-beta1", # https://github.com/agglayer/aggkit/pkgs/container/aggkit
43-
"agglayer_image": "ghcr.io/agglayer/agglayer:0.3.0-rc.21", # https://github.com/agglayer/agglayer/pkgs/container/agglayer
44-
"aggkit_prover_image": "ghcr.io/agglayer/aggkit-prover:0.1.0-rc.29", # https://github.com/agglayer/provers/pkgs/container/aggkit-prover
43+
"agglayer_image": "ghcr.io/agglayer/agglayer:0.3.4", # https://github.com/agglayer/agglayer/pkgs/container/agglayer
44+
"aggkit_prover_image": "ghcr.io/agglayer/aggkit-prover:1.1.2", # https://github.com/agglayer/provers/pkgs/container/aggkit-prover
4545
"cdk_erigon_node_image": "hermeznetwork/cdk-erigon:v2.61.19", # https://hub.docker.com/r/hermeznetwork/cdk-erigon/tags
4646
"cdk_node_image": "ghcr.io/0xpolygon/cdk:0.5.4-rc1", # https://github.com/0xpolygon/cdk/pkgs/container/cdk
4747
"cdk_validium_node_image": "ghcr.io/0xpolygon/cdk-validium-node:0.6.4-cdk.10", # https://github.com/0xPolygon/cdk-validium-node/pkgs/container/cdk-validium-node/
@@ -52,15 +52,15 @@ DEFAULT_IMAGES = {
5252
# This image has been built using the following branch: https://github.com/leovct/agglayer-contracts/tree/v10.1.0-rc.3-devtools
5353
# It includes two fixes, one for proxiedTokensManager param and another one for bridge initialize call.
5454
# It is not an official release made by the contracts team, thus we label it as a "devtools" image.
55-
"zkevm_contracts_image": "jhkimqd/zkevm-contracts:v10.1.0-rc.5-fork.12",
55+
"zkevm_contracts_image": "jhkimqd/zkevm-contracts:v10.1.0-sp1.v5-fork.12", # https://hub.docker.com/layers/jhkimqd/zkevm-contracts/v10.1.0-sp1.v5-fork.12/images/sha256-b3346dbce4f698ff57821c322b66378ea3103e7246596154b0653057d0b02fc8
5656
"zkevm_da_image": "ghcr.io/0xpolygon/cdk-data-availability:0.0.13", # https://github.com/0xpolygon/cdk-data-availability/pkgs/container/cdk-data-availability
5757
"zkevm_node_image": "hermeznetwork/zkevm-node:v0.7.3", # https://hub.docker.com/r/hermeznetwork/zkevm-node/tags
5858
"zkevm_pool_manager_image": "hermeznetwork/zkevm-pool-manager:v0.1.2", # https://hub.docker.com/r/hermeznetwork/zkevm-pool-manager/tags
5959
"zkevm_prover_image": "hermeznetwork/zkevm-prover:v8.0.0-RC16-fork.12", # https://hub.docker.com/r/hermeznetwork/zkevm-prover/tags
6060
"zkevm_sequence_sender_image": "hermeznetwork/zkevm-sequence-sender:v0.2.4", # https://hub.docker.com/r/hermeznetwork/zkevm-sequence-sender/tags
6161
"anvil_image": "ghcr.io/foundry-rs/foundry:v1.0.0", # https://github.com/foundry-rs/foundry/pkgs/container/foundry/versions?filters%5Bversion_type%5D=tagged
6262
"mitm_image": "mitmproxy/mitmproxy:11.1.3", # https://hub.docker.com/r/mitmproxy/mitmproxy/tags
63-
"op_succinct_proposer_image": "ghcr.io/agglayer/op-succinct/op-succinct:v2.2.1-agglayer", # https://github.com/agglayer/op-succinct/pkgs/container/op-succinct%2Fop-proposer
63+
"op_succinct_proposer_image": "ghcr.io/agglayer/op-succinct/op-succinct:v2.3.1-agglayer", # https://github.com/agglayer/op-succinct/pkgs/container/op-succinct%2Fop-succinct
6464
"test_runner_image": "leovct/e2e:9fe80e1",
6565
"status_checker_image": "ghcr.io/0xpolygon/status-checker:v0.2.4", # https://github.com/0xPolygon/status-checker/releases
6666
}
@@ -449,9 +449,9 @@ DEFAULT_OP_STACK_ARGS = {
449449
{
450450
# OP Rollup configuration
451451
"el_type": "op-geth",
452-
"el_image": "us-docker.pkg.dev/oplabs-tools-artifacts/images/op-geth:v1.101503.1",
452+
"el_image": "us-docker.pkg.dev/oplabs-tools-artifacts/images/op-geth:v1.101511.0",
453453
"cl_type": "op-node",
454-
"cl_image": "us-docker.pkg.dev/oplabs-tools-artifacts/images/op-node:v1.13.2",
454+
"cl_image": "us-docker.pkg.dev/oplabs-tools-artifacts/images/op-node:v1.13.3",
455455
"count": 1,
456456
},
457457
],
@@ -468,6 +468,10 @@ DEFAULT_OP_STACK_ARGS = {
468468
"network_id": str(DEFAULT_ROLLUP_ARGS.get("zkevm_rollup_chain_id")),
469469
# The blocktime on the OP network
470470
"seconds_per_slot": 1,
471+
# Isthmus fork
472+
# Defaults to None - not activated - decimal value
473+
# Offset is in seconds
474+
"isthmus_time_offset": 0,
471475
},
472476
},
473477
],

main.star

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,17 +3,17 @@ input_parser = import_module("./input_parser.star")
33
service_package = import_module("./lib/service.star")
44
op_succinct_package = import_module("./op_succinct.star")
55
deploy_sovereign_contracts_package = import_module("./deploy_sovereign_contracts.star")
6+
aggkit_package = import_module("./aggkit.star")
7+
ethereum_package = import_module("./ethereum.star")
68

79
# Main service packages.
810
additional_services = import_module("./src/additional_services/launcher.star")
911
agglayer_package = "./agglayer.star"
1012
cdk_bridge_infra_package = "./cdk_bridge_infra.star"
1113
cdk_central_environment_package = "./cdk_central_environment.star"
12-
aggkit_package = "./aggkit.star"
1314
cdk_erigon_package = "./cdk_erigon.star"
1415
databases_package = "./databases.star"
1516
deploy_zkevm_contracts_package = "./deploy_zkevm_contracts.star"
16-
ethereum_package = "./ethereum.star"
1717
anvil_package = "./anvil.star"
1818
zkevm_pool_manager_package = "./zkevm_pool_manager.star"
1919
deploy_l2_contracts_package = "./deploy_l2_contracts.star"
@@ -39,12 +39,14 @@ def run(plan, args={}):
3939
if args.get("l1_engine", "geth") == "anvil":
4040
import_module(anvil_package).run(plan, args)
4141
else:
42-
import_module(ethereum_package).run(plan, args)
42+
ethereum_package.run(plan, args)
4343
else:
4444
plan.print("Skipping the deployment of a local L1")
4545

4646
# Extract the fetch-rollup-config binary before starting contracts-001 service.
4747
if deployment_stages.get("deploy_op_succinct", False):
48+
# Extract genesis to feed into evm-sketch-genesis
49+
# ethereum_package.extract_genesis_json(plan)
4850
# Temporarily run op-succinct-proposer service and fetch-rollup-config binary
4951
# The extract binary will be passed into the contracts-001 service
5052
op_succinct_package.extract_fetch_rollup_config(plan, args)
@@ -96,6 +98,9 @@ def run(plan, args={}):
9698
)
9799

98100
if deployment_stages.get("deploy_op_succinct", False):
101+
# Extract genesis to feed into evm-sketch-genesis
102+
op_succinct_package.create_evm_sketch_genesis(plan, args)
103+
99104
# Run deploy-op-succinct-contracts.sh script in the contracts-001 service
100105
plan.exec(
101106
description="Deploying op-succinct contracts",
@@ -270,7 +275,7 @@ def run(plan, args={}):
270275
# Deploy AggKit infrastructure + Dedicated Bridge Service
271276
if deployment_stages.get("deploy_optimism_rollup", False):
272277
plan.print("Deploying AggKit infrastructure")
273-
import_module(aggkit_package).run(
278+
aggkit_package.run(
274279
plan,
275280
args,
276281
contract_setup_addresses,

op_succinct.star

Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,3 +37,63 @@ def extract_fetch_rollup_config(plan, args):
3737
wait=None,
3838
description="Extract fetch-rollup-config from the op-succinct-proposer image to files artifact",
3939
)
40+
41+
42+
def create_evm_sketch_genesis(plan, args):
43+
parse_evm_sketch_genesis_artifact = plan.render_templates(
44+
name="parse-evm-sketch-genesis.sh",
45+
config={
46+
"parse-evm-sketch-genesis.sh": struct(
47+
template=read_file(
48+
src="./templates/op-succinct/parse-evm-sketch-genesis.sh"
49+
),
50+
data=args,
51+
),
52+
},
53+
description="Create parse-evm-sketch-genesis.sh files artifact",
54+
)
55+
56+
op_geth_genesis = plan.store_service_files(
57+
service_name="op-el-1-op-geth-op-node" + args["deployment_suffix"],
58+
name="op_geth_genesis.json",
59+
src="/network-configs/genesis-" + str(args["zkevm_rollup_chain_id"]) + ".json",
60+
description="Storing OP Geth genesis.json for evm-sketch-genesis field in aggkit-prover.",
61+
)
62+
63+
# Add a temporary service using the contracts image
64+
temp_service_name = "temp-contracts"
65+
66+
files = {}
67+
files["/opt/op-succinct/"] = Directory(artifact_names=[op_geth_genesis])
68+
69+
files["/opt/scripts/"] = Directory(
70+
artifact_names=[parse_evm_sketch_genesis_artifact]
71+
)
72+
73+
# Create helper service to deploy contracts
74+
plan.add_service(
75+
name=temp_service_name,
76+
config=ServiceConfig(
77+
image=args["zkevm_contracts_image"],
78+
files=files,
79+
# These two lines are only necessary to deploy to any Kubernetes environment (e.g. GKE).
80+
entrypoint=["bash", "-c"],
81+
cmd=["sleep infinity"],
82+
user=User(uid=0, gid=0), # Run the container as root user.
83+
),
84+
)
85+
86+
# Parse .config section of L1 geth genesis for evm-sketch-genesis input
87+
plan.exec(
88+
description="Parsing .config section of L1 geth genesis for evm-sketch-genesis input",
89+
service_name="temp-contracts",
90+
recipe=ExecRecipe(
91+
command=[
92+
"/bin/bash",
93+
"-c",
94+
"cp /opt/scripts/parse-evm-sketch-genesis.sh /opt/op-succinct/ && chmod +x {0} && {0}".format(
95+
"/opt/op-succinct/parse-evm-sketch-genesis.sh"
96+
),
97+
]
98+
),
99+
)

0 commit comments

Comments
 (0)