Skip to content

Commit

Permalink
feat: add support for Blobscan
Browse files Browse the repository at this point in the history
Co-authored-by: Tedi Mitiku <tedi.m52@gmail.com>
  • Loading branch information
PabloCastellano and tedim52 committed Nov 21, 2023
1 parent a887cff commit b854ae3
Show file tree
Hide file tree
Showing 4 changed files with 143 additions and 2 deletions.
18 changes: 17 additions & 1 deletion main.star
Original file line number Diff line number Diff line change
Expand Up @@ -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"
)
Expand Down Expand Up @@ -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)
Expand Down Expand Up @@ -328,14 +331,27 @@ 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,
el_cl_data_files_artifact_uuid,
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(
Expand Down
1 change: 1 addition & 0 deletions network_params.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
124 changes: 124 additions & 0 deletions src/blobscan/blobscan_launcher.star
Original file line number Diff line number Diff line change
@@ -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"])],
)
2 changes: 1 addition & 1 deletion src/dora/dora_launcher.star
Original file line number Diff line number Diff line change
Expand Up @@ -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(
Expand Down

0 comments on commit b854ae3

Please sign in to comment.