From 8292b26f34ed03d304549b0e8a763e2c25896977 Mon Sep 17 00:00:00 2001 From: Simon Paitrault Date: Tue, 15 Oct 2024 10:41:26 +0200 Subject: [PATCH] feature: adding agglayer-prover Signed-off-by: Simon Paitrault --- agglayer.star | 109 +++++++++++++----- input_parser.star | 6 +- templates/bridge-infra/agglayer-config.toml | 82 ++++++++----- .../bridge-infra/agglayer-prover-config.toml | 21 ++++ 4 files changed, 162 insertions(+), 56 deletions(-) create mode 100644 templates/bridge-infra/agglayer-prover-config.toml diff --git a/agglayer.star b/agglayer.star index 188c54c6..2b707890 100644 --- a/agglayer.star +++ b/agglayer.star @@ -10,38 +10,72 @@ def run(plan, args): agglayer_config_artifact = create_agglayer_config_artifact( plan, args, contract_setup_addresses, db_configs ) - + agglayer_prover_config_artifact = create_agglayer_prover_config_artifact(plan, args) agglayer_keystore_artifact = plan.store_service_files( name="agglayer-keystore", service_name="contracts" + args["deployment_suffix"], src="/opt/zkevm/agglayer.keystore", ) + prover = plan.add_service( + name = "agglayer-prover", + config = create_agglayer_prover_config(args, agglayer_prover_config_artifact), + description="AggLayer Prover", + ) + plan.add_service( - name="agglayer", - config=ServiceConfig( - image=args["agglayer_image"], - ports={ - "agglayer": PortSpec( - args["agglayer_port"], application_protocol="http" - ), - "prometheus": PortSpec( - args["prometheus_port"], application_protocol="http" - ), - }, - files={ - "/etc/zkevm": Directory( - artifact_names=[ - agglayer_config_artifact, - agglayer_keystore_artifact, - ] - ), - }, - entrypoint=[ - "/usr/local/bin/agglayer", - ], - cmd=["run", "--cfg", "/etc/zkevm/agglayer-config.toml"], - ), + name = "agglayer", + config = create_agglayer_config(args, agglayer_config_artifact, agglayer_keystore_artifact), + description="AggLayer", + ) + +def create_agglayer_prover_config(args, agglayer_prover_config_artifact): + return ServiceConfig( + image=args["agglayer_image"], + ports={ + "api": PortSpec( + args["agglayer_prover_port"], application_protocol="grpc" + ), + "prometheus": PortSpec( + args["agglayer_prover_metrics_port"], application_protocol="http" + ), + }, + files={ + "/etc/zkevm": Directory( + artifact_names=[ + agglayer_prover_config_artifact, + ] + ), + }, + entrypoint=[ + "/usr/local/bin/agglayer", + ], + cmd=["prover", "--cfg", "/etc/zkevm/agglayer-prover-config.toml"], + ) + +def create_agglayer_config(args, agglayer_config_artifact, agglayer_keystore_artifact): + return ServiceConfig( + image=args["agglayer_image"], + ports={ + "agglayer": PortSpec( + args["agglayer_port"], application_protocol="http" + ), + "prometheus": PortSpec( + args["agglayer_metrics_port"], application_protocol="http" + ), + }, + files={ + "/etc/zkevm": Directory( + artifact_names=[ + agglayer_config_artifact, + agglayer_keystore_artifact, + ] + ), + }, + entrypoint=[ + "/usr/local/bin/agglayer", + ], + cmd=["run", "--cfg", "/etc/zkevm/agglayer-config.toml"], ) @@ -68,7 +102,8 @@ def create_agglayer_config_artifact(plan, args, contract_setup_addresses, db_con # ports "zkevm_rpc_http_port": args["zkevm_rpc_http_port"], "agglayer_port": args["agglayer_port"], - "prometheus_port": args["prometheus_port"], + "agglayer_prover_entrypoint": "http://agglayer-prover:{}".format(args["agglayer_prover_port"]), + "prometheus_port": args["agglayer_metrics_port"], "l2_rpc_name": args["l2_rpc_name"], } | contract_setup_addresses @@ -76,3 +111,25 @@ def create_agglayer_config_artifact(plan, args, contract_setup_addresses, db_con ) }, ) + +def create_agglayer_prover_config_artifact(plan, args): + agglayer_prover_config_template = read_file( + src="./templates/bridge-infra/agglayer-prover-config.toml" + ) + return plan.render_templates( + name="agglayer-prover-config-artifact", + config={ + "agglayer-prover-config.toml": struct( + template=agglayer_prover_config_template, + # TODO: Organize those args. + data={ + "deployment_suffix": args["deployment_suffix"], + "global_log_level": args["global_log_level"], + + # ports + "agglayer_prover_port": args["agglayer_prover_port"], + "prometheus_port": args["agglayer_prover_metrics_port"], + } + ) + }, + ) diff --git a/input_parser.star b/input_parser.star index 31bdf273..6ffa0e40 100644 --- a/input_parser.star +++ b/input_parser.star @@ -26,7 +26,8 @@ DEFAULT_DEPLOYMENT_STAGES = { } DEFAULT_IMAGES = { - "agglayer_image": "ghcr.io/agglayer/agglayer-rs:pr-96", # https://github.com/agglayer/agglayer/pkgs/container/agglayer-rs + # "agglayer_image": "ghcr.io/agglayer/agglayer-rs:pr-96", # https://github.com/agglayer/agglayer/pkgs/container/agglayer-rs + "agglayer_image": "local-agglayer", "cdk_erigon_node_image": "hermeznetwork/cdk-erigon:d930066", # https://hub.docker.com/r/hermeznetwork/cdk-erigon/tags "cdk_node_image": "ghcr.io/0xpolygon/cdk:0.3.0-rc1", # https://github.com/0xpolygon/cdk/pkgs/container/cdk "cdk_validium_node_image": "0xpolygon/cdk-validium-node:0.7.0-cdk", # https://hub.docker.com/r/0xpolygon/cdk-validium-node/tags @@ -43,6 +44,9 @@ DEFAULT_IMAGES = { DEFAULT_PORTS = { "agglayer_port": 4444, + "agglayer_prover_port": 4445, + "agglayer_metrics_port": 9092, + "agglayer_prover_metrics_port": 9093, "prometheus_port": 9091, "zkevm_aggregator_port": 50081, "zkevm_bridge_grpc_port": 9090, diff --git a/templates/bridge-infra/agglayer-config.toml b/templates/bridge-infra/agglayer-config.toml index 50565adc..c934e15d 100644 --- a/templates/bridge-infra/agglayer-config.toml +++ b/templates/bridge-infra/agglayer-config.toml @@ -1,37 +1,61 @@ -[FullNodeRPCs] +prover-entrypoint = "{{.agglayer_prover_entrypoint}}" + +[full-node-rpcs] # TODO switch this to permissionless 1 = "http://{{.l2_rpc_name}}{{.deployment_suffix}}:{{.zkevm_rpc_http_port}}" -[ProofSigners] +[proof-signers] 1 = "{{.zkevm_l2_sequencer_address}}" -[RPC] -Host = "0.0.0.0" -Port = {{.agglayer_port}} -ReadTimeout = "60s" -WriteTimeout = "60s" -MaxRequestsPerIPAndSecond = 5000 - -[Log] -Environment = "production" # "production" or "development" -Level = "{{.global_log_level}}" -Outputs = ["stderr"] - -[EthTxManager] -FrequencyToMonitorTxs = "1s" -WaitTxToBeMined = "2m" -ForcedGas = 0 -GasPriceMarginFactor = 1 -MaxGasPriceLimit = 0 -PrivateKeys = [ - {Path = "/etc/zkevm/agglayer.keystore", Password = "{{.zkevm_l2_keystore_password}}"}, +[rpc] +port = {{.agglayer_port}} +host = "0.0.0.0" +request-timeout = 180 + +[outbound.rpc.settle] +max-retries = 3 +retry-interval = 7 +confirmations = 1 +settlement-timeout = 1200 + +[log] +level = "{{.global_log_level}}" +outputs = ["stderr"] +format = "pretty" + +[auth.local] +private-keys = [ + { path = "/etc/zkevm/agglayer.keystore", password = "{{.zkevm_l2_keystore_password}}" }, ] -KMSKeyName = "" # Disable for local -[L1] -ChainID = {{.l1_chain_id}} -NodeURL = "{{.l1_rpc_url}}" -RollupManagerContract = "{{.zkevm_rollup_manager_address}}" +[l1] +chain-id = {{.l1_chain_id}} +node-url = "{{.l1_rpc_url}}" +rollup-manager-contract = "{{.zkevm_rollup_manager_address}}" +rpc-timeout = 45 + + +[l2] +rpc-timeout = 45 + +[telemetry] +prometheus-addr = "0.0.0.0:{{.prometheus_port}}" + +[rate-limiting] +send-tx = "unlimited" + +[rate-limiting.network] + +[epoch.time-clock] +epoch-duration = 5 + +[shutdown] +runtime-timeout = 5 + +[certificate-orchestrator] +input-backpressure-buffer-size = 1000 + +[certificate-orchestrator.prover.sp1-local] -[Telemetry] -PrometheusAddr = "0.0.0.0:{{.prometheus_port}}" +[storage] +db-path = "/etc/zkevm/storage" diff --git a/templates/bridge-infra/agglayer-prover-config.toml b/templates/bridge-infra/agglayer-prover-config.toml new file mode 100644 index 00000000..b9ac3675 --- /dev/null +++ b/templates/bridge-infra/agglayer-prover-config.toml @@ -0,0 +1,21 @@ +grpc-endpoint = "0.0.0.0:{{ .agglayer_prover_port }}" +max-concurrency-limit = 100 +max-request-duration = 300 +max-buffered-queries = 100 + +[Log] +Environment = "production" # "production" or "development" +Level = "{{.global_log_level}}" +Outputs = ["stderr"] +Format = "json" + +[Telemetry] +PrometheusAddr = "0.0.0.0:{{.prometheus_port}}" + +[cpu-prover] +max-concurrency-limit = 100 +proving-timeout = 300 + +[network-prover] +enabled = false +proving-timeout = 300