main.star 4.67 KB
Newer Older
Gyanendra Mishra's avatar
Gyanendra Mishra committed
1 2
participant_network = import_module("github.com/kurtosis-tech/eth2-package/src/participant_network/participant_network.star")
parse_input = import_module("github.com/kurtosis-tech/eth2-package/src/package_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-package/src/static_files/static_files.star")
genesis_constants = import_module("github.com/kurtosis-tech/eth2-package/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-package/src/transaction_spammer/transaction_spammer.star")
forkmon = import_module("github.com/kurtosis-tech/eth2-package/src/forkmon/forkmon_launcher.star")
prometheus = import_module("github.com/kurtosis-tech/eth2-package/src/prometheus/prometheus_launcher.star")
grafana =import_module("github.com/kurtosis-tech/eth2-package/src/grafana/grafana_launcher.star")
testnet_verifier = import_module("github.com/kurtosis-tech/eth2-package/src/testnet_verifier/testnet_verifier.star")
12

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

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

20 21
def run(args):
	args_with_right_defaults = parse_input.parse_input(args)
guillaume.bouvignies's avatar
guillaume.bouvignies committed
22

23 24
	num_participants = len(args_with_right_defaults.participants)
	network_params = args_with_right_defaults.network_params
25

Gyanendra Mishra's avatar
Gyanendra Mishra committed
26 27 28
	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
29 30 31

	print("Read the prometheus, grafana templates")

32
	print("Launching participant network with {0} participants and the following network params {1}".format(num_participants, network_params))
33
	all_participants, cl_gensis_timestamp = participant_network.launch_participant_network(args_with_right_defaults.participants, network_params, args_with_right_defaults.global_client_log_level)
34

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


42
	if not args_with_right_defaults.launch_additional_services:
43
		return
Gyanendra Mishra's avatar
Gyanendra Mishra committed
44 45

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

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

52
	print("Launching forkmon")
Gyanendra Mishra's avatar
Gyanendra Mishra committed
53 54
	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)
55 56
	print("Succesfully launched forkmon")

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

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

68
	if args_with_right_defaults.wait_for_verifications:
Gyanendra Mishra's avatar
Gyanendra Mishra committed
69
		print("Running synchrnous testnet verifier")
70
		testnet_verifier.run_synchronous_testnet_verification(args_with_right_defaults, all_el_client_contexts, all_cl_client_contexts)
Gyanendra Mishra's avatar
Gyanendra Mishra committed
71 72 73
		print("Verification succeeded")
	else:
		print("Running asynchronous verification")
74
		testnet_verifier.launch_testnet_verifier(args_with_right_defaults, all_el_client_contexts, all_cl_client_contexts)
Gyanendra Mishra's avatar
Gyanendra Mishra committed
75
		print("Succesfully launched asynchronous verifier")
76
		if args_with_right_defaults.wait_for_finalization:
Gyanendra Mishra's avatar
Gyanendra Mishra committed
77 78
			print("Waiting for the first finalized epoch")
			first_cl_client = all_cl_client_contexts[0]
79
			first_cl_client_id = first_cl_client.beacon_service_id
80 81 82 83 84 85 86 87 88 89
			epoch_recipe = struct(
				service_id = first_cl_client_id,
				method= "GET",
				endpoint = "/eth/v1/beacon/states/head/finality_checkpoints",
				content_type = "application/json",
				port_id = HTTP_PORT_ID_FOR_FACT,
				extract = {
					"finalized_epoch": ".data.finalized.epoch"
				}
			)
90
			wait(epoch_recipe, "extract.finalized_epoch", "!=", "0", timeout="40m")
Gyanendra Mishra's avatar
Gyanendra Mishra committed
91 92
			print("First finalized epoch occurred successfully")

Gyanendra Mishra's avatar
Gyanendra Mishra committed
93

guillaume.bouvignies's avatar
guillaume.bouvignies committed
94
	grafana_info = struct(
Gyanendra Mishra's avatar
Gyanendra Mishra committed
95
		dashboard_path = GRAFANA_DASHBOARD_PATH_URL,
Gyanendra Mishra's avatar
Gyanendra Mishra committed
96 97
		user = GRAFANA_USER,
		password = GRAFANA_PASSWORD
Gyanendra Mishra's avatar
Gyanendra Mishra committed
98
	)
guillaume.bouvignies's avatar
guillaume.bouvignies committed
99
	output = struct(grafana_info = grafana_info)
Gyanendra Mishra's avatar
Gyanendra Mishra committed
100
	return output
Gyanendra Mishra's avatar
Gyanendra Mishra committed
101

Gyanendra Mishra's avatar
Gyanendra Mishra committed
102