Skip to content

Commit 5057f8e

Browse files
committed
WIP: fix prestates handling
1 parent ff57cb4 commit 5057f8e

File tree

6 files changed

+99
-48
lines changed

6 files changed

+99
-48
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: 36 additions & 30 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,10 @@ 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),
143-
)
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")
135+
cmd.append(get_prestates_flag(
136+
prestates_url,
137+
challenger_params,
138+
))
150139

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

src/contracts/contract_deployer.star

Lines changed: 35 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -70,9 +70,34 @@ 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(
74+
plan, image):
75+
return plan.add_service(
76+
name="prestate-builder",
77+
description = "add a prestate builder svc",
78+
config = ServiceConfig(
79+
image = image,
80+
ports = {
81+
"http": PortSpec(
82+
number = 8080,
83+
application_protocol = "http",
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 = optimism_args.op_contract_deployer_params.prestate_builder_image
93+
prestate_builder_url = None
94+
if prestate_builder_image:
95+
prestate_builder = deploy_prestate_builder(
96+
plan,
97+
prestate_builder_image,
98+
)
99+
prestate_builder_url = "http://{0}:{1}".format(prestate_builder.hostname, prestate_builder.ports["http"].number)
100+
76101
l2_chain_ids_list = [
77102
str(chain.network_params.network_id) for chain in optimism_args.chains
78103
]
@@ -278,8 +303,12 @@ def deploy_contracts(
278303
),
279304
)
280305

306+
apply_cmd = "op-deployer apply --l1-rpc-url $L1_RPC_URL --private-key $PRIVATE_KEY --workdir /network-data"
307+
if prestate_builder_url:
308+
apply_cmd += " --op-program-svc-url {0}".format(prestate_builder_url)
309+
281310
apply_cmds = [
282-
"op-deployer apply --l1-rpc-url $L1_RPC_URL --private-key $PRIVATE_KEY --workdir /network-data",
311+
apply_cmd,
283312
]
284313
for chain in optimism_args.chains:
285314
network_id = chain.network_params.network_id
@@ -292,7 +321,7 @@ def deploy_contracts(
292321
network_id
293322
),
294323
]
295-
)
324+
)
296325

297326
op_deployer_output = plan.run_sh(
298327
name="op-deployer-apply",
@@ -335,7 +364,10 @@ def deploy_contracts(
335364
run='jq --from-file /fund-script/gen2spec.jq < "/network-data/genesis-$CHAIN_ID.json" > "/network-data/chainspec-$CHAIN_ID.json"',
336365
)
337366

338-
return op_deployer_output.files_artifacts[0]
367+
return struct(
368+
output = op_deployer_output.files_artifacts[0],
369+
prestates_url = prestate_builder_url,
370+
)
339371

340372

341373
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)