From b854ae3f5fc2ba28bb2f6c39dd21334bdc6d40ce Mon Sep 17 00:00:00 2001 From: Pablo Castellano Date: Wed, 15 Nov 2023 14:39:30 +0300 Subject: [PATCH 01/13] feat: add support for Blobscan Co-authored-by: Tedi Mitiku --- main.star | 18 +++- network_params.yaml | 1 + src/blobscan/blobscan_launcher.star | 124 ++++++++++++++++++++++++++++ src/dora/dora_launcher.star | 2 +- 4 files changed, 143 insertions(+), 2 deletions(-) create mode 100644 src/blobscan/blobscan_launcher.star diff --git a/main.star b/main.star index 26c84e147..641ad1bf0 100644 --- a/main.star +++ b/main.star @@ -21,6 +21,7 @@ beacon_metrics_gazer = import_module( "./src/beacon_metrics_gazer/beacon_metrics_gazer_launcher.star" ) dora = import_module("./src/dora/dora_launcher.star") +blobscan = import_module("./src/blobscan/blobscan_launcher.star") full_beaconchain_explorer = import_module( "./src/full_beaconchain/full_beaconchain_launcher.star" ) @@ -50,6 +51,8 @@ MOCK_MEV_TYPE = "mock" FULL_MEV_TYPE = "full" PATH_TO_PARSED_BEACON_STATE = "/genesis/output/parsedBeaconState.json" +DORA_BASE_URL = "" + def run(plan, args={}): args_with_right_defaults = input_parser.input_parser(plan, args) @@ -328,7 +331,7 @@ def run(plan, args={}): elif additional_service == "dora": plan.print("Launching dora") dora_config_template = read_file(static_files.DORA_CONFIG_TEMPLATE_FILEPATH) - dora.launch_dora( + dora_config = dora.launch_dora( plan, dora_config_template, all_cl_client_contexts, @@ -336,6 +339,19 @@ def run(plan, args={}): network_params.electra_fork_epoch, ) plan.print("Successfully launched dora") + DORA_BASE_URL = "http://{0}:{1}".format( + dora_config.ip_address, dora_config.ports["http"].number + ) + elif additional_service == "blobscan": + plan.print("Launching blobscan") + blobscan.launch_blobscan( + plan, + all_cl_client_contexts, + all_el_client_contexts, + network_params.network_id, + DORA_BASE_URL, + ) + plan.print("Successfully launched blobscan") elif additional_service == "full_beaconchain_explorer": plan.print("Launching full-beaconchain-explorer") full_beaconchain_explorer_config_template = read_file( diff --git a/network_params.yaml b/network_params.yaml index 6e5622d26..38a5615e7 100644 --- a/network_params.yaml +++ b/network_params.yaml @@ -50,6 +50,7 @@ additional_services: - beacon_metrics_gazer - dora - prometheus_grafana + - blobscan wait_for_finalization: false global_client_log_level: info snooper_enabled: false diff --git a/src/blobscan/blobscan_launcher.star b/src/blobscan/blobscan_launcher.star new file mode 100644 index 000000000..5f5cfcf87 --- /dev/null +++ b/src/blobscan/blobscan_launcher.star @@ -0,0 +1,124 @@ +shared_utils = import_module("../shared_utils/shared_utils.star") +postgres = import_module("github.com/kurtosis-tech/postgres-package/main.star") + +WEB_SERVICE_NAME = "blobscan-web" +API_SERVICE_NAME = "blobscan-api" +INDEXER_SERVICE_NAME = "blobscan-indexer" + +HTTP_PORT_ID = "http" +WEB_HTTP_PORT_NUMBER = 3000 +API_HTTP_PORT_NUMBER = 3001 + +WEB_PORTS = { + HTTP_PORT_ID: shared_utils.new_port_spec( + WEB_HTTP_PORT_NUMBER, + shared_utils.TCP_PROTOCOL, + shared_utils.HTTP_APPLICATION_PROTOCOL, + ) +} + + +API_PORTS = { + HTTP_PORT_ID: shared_utils.new_port_spec( + API_HTTP_PORT_NUMBER, + shared_utils.TCP_PROTOCOL, + shared_utils.HTTP_APPLICATION_PROTOCOL, + ) +} + +ENTRYPOINT_ARGS = ["/bin/sh", "-c"] + + +def launch_blobscan( + plan, + cl_client_contexts, + el_client_contexts, + chain_id, + beacon_explorer_url, +): + beacon_node_rpc_uri = "http://{0}:{1}".format( + cl_client_contexts[0].ip_addr, cl_client_contexts[0].http_port_num + ) + execution_node_rpc_uri = "http://{0}:{1}".format( + el_client_contexts[0].ip_addr, el_client_contexts[0].rpc_port_num + ) + + postgres_output = postgres.run(plan) + api_config = get_api_config(postgres_output.url, beacon_node_rpc_uri, chain_id) + blobscan_config = plan.add_service(API_SERVICE_NAME, api_config) + + blobscan_api_url = "http://{0}:{1}".format( + blobscan_config.ip_address, blobscan_config.ports[HTTP_PORT_ID].number + ) + + web_config = get_web_config( + postgres_output.url, beacon_node_rpc_uri, beacon_explorer_url, chain_id + ) + plan.add_service(WEB_SERVICE_NAME, web_config) + + indexer_config = get_indexer_config( + beacon_node_rpc_uri, execution_node_rpc_uri, blobscan_api_url + ) + plan.add_service(INDEXER_SERVICE_NAME, indexer_config) + + +def get_api_config(database_url, beacon_node_rpc, chain_id): + IMAGE_NAME = "blossomlabs/blobscan:stable" + + return ServiceConfig( + image=IMAGE_NAME, + ports=API_PORTS, + env_vars={ + "BEACON_NODE_ENDPOINT": beacon_node_rpc, + "CHAIN_ID": chain_id, + "DATABASE_URL": database_url, + "SECRET_KEY": "supersecret", + }, + cmd=["api"], + ready_conditions=ReadyCondition( + recipe=GetHttpRequestRecipe( + port_id="http", + endpoint="/api/healthcheck", + ), + field="code", + assertion="==", + target_value=200, + interval="5s", + timeout="5s", + ), + ) + + +def get_web_config(database_url, beacon_node_rpc, beacon_explorer_url, chain_id): + IMAGE_NAME = "blossomlabs/blobscan:stable" + + return ServiceConfig( + image=IMAGE_NAME, + ports=WEB_PORTS, + env_vars={ + "DATABASE_URL": database_url, + "SECRET_KEY": "supersecret", + "NEXT_PUBLIC_NETWORK_NAME": "local-devnet", + "NEXT_PUBLIC_BEACON_BASE_URL": "http://fix-me.localhost", # TODO: get url from beaconchain explorer + "NEXT_PUBLIC_EXPLORER_BASE_URL": beacon_explorer_url, + "BEACON_NODE_ENDPOINT": beacon_node_rpc, + "CHAIN_ID": chain_id, + }, + cmd=["web"], + ) + + +def get_indexer_config(beacon_node_rpc, execution_node_rpc, blobscan_api_url): + IMAGE_NAME = "blossomlabs/blobscan-indexer:master" + + return ServiceConfig( + image=IMAGE_NAME, + env_vars={ + "SECRET_KEY": "supersecret", + "BLOBSCAN_API_ENDPOINT": blobscan_api_url, + "EXECUTION_NODE_ENDPOINT": execution_node_rpc, + "BEACON_NODE_ENDPOINT": beacon_node_rpc, + }, + entrypoint=ENTRYPOINT_ARGS, + cmd=[" && ".join(["sleep 90", "/app/blob-indexer"])], + ) diff --git a/src/dora/dora_launcher.star b/src/dora/dora_launcher.star index 59c7ce272..1134fada7 100644 --- a/src/dora/dora_launcher.star +++ b/src/dora/dora_launcher.star @@ -55,7 +55,7 @@ def launch_dora( electra_fork_epoch, ) - plan.add_service(SERVICE_NAME, config) + return plan.add_service(SERVICE_NAME, config) def get_config( From b26ea34f8cef6792b003263d103838e865d7df41 Mon Sep 17 00:00:00 2001 From: Pablo Castellano Date: Tue, 21 Nov 2023 15:01:08 +0100 Subject: [PATCH 02/13] Remove blobscan from additional_services --- network_params.yaml | 1 - 1 file changed, 1 deletion(-) diff --git a/network_params.yaml b/network_params.yaml index 38a5615e7..6e5622d26 100644 --- a/network_params.yaml +++ b/network_params.yaml @@ -50,7 +50,6 @@ additional_services: - beacon_metrics_gazer - dora - prometheus_grafana - - blobscan wait_for_finalization: false global_client_log_level: info snooper_enabled: false From cad87a7800d0209eab83c6d040210114466d2839 Mon Sep 17 00:00:00 2001 From: Pablo Castellano Date: Tue, 21 Nov 2023 15:03:19 +0100 Subject: [PATCH 03/13] Add mention to blobscan in README --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index e39d12882..ca36a2c3f 100644 --- a/README.md +++ b/README.md @@ -11,6 +11,7 @@ Specifically, this [package][package-reference] will: 3. Spin up a [transaction spammer](https://github.com/MariusVanDerWijden/tx-fuzz) to send fake transactions to the network 4. Spin up and connect a [testnet verifier](https://github.com/ethereum/merge-testnet-verifier) 5. Spin up a Grafana and Prometheus instance to observe the network +6. Spin up a Blobscan instance to analyze blob transactions (EIP-4844) Optional features (enabled via flags or parameter files at runtime): From 012c9371ff3bf7e9f4fe191f4d28d13040a7f049 Mon Sep 17 00:00:00 2001 From: Pablo Castellano Date: Tue, 21 Nov 2023 15:27:24 +0100 Subject: [PATCH 04/13] remove blobscan's dora dependency --- main.star | 8 +------- src/blobscan/blobscan_launcher.star | 15 ++++++++------- src/dora/dora_launcher.star | 2 +- 3 files changed, 10 insertions(+), 15 deletions(-) diff --git a/main.star b/main.star index 641ad1bf0..4f87b44ba 100644 --- a/main.star +++ b/main.star @@ -51,8 +51,6 @@ MOCK_MEV_TYPE = "mock" FULL_MEV_TYPE = "full" PATH_TO_PARSED_BEACON_STATE = "/genesis/output/parsedBeaconState.json" -DORA_BASE_URL = "" - def run(plan, args={}): args_with_right_defaults = input_parser.input_parser(plan, args) @@ -331,7 +329,7 @@ def run(plan, args={}): elif additional_service == "dora": plan.print("Launching dora") dora_config_template = read_file(static_files.DORA_CONFIG_TEMPLATE_FILEPATH) - dora_config = dora.launch_dora( + dora.launch_dora( plan, dora_config_template, all_cl_client_contexts, @@ -339,9 +337,6 @@ def run(plan, args={}): network_params.electra_fork_epoch, ) plan.print("Successfully launched dora") - DORA_BASE_URL = "http://{0}:{1}".format( - dora_config.ip_address, dora_config.ports["http"].number - ) elif additional_service == "blobscan": plan.print("Launching blobscan") blobscan.launch_blobscan( @@ -349,7 +344,6 @@ def run(plan, args={}): all_cl_client_contexts, all_el_client_contexts, network_params.network_id, - DORA_BASE_URL, ) plan.print("Successfully launched blobscan") elif additional_service == "full_beaconchain_explorer": diff --git a/src/blobscan/blobscan_launcher.star b/src/blobscan/blobscan_launcher.star index 5f5cfcf87..a7637c4a2 100644 --- a/src/blobscan/blobscan_launcher.star +++ b/src/blobscan/blobscan_launcher.star @@ -34,7 +34,6 @@ def launch_blobscan( cl_client_contexts, el_client_contexts, chain_id, - beacon_explorer_url, ): beacon_node_rpc_uri = "http://{0}:{1}".format( cl_client_contexts[0].ip_addr, cl_client_contexts[0].http_port_num @@ -51,9 +50,7 @@ def launch_blobscan( blobscan_config.ip_address, blobscan_config.ports[HTTP_PORT_ID].number ) - web_config = get_web_config( - postgres_output.url, beacon_node_rpc_uri, beacon_explorer_url, chain_id - ) + web_config = get_web_config(postgres_output.url, beacon_node_rpc_uri, chain_id) plan.add_service(WEB_SERVICE_NAME, web_config) indexer_config = get_indexer_config( @@ -89,7 +86,11 @@ def get_api_config(database_url, beacon_node_rpc, chain_id): ) -def get_web_config(database_url, beacon_node_rpc, beacon_explorer_url, chain_id): +def get_web_config(database_url, beacon_node_rpc, chain_id): + """Note: in order for Blobscan to link to blocks and slots explorers (such as Dora), the following environment variables must be set: + - NEXT_PUBLIC_BEACON_BASE_URL + - NEXT_PUBLIC_EXPLORER_BASE_URL + """ IMAGE_NAME = "blossomlabs/blobscan:stable" return ServiceConfig( @@ -99,8 +100,8 @@ def get_web_config(database_url, beacon_node_rpc, beacon_explorer_url, chain_id) "DATABASE_URL": database_url, "SECRET_KEY": "supersecret", "NEXT_PUBLIC_NETWORK_NAME": "local-devnet", - "NEXT_PUBLIC_BEACON_BASE_URL": "http://fix-me.localhost", # TODO: get url from beaconchain explorer - "NEXT_PUBLIC_EXPLORER_BASE_URL": beacon_explorer_url, + # "NEXT_PUBLIC_BEACON_BASE_URL": "http://my-beacon-explorer.localhost", + # "NEXT_PUBLIC_EXPLORER_BASE_URL": "http://my-block-explorer.localhost", "BEACON_NODE_ENDPOINT": beacon_node_rpc, "CHAIN_ID": chain_id, }, diff --git a/src/dora/dora_launcher.star b/src/dora/dora_launcher.star index 1134fada7..59c7ce272 100644 --- a/src/dora/dora_launcher.star +++ b/src/dora/dora_launcher.star @@ -55,7 +55,7 @@ def launch_dora( electra_fork_epoch, ) - return plan.add_service(SERVICE_NAME, config) + plan.add_service(SERVICE_NAME, config) def get_config( From 93af7e855490fd6f28ba57e09afd6e49f6e76235 Mon Sep 17 00:00:00 2001 From: Pablo Castellano Date: Tue, 21 Nov 2023 15:45:28 +0100 Subject: [PATCH 05/13] Use dora in blobscan if available --- README.md | 2 +- main.star | 8 +++++++- src/blobscan/blobscan_launcher.star | 15 +++++++-------- src/dora/dora_launcher.star | 2 +- 4 files changed, 16 insertions(+), 11 deletions(-) diff --git a/README.md b/README.md index ca36a2c3f..4221b12f8 100644 --- a/README.md +++ b/README.md @@ -262,7 +262,7 @@ goomy_blob_params: # - A prometheus will be started, coupled with grafana # - A beacon metrics gazer will be launched # - A light beacon chain explorer will be launched -# - Default: ["tx_spammer", "blob_spammer", "el_forkmon", "beacon_metrics_gazer", "dora"," "prometheus_grafana"] +# - Default: ["tx_spammer", "blob_spammer", "el_forkmon", "beacon_metrics_gazer", "dora"," "prometheus_grafana", "blobscan"] additional_services: - broadcaster - tx_spammer diff --git a/main.star b/main.star index 4f87b44ba..bb69f4bc5 100644 --- a/main.star +++ b/main.star @@ -51,6 +51,8 @@ MOCK_MEV_TYPE = "mock" FULL_MEV_TYPE = "full" PATH_TO_PARSED_BEACON_STATE = "/genesis/output/parsedBeaconState.json" +SERVICE_URLS = {} + def run(plan, args={}): args_with_right_defaults = input_parser.input_parser(plan, args) @@ -329,7 +331,7 @@ def run(plan, args={}): elif additional_service == "dora": plan.print("Launching dora") dora_config_template = read_file(static_files.DORA_CONFIG_TEMPLATE_FILEPATH) - dora.launch_dora( + dora_config = dora.launch_dora( plan, dora_config_template, all_cl_client_contexts, @@ -337,6 +339,9 @@ def run(plan, args={}): network_params.electra_fork_epoch, ) plan.print("Successfully launched dora") + SERVICE_URLS["dora"] = "http://{0}:{1}".format( + dora_config.ip_address, dora_config.ports["http"].number + ) elif additional_service == "blobscan": plan.print("Launching blobscan") blobscan.launch_blobscan( @@ -344,6 +349,7 @@ def run(plan, args={}): all_cl_client_contexts, all_el_client_contexts, network_params.network_id, + SERVICE_URLS.get("dora"), ) plan.print("Successfully launched blobscan") elif additional_service == "full_beaconchain_explorer": diff --git a/src/blobscan/blobscan_launcher.star b/src/blobscan/blobscan_launcher.star index a7637c4a2..8f33adc6d 100644 --- a/src/blobscan/blobscan_launcher.star +++ b/src/blobscan/blobscan_launcher.star @@ -34,6 +34,7 @@ def launch_blobscan( cl_client_contexts, el_client_contexts, chain_id, + beacon_explorer, ): beacon_node_rpc_uri = "http://{0}:{1}".format( cl_client_contexts[0].ip_addr, cl_client_contexts[0].http_port_num @@ -50,7 +51,9 @@ def launch_blobscan( blobscan_config.ip_address, blobscan_config.ports[HTTP_PORT_ID].number ) - web_config = get_web_config(postgres_output.url, beacon_node_rpc_uri, chain_id) + web_config = get_web_config( + postgres_output.url, beacon_explorer, beacon_node_rpc_uri, chain_id + ) plan.add_service(WEB_SERVICE_NAME, web_config) indexer_config = get_indexer_config( @@ -86,11 +89,7 @@ def get_api_config(database_url, beacon_node_rpc, chain_id): ) -def get_web_config(database_url, beacon_node_rpc, chain_id): - """Note: in order for Blobscan to link to blocks and slots explorers (such as Dora), the following environment variables must be set: - - NEXT_PUBLIC_BEACON_BASE_URL - - NEXT_PUBLIC_EXPLORER_BASE_URL - """ +def get_web_config(database_url, beacon_explorer, beacon_node_rpc, chain_id): IMAGE_NAME = "blossomlabs/blobscan:stable" return ServiceConfig( @@ -100,8 +99,8 @@ def get_web_config(database_url, beacon_node_rpc, chain_id): "DATABASE_URL": database_url, "SECRET_KEY": "supersecret", "NEXT_PUBLIC_NETWORK_NAME": "local-devnet", - # "NEXT_PUBLIC_BEACON_BASE_URL": "http://my-beacon-explorer.localhost", - # "NEXT_PUBLIC_EXPLORER_BASE_URL": "http://my-block-explorer.localhost", + "NEXT_PUBLIC_BEACON_BASE_URL": beacon_explorer, + # "NEXT_PUBLIC_EXPLORER_BASE_URL": "http://my-block-explorer.localhost", # TODO "BEACON_NODE_ENDPOINT": beacon_node_rpc, "CHAIN_ID": chain_id, }, diff --git a/src/dora/dora_launcher.star b/src/dora/dora_launcher.star index 59c7ce272..1134fada7 100644 --- a/src/dora/dora_launcher.star +++ b/src/dora/dora_launcher.star @@ -55,7 +55,7 @@ def launch_dora( electra_fork_epoch, ) - plan.add_service(SERVICE_NAME, config) + return plan.add_service(SERVICE_NAME, config) def get_config( From bdfd3440d34b7f026cbfadac9049787502f0d335 Mon Sep 17 00:00:00 2001 From: Pablo Castellano Date: Tue, 21 Nov 2023 15:50:02 +0100 Subject: [PATCH 06/13] fix readme --- README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 4221b12f8..798781a9e 100644 --- a/README.md +++ b/README.md @@ -262,7 +262,7 @@ goomy_blob_params: # - A prometheus will be started, coupled with grafana # - A beacon metrics gazer will be launched # - A light beacon chain explorer will be launched -# - Default: ["tx_spammer", "blob_spammer", "el_forkmon", "beacon_metrics_gazer", "dora"," "prometheus_grafana", "blobscan"] +# - Default: ["tx_spammer", "blob_spammer", "el_forkmon", "beacon_metrics_gazer", "dora"," "prometheus_grafana"] additional_services: - broadcaster - tx_spammer @@ -274,6 +274,7 @@ additional_services: - dora - full_beaconchain_explorer - prometheus_grafana + - blobscan # If set, the package will block until a finalized epoch has occurred. wait_for_finalization: false From 4830223b72aa9a04669298cae3a14fce4a133b17 Mon Sep 17 00:00:00 2001 From: Barnabas Busa Date: Wed, 22 Nov 2023 12:50:05 +0100 Subject: [PATCH 07/13] add dora if available --- main.star | 14 +++++++------- src/blobscan/blobscan_launcher.star | 2 +- src/cl/teku/teku_launcher.star | 4 ++-- 3 files changed, 10 insertions(+), 10 deletions(-) diff --git a/main.star b/main.star index bb69f4bc5..23c5dc620 100644 --- a/main.star +++ b/main.star @@ -51,9 +51,6 @@ MOCK_MEV_TYPE = "mock" FULL_MEV_TYPE = "full" PATH_TO_PARSED_BEACON_STATE = "/genesis/output/parsedBeaconState.json" -SERVICE_URLS = {} - - def run(plan, args={}): args_with_right_defaults = input_parser.input_parser(plan, args) @@ -268,6 +265,7 @@ def run(plan, args={}): return output launch_prometheus_grafana = False + SERVICE_URLS = {} for additional_service in args_with_right_defaults.additional_services: if additional_service == "tx_spammer": plan.print("Launching transaction spammer") @@ -339,9 +337,11 @@ def run(plan, args={}): network_params.electra_fork_epoch, ) plan.print("Successfully launched dora") - SERVICE_URLS["dora"] = "http://{0}:{1}".format( - dora_config.ip_address, dora_config.ports["http"].number - ) + SERVICE_URLS = { + "dora": "http://{0}:{1}".format( + dora_config.ip_address, dora_config.ports["http"].number + ) + } elif additional_service == "blobscan": plan.print("Launching blobscan") blobscan.launch_blobscan( @@ -349,7 +349,7 @@ def run(plan, args={}): all_cl_client_contexts, all_el_client_contexts, network_params.network_id, - SERVICE_URLS.get("dora"), + SERVICE_URLS.get("dora", "https://beaconscan.com"), ) plan.print("Successfully launched blobscan") elif additional_service == "full_beaconchain_explorer": diff --git a/src/blobscan/blobscan_launcher.star b/src/blobscan/blobscan_launcher.star index 8f33adc6d..98da35ad7 100644 --- a/src/blobscan/blobscan_launcher.star +++ b/src/blobscan/blobscan_launcher.star @@ -98,7 +98,7 @@ def get_web_config(database_url, beacon_explorer, beacon_node_rpc, chain_id): env_vars={ "DATABASE_URL": database_url, "SECRET_KEY": "supersecret", - "NEXT_PUBLIC_NETWORK_NAME": "local-devnet", + "NEXT_PUBLIC_NETWORK_NAME": "kurtosis-devnet", "NEXT_PUBLIC_BEACON_BASE_URL": beacon_explorer, # "NEXT_PUBLIC_EXPLORER_BASE_URL": "http://my-block-explorer.localhost", # TODO "BEACON_NODE_ENDPOINT": beacon_node_rpc, diff --git a/src/cl/teku/teku_launcher.star b/src/cl/teku/teku_launcher.star index faedc6c60..04c857d69 100644 --- a/src/cl/teku/teku_launcher.star +++ b/src/cl/teku/teku_launcher.star @@ -29,8 +29,8 @@ METRICS_PORT_NUM = 8008 # The min/max CPU/memory that the beacon node can use BEACON_MIN_CPU = 50 BEACON_MAX_CPU = 1000 -BEACON_MIN_MEMORY = 512 -BEACON_MAX_MEMORY = 1024 +BEACON_MIN_MEMORY = 1024 +BEACON_MAX_MEMORY = 2048 # 1) The Teku container runs as the "teku" user # 2) Teku requires write access to the validator secrets directory, so it can write a lockfile into it as it uses the keys From e6d009e3dbbe328a0893a6bb123db7874a96e357 Mon Sep 17 00:00:00 2001 From: Pablo Castellano Date: Thu, 23 Nov 2023 14:34:46 +0100 Subject: [PATCH 08/13] refactor: do not redefine SERVICE_URLS dictionary --- main.star | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/main.star b/main.star index 23c5dc620..a47a7bbb5 100644 --- a/main.star +++ b/main.star @@ -51,6 +51,7 @@ MOCK_MEV_TYPE = "mock" FULL_MEV_TYPE = "full" PATH_TO_PARSED_BEACON_STATE = "/genesis/output/parsedBeaconState.json" + def run(plan, args={}): args_with_right_defaults = input_parser.input_parser(plan, args) @@ -337,11 +338,9 @@ def run(plan, args={}): network_params.electra_fork_epoch, ) plan.print("Successfully launched dora") - SERVICE_URLS = { - "dora": "http://{0}:{1}".format( - dora_config.ip_address, dora_config.ports["http"].number - ) - } + SERVICE_URLS["dora"] = "http://{0}:{1}".format( + dora_config.ip_address, dora_config.ports["http"].number + ) elif additional_service == "blobscan": plan.print("Launching blobscan") blobscan.launch_blobscan( From ba9ab31b8cd73bfa69326b5c1999fc208744d96f Mon Sep 17 00:00:00 2001 From: Pablo Castellano Date: Thu, 23 Nov 2023 17:17:08 +0100 Subject: [PATCH 09/13] fix: correct env var --- src/blobscan/blobscan_launcher.star | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/blobscan/blobscan_launcher.star b/src/blobscan/blobscan_launcher.star index 98da35ad7..246dfc0c5 100644 --- a/src/blobscan/blobscan_launcher.star +++ b/src/blobscan/blobscan_launcher.star @@ -99,8 +99,8 @@ def get_web_config(database_url, beacon_explorer, beacon_node_rpc, chain_id): "DATABASE_URL": database_url, "SECRET_KEY": "supersecret", "NEXT_PUBLIC_NETWORK_NAME": "kurtosis-devnet", - "NEXT_PUBLIC_BEACON_BASE_URL": beacon_explorer, - # "NEXT_PUBLIC_EXPLORER_BASE_URL": "http://my-block-explorer.localhost", # TODO + # "NEXT_PUBLIC_BEACON_BASE_URL": "http://my-block-explorer.localhost", # TODO + "NEXT_PUBLIC_EXPLORER_BASE_URL": beacon_explorer, "BEACON_NODE_ENDPOINT": beacon_node_rpc, "CHAIN_ID": chain_id, }, From 8ad91b048b627df580c3fbdefe7a85a39cf279c6 Mon Sep 17 00:00:00 2001 From: Pablo Castellano Date: Fri, 24 Nov 2023 11:07:20 +0100 Subject: [PATCH 10/13] Use same url for beacon explorer, we can change it later --- src/blobscan/blobscan_launcher.star | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/blobscan/blobscan_launcher.star b/src/blobscan/blobscan_launcher.star index 246dfc0c5..acb05b822 100644 --- a/src/blobscan/blobscan_launcher.star +++ b/src/blobscan/blobscan_launcher.star @@ -99,7 +99,7 @@ def get_web_config(database_url, beacon_explorer, beacon_node_rpc, chain_id): "DATABASE_URL": database_url, "SECRET_KEY": "supersecret", "NEXT_PUBLIC_NETWORK_NAME": "kurtosis-devnet", - # "NEXT_PUBLIC_BEACON_BASE_URL": "http://my-block-explorer.localhost", # TODO + "NEXT_PUBLIC_BEACON_BASE_URL": beacon_explorer, "NEXT_PUBLIC_EXPLORER_BASE_URL": beacon_explorer, "BEACON_NODE_ENDPOINT": beacon_node_rpc, "CHAIN_ID": chain_id, From 844f60aaa334557fd517ae4e219769b15a2330dd Mon Sep 17 00:00:00 2001 From: Barnabas Busa Date: Tue, 28 Nov 2023 13:30:15 +0100 Subject: [PATCH 11/13] Update src/blobscan/blobscan_launcher.star Co-authored-by: Gyanendra Mishra --- src/blobscan/blobscan_launcher.star | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/blobscan/blobscan_launcher.star b/src/blobscan/blobscan_launcher.star index acb05b822..1206c6098 100644 --- a/src/blobscan/blobscan_launcher.star +++ b/src/blobscan/blobscan_launcher.star @@ -43,7 +43,7 @@ def launch_blobscan( el_client_contexts[0].ip_addr, el_client_contexts[0].rpc_port_num ) - postgres_output = postgres.run(plan) + postgres_output = postgres.run(plan, service_name="blobscan-postgres") api_config = get_api_config(postgres_output.url, beacon_node_rpc_uri, chain_id) blobscan_config = plan.add_service(API_SERVICE_NAME, api_config) From bddd2af8f12890c46ffa83186a5e18df09b21f3d Mon Sep 17 00:00:00 2001 From: Pablo Castellano Date: Tue, 28 Nov 2023 17:03:26 +0100 Subject: [PATCH 12/13] Remove SERVICE_URLS --- main.star | 7 +------ src/blobscan/blobscan_launcher.star | 10 +++++----- src/dora/dora_launcher.star | 2 +- 3 files changed, 7 insertions(+), 12 deletions(-) diff --git a/main.star b/main.star index a47a7bbb5..4f87b44ba 100644 --- a/main.star +++ b/main.star @@ -266,7 +266,6 @@ def run(plan, args={}): return output launch_prometheus_grafana = False - SERVICE_URLS = {} for additional_service in args_with_right_defaults.additional_services: if additional_service == "tx_spammer": plan.print("Launching transaction spammer") @@ -330,7 +329,7 @@ def run(plan, args={}): elif additional_service == "dora": plan.print("Launching dora") dora_config_template = read_file(static_files.DORA_CONFIG_TEMPLATE_FILEPATH) - dora_config = dora.launch_dora( + dora.launch_dora( plan, dora_config_template, all_cl_client_contexts, @@ -338,9 +337,6 @@ def run(plan, args={}): network_params.electra_fork_epoch, ) plan.print("Successfully launched dora") - SERVICE_URLS["dora"] = "http://{0}:{1}".format( - dora_config.ip_address, dora_config.ports["http"].number - ) elif additional_service == "blobscan": plan.print("Launching blobscan") blobscan.launch_blobscan( @@ -348,7 +344,6 @@ def run(plan, args={}): all_cl_client_contexts, all_el_client_contexts, network_params.network_id, - SERVICE_URLS.get("dora", "https://beaconscan.com"), ) plan.print("Successfully launched blobscan") elif additional_service == "full_beaconchain_explorer": diff --git a/src/blobscan/blobscan_launcher.star b/src/blobscan/blobscan_launcher.star index 1206c6098..6105af942 100644 --- a/src/blobscan/blobscan_launcher.star +++ b/src/blobscan/blobscan_launcher.star @@ -34,7 +34,6 @@ def launch_blobscan( cl_client_contexts, el_client_contexts, chain_id, - beacon_explorer, ): beacon_node_rpc_uri = "http://{0}:{1}".format( cl_client_contexts[0].ip_addr, cl_client_contexts[0].http_port_num @@ -52,7 +51,7 @@ def launch_blobscan( ) web_config = get_web_config( - postgres_output.url, beacon_explorer, beacon_node_rpc_uri, chain_id + postgres_output.url, beacon_node_rpc_uri, chain_id ) plan.add_service(WEB_SERVICE_NAME, web_config) @@ -89,7 +88,10 @@ def get_api_config(database_url, beacon_node_rpc, chain_id): ) -def get_web_config(database_url, beacon_explorer, beacon_node_rpc, chain_id): +def get_web_config(database_url, beacon_node_rpc, chain_id): + # TODO: https://github.com/kurtosis-tech/kurtosis/issues/1861 + # Configure NEXT_PUBLIC_BEACON_BASE_URL and NEXT_PUBLIC_EXPLORER_BASE env vars + # once retrieving external URLs from services are supported in Kurtosis. IMAGE_NAME = "blossomlabs/blobscan:stable" return ServiceConfig( @@ -99,8 +101,6 @@ def get_web_config(database_url, beacon_explorer, beacon_node_rpc, chain_id): "DATABASE_URL": database_url, "SECRET_KEY": "supersecret", "NEXT_PUBLIC_NETWORK_NAME": "kurtosis-devnet", - "NEXT_PUBLIC_BEACON_BASE_URL": beacon_explorer, - "NEXT_PUBLIC_EXPLORER_BASE_URL": beacon_explorer, "BEACON_NODE_ENDPOINT": beacon_node_rpc, "CHAIN_ID": chain_id, }, diff --git a/src/dora/dora_launcher.star b/src/dora/dora_launcher.star index 1134fada7..59c7ce272 100644 --- a/src/dora/dora_launcher.star +++ b/src/dora/dora_launcher.star @@ -55,7 +55,7 @@ def launch_dora( electra_fork_epoch, ) - return plan.add_service(SERVICE_NAME, config) + plan.add_service(SERVICE_NAME, config) def get_config( From b84ff0524f583ecc503522e83309acee3886d518 Mon Sep 17 00:00:00 2001 From: Pablo Castellano Date: Tue, 28 Nov 2023 17:10:33 +0100 Subject: [PATCH 13/13] ci: add blobscan to GitHub actions --- .github/tests/mix-with-tools.yaml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/tests/mix-with-tools.yaml b/.github/tests/mix-with-tools.yaml index 90c5e70ec..23e35bb67 100644 --- a/.github/tests/mix-with-tools.yaml +++ b/.github/tests/mix-with-tools.yaml @@ -21,3 +21,4 @@ additional_services: - goomy_blob - full_beaconchain_explorer - custom_flood + - blobscan