main.star 4.95 KB
Newer Older
Gyanendra Mishra's avatar
Gyanendra Mishra committed
1 2
participant_network = import_module("github.com/kurtosis-tech/eth2-module/src/participant_network/participant_network.star")
parse_input = import_module("github.com/kurtosis-tech/eth2-module/src/module_io/parse_input.star")
Gyanendra Mishra's avatar
Gyanendra Mishra committed
3

Gyanendra Mishra's avatar
Gyanendra Mishra committed
4 5
static_files = import_module("github.com/kurtosis-tech/eth2-module/src/static_files/static_files.star")
genesis_constants = import_module("github.com/kurtosis-tech/eth2-module/src/participant_network/prelaunch_data_generator/genesis_constants/genesis_constants.star")
Gyanendra Mishra's avatar
Gyanendra Mishra committed
6

Gyanendra Mishra's avatar
Gyanendra Mishra committed
7 8 9 10 11
transaction_spammer = import_module("github.com/kurtosis-tech/eth2-module/src/transaction_spammer/transaction_spammer.star")
forkmon = import_module("github.com/kurtosis-tech/eth2-module/src/forkmon/forkmon_launcher.star")
prometheus = import_module("github.com/kurtosis-tech/eth2-module/src/prometheus/prometheus_launcher.star")
grafana =import_module("github.com/kurtosis-tech/eth2-module/src/grafana/grafana_launcher.star")
testnet_verifier = import_module("github.com/kurtosis-tech/eth2-module/src/testnet_verifier/testnet_verifier.star")
12

Gyanendra Mishra's avatar
Gyanendra Mishra committed
13
module_io = import_types("github.com/kurtosis-tech/eth2-module/types.proto")
14

Gyanendra Mishra's avatar
Gyanendra Mishra committed
15 16 17 18
GRAFANA_USER             = "admin"
GRAFANA_PASSWORD         = "admin"
GRAFANA_DASHBOARD_PATH_URL = "/d/QdTOwy-nz/eth2-merge-kurtosis-module-dashboard?orgId=1"

19 20
FIRST_NODE_FINALIZATION_FACT = "cl-boot-finalization-fact"
HTTP_PORT_ID_FOR_FACT = "http"
Gyanendra Mishra's avatar
Gyanendra Mishra committed
21

Gyanendra Mishra's avatar
Gyanendra Mishra committed
22
def main(input_args):
Gyanendra Mishra's avatar
Gyanendra Mishra committed
23
	input_args_with_right_defaults = module_io.ModuleInput(parse_input.parse_input(input_args))
24
	num_participants = len(input_args_with_right_defaults.participants)
25
	network_params = input_args_with_right_defaults.network_params
26

Gyanendra Mishra's avatar
Gyanendra Mishra committed
27 28 29
	grafana_datasource_config_template = read_file(static_files.GRAFANA_DATASOURCE_CONFIG_TEMPLATE_FILEPATH)
	grafana_dashboards_config_template = read_file(static_files.GRAFANA_DASHBOARD_PROVIDERS_CONFIG_TEMPLATE_FILEPATH)
	prometheus_config_template = read_file(static_files.PROMETHEUS_CONFIG_TEMPLATE_FILEPATH)
Gyanendra Mishra's avatar
Gyanendra Mishra committed
30 31 32

	print("Read the prometheus, grafana templates")

33
	print("Launching participant network with {0} participants and the following network params {1}".format(num_participants, network_params))
Gyanendra Mishra's avatar
Gyanendra Mishra committed
34
	all_participants, cl_gensis_timestamp = participant_network.launch_participant_network(input_args_with_right_defaults.participants, network_params, input_args_with_right_defaults.global_client_log_level)
35

Gyanendra Mishra's avatar
Gyanendra Mishra committed
36 37
	all_el_client_contexts = []
	all_cl_client_contexts = []
38
	for participant in all_participants:
Gyanendra Mishra's avatar
Gyanendra Mishra committed
39 40 41 42 43
		all_el_client_contexts.append(participant.el_client_context)
		all_cl_client_contexts.append(participant.cl_client_context)


	if not input_args_with_right_defaults.launch_additional_services:
44
		return
Gyanendra Mishra's avatar
Gyanendra Mishra committed
45 46

	print("Launching transaction spammer")
Gyanendra Mishra's avatar
Gyanendra Mishra committed
47
	transaction_spammer.launch_transaction_spammer(genesis_constants.PRE_FUNDED_ACCOUNTS, all_el_client_contexts[0])
Gyanendra Mishra's avatar
Gyanendra Mishra committed
48 49 50 51 52
	print("Succesfully launched transaction spammer")

	# We need a way to do time.sleep
	# TODO add code that waits for CL genesis

53
	print("Launching forkmon")
Gyanendra Mishra's avatar
Gyanendra Mishra committed
54 55
	forkmon_config_template = read_file(static_files.FORKMON_CONFIG_TEMPLATE_FILEPATH)
	forkmon.launch_forkmon(forkmon_config_template, all_cl_client_contexts, cl_gensis_timestamp, network_params.seconds_per_slot, network_params.slots_per_epoch)
56 57
	print("Succesfully launched forkmon")

58
	print("Launching prometheus...")
Gyanendra Mishra's avatar
Gyanendra Mishra committed
59
	prometheus_private_url = prometheus.launch_prometheus(
60 61 62 63 64
		prometheus_config_template,
		all_cl_client_contexts,
	)
	print("Successfully launched Prometheus")

Gyanendra Mishra's avatar
Gyanendra Mishra committed
65
	print("Launching grafana...")
Gyanendra Mishra's avatar
Gyanendra Mishra committed
66
	grafana.launch_grafana(grafana_datasource_config_template, grafana_dashboards_config_template, prometheus_private_url)
Gyanendra Mishra's avatar
Gyanendra Mishra committed
67 68 69 70
	print("Succesfully launched grafana")

	if input_args_with_right_defaults.wait_for_verifications:
		print("Running synchrnous testnet verifier")
Gyanendra Mishra's avatar
Gyanendra Mishra committed
71
		testnet_verifier.run_synchronous_testnet_verification(input_args_with_right_defaults, all_el_client_contexts, all_cl_client_contexts)
Gyanendra Mishra's avatar
Gyanendra Mishra committed
72 73 74
		print("Verification succeeded")
	else:
		print("Running asynchronous verification")
Gyanendra Mishra's avatar
Gyanendra Mishra committed
75
		testnet_verifier.launch_testnet_verifier(input_args_with_right_defaults, all_el_client_contexts, all_cl_client_contexts)
Gyanendra Mishra's avatar
Gyanendra Mishra committed
76 77 78 79
		print("Succesfully launched asynchronous verifier")
		if input_args_with_right_defaults.wait_for_finalization:
			print("Waiting for the first finalized epoch")
			first_cl_client = all_cl_client_contexts[0]
80
			first_cl_client_id = first_cl_client.beacon_service_id
81
			define_fact(service_id = first_cl_client_id, fact_name = FIRST_NODE_FINALIZATION_FACT, fact_recipe = struct(method= "GET", endpoint = "/eth/v1/beacon/states/head/finality_checkpoints", content_type = "application/json", port_id = HTTP_PORT_ID_FOR_FACT, field_extractor = ".data.finalized.epoch"))
82 83
			finalized_epoch = wait(service_id = first_cl_client_id, fact_name = FIRST_NODE_FINALIZATION_FACT)
			# TODO make an assertion on the finalized_epoch > 0
Gyanendra Mishra's avatar
Gyanendra Mishra committed
84 85
			print("First finalized epoch occurred successfully")

Gyanendra Mishra's avatar
Gyanendra Mishra committed
86

Gyanendra Mishra's avatar
Gyanendra Mishra committed
87
	grafana_info = module_io.GrafanaInfo(
Gyanendra Mishra's avatar
Gyanendra Mishra committed
88
		dashboard_path = GRAFANA_DASHBOARD_PATH_URL,
Gyanendra Mishra's avatar
Gyanendra Mishra committed
89 90
		user = GRAFANA_USER,
		password = GRAFANA_PASSWORD
Gyanendra Mishra's avatar
Gyanendra Mishra committed
91
	)
Gyanendra Mishra's avatar
Gyanendra Mishra committed
92 93
	output = module_io.ModuleOutput(grafana_info = grafana_info)
	print(output)
Gyanendra Mishra's avatar
Gyanendra Mishra committed
94
	return output
Gyanendra Mishra's avatar
Gyanendra Mishra committed
95

Gyanendra Mishra's avatar
Gyanendra Mishra committed
96