Skip to content

Commit f062776

Browse files
zhwrdmslipper
andauthored
feat: adds op-proposer support (#111)
**Description** Adds op-proposer support back in preparation for adding op-challenger support. We need proposer to make proposals to test challenger functionality. The launcher supports a few config params: ``` { "image": "", "extra_params": [], "game_type": 1, "proposal_interval": "10m", } ``` **Changes** * Adds an l2_num param to l2, network participant launchers so we can index into the deployment state to get per-chain addresses * Makes proposer parameters consistent with batcher * Updates proposer to use dispute game factory Signed-off-by: Matthew Slipper <me@matthewslipper.com> Co-authored-by: Matthew Slipper <me@matthewslipper.com>
1 parent 9e47fd6 commit f062776

6 files changed

Lines changed: 70 additions & 25 deletions

File tree

main.star

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -82,9 +82,10 @@ def run(plan, args):
8282
l1_network,
8383
)
8484

85-
for chain in optimism_args_with_right_defaults.chains:
85+
for l2_num, chain in enumerate(optimism_args_with_right_defaults.chains):
8686
l2_launcher.launch_l2(
8787
plan,
88+
l2_num,
8889
chain.network_params.name,
8990
chain,
9091
deployment_output,
@@ -97,8 +98,6 @@ def run(plan, args):
9798
persistent,
9899
)
99100

100-
return
101-
102101

103102
def get_l1_config(all_l1_participants, l1_network_params, l1_network_id):
104103
env_vars = {}

src/l2.star

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ util = import_module("./util.star")
1010

1111
def launch_l2(
1212
plan,
13+
l2_num,
1314
l2_services_suffix,
1415
l2_args,
1516
deployment_output,
@@ -23,6 +24,7 @@ def launch_l2(
2324
):
2425
network_params = l2_args.network_params
2526
batcher_params = l2_args.batcher_params
27+
proposer_params = l2_args.proposer_params
2628
mev_params = l2_args.mev_params
2729

2830
plan.print("Deploying L2 with name {0}".format(network_params.name))
@@ -37,9 +39,11 @@ def launch_l2(
3739
jwt_file,
3840
network_params,
3941
batcher_params,
42+
proposer_params,
4043
mev_params,
4144
deployment_output,
4245
l1_config,
46+
l2_num,
4347
l2_services_suffix,
4448
global_log_level,
4549
global_node_selectors,

src/package_io/input_parser.star

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -108,6 +108,12 @@ def input_parser(plan, input_args):
108108
image=result["batcher_params"]["image"],
109109
extra_params=result["batcher_params"]["extra_params"],
110110
),
111+
proposer_params=struct(
112+
image=result["proposer_params"]["image"],
113+
extra_params=result["proposer_params"]["extra_params"],
114+
game_type=result["proposer_params"]["game_type"],
115+
proposal_interval=result["proposer_params"]["proposal_interval"],
116+
),
111117
mev_params=struct(
112118
rollup_boost_image=result["mev_params"]["rollup_boost_image"],
113119
builder_host=result["mev_params"]["builder_host"],
@@ -146,6 +152,9 @@ def parse_network_params(plan, input_args):
146152
batcher_params = default_batcher_params()
147153
batcher_params.update(chain.get("batcher_params", {}))
148154

155+
proposer_params = default_proposer_params()
156+
proposer_params.update(chain.get("proposer_params", {}))
157+
149158
mev_params = default_mev_params()
150159
mev_params.update(chain.get("mev_params", {}))
151160

@@ -221,6 +230,7 @@ def parse_network_params(plan, input_args):
221230
"participants": participants,
222231
"network_params": network_params,
223232
"batcher_params": batcher_params,
233+
"proposer_params": proposer_params,
224234
"mev_params": mev_params,
225235
"additional_services": chain.get(
226236
"additional_services", DEFAULT_ADDITIONAL_SERVICES
@@ -263,6 +273,7 @@ def default_chains():
263273
"participants": [default_participant()],
264274
"network_params": default_network_params(),
265275
"batcher_params": default_batcher_params(),
276+
"proposer_params": default_proposer_params(),
266277
"mev_params": default_mev_params(),
267278
"additional_services": DEFAULT_ADDITIONAL_SERVICES,
268279
}
@@ -291,6 +302,15 @@ def default_batcher_params():
291302
}
292303

293304

305+
def default_proposer_params():
306+
return {
307+
"image": "",
308+
"extra_params": [],
309+
"game_type": 1,
310+
"proposal_interval": "10m",
311+
}
312+
313+
294314
def default_participant():
295315
return {
296316
"el_type": "op-geth",

src/package_io/sanity_check.star

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,7 @@ SUBCATEGORY_PARAMS = {
4848
"fund_dev_accounts",
4949
],
5050
"batcher_params": ["image", "extra_params"],
51+
"proposer_params": ["image", "extra_params", "game_type", "proposal_interval"],
5152
"mev_params": ["rollup_boost_image", "builder_host", "builder_port"],
5253
}
5354

src/participant_network.star

Lines changed: 30 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -12,9 +12,11 @@ def launch_participant_network(
1212
jwt_file,
1313
network_params,
1414
batcher_params,
15+
proposer_params,
1516
mev_params,
1617
deployment_output,
1718
l1_config_env_vars,
19+
l2_num,
1820
l2_services_suffix,
1921
global_log_level,
2022
global_node_selectors,
@@ -58,25 +60,17 @@ def launch_participant_network(
5860

5961
all_participants.append(participant_entry)
6062

61-
proposer_key = util.read_network_config_value(
62-
plan,
63-
deployment_output,
64-
"proposer-{0}".format(network_params.network_id),
65-
".privateKey",
66-
)
6763
batcher_key = util.read_network_config_value(
6864
plan,
6965
deployment_output,
7066
"batcher-{0}".format(network_params.network_id),
7167
".privateKey",
7268
)
73-
7469
op_batcher_image = (
7570
batcher_params.image
7671
if batcher_params.image != ""
7772
else input_parser.DEFAULT_BATCHER_IMAGES["op-batcher"]
7873
)
79-
8074
op_batcher_launcher.launch(
8175
plan,
8276
"op-batcher-{0}".format(l2_services_suffix),
@@ -88,15 +82,33 @@ def launch_participant_network(
8882
batcher_params,
8983
)
9084

91-
# The OP Stack don't run the proposer anymore, it has been replaced with the challenger
92-
# op_proposer_launcher.launch(
93-
# plan,
94-
# "op-proposer{0}".format(l2_services_suffix),
95-
# input_parser.DEFAULT_PROPOSER_IMAGES["op-proposer"],
96-
# all_cl_contexts[0],
97-
# l1_config_env_vars,
98-
# gs_private_keys["GS_PROPOSER_PRIVATE_KEY"],
99-
# l2oo_address,
100-
# )
85+
game_factory_address = util.read_network_config_value(
86+
plan,
87+
deployment_output,
88+
"state",
89+
".opChainDeployments[{0}].disputeGameFactoryProxyAddress".format(l2_num),
90+
)
91+
92+
proposer_key = util.read_network_config_value(
93+
plan,
94+
deployment_output,
95+
"proposer-{0}".format(network_params.network_id),
96+
".privateKey",
97+
)
98+
op_proposer_image = (
99+
proposer_params.image
100+
if proposer_params.image != ""
101+
else input_parser.DEFAULT_PROPOSER_IMAGES["op-proposer"]
102+
)
103+
op_proposer_launcher.launch(
104+
plan,
105+
"op-proposer-{0}".format(l2_services_suffix),
106+
op_proposer_image,
107+
all_cl_contexts[0],
108+
l1_config_env_vars,
109+
proposer_key,
110+
game_factory_address,
111+
proposer_params,
112+
)
101113

102114
return all_participants

src/proposer/op-proposer/op_proposer_launcher.star

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,8 @@ def launch(
3939
cl_context,
4040
l1_config_env_vars,
4141
gs_proposer_private_key,
42-
l2oo_address,
42+
game_factory_address,
43+
proposer_params,
4344
):
4445
proposer_service_name = "{0}".format(service_name)
4546

@@ -50,7 +51,8 @@ def launch(
5051
cl_context,
5152
l1_config_env_vars,
5253
gs_proposer_private_key,
53-
l2oo_address,
54+
game_factory_address,
55+
proposer_params,
5456
)
5557

5658
proposer_service = plan.add_service(service_name, config)
@@ -70,18 +72,25 @@ def get_proposer_config(
7072
cl_context,
7173
l1_config_env_vars,
7274
gs_proposer_private_key,
73-
l2oo_address,
75+
game_factory_address,
76+
proposer_params,
7477
):
7578
cmd = [
7679
"op-proposer",
7780
"--poll-interval=12s",
7881
"--rpc.port=" + str(PROPOSER_HTTP_PORT_NUM),
7982
"--rollup-rpc=" + cl_context.beacon_http_url,
80-
"--l2oo-address=" + str(l2oo_address),
83+
"--game-factory-address=" + str(game_factory_address),
8184
"--private-key=" + gs_proposer_private_key,
8285
"--l1-eth-rpc=" + l1_config_env_vars["L1_RPC_URL"],
86+
"--allow-non-finalized=true",
87+
"--game-type={0}".format(proposer_params.game_type),
88+
"--proposal-interval=" + proposer_params.proposal_interval,
89+
"--wait-node-sync=true",
8390
]
8491

92+
cmd += proposer_params.extra_params
93+
8594
ports = get_used_ports()
8695
return ServiceConfig(
8796
image=image,

0 commit comments

Comments
 (0)