Skip to content

Commit 333e797

Browse files
committed
WIP: fix prestates handling
1 parent ff57cb4 commit 333e797

File tree

6 files changed

+104
-46
lines changed

6 files changed

+104
-46
lines changed

README.md

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -421,10 +421,10 @@ optimism_package:
421421
# A list of optional extra params that will be passed to the challenger container for modifying its behaviour
422422
extra_params: []
423423

424-
# Path to folder containing cannon prestate-proof.json file
424+
# Path to folder containing cannon prestate-proof.json file. Mutually exclusive with cannon_prestates_url.
425425
cannon_prestates_path: "static_files/prestates"
426426

427-
# Base URL to absolute prestates to use when generating trace data.
427+
# Base URL to absolute prestates to use when generating trace data. Mutually excluive with cannon_prestates_path.
428428
cannon_prestates_url: ""
429429

430430
# Default proposer configuration
@@ -481,10 +481,15 @@ optimism_package:
481481
# The docker image that should be used for the L2 contract deployer.
482482
# Locators can be http(s) URLs, or point to an enclave artifact with
483483
# a pseudo URL artifact://NAME
484+
# If specified, prestate_builder_image will be deployed as a service
485+
# that takes genesis/rollup information as input and generates the
486+
# corresponding prestate. In that case, challenger will be pointed to the outcome,
487+
# effectively ignoring cannon_prestate_path / cannon_prestate_url.
484488
op_contract_deployer_params:
485489
image: us-docker.pkg.dev/oplabs-tools-artifacts/images/op-deployer:v0.0.11
486490
l1_artifacts_locator: https://storage.googleapis.com/oplabs-contract-artifacts/artifacts-v1-c193a1863182092bc6cb723e523e8313a0f4b6e9c9636513927f1db74c047c15.tar.gz
487491
l2_artifacts_locator: https://storage.googleapis.com/oplabs-contract-artifacts/artifacts-v1-c193a1863182092bc6cb723e523e8313a0f4b6e9c9636513927f1db74c047c15.tar.gz
492+
prestate_builder_image: ""
488493

489494
# The global log level that all clients should log at
490495
# Valid values are "error", "warn", "info", "debug", and "trace"

main.star

Lines changed: 16 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -87,14 +87,16 @@ def run(plan, args={}):
8787
plan.print("Waiting for L1 to start up")
8888
wait_for_sync.wait_for_startup(plan, l1_config_env_vars)
8989

90-
deployment_output = contract_deployer.deploy_contracts(
90+
deployment = contract_deployer.deploy_contracts(
9191
plan,
9292
l1_priv_key,
9393
l1_config_env_vars,
9494
optimism_args,
9595
l1_network,
9696
altda_deploy_config,
9797
)
98+
deployment_output = deployment.output
99+
prestates_url = deployment.prestates_url
98100

99101
jwt_file = plan.upload_files(
100102
src=ethereum_package_static_files.JWT_PATH_FILEPATH,
@@ -144,18 +146,19 @@ def run(plan, args={}):
144146
)
145147
if chain.challenger_params.enabled:
146148
op_challenger_launcher.launch(
147-
plan,
148-
l2_num,
149-
"op-challenger-{0}".format(chain.network_params.name),
150-
chain.challenger_params.image,
151-
l2.participants[0].el_context,
152-
l2.participants[0].cl_context,
153-
l1_config_env_vars,
154-
deployment_output,
155-
chain.network_params,
156-
chain.challenger_params,
157-
interop_params,
158-
observability_helper,
149+
plan=plan,
150+
l2_num=l2_num,
151+
service_name="op-challenger-{0}".format(chain.network_params.name),
152+
image=chain.challenger_params.image,
153+
el_context=l2.participants[0].el_context,
154+
cl_context=l2.participants[0].cl_context,
155+
l1_config_env_vars=l1_config_env_vars,
156+
deployment_output=deployment_output,
157+
network_params=chain.network_params,
158+
challenger_params=chain.challenger_params,
159+
interop_params=interop_params,
160+
observability_helper=observability_helper,
161+
prestates_url=prestates_url,
159162
)
160163

161164
observability.launch(

src/challenger/op-challenger/op_challenger_launcher.star

Lines changed: 38 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -36,20 +36,21 @@ def launch(
3636
challenger_params,
3737
interop_params,
3838
observability_helper,
39+
prestates_url=None,
3940
):
4041
config = get_challenger_config(
41-
plan,
42-
l2_num,
43-
service_name,
44-
image,
45-
el_context,
46-
cl_context,
47-
l1_config_env_vars,
48-
deployment_output,
49-
network_params,
50-
challenger_params,
51-
interop_params,
52-
observability_helper,
42+
plan=plan,
43+
l2_num=l2_num,
44+
image=image,
45+
el_context=el_context,
46+
cl_context=cl_context,
47+
l1_config_env_vars=l1_config_env_vars,
48+
deployment_output=deployment_output,
49+
network_params=network_params,
50+
challenger_params=challenger_params,
51+
interop_params=interop_params,
52+
observability_helper=observability_helper,
53+
prestates_url=prestates_url,
5354
)
5455

5556
service = plan.add_service(service_name, config)
@@ -58,13 +59,12 @@ def launch(
5859
observability_helper, service, network_params.network
5960
)
6061

61-
return "op_challenger"
62+
return "op-challenger"
6263

6364

6465
def get_challenger_config(
6566
plan,
6667
l2_num,
67-
service_name,
6868
image,
6969
el_context,
7070
cl_context,
@@ -74,6 +74,7 @@ def get_challenger_config(
7474
challenger_params,
7575
interop_params,
7676
observability_helper,
77+
prestates_url,
7778
):
7879
ports = dict(get_used_ports())
7980

@@ -131,22 +132,12 @@ def get_challenger_config(
131132
# Tracked at issue https://github.com/ethpandaops/optimism-package/issues/189
132133
cmd.append("--cannon-depset-config=dummy-file.json")
133134

134-
if (
135-
challenger_params.cannon_prestate_path
136-
and challenger_params.cannon_prestates_url
137-
):
138-
fail("Only one of cannon_prestate_path and cannon_prestates_url can be set")
139-
elif challenger_params.cannon_prestate_path:
140-
cannon_prestate_artifact = plan.upload_files(
141-
src=challenger_params.cannon_prestate_path,
142-
name="{}-prestates".format(service_name),
135+
cmd.append(
136+
get_prestates_flag(
137+
prestates_url,
138+
challenger_params,
143139
)
144-
files["/prestates"] = cannon_prestate_artifact
145-
cmd.append("--cannon-prestate=/prestates/prestate-proof.json")
146-
elif challenger_params.cannon_prestates_url:
147-
cmd.append("--cannon-prestates-url=" + challenger_params.cannon_prestates_url)
148-
else:
149-
fail("One of cannon_prestate_path or cannon_prestates_url must be set")
140+
)
150141

151142
cmd += challenger_params.extra_params
152143
cmd = "mkdir -p {0} && {1}".format(
@@ -161,3 +152,21 @@ def get_challenger_config(
161152
files=files,
162153
private_ip_address_placeholder=ethereum_package_constants.PRIVATE_IP_ADDRESS_PLACEHOLDER,
163154
)
155+
156+
157+
def get_prestates_flag(prestates_url, challenger_params):
158+
if (
159+
challenger_params.cannon_prestate_path
160+
and challenger_params.cannon_prestates_url
161+
):
162+
fail("Only one of cannon_prestate_path and cannon_prestates_url can be set")
163+
164+
if prestates_url:
165+
# this takes precedence over cannon_prestate_path and cannon_prestates_url
166+
return "--cannon-prestates-url=" + prestates_url
167+
168+
if challenger_params.cannon_prestate_path:
169+
return "--cannon-prestate=/prestates/prestate-proof.json"
170+
171+
# we have default for cannon_prestates_url, so it's a safe fallback
172+
return "--cannon-prestates-url=" + challenger_params.cannon_prestates_url

src/contracts/contract_deployer.star

Lines changed: 38 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -70,9 +70,38 @@ def _normalize_artifacts_locators(plan, l1_locator, l2_locator):
7070
return l1_artifacts_locator, l2_artifacts_locator, extra_files
7171

7272

73+
def deploy_prestate_builder(plan, image):
74+
return plan.add_service(
75+
name="prestate-builder",
76+
description="add a prestate builder svc",
77+
config=ServiceConfig(
78+
image=image,
79+
ports={
80+
"http": PortSpec(
81+
number=8080,
82+
application_protocol="http",
83+
),
84+
},
85+
),
86+
)
87+
88+
7389
def deploy_contracts(
7490
plan, priv_key, l1_config_env_vars, optimism_args, l1_network, altda_args
7591
):
92+
prestate_builder_image = (
93+
optimism_args.op_contract_deployer_params.prestate_builder_image
94+
)
95+
prestate_builder_url = None
96+
if prestate_builder_image:
97+
prestate_builder = deploy_prestate_builder(
98+
plan,
99+
prestate_builder_image,
100+
)
101+
prestate_builder_url = "http://{0}:{1}".format(
102+
prestate_builder.hostname, prestate_builder.ports["http"].number
103+
)
104+
76105
l2_chain_ids_list = [
77106
str(chain.network_params.network_id) for chain in optimism_args.chains
78107
]
@@ -278,8 +307,12 @@ def deploy_contracts(
278307
),
279308
)
280309

310+
apply_cmd = "op-deployer apply --l1-rpc-url $L1_RPC_URL --private-key $PRIVATE_KEY --workdir /network-data"
311+
if prestate_builder_url:
312+
apply_cmd += " --op-program-svc-url {0}".format(prestate_builder_url)
313+
281314
apply_cmds = [
282-
"op-deployer apply --l1-rpc-url $L1_RPC_URL --private-key $PRIVATE_KEY --workdir /network-data",
315+
apply_cmd,
283316
]
284317
for chain in optimism_args.chains:
285318
network_id = chain.network_params.network_id
@@ -335,7 +368,10 @@ def deploy_contracts(
335368
run='jq --from-file /fund-script/gen2spec.jq < "/network-data/genesis-$CHAIN_ID.json" > "/network-data/chainspec-$CHAIN_ID.json"',
336369
)
337370

338-
return op_deployer_output.files_artifacts[0]
371+
return struct(
372+
output=op_deployer_output.files_artifacts[0],
373+
prestates_url=prestate_builder_url,
374+
)
339375

340376

341377
def chain_key(index, key):

src/package_io/input_parser.star

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -267,6 +267,9 @@ def input_parser(plan, input_args):
267267
global_deploy_overrides=results["op_contract_deployer_params"][
268268
"global_deploy_overrides"
269269
],
270+
prestate_builder_image=results["op_contract_deployer_params"][
271+
"prestate_builder_image"
272+
],
270273
),
271274
global_log_level=results["global_log_level"],
272275
global_node_selectors=results["global_node_selectors"],
@@ -672,6 +675,7 @@ def default_op_contract_deployer_params():
672675
"l1_artifacts_locator": "https://storage.googleapis.com/oplabs-contract-artifacts/artifacts-v1-fffcbb0ebf7f83311791534a41e65ef90df47797f9ca8f86941452f597f7128c.tar.gz",
673676
"l2_artifacts_locator": "https://storage.googleapis.com/oplabs-contract-artifacts/artifacts-v1-fffcbb0ebf7f83311791534a41e65ef90df47797f9ca8f86941452f597f7128c.tar.gz",
674677
"global_deploy_overrides": default_op_contract_deployer_global_deploy_overrides(),
678+
"prestate_builder_image": "",
675679
}
676680

677681

src/package_io/sanity_check.star

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -168,6 +168,7 @@ OP_CONTRACT_DEPLOYER_PARAMS = [
168168
"l1_artifacts_locator",
169169
"l2_artifacts_locator",
170170
"global_deploy_overrides",
171+
"prestate_builder_image",
171172
]
172173

173174
OP_CONTRACT_DEPLOYER_GLOBAL_DEPLOY_OVERRIDES = ["faultGameAbsolutePrestate"]

0 commit comments

Comments
 (0)