Skip to content

Commit

Permalink
chore: add a challenger 'enabled' flag to make its deployment optional (
Browse files Browse the repository at this point in the history
#165)

challenger and its dependency (building the op-program cannon preimage)
take a long time to build in op's monorepo.

This change is a first step in being able to disable the challenger when
not needed. Will need to figure out a way to also make the cannon
preimage building optional from op's repo.
  • Loading branch information
samlaf authored Feb 18, 2025
1 parent 1fbe3ea commit 5ee6561
Show file tree
Hide file tree
Showing 7 changed files with 129 additions and 22 deletions.
3 changes: 3 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -371,6 +371,9 @@ optimism_package:

# Default challenger configuration
challenger_params:
# Whether or not to enable the challenger
enabled: true

# The Docker image that should be used for the challenger; leave blank to use the default op-challenger image
image: ""

Expand Down
29 changes: 15 additions & 14 deletions main.star
Original file line number Diff line number Diff line change
Expand Up @@ -147,20 +147,21 @@ def run(plan, args):
if chain.challenger_params.image != ""
else input_parser.DEFAULT_CHALLENGER_IMAGES["op-challenger"]
)
op_challenger_launcher.launch(
plan,
l2_num,
"op-challenger-{0}".format(chain.network_params.name),
chain.challenger_params.image,
l2.participants[0].el_context,
l2.participants[0].cl_context,
l1_config_env_vars,
deployment_output,
chain.network_params,
chain.challenger_params,
interop_params,
observability_helper,
)
if chain.challenger_params.enabled:
op_challenger_launcher.launch(
plan,
l2_num,
"op-challenger-{0}".format(chain.network_params.name),
chain.challenger_params.image,
l2.participants[0].el_context,
l2.participants[0].cl_context,
l1_config_env_vars,
deployment_output,
chain.network_params,
chain.challenger_params,
interop_params,
observability_helper,
)

if observability_helper.enabled and len(observability_helper.metrics_jobs) > 0:
plan.print("Launching prometheus...")
Expand Down
3 changes: 3 additions & 0 deletions network_params.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,9 @@ optimism_package:
fund_dev_accounts: true
batcher_params:
extra_params: []
challenger_params:
enabled: true
extra_params: []
mev_params:
builder_host: ""
builder_port: ""
Expand Down
10 changes: 6 additions & 4 deletions src/package_io/input_parser.star
Original file line number Diff line number Diff line change
Expand Up @@ -205,6 +205,7 @@ def input_parser(plan, input_args):
extra_params=result["batcher_params"]["extra_params"],
),
challenger_params=struct(
enabled=result["challenger_params"]["enabled"],
image=result["challenger_params"]["image"],
extra_params=result["challenger_params"]["extra_params"],
cannon_prestate_path=result["challenger_params"][
Expand Down Expand Up @@ -302,12 +303,12 @@ def parse_network_params(plan, input_args):
batcher_params = default_batcher_params()
batcher_params.update(chain.get("batcher_params", {}))

challenger_params = default_challenger_params()
challenger_params.update(chain.get("challenger_params", {}))

proposer_params = default_proposer_params()
proposer_params.update(chain.get("proposer_params", {}))

challenger_params = default_challenger_params()
challenger_params.update(chain.get("challenger_params", {}))

mev_params = default_mev_params()
mev_params.update(chain.get("mev_params", {}))
da_server_params = default_da_server_params()
Expand Down Expand Up @@ -491,8 +492,8 @@ def default_chains():
"participants": [default_participant()],
"network_params": default_network_params(),
"batcher_params": default_batcher_params(),
"challenger_params": default_challenger_params(),
"proposer_params": default_proposer_params(),
"challenger_params": default_challenger_params(),
"mev_params": default_mev_params(),
"da_server_params": default_da_server_params(),
"additional_services": DEFAULT_ADDITIONAL_SERVICES,
Expand Down Expand Up @@ -524,6 +525,7 @@ def default_batcher_params():

def default_challenger_params():
return {
"enabled": True,
"image": DEFAULT_CHALLENGER_IMAGES["op-challenger"],
"extra_params": [],
"cannon_prestate_path": "",
Expand Down
3 changes: 2 additions & 1 deletion src/package_io/sanity_check.star
Original file line number Diff line number Diff line change
Expand Up @@ -93,14 +93,15 @@ SUBCATEGORY_PARAMS = {
"fund_dev_accounts",
],
"batcher_params": ["image", "extra_params"],
"proposer_params": ["image", "extra_params", "game_type", "proposal_interval"],
"challenger_params": [
"enabled",
"image",
"extra_params",
"cannon_prestate_path",
"cannon_prestates_url",
"cannon_trace_types",
],
"proposer_params": ["image", "extra_params", "game_type", "proposal_interval"],
"mev_params": ["rollup_boost_image", "builder_host", "builder_port"],
"da_server_params": [
"image",
Expand Down
6 changes: 3 additions & 3 deletions test/el_cl_launcher_test.star
Original file line number Diff line number Diff line change
Expand Up @@ -69,7 +69,7 @@ def test_launch_with_defaults(plan):
)

el_service_name = "op-el-1-op-reth-op-node-"
el_sevice = plan.get_service(el_service_name)
el_service = plan.get_service(el_service_name)

cl_service_config = kurtosistest.get_service_config(
service_name="op-cl-1-op-node-op-reth-"
Expand All @@ -83,7 +83,7 @@ def test_launch_with_defaults(plan):
"op-node",
"--log.level=INFO",
"--l2=http://{0}:{1}".format(
el_sevice.ip_address, el_sevice.ports["engine-rpc"].number
el_service.ip_address, el_service.ports["engine-rpc"].number
),
"--l2.jwt-secret=/jwt/jwtsecret",
"--verifier.l1-confs=1",
Expand Down Expand Up @@ -143,7 +143,7 @@ def test_launch_with_defaults(plan):
"--nat=extip:{0}".format(
ethereum_package_constants.PRIVATE_IP_ADDRESS_PLACEHOLDER
),
"--authrpc.port={0}".format(el_sevice.ports["engine-rpc"].number),
"--authrpc.port={0}".format(el_service.ports["engine-rpc"].number),
"--authrpc.jwtsecret=/jwt/jwtsecret",
"--authrpc.addr=0.0.0.0",
"--discovery.port=30303",
Expand Down
97 changes: 97 additions & 0 deletions test/op_challenger_launcher_test.star
Original file line number Diff line number Diff line change
@@ -0,0 +1,97 @@
op_challenger_launcher = import_module(
"/src/challenger/op-challenger/op_challenger_launcher.star"
)
input_parser = import_module("/src/package_io/input_parser.star")
observability = import_module("/src/observability/observability.star")
ethereum_package_constants = import_module(
"github.com/ethpandaops/ethereum-package/src/package_io/constants.star"
)
util = import_module("/src/util.star")


def test_launch_with_defaults(plan):
parsed_input_args = input_parser.input_parser(
plan,
{
"chains": [
{
"participants": [
{
"el_type": "op-reth",
"el_image": "op-reth:latest",
"cl_type": "op-node",
"cl_image": "op-node:latest",
}
],
"challenger_params": {
"enabled": False,
},
}
]
},
)

el_context = struct(
rpc_http_url="rpc_http_url",
)
cl_context = struct(
beacon_http_url="beacon_http_url",
)
# el_context, cl_context = launch_test_el_cl(plan, parsed_input_args)

observability_helper = observability.make_helper(parsed_input_args.observability)

chains = parsed_input_args.chains
chain = chains[0]
l2_num = 0
challenger_service_name = "op-challenger"
challenger_image = input_parser.DEFAULT_CHALLENGER_IMAGES["op-challenger"]

deployment_output = "/path/to/deployment_output"
l1_config_env_vars = {
"L1_RPC_URL": "L1_RPC_URL",
"L1_RPC_KIND": "standard",
"CL_RPC_URL": "CL_RPC_URL",
}

# We'll mock read_network_config_value since it returns a runtime value that we would not be able to retrieve
dispute_game_factory_mock = "dispute_game_factory"
kurtosistest.mock(util, "read_network_config_value").mock_return_value(
dispute_game_factory_mock
)
challenger_private_key_mock = "challenger_private_key"
kurtosistest.mock(util, "read_network_config_value").mock_return_value(
challenger_private_key_mock
)

op_challenger_launcher.launch(
plan=plan,
l2_num=l2_num,
service_name=challenger_service_name,
image=challenger_image,
el_context=el_context,
cl_context=cl_context,
l1_config_env_vars=l1_config_env_vars,
deployment_output=deployment_output,
network_params=chain.network_params,
challenger_params=chain.challenger_params,
interop_params=parsed_input_args.interop,
observability_helper=observability_helper,
)

challenger_service_config = kurtosistest.get_service_config(
service_name=challenger_service_name
)
expect.ne(challenger_service_config, None)
expect.eq(challenger_service_config.image, challenger_image)
expect.eq(challenger_service_config.env_vars, {})
expect.eq(
challenger_service_config.entrypoint,
["sh", "-c"],
)
expect.eq(
challenger_service_config.cmd,
[
"mkdir -p /data/op-challenger/op-challenger-data && op-challenger --cannon-l2-genesis=/network-configs/genesis-2151908.json --cannon-rollup-config=/network-configs/rollup-2151908.json --game-factory-address=challenger_private_key --datadir=/data/op-challenger/op-challenger-data --l1-beacon=CL_RPC_URL --l1-eth-rpc=L1_RPC_URL --l2-eth-rpc=rpc_http_url --private-key=challenger_private_key --rollup-rpc=beacon_http_url --trace-type=cannon,permissioned --metrics.enabled --metrics.addr=0.0.0.0 --metrics.port=9001 --cannon-prestates-url=https://storage.googleapis.com/oplabs-network-data/proofs/op-program/cannon"
],
)

0 comments on commit 5ee6561

Please sign in to comment.