Commit 485ac616 authored by luxq's avatar luxq

add bunnyfinder launch

parent 808e4672
...@@ -62,6 +62,7 @@ get_prefunded_accounts = import_module( ...@@ -62,6 +62,7 @@ get_prefunded_accounts = import_module(
"./src/prefunded_accounts/get_prefunded_accounts.star" "./src/prefunded_accounts/get_prefunded_accounts.star"
) )
spamoor = import_module("./src/spamoor/spamoor.star") spamoor = import_module("./src/spamoor/spamoor.star")
bunnyfinder = import_module("./src/bunnyfinder/bunnyfinder_launcher.star")
GRAFANA_USER = "admin" GRAFANA_USER = "admin"
GRAFANA_PASSWORD = "admin" GRAFANA_PASSWORD = "admin"
...@@ -696,6 +697,20 @@ def run(plan, args={}): ...@@ -696,6 +697,20 @@ def run(plan, args={}):
args_with_right_defaults.spamoor_params, args_with_right_defaults.spamoor_params,
global_node_selectors, global_node_selectors,
) )
elif additional_service == "bunnyfinder":
plan.print("Launching bunnyfinder")
bunnyfinder_config_template = read_file(
static_files.BUNNYFINDER_CONFIG_TEMPLATE_FILEPATH
)
bunnyfinder_params = args_with_right_defaults.bunnyfinder_params
bunnyfinder.launch_bunnyfinder(
plan,
bunnyfinder_config_template,
network_params,
bunnyfinder_params,
global_node_selectors,
)
plan.print("Successfully launched assertoor")
else: else:
fail("Invalid additional service %s" % (additional_service)) fail("Invalid additional service %s" % (additional_service))
if launch_prometheus_grafana: if launch_prometheus_grafana:
......
shared_utils = import_module("../shared_utils/shared_utils.star")
static_files = import_module("../static_files/static_files.star")
constants = import_module("../package_io/constants.star")
SERVICE_NAME = "bunnyfinder"
HTTP_PORT_ID = "http"
HTTP_PORT_NUMBER = 19000
SWAG_PORT_ID = "http"
SWAG_PORT_NUMBER = 19001
BUNNYFINDER_CONFIG_FILENAME = "bunnyfinder-config.yaml"
BUNNYFINDER_CONFIG_MOUNT_DIRPATH_ON_SERVICE = "/config"
BUNNYFINDER_TESTS_MOUNT_DIRPATH_ON_SERVICE = "/tests"
# The min/max CPU/memory that bunnyfinder can use
MIN_CPU = 100
MAX_CPU = 1000
MIN_MEMORY = 128
MAX_MEMORY = 2048
USED_PORTS = {
HTTP_PORT_ID: shared_utils.new_port_spec(
HTTP_PORT_NUMBER,
shared_utils.TCP_PROTOCOL,
shared_utils.HTTP_APPLICATION_PROTOCOL,
)
}
def launch_bunnyfinder(
plan,
config_template,
network_params,
bunnyfinder_params,
global_node_selectors,
):
template_data = new_config_template_data(
HTTP_PORT_NUMBER,
bunnyfinder_params,
)
template_and_data = shared_utils.new_template_and_data(
config_template, template_data
)
template_and_data_by_rel_dest_filepath = {}
template_and_data_by_rel_dest_filepath[
BUNNYFINDER_CONFIG_FILENAME
] = template_and_data
config_files_artifact_name = plan.render_templates(
template_and_data_by_rel_dest_filepath, "bunnyfinder-config"
)
config = get_config(
config_files_artifact_name,
network_params,
bunnyfinder_params,
global_node_selectors,
)
plan.add_service(SERVICE_NAME, config)
def get_config(
config_files_artifact_name,
network_params,
bunnyfinder_params,
node_selectors,
):
config_file_path = shared_utils.path_join(
BUNNYFINDER_CONFIG_MOUNT_DIRPATH_ON_SERVICE,
BUNNYFINDER_CONFIG_FILENAME,
)
IMAGE_NAME = bunnyfinder_params.image
return ServiceConfig(
image=IMAGE_NAME,
ports=USED_PORTS,
files={
BUNNYFINDER_CONFIG_MOUNT_DIRPATH_ON_SERVICE: config_files_artifact_name,
BUNNYFINDER_TESTS_MOUNT_DIRPATH_ON_SERVICE: tests_config_artifacts_name,
VALIDATOR_RANGES_MOUNT_DIRPATH_ON_SERVICE: VALIDATOR_RANGES_ARTIFACT_NAME,
},
cmd=["--config", config_file_path],
min_cpu=MIN_CPU,
max_cpu=MAX_CPU,
min_memory=MIN_MEMORY,
max_memory=MAX_MEMORY,
node_selectors=node_selectors,
)
def new_config_template_data(
listen_port_num,
bunnyfinder_params,
):
strategy = bunnyfinder_params.strategy
return {
"ListenPortNum": listen_port_num,
"Strategy": strategy,
}
...@@ -89,6 +89,7 @@ ATTR_TO_BE_SKIPPED_AT_ROOT = ( ...@@ -89,6 +89,7 @@ ATTR_TO_BE_SKIPPED_AT_ROOT = (
"xatu_sentry_params", "xatu_sentry_params",
"port_publisher", "port_publisher",
"spamoor_params", "spamoor_params",
"bunnyfinder_params",
) )
...@@ -123,6 +124,7 @@ def input_parser(plan, input_args): ...@@ -123,6 +124,7 @@ def input_parser(plan, input_args):
result["global_node_selectors"] = {} result["global_node_selectors"] = {}
result["port_publisher"] = get_port_publisher_params("default") result["port_publisher"] = get_port_publisher_params("default")
result["spamoor_params"] = get_default_spamoor_params() result["spamoor_params"] = get_default_spamoor_params()
result["bunnyfinder_params"] = get_default_bunnyfinder_params()
if constants.NETWORK_NAME.shadowfork in result["network_params"]["network"]: if constants.NETWORK_NAME.shadowfork in result["network_params"]["network"]:
shadow_base = result["network_params"]["network"].split("-shadowfork")[0] shadow_base = result["network_params"]["network"].split("-shadowfork")[0]
...@@ -192,6 +194,11 @@ def input_parser(plan, input_args): ...@@ -192,6 +194,11 @@ def input_parser(plan, input_args):
for sub_attr in input_args["spamoor_params"]: for sub_attr in input_args["spamoor_params"]:
sub_value = input_args["spamoor_params"][sub_attr] sub_value = input_args["spamoor_params"][sub_attr]
result["spamoor_params"][sub_attr] = sub_value result["spamoor_params"][sub_attr] = sub_value
elif attr == "bunnyfinder_params":
for sub_attr in input_args["bunnyfinder_params"]:
sub_value = input_args["bunnyfinder_params"][sub_attr]
result["bunnyfinder_params"][sub_attr] = sub_value
if result.get("disable_peer_scoring"): if result.get("disable_peer_scoring"):
result = enrich_disable_peer_scoring(result) result = enrich_disable_peer_scoring(result)
...@@ -456,6 +463,10 @@ def input_parser(plan, input_args): ...@@ -456,6 +463,10 @@ def input_parser(plan, input_args):
max_wallets=result["spamoor_params"]["max_wallets"], max_wallets=result["spamoor_params"]["max_wallets"],
spamoor_extra_args=result["spamoor_params"]["spamoor_extra_args"], spamoor_extra_args=result["spamoor_params"]["spamoor_extra_args"],
), ),
bunnyfinder_params=struct(
image=result["bunnyfinder_params"]["image"],
strategy=result["bunnyfinder_params"]["strategy"],
),
additional_services=result["additional_services"], additional_services=result["additional_services"],
wait_for_finalization=result["wait_for_finalization"], wait_for_finalization=result["wait_for_finalization"],
global_log_level=result["global_log_level"], global_log_level=result["global_log_level"],
...@@ -1192,6 +1203,12 @@ def get_default_spamoor_params(): ...@@ -1192,6 +1203,12 @@ def get_default_spamoor_params():
"spamoor_extra_args": [], "spamoor_extra_args": [],
} }
def get_default_bunnyfinder_params():
return {
"image": "tscel/bunnyfinder:latest",
"strategy": "random",
}
def get_default_custom_flood_params(): def get_default_custom_flood_params():
# this is a simple script that increases the balance of the coinbase address at a cadence # this is a simple script that increases the balance of the coinbase address at a cadence
...@@ -1389,6 +1406,7 @@ def docker_cache_image_override(plan, result): ...@@ -1389,6 +1406,7 @@ def docker_cache_image_override(plan, result):
"prometheus_params.image", "prometheus_params.image",
"grafana_params.image", "grafana_params.image",
"spamoor_params.image", "spamoor_params.image",
"bunnyfinder_params.image",
] ]
if result["docker_cache_params"]["url"] == "": if result["docker_cache_params"]["url"] == "":
......
...@@ -254,6 +254,10 @@ SUBCATEGORY_PARAMS = { ...@@ -254,6 +254,10 @@ SUBCATEGORY_PARAMS = {
"max_wallets", "max_wallets",
"spamoor_extra_args", "spamoor_extra_args",
], ],
"bunnyfinder_params": [
"image",
"strategy",
],
"port_publisher": [ "port_publisher": [
"nat_exit_ip", "nat_exit_ip",
"el", "el",
......
...@@ -104,3 +104,9 @@ FLASHBOTS_RBUILDER_CONFIG_FILEPATH = ( ...@@ -104,3 +104,9 @@ FLASHBOTS_RBUILDER_CONFIG_FILEPATH = (
COMMIT_BOOST_CONFIG_FILEPATH = ( COMMIT_BOOST_CONFIG_FILEPATH = (
STATIC_FILES_DIRPATH + "/mev/commit-boost/cb-config.toml.tmpl" STATIC_FILES_DIRPATH + "/mev/commit-boost/cb-config.toml.tmpl"
) )
# bunnyfinder config
BUNNYFINDER_CONFIG_DIRPATH = "/bunnyfinder-config"
BUNNYFINDER_CONFIG_TEMPLATE_FILEPATH = (
STATIC_FILES_DIRPATH + BUNNYFINDER_CONFIG_DIRPATH + "/config.yaml.tmpl"
)
endpoints:
{{ range $client := .ClientInfo }}
- name: "{{ $client.Name }}"
consensusUrl: "{{ $client.CL_HTTP_URL }}"
executionUrl: "http://{{ $client.ELIPAddr }}:{{ $client.ELPortNum }}"
{{- if .ELSnooperEnabled }}
executionSnooperUrl: "{{ $client.ELSnooperUrl }}"
{{- end }}
{{- if .CLSnooperEnabled }}
consensusSnooperUrl: "{{ $client.CLSnooperUrl }}"
{{- end }}
{{- end }}
web:
server:
host: "0.0.0.0"
port: 8080
frontend:
enabled: true
debug: true
pprof: true
api:
enabled: true
database:
engine: "sqlite"
sqlite:
file: "/assertoor-database.sqlite"
validatorNames:
inventoryYaml: "/validator-ranges/validator-ranges.yaml"
globalVars:
walletPrivkey: "850643a0224065ecce3882673c21f56bcf6eef86274cc21cadff15930b59fc8c"
clientPairNames:
{{- range $client := .ClientInfo }}
- "{{ $client.Name }}"
{{- end }}
validatorPairNames: {{ if eq (len .ValidatorClientInfo) 0 }}[]{{ end }}
{{- range $client := .ValidatorClientInfo }}
- "{{ $client.Name }}"
{{- end }}
elSnooperClientPairNames: {{ if eq (len .ElSnooperClientInfo) 0 }}[]{{ end }}
{{- range $client := .ElSnooperClientInfo }}
- "{{ $client.Name }}"
{{- end }}
clSnooperClientPairNames: {{ if eq (len .ClSnooperClientInfo) 0 }}[]{{ end }}
{{- range $client := .ClSnooperClientInfo }}
- "{{ $client.Name }}"
{{- end }}
externalTests:
{{- if .RunStabilityCheck }}
- file: /tests/stability-check.yaml
{{- end }}
{{- if .RunBlockProposalCheck }}
- file: /tests/block-proposal-check.yaml
{{- end }}
{{- if .RunTransactionTest }}
- file: /tests/eoa-transactions-test.yaml
{{- end }}
{{- if .RunBlobTransactionTest }}
- file: /tests/blob-transactions-test.yaml
{{- end }}
{{- if .RunOpcodesTransactionTest }}
- file: /tests/all-opcodes-transaction-test.yaml
{{- end }}
{{- if .RunLifecycleTest }}
- file: /tests/validator-lifecycle-test.yaml
{{- end }}
{{- range $test := .AdditionalTests }}
- {{ $test }}
{{- end }}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment