diff --git a/main.star b/main.star index 0314aced..66baba2f 100644 --- a/main.star +++ b/main.star @@ -82,9 +82,10 @@ def run(plan, args): l1_network, ) - for chain in optimism_args_with_right_defaults.chains: + for l2_num, chain in enumerate(optimism_args_with_right_defaults.chains): l2_launcher.launch_l2( plan, + l2_num, chain.network_params.name, chain, deployment_output, @@ -97,8 +98,6 @@ def run(plan, args): persistent, ) - return - def get_l1_config(all_l1_participants, l1_network_params, l1_network_id): env_vars = {} diff --git a/src/l2.star b/src/l2.star index bc1d49f6..5d6acf82 100644 --- a/src/l2.star +++ b/src/l2.star @@ -10,6 +10,7 @@ util = import_module("./util.star") def launch_l2( plan, + l2_num, l2_services_suffix, l2_args, deployment_output, @@ -23,6 +24,7 @@ def launch_l2( ): network_params = l2_args.network_params batcher_params = l2_args.batcher_params + proposer_params = l2_args.proposer_params mev_params = l2_args.mev_params plan.print("Deploying L2 with name {0}".format(network_params.name)) @@ -37,9 +39,11 @@ def launch_l2( jwt_file, network_params, batcher_params, + proposer_params, mev_params, deployment_output, l1_config, + l2_num, l2_services_suffix, global_log_level, global_node_selectors, diff --git a/src/package_io/input_parser.star b/src/package_io/input_parser.star index 4dcac8d7..96772577 100644 --- a/src/package_io/input_parser.star +++ b/src/package_io/input_parser.star @@ -108,6 +108,12 @@ def input_parser(plan, input_args): image=result["batcher_params"]["image"], extra_params=result["batcher_params"]["extra_params"], ), + proposer_params=struct( + image=result["proposer_params"]["image"], + extra_params=result["proposer_params"]["extra_params"], + game_type=result["proposer_params"]["game_type"], + proposal_interval=result["proposer_params"]["proposal_interval"], + ), mev_params=struct( rollup_boost_image=result["mev_params"]["rollup_boost_image"], builder_host=result["mev_params"]["builder_host"], @@ -146,6 +152,9 @@ def parse_network_params(plan, input_args): batcher_params = default_batcher_params() batcher_params.update(chain.get("batcher_params", {})) + proposer_params = default_proposer_params() + proposer_params.update(chain.get("proposer_params", {})) + mev_params = default_mev_params() mev_params.update(chain.get("mev_params", {})) @@ -221,6 +230,7 @@ def parse_network_params(plan, input_args): "participants": participants, "network_params": network_params, "batcher_params": batcher_params, + "proposer_params": proposer_params, "mev_params": mev_params, "additional_services": chain.get( "additional_services", DEFAULT_ADDITIONAL_SERVICES @@ -263,6 +273,7 @@ def default_chains(): "participants": [default_participant()], "network_params": default_network_params(), "batcher_params": default_batcher_params(), + "proposer_params": default_proposer_params(), "mev_params": default_mev_params(), "additional_services": DEFAULT_ADDITIONAL_SERVICES, } @@ -291,6 +302,15 @@ def default_batcher_params(): } +def default_proposer_params(): + return { + "image": "", + "extra_params": [], + "game_type": 1, + "proposal_interval": "10m", + } + + def default_participant(): return { "el_type": "op-geth", diff --git a/src/package_io/sanity_check.star b/src/package_io/sanity_check.star index 47dde6ec..68a38ac1 100644 --- a/src/package_io/sanity_check.star +++ b/src/package_io/sanity_check.star @@ -48,6 +48,7 @@ SUBCATEGORY_PARAMS = { "fund_dev_accounts", ], "batcher_params": ["image", "extra_params"], + "proposer_params": ["image", "extra_params", "game_type", "proposal_interval"], "mev_params": ["rollup_boost_image", "builder_host", "builder_port"], } diff --git a/src/participant_network.star b/src/participant_network.star index f4fc3269..824263ab 100644 --- a/src/participant_network.star +++ b/src/participant_network.star @@ -12,9 +12,11 @@ def launch_participant_network( jwt_file, network_params, batcher_params, + proposer_params, mev_params, deployment_output, l1_config_env_vars, + l2_num, l2_services_suffix, global_log_level, global_node_selectors, @@ -58,25 +60,17 @@ def launch_participant_network( all_participants.append(participant_entry) - proposer_key = util.read_network_config_value( - plan, - deployment_output, - "proposer-{0}".format(network_params.network_id), - ".privateKey", - ) batcher_key = util.read_network_config_value( plan, deployment_output, "batcher-{0}".format(network_params.network_id), ".privateKey", ) - op_batcher_image = ( batcher_params.image if batcher_params.image != "" else input_parser.DEFAULT_BATCHER_IMAGES["op-batcher"] ) - op_batcher_launcher.launch( plan, "op-batcher-{0}".format(l2_services_suffix), @@ -88,15 +82,33 @@ def launch_participant_network( batcher_params, ) - # The OP Stack don't run the proposer anymore, it has been replaced with the challenger - # op_proposer_launcher.launch( - # plan, - # "op-proposer{0}".format(l2_services_suffix), - # input_parser.DEFAULT_PROPOSER_IMAGES["op-proposer"], - # all_cl_contexts[0], - # l1_config_env_vars, - # gs_private_keys["GS_PROPOSER_PRIVATE_KEY"], - # l2oo_address, - # ) + game_factory_address = util.read_network_config_value( + plan, + deployment_output, + "state", + ".opChainDeployments[{0}].disputeGameFactoryProxyAddress".format(l2_num), + ) + + proposer_key = util.read_network_config_value( + plan, + deployment_output, + "proposer-{0}".format(network_params.network_id), + ".privateKey", + ) + op_proposer_image = ( + proposer_params.image + if proposer_params.image != "" + else input_parser.DEFAULT_PROPOSER_IMAGES["op-proposer"] + ) + op_proposer_launcher.launch( + plan, + "op-proposer-{0}".format(l2_services_suffix), + op_proposer_image, + all_cl_contexts[0], + l1_config_env_vars, + proposer_key, + game_factory_address, + proposer_params, + ) return all_participants diff --git a/src/proposer/op-proposer/op_proposer_launcher.star b/src/proposer/op-proposer/op_proposer_launcher.star index 6b3078d4..c12fb34b 100644 --- a/src/proposer/op-proposer/op_proposer_launcher.star +++ b/src/proposer/op-proposer/op_proposer_launcher.star @@ -39,7 +39,8 @@ def launch( cl_context, l1_config_env_vars, gs_proposer_private_key, - l2oo_address, + game_factory_address, + proposer_params, ): proposer_service_name = "{0}".format(service_name) @@ -50,7 +51,8 @@ def launch( cl_context, l1_config_env_vars, gs_proposer_private_key, - l2oo_address, + game_factory_address, + proposer_params, ) proposer_service = plan.add_service(service_name, config) @@ -70,18 +72,25 @@ def get_proposer_config( cl_context, l1_config_env_vars, gs_proposer_private_key, - l2oo_address, + game_factory_address, + proposer_params, ): cmd = [ "op-proposer", "--poll-interval=12s", "--rpc.port=" + str(PROPOSER_HTTP_PORT_NUM), "--rollup-rpc=" + cl_context.beacon_http_url, - "--l2oo-address=" + str(l2oo_address), + "--game-factory-address=" + str(game_factory_address), "--private-key=" + gs_proposer_private_key, "--l1-eth-rpc=" + l1_config_env_vars["L1_RPC_URL"], + "--allow-non-finalized=true", + "--game-type={0}".format(proposer_params.game_type), + "--proposal-interval=" + proposer_params.proposal_interval, + "--wait-node-sync=true", ] + cmd += proposer_params.extra_params + ports = get_used_ports() return ServiceConfig( image=image,