Skip to content

Commit a378437

Browse files
authored
Merge pull request #610 from 0xPolygon/atanmarko/rust-proposer-squashed
Squashed #605
2 parents f440529 + 3ea16a0 commit a378437

19 files changed

Lines changed: 1108 additions & 411 deletions

.github/tests/chains/op-succinct-real-prover.yml

Lines changed: 17 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,9 @@ args:
1212
# Valid values are: "network-prover", "mock-prover"
1313
aggkit_prover_primary_prover: "network-prover"
1414
consensus_contract_type: fep
15-
# true = mock
15+
pp_vkey_hash: "0x00d6e4bdab9cac75a50d58262bb4e60b3107a6b61131ccdff649576c624b6fb7"
16+
aggchain_vkey_hash: "0x2e1061045949ba9e43324bfa58dc554b43f51b45538a62e91c83cf8e0c5d3617"
17+
# aggkit_prover_image: "ghcr.io/agglayer/aggkit-prover:feat-rust-proposer"
1618
# false = network
1719
# Using the network provers will use the real SP1 verifier contract which is also deployed together in the Kurtosis devnet.
1820
# A mock verifier is used otherwise.
@@ -23,8 +25,6 @@ args:
2325
op_succinct_agglayer: true
2426
# Proof type. Must match the verifier gateway contract type. Options: "plonk", "groth16", "compressed", "core"
2527
op_succinct_agg_proof_mode: "compressed"
26-
# The maximum number of blocks to include in each span proof. For chains with high throughput, you need to decrease this value.
27-
op_succinct_proposer_span_proof: "60"
2828
# The minimum interval in L2 blocks at which checkpoints must be submitted. An aggregation proof can be posted for any range larger than this interval.
2929
op_succinct_submission_interval: "1"
3030
# The maximum number of concurrent proof requests to send to the `op-succinct-server`
@@ -36,27 +36,30 @@ args:
3636
# The number following the "-" should be identical to network_params.name
3737
deployment_suffix: "-001"
3838
zkevm_rollup_id: 1
39+
# Size of the range proof.
40+
op_succinct_range_proof_interval: "1800"
3941
# OP Networks rely on L1 blocks to have finalization on L2. This means if the L1 blocktime is very fast, OP Succinct proof requests will have to bundle many L1 blocks into a single proof.
4042
# This will significantly increase cycles even if the L2 network is empty. Instead of having 2s, for OP Succinct deployments, we recommend 12s.
4143
# Note this will noticeably increase the deployment time because of the increased L1 finality.
42-
l1_seconds_per_slot: 2 # TEMPORARY - DO NOT MERGE
44+
l1_seconds_per_slot: 12
4345
additional_services:
4446
- bridge_spammer
4547

4648
optimism_package:
4749
# We need this for pre-deployed allocs https://github.com/ethpandaops/optimism-package/compare/main...xavier-romero:optimism-package:main#diff-c479a5b20e37b19a976045939f01e8a6deb6a062a147e08b81049469d512d00cR235
4850
# "github.com/ethpandaops/optimism-package/main.star@884f4eb813884c4c8e5deead6ca4e0c54b85da90",
49-
source: "github.com/xavier-romero/optimism-package/main.star@355b15efd61b603d2302478dd4b3ef74ccc6e462"
51+
source: "github.com/agglayer/optimism-package/main.star@cc37713aff9c4955dd6975cdbc34072a1286754e"
5052
predeployed_contracts: true
5153
chains:
5254
- participants:
5355
- el_type: op-geth
54-
el_image: "us-docker.pkg.dev/oplabs-tools-artifacts/images/op-geth@sha256:8cad527a982e929f80fca539e612c59ccb503fc076b86ce1f4ebeefb112dee03"
56+
el_image: "us-docker.pkg.dev/oplabs-tools-artifacts/images/op-geth:v1.101503.1"
5557
cl_type: op-node
56-
cl_image: "us-docker.pkg.dev/oplabs-tools-artifacts/images/op-node@sha256:207943c6ca92a203e5c2f7908769023c76d2304060c8d8c4cfbd469b7fbaaf0d"
58+
cl_image: "us-docker.pkg.dev/oplabs-tools-artifacts/images/op-node:v1.13.2"
5759
count: 1
5860
batcher_params:
59-
image: "us-docker.pkg.dev/oplabs-tools-artifacts/images/op-batcher@sha256:a017bf0a1dbe88e770eb6979354a148534b36e58ea7bc2fd7ae01f5e90eb9ed3"
61+
image: "us-docker.pkg.dev/oplabs-tools-artifacts/images/op-batcher:v1.12.0"
62+
max_channel_duration: 50 # 50 blocks @ 12 sec => 10 minutes per blob
6063
proposer_params:
6164
enabled: false
6265
challenger_params:
@@ -66,9 +69,10 @@ optimism_package:
6669
network_id: "2151908"
6770
seconds_per_slot: 1
6871
op_contract_deployer_params:
69-
# image: "us-docker.pkg.dev/oplabs-tools-artifacts/images/op-deployer:v0.0.12"
70-
image: "xavierromero/op-deployer:20250314"
71-
l1_artifacts_locator: "https://storage.googleapis.com/oplabs-contract-artifacts/artifacts-v1-fffcbb0ebf7f83311791534a41e65ef90df47797f9ca8f86941452f597f7128c.tar.gz"
72-
l2_artifacts_locator: "https://storage.googleapis.com/oplabs-contract-artifacts/artifacts-v1-fffcbb0ebf7f83311791534a41e65ef90df47797f9ca8f86941452f597f7128c.tar.gz"
72+
image: "jhkimqd/op-deployer:v0.4.0-rc.2" # https://github.com/jhkimqd/optimism/tree/op-deployer/v0.4.0-rc.2-cdk
73+
l1_artifacts_locator: "https://storage.googleapis.com/oplabs-contract-artifacts/artifacts-v1-02024c5a26c16fc1a5c716fff1c46b5bf7f23890d431bb554ddbad60971211d4.tar.gz"
74+
l2_artifacts_locator: "https://storage.googleapis.com/oplabs-contract-artifacts/artifacts-v1-02024c5a26c16fc1a5c716fff1c46b5bf7f23890d431bb554ddbad60971211d4.tar.gz"
7375
observability:
74-
enabled: true
76+
# true = op-stack observability WITHOUT op-succinct
77+
# false = kurtosis-cdk observability WITH op-succinct
78+
enabled: false

.github/tests/chains/op-succinct.yml

Lines changed: 14 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,8 @@ args:
1313
sp1_prover_key: "0xbcdf20249abf0ed6d944c0288fad489e33f66b3960d9e6229c1cd214ed3bbe31"
1414
consensus_contract_type: fep
1515
pp_vkey_hash: "0x00d6e4bdab9cac75a50d58262bb4e60b3107a6b61131ccdff649576c624b6fb7"
16-
aggchain_vkey_hash: "0x1f3df68a258f9d6748b291dd35faf80065af7cc11ef8b5fc6db2a4d958ea62d2"
16+
aggchain_vkey_hash: "0x2e1061045949ba9e43324bfa58dc554b43f51b45538a62e91c83cf8e0c5d3617"
17+
# aggkit_prover_image: "ghcr.io/agglayer/aggkit-prover:feat-rust-proposer"
1718
# true = mock
1819
# false = network
1920
# Using the network provers will use the real SP1 verifier contract which is also deployed together in the Kurtosis devnet.
@@ -23,8 +24,6 @@ args:
2324
op_succinct_agglayer: true
2425
# Proof type. Must match the verifier gateway contract type. Options: "plonk", "groth16", "compressed", "core"
2526
op_succinct_agg_proof_mode: "compressed"
26-
# The maximum number of blocks to include in each span proof. For chains with high throughput, you need to decrease this value.
27-
op_succinct_proposer_span_proof: "60"
2827
# The minimum interval in L2 blocks at which checkpoints must be submitted. An aggregation proof can be posted for any range larger than this interval.
2928
op_succinct_submission_interval: "1"
3029
# The maximum number of concurrent proof requests to send to the `op-succinct-server`
@@ -37,6 +36,8 @@ args:
3736
# The number following the "-" should be identical to network_params.name
3837
deployment_suffix: "-001"
3938
zkevm_rollup_id: 1
39+
# Size of the range proof.
40+
op_succinct_range_proof_interval: "60"
4041
# OP Networks rely on L1 blocks to have finalization on L2. This means if the L1 blocktime is very fast, OP Succinct proof requests will have to bundle many L1 blocks into a single proof.
4142
# This will significantly increase cycles even if the L2 network is empty. Instead of having 2s, for OP Succinct deployments, we recommend 12s.
4243
# Note this will noticeably increase the deployment time because of the increased L1 finality.
@@ -47,17 +48,17 @@ args:
4748
optimism_package:
4849
# We need this for pre-deployed allocs https://github.com/ethpandaops/optimism-package/compare/main...xavier-romero:optimism-package:main#diff-c479a5b20e37b19a976045939f01e8a6deb6a062a147e08b81049469d512d00cR235
4950
# "github.com/ethpandaops/optimism-package/main.star@884f4eb813884c4c8e5deead6ca4e0c54b85da90",
50-
source: "github.com/xavier-romero/optimism-package/main.star@355b15efd61b603d2302478dd4b3ef74ccc6e462"
51+
source: "github.com/agglayer/optimism-package/main.star@cc37713aff9c4955dd6975cdbc34072a1286754e"
5152
predeployed_contracts: true
5253
chains:
5354
- participants:
5455
- el_type: op-geth
55-
el_image: "us-docker.pkg.dev/oplabs-tools-artifacts/images/op-geth@sha256:8cad527a982e929f80fca539e612c59ccb503fc076b86ce1f4ebeefb112dee03"
56+
el_image: "us-docker.pkg.dev/oplabs-tools-artifacts/images/op-geth:v1.101503.1"
5657
cl_type: op-node
57-
cl_image: "us-docker.pkg.dev/oplabs-tools-artifacts/images/op-node@sha256:207943c6ca92a203e5c2f7908769023c76d2304060c8d8c4cfbd469b7fbaaf0d"
58+
cl_image: "us-docker.pkg.dev/oplabs-tools-artifacts/images/op-node:v1.13.2"
5859
count: 1
5960
batcher_params:
60-
image: "us-docker.pkg.dev/oplabs-tools-artifacts/images/op-batcher@sha256:a017bf0a1dbe88e770eb6979354a148534b36e58ea7bc2fd7ae01f5e90eb9ed3"
61+
image: "us-docker.pkg.dev/oplabs-tools-artifacts/images/op-batcher:v1.12.0"
6162
proposer_params:
6263
enabled: false
6364
challenger_params:
@@ -69,9 +70,10 @@ optimism_package:
6970
network_id: "2151908"
7071
seconds_per_slot: 1
7172
op_contract_deployer_params:
72-
# image: "us-docker.pkg.dev/oplabs-tools-artifacts/images/op-deployer:v0.0.12"
73-
image: "xavierromero/op-deployer:20250314"
74-
l1_artifacts_locator: "https://storage.googleapis.com/oplabs-contract-artifacts/artifacts-v1-fffcbb0ebf7f83311791534a41e65ef90df47797f9ca8f86941452f597f7128c.tar.gz"
75-
l2_artifacts_locator: "https://storage.googleapis.com/oplabs-contract-artifacts/artifacts-v1-fffcbb0ebf7f83311791534a41e65ef90df47797f9ca8f86941452f597f7128c.tar.gz"
73+
image: "jhkimqd/op-deployer:v0.4.0-rc.2" # https://github.com/jhkimqd/optimism/tree/op-deployer/v0.4.0-rc.2-cdk
74+
l1_artifacts_locator: "https://storage.googleapis.com/oplabs-contract-artifacts/artifacts-v1-02024c5a26c16fc1a5c716fff1c46b5bf7f23890d431bb554ddbad60971211d4.tar.gz"
75+
l2_artifacts_locator: "https://storage.googleapis.com/oplabs-contract-artifacts/artifacts-v1-02024c5a26c16fc1a5c716fff1c46b5bf7f23890d431bb554ddbad60971211d4.tar.gz"
7676
observability:
77-
enabled: true
77+
# true = op-stack observability WITHOUT op-succinct
78+
# false = kurtosis-cdk observability WITH op-succinct
79+
enabled: false

.github/tests/nightly/op-rollup/op-default.yml

Lines changed: 9 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ args:
66
consensus_contract_type: pessimistic
77
zkevm_rollup_chain_id: 2151908
88
pp_vkey_hash: "0x00d6e4bdab9cac75a50d58262bb4e60b3107a6b61131ccdff649576c624b6fb7"
9-
aggchain_vkey_hash: "0x1f3df68a258f9d6748b291dd35faf80065af7cc11ef8b5fc6db2a4d958ea62d2"
9+
aggchain_vkey_hash: "0x2e1061045949ba9e43324bfa58dc554b43f51b45538a62e91c83cf8e0c5d3617"
1010
# Arbitrary key for the SP1 prover. Replace with a valid SPN key if you want to use the network provers.
1111
# cast wallet private-key --mnemonic "giant issue aisle success illegal bike spike question tent bar rely arctic volcano long crawl hungry vocal artwork sniff fantasy very lucky have athlete"
1212
sp1_prover_key: "0xbcdf20249abf0ed6d944c0288fad489e33f66b3960d9e6229c1cd214ed3bbe31"
@@ -17,27 +17,26 @@ args:
1717
optimism_package:
1818
# We need this for pre-deployed allocs https://github.com/ethpandaops/optimism-package/compare/main...xavier-romero:optimism-package:main#diff-c479a5b20e37b19a976045939f01e8a6deb6a062a147e08b81049469d512d00cR235
1919
# source: github.com/ethpandaops/optimism-package/main.star@884f4eb813884c4c8e5deead6ca4e0c54b85da90
20-
source: github.com/xavier-romero/optimism-package/main.star@d09d841bd5528f4b29144cfc7ecba88a162427ce
20+
source: "github.com/agglayer/optimism-package/main.star@cc37713aff9c4955dd6975cdbc34072a1286754e"
2121
predeployed_contracts: true
2222
chains:
2323
- participants:
2424
- el_type: op-geth
25-
el_image: us-docker.pkg.dev/oplabs-tools-artifacts/images/op-geth@sha256:8cad527a982e929f80fca539e612c59ccb503fc076b86ce1f4ebeefb112dee03
25+
el_image: "us-docker.pkg.dev/oplabs-tools-artifacts/images/op-geth:v1.101503.1"
2626
cl_type: op-node
27-
cl_image: us-docker.pkg.dev/oplabs-tools-artifacts/images/op-node@sha256:207943c6ca92a203e5c2f7908769023c76d2304060c8d8c4cfbd469b7fbaaf0d
27+
cl_image: "us-docker.pkg.dev/oplabs-tools-artifacts/images/op-node:v1.13.2"
2828
count: 1
2929
batcher_params:
30-
image: us-docker.pkg.dev/oplabs-tools-artifacts/images/op-batcher@sha256:a017bf0a1dbe88e770eb6979354a148534b36e58ea7bc2fd7ae01f5e90eb9ed3
30+
image: "us-docker.pkg.dev/oplabs-tools-artifacts/images/op-batcher:v1.12.0"
3131
proposer_params:
32-
image: us-docker.pkg.dev/oplabs-tools-artifacts/images/op-proposer@sha256:1c6e0c0ac79b561652af1bd5df30f0fcca1490c3989ea0a15e7e18d823e96825
32+
image: "us-docker.pkg.dev/oplabs-tools-artifacts/images/op-proposer:v1.10.0"
3333
network_params:
3434
name: "001"
3535
network_id: "2151908"
3636
seconds_per_slot: 1
3737
op_contract_deployer_params:
38-
# image: us-docker.pkg.dev/oplabs-tools-artifacts/images/op-deployer:v0.0.12
39-
image: xavierromero/op-deployer:20250314
40-
l1_artifacts_locator: https://storage.googleapis.com/oplabs-contract-artifacts/artifacts-v1-fffcbb0ebf7f83311791534a41e65ef90df47797f9ca8f86941452f597f7128c.tar.gz
41-
l2_artifacts_locator: https://storage.googleapis.com/oplabs-contract-artifacts/artifacts-v1-fffcbb0ebf7f83311791534a41e65ef90df47797f9ca8f86941452f597f7128c.tar.gz
38+
image: "jhkimqd/op-deployer:v0.4.0-rc.2" # https://github.com/jhkimqd/optimism/tree/op-deployer/v0.4.0-rc.2-cdk
39+
l1_artifacts_locator: "https://storage.googleapis.com/oplabs-contract-artifacts/artifacts-v1-02024c5a26c16fc1a5c716fff1c46b5bf7f23890d431bb554ddbad60971211d4.tar.gz"
40+
l2_artifacts_locator: "https://storage.googleapis.com/oplabs-contract-artifacts/artifacts-v1-02024c5a26c16fc1a5c716fff1c46b5bf7f23890d431bb554ddbad60971211d4.tar.gz"
4241
observability:
4342
enabled: true

.github/workflows/deploy.yml

Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -372,3 +372,56 @@ jobs:
372372
with:
373373
name: dump_deploy_to_external_l1_${{ github.run_id }}
374374
path: ./dump
375+
376+
run-with-cdk-op-geth-succinct:
377+
runs-on: ubuntu-latest
378+
timeout-minutes: 40
379+
steps:
380+
- uses: actions/checkout@v4
381+
382+
- name: Load environment variables
383+
run: grep -vE '^\s*#|^\s*$' .github/workflows/.env >> $GITHUB_ENV
384+
385+
- name: Login to Docker Hub
386+
uses: docker/login-action@74a5d142397b4f367a81961eba4e8cd7edddf772 # v3.4.0
387+
with:
388+
username: ${{ secrets.DOCKERHUB_USERNAME }}
389+
password: ${{ secrets.DOCKERHUB_TOKEN }}
390+
# This step will only execute if the necessary secrets are available, preventing failures
391+
# on pull requests from forked repositories.
392+
if: ${{ env.DOCKERHUB_USERNAME && env.DOCKERHUB_TOKEN }}
393+
env:
394+
DOCKERHUB_USERNAME: ${{ secrets.DOCKERHUB_USERNAME }}
395+
DOCKERHUB_TOKEN: ${{ secrets.DOCKERHUB_TOKEN }}
396+
397+
- name: Install Kurtosis CDK tools
398+
uses: ./.github/actions/setup-kurtosis-cdk
399+
400+
- name: Run Starlark
401+
run: kurtosis run --enclave=${{ env.ENCLAVE_NAME }} --args-file=./.github/tests/chains/op-succinct.yml --show-enclave-inspect=false .
402+
403+
- name: Inspect enclave
404+
run: kurtosis enclave inspect ${{ env.ENCLAVE_NAME }}
405+
406+
- name: Check for error logs in op-succinct-proposer service
407+
working-directory: .github/scripts
408+
run: |
409+
LOGS=$(kurtosis service logs ${{ env.ENCLAVE_NAME }} op-succinct-proposer-001 2>&1)
410+
echo "$LOGS"
411+
if echo "$LOGS" | grep -i "error\|exception\|failed\|fatal"; then
412+
echo "Errors found in container logs!"
413+
exit 1 # Fail the workflow if errors are found
414+
else
415+
echo "No errors found in logs."
416+
fi
417+
418+
- name: Dump enclave
419+
if: always()
420+
run: kurtosis enclave dump ${{ env.ENCLAVE_NAME }} ./dump
421+
422+
- name: Upload enclave dump
423+
if: always()
424+
uses: actions/upload-artifact@v4
425+
with:
426+
name: dump_cdk_op_geth_succinct${{ github.run_id }}
427+
path: ./dump

aggkit.star

Lines changed: 47 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -12,54 +12,58 @@ def run(
1212
sovereign_contract_setup_addresses,
1313
deployment_stages,
1414
):
15-
# Create aggkit-prover
16-
aggkit_prover_config_artifact = create_aggkit_prover_config_artifact(
17-
plan, args, contract_setup_addresses, sovereign_contract_setup_addresses
18-
)
19-
(ports, public_ports) = get_aggkit_prover_ports(args)
20-
21-
prover_env_vars = {
22-
# TODO one of these values can be deprecated soon 2025-04-15
23-
"PROPOSER_NETWORK_PRIVATE_KEY": args["sp1_prover_key"],
24-
"NETWORK_PRIVATE_KEY": args["sp1_prover_key"],
25-
"RUST_LOG": "info,aggkit_prover=debug,prover=debug,aggchain=debug",
26-
"RUST_BACKTRACE": "1",
27-
}
28-
29-
aggkit_prover = plan.add_service(
30-
name="aggkit-prover",
31-
config=ServiceConfig(
32-
image=args["aggkit_prover_image"],
33-
ports=ports,
34-
public_ports=public_ports,
35-
files={
36-
"/etc/aggkit": Directory(
37-
artifact_names=[
38-
aggkit_prover_config_artifact,
39-
]
40-
),
41-
},
42-
entrypoint=[
43-
"/usr/local/bin/aggkit-prover",
44-
],
45-
env_vars=prover_env_vars,
46-
cmd=["run", "--config-path", "/etc/aggkit/aggkit-prover-config.toml"],
47-
),
48-
)
49-
aggkit_prover_url = "{}:{}".format(
50-
aggkit_prover.ip_address,
51-
aggkit_prover.ports[
52-
"grpc"
53-
].number, # TODO: Check whether "grpc" or "api" is the correct port. If api is correct, we need to add it below.
54-
)
15+
if (
16+
deployment_stages.get("deploy_op_succinct", False)
17+
and args["consensus_contract_type"] != "pessimistic"
18+
):
19+
# Create aggkit-prover
20+
aggkit_prover_config_artifact = create_aggkit_prover_config_artifact(
21+
plan, args, contract_setup_addresses, sovereign_contract_setup_addresses
22+
)
23+
(ports, public_ports) = get_aggkit_prover_ports(args)
24+
25+
prover_env_vars = {
26+
# TODO one of these values can be deprecated soon 2025-04-15
27+
"PROPOSER_NETWORK_PRIVATE_KEY": args["sp1_prover_key"],
28+
"NETWORK_PRIVATE_KEY": args["sp1_prover_key"],
29+
"RUST_LOG": "info,aggkit_prover=debug,prover=debug,aggchain=debug",
30+
"RUST_BACKTRACE": "1",
31+
}
32+
33+
aggkit_prover = plan.add_service(
34+
name="aggkit-prover",
35+
config=ServiceConfig(
36+
image=args["aggkit_prover_image"],
37+
ports=ports,
38+
public_ports=public_ports,
39+
files={
40+
"/etc/aggkit": Directory(
41+
artifact_names=[
42+
aggkit_prover_config_artifact,
43+
]
44+
),
45+
},
46+
entrypoint=[
47+
"/usr/local/bin/aggkit-prover",
48+
],
49+
env_vars=prover_env_vars,
50+
cmd=["run", "--config-path", "/etc/aggkit/aggkit-prover-config.toml"],
51+
),
52+
)
53+
aggkit_prover_url = "{}:{}".format(
54+
aggkit_prover.ip_address,
55+
aggkit_prover.ports[
56+
"grpc"
57+
].number, # TODO: Check whether "grpc" or "api" is the correct port. If api is correct, we need to add it below.
58+
)
5559

5660
db_configs = databases.get_db_configs(
5761
args["deployment_suffix"], args["sequencer_type"]
5862
)
5963

6064
keystore_artifacts = get_keystores_artifacts(plan, args)
6165

62-
# Create the cdk aggoracle config.
66+
# Create the aggkit config.
6367
aggkit_config_template = read_file(src="./templates/aggkit/aggkit-config.toml")
6468
aggkit_config_artifact = plan.render_templates(
6569
name="cdk-aggoracle-config-artifact",
@@ -218,7 +222,8 @@ def create_aggkit_prover_config_artifact(
218222
], # TODO: Check if it's the right address - is it the L2 sovereign global exit root address ?
219223
# TODO: For op-succinct, agglayer/op-succinct is currently on the golang version. This might change if we move to the rust version.
220224
"proposer_url": "http://op-succinct-proposer{}:{}".format(
221-
args["deployment_suffix"], args["op_succinct_proposer_rpc_port"]
225+
args["deployment_suffix"],
226+
args["op_succinct_proposer_grpc_port"],
222227
),
223228
# TODO: For legacy op, this would be different - something like http://op-proposer-001:8560
224229
# "proposer_url": "http://op-proposer{}:{}".format(

0 commit comments

Comments
 (0)