diff --git a/databases.star b/databases.star index c5857e32..bc660a9b 100644 --- a/databases.star +++ b/databases.star @@ -34,6 +34,11 @@ TRUSTED_DATABASES = { "user": "pool_user", "password": "redacted", }, + "pool_manager_db": { + "name": "pool_manager_db", + "user": "pool_manager_user", + "password": "redacted", + }, "prover_db": { "name": "prover_db", "user": "prover_user", diff --git a/input_parser.star b/input_parser.star index 3c6060fc..5fdec319 100644 --- a/input_parser.star +++ b/input_parser.star @@ -16,6 +16,7 @@ DEFAULT_ARGS = { "zkevm_sequence_sender_image": "hermeznetwork/zkevm-sequence-sender:v0.2.0-RC4", "cdk_erigon_node_image": "hermeznetwork/cdk-erigon:2.0.0-beta13", "toolbox_image": "leovct/toolbox:0.0.1", + "zkevm_pool_manager_image": "hermeznetwork/zkevm-pool-manager:v0.1.0-RC1", "zkevm_hash_db_port": 50061, "zkevm_executor_port": 50071, "zkevm_aggregator_port": 50081, @@ -29,6 +30,7 @@ DEFAULT_ARGS = { "zkevm_bridge_ui_port": 80, "zkevm_agglayer_port": 4444, "zkevm_dac_port": 8484, + "zkevm_pool_manager_port": 8545, "blockscout_public_port": 50101, # IANA registered ports up to 49151 "zkevm_l2_sequencer_address": "0x5b06837A43bdC3dD9F114558DAf4B26ed49842Ed", "zkevm_l2_sequencer_private_key": "0x183c492d0ba156041a7f31a1b188958a7a22eebadca741a7fe64436092dc3181", diff --git a/kurtosis.yml b/kurtosis.yml index 688b5594..afb1eb70 100644 --- a/kurtosis.yml +++ b/kurtosis.yml @@ -60,6 +60,7 @@ description: |- zkevm_sequence_sender_image: hermeznetwork/zkevm-sequence-sender:v0.2.0-RC4 cdk_erigon_node_image: hermeznetwork/cdk-erigon:2.0.0-beta13 toolbox_image: leovct/toolbox:0.0.1 + zkevm_pool_manager_image: hermeznetwork/zkevm-pool-manager:v0.1.0-RC1 # Port configuration. zkevm_hash_db_port: 50061 @@ -75,6 +76,7 @@ description: |- zkevm_bridge_ui_port: 80 zkevm_agglayer_port: 4444 zkevm_dac_port: 8484 + zkevm_pool_manager_port: 8545 blockscout_public_port: 50101 # Addresses and private keys of the different components. diff --git a/lib/zkevm_pool_manager.star b/lib/zkevm_pool_manager.star new file mode 100644 index 00000000..e701ea91 --- /dev/null +++ b/lib/zkevm_pool_manager.star @@ -0,0 +1,19 @@ +def create_zkevm_pool_manager_service_config(args, config_artifact): + zkevm_pool_manager_service_name = "zkevm-pool-manager" + args["deployment_suffix"] + zkevm_pool_manager_service_config = ServiceConfig( + image=args["zkevm_pool_manager_image"], + ports={ + "http": PortSpec( + args["zkevm_pool_manager_port"], application_protocol="http" + ), + }, + files={ + "/etc/pool-manager": Directory(artifact_names=[config_artifact]), + }, + entrypoint=["/bin/sh", "-c"], + # cmd=["run", "--cfg", "/app/pool-manager-config.toml"], + cmd=[ + "/app/zkevm-pool-manager run --cfg /etc/pool-manager/pool-manager-config.toml", + ], + ) + return {zkevm_pool_manager_service_name: zkevm_pool_manager_service_config} diff --git a/main.star b/main.star index 76c80ff5..59d1c4f2 100644 --- a/main.star +++ b/main.star @@ -10,6 +10,7 @@ blockscout_package = "./blockscout.star" workload_package = "./workload.star" blutgang_package = "./cdk_blutgang.star" cdk_erigon_package = import_module("./cdk_erigon.star") +zkevm_pool_manager_package = import_module("./zkevm_pool_manager.star") def run( @@ -117,6 +118,13 @@ def run( else: plan.print("Skipping the deployment of cdk-erigon node") + # Deploy zkevm-pool-manager service. + if deploy_cdk_erigon_node: + plan.print("Deploying zkevm-pool-manager service") + zkevm_pool_manager_package.run_zkevm_pool_manager(plan, args) + else: + plan.print("Skipping the deployment of zkevm-pool-manager service") + plan.print("Deploying cdk central/trusted environment") central_environment_args = dict(args) central_environment_args["genesis_artifact"] = genesis_artifact diff --git a/params.yml b/params.yml index f703ebab..f4aad73a 100644 --- a/params.yml +++ b/params.yml @@ -72,6 +72,7 @@ args: zkevm_sequence_sender_image: "hermeznetwork/zkevm-sequence-sender:v0.2.0-RC4" cdk_erigon_node_image: hermeznetwork/cdk-erigon:2.0.0-beta13 toolbox_image: leovct/toolbox:0.0.1 + zkevm_pool_manager_image: hermeznetwork/zkevm-pool-manager:v0.1.0-RC1 # Port configuration. zkevm_hash_db_port: 50061 @@ -87,6 +88,7 @@ args: zkevm_bridge_ui_port: 80 zkevm_agglayer_port: 4444 zkevm_dac_port: 8484 + zkevm_pool_manager_port: 8545 blockscout_public_port: 50101 # Addresses and private keys of the different components. diff --git a/scripts/reset_postgres.sh b/scripts/reset_postgres.sh index 125017a7..118e7af4 100755 --- a/scripts/reset_postgres.sh +++ b/scripts/reset_postgres.sh @@ -8,8 +8,8 @@ # 2. update PGPASSWORD, PGUSER, and PGHOST params per your use case (modify configs) # 3. run ./scripts/reset_postgres.sh (drop/recreate dbs and permissions) # 4. kurtosis run --enclave cdk-v1 --args-file params.yml --image-download always . (deploy with fresh dbs) -DB_NAMES=("event_db" "pool_db" "prover_db" "state_db" "bridge_db" "dac_db") -DB_USERS=("event_user" "pool_user" "prover_user" "state_user" "agglayer_user" "bridge_user" "dac_user") +DB_NAMES=("event_db" "pool_db" "prover_db" "state_db" "bridge_db" "dac_db" "pool_manager_db") +DB_USERS=("event_user" "pool_user" "prover_user" "state_user" "bridge_user" "dac_user" "pool_manager_user") # User must update credentials with master postgres IP/hostname and username # TO DO: add env var support for credentials diff --git a/templates/cdk-erigon/config.yml b/templates/cdk-erigon/config.yml index 4d7bbbd0..f325c1b3 100644 --- a/templates/cdk-erigon/config.yml +++ b/templates/cdk-erigon/config.yml @@ -36,6 +36,8 @@ zkevm.sequencer-batch-seal-time: 12s # 12s zkevm.sequencer-block-seal-time: 6s # 6s zkevm.sequencer-non-empty-batch-seal-time: 3s # 3s +zkevm.pool-manager-url: "http://zkevm-pool-manager{{.deployment_suffix}}:{{.zkevm_pool_manager_port}}" + zkevm.l1-chain-id: {{.l1_chain_id}} zkevm.l1-first-block: 1 zkevm.l1-matic-contract-address: "{{.pol_token_address}}" diff --git a/templates/pool-manager/pool-manager-config.toml b/templates/pool-manager/pool-manager-config.toml new file mode 100644 index 00000000..015117ba --- /dev/null +++ b/templates/pool-manager/pool-manager-config.toml @@ -0,0 +1,37 @@ +[Log] +Environment = "development" # "production" or "development" +Level = "debug" +Outputs = ["stderr"] + +[Server] +Host = "zkevm-pool-manager{{.deployment_suffix}}" +Port = {{.zkevm_pool_manager_port}} +ReadTimeout = "60s" +WriteTimeout = "60s" +MaxRequestsPerIPAndSecond = 500 +EnableHttpLog = true +BatchRequestsEnabled = false +BatchRequestsLimit = 20 + +[DB] +User = "{{.pool_manager_db.user}}" +Password = "{{.pool_manager_db.password}}" +Name = "{{.pool_manager_db.name}}" +Host = "{{.pool_manager_db.hostname}}" +Port = "{{.pool_manager_db.port}}" +EnableLog = false +MaxConns = 200 + +[Sender] +SequencerURL = "http://cdk-erigon-sequencer{{.deployment_suffix}}:{{.zkevm_rpc_http_port}}" +ResendTxsCheckInterval = "1s" +Workers = 5 +QueueSize = 25 + +[Monitor] +L2NodeURL = "http://cdk-erigon-node{{.deployment_suffix}}:{{.zkevm_rpc_http_port}}" +Workers = 5 +QueueSize = 25 +RetryWaitInterval = "3s" +InitialWaitInterval = "1s" +TxLifeTimeMax = "300s" \ No newline at end of file diff --git a/zkevm_pool_manager.star b/zkevm_pool_manager.star new file mode 100644 index 00000000..fe93ebbc --- /dev/null +++ b/zkevm_pool_manager.star @@ -0,0 +1,43 @@ +zkevm_pool_manager_package = import_module("./lib/zkevm_pool_manager.star") +databases = import_module("./databases.star") + + +def run_zkevm_pool_manager(plan, args): + db_configs = databases.get_db_configs(args["deployment_suffix"]) + + zkevm_pool_manager_config_artifact = create_zkevm_pool_manager_config_artifact( + plan, args, db_configs + ) + zkevm_pool_manager_config = ( + zkevm_pool_manager_package.create_zkevm_pool_manager_service_config( + args, zkevm_pool_manager_config_artifact + ) + ) + + # Start the pool manager service. + zkevm_pool_manager_services = plan.add_services( + configs=zkevm_pool_manager_config, + description="Starting pool manager infra", + ) + + +def create_zkevm_pool_manager_config_artifact(plan, args, db_configs): + zkevm_pool_manager_config_template = read_file( + src="./templates/pool-manager/pool-manager-config.toml" + ) + return plan.render_templates( + name="pool-manager-config-artifact", + config={ + "pool-manager-config.toml": struct( + template=zkevm_pool_manager_config_template, + data=args + | { + "deployment_suffix": args["deployment_suffix"], + "zkevm_pool_manager_port": args["zkevm_pool_manager_port"], + # ports + "zkevm_rpc_http_port": args["zkevm_rpc_http_port"], + } + | db_configs, + ) + }, + )