[
  {
    "path": ".claude/skills/kurtosis-ethereum/SKILL.md",
    "content": "---\nname: kurtosis-ethereum\ndescription: Run Ethereum multi-client devnets using Kurtosis and the ethpandaops/ethereum-package. Use for spinning up local devnets, syncing public testnets, validating cross-client interop, testing fork transitions, shadowforks, running assertoor checks, debugging CL/EL client interactions, or verifying new feature implementations across multiple consensus and execution clients.\nallowed-tools: Bash, Read, Write, Edit, WebFetch, Glob, Grep\n---\n\n# Kurtosis Devnet\n\nRun Ethereum consensus/execution client devnets via [kurtosis](https://github.com/kurtosis-tech/kurtosis) + [ethereum-package](https://github.com/ethpandaops/ethereum-package).\n\n## Config Principle\n\n**Only include fields that differ from defaults.** If the task doesn't mention a setting, don't include it. Shorter configs are better — let the defaults handle the rest.\n\n## Quick Start\n\n```bash\n# ALWAYS start grafloki first — enables Loki log collection for debugging\nkurtosis loki start\n\n# Write a network_params.yaml, then:\nkurtosis run github.com/ethpandaops/ethereum-package \\\n  --enclave <name> \\\n  --args-file network_params.yaml \\\n  --image-download always\n\nkurtosis enclave ls                    # list enclaves\nkurtosis enclave inspect <name>        # inspect services + ports\nkurtosis service logs <enclave> <svc>  # view logs\nkurtosis enclave rm -f <name>          # cleanup\n```\n\n**If you are told to use a fork or a branch of the ethereum-package, then replace github.com/ethpandaops/ethereum-package with github.com/<fork>/ethereum-package@branch**\n\n**If you want to quickly sanity check something, then use preset: \"minimal\". This will lead to much faster networks, but do not default to this approach. Only use it when you are sure you want to quickly check something. When the user expects it to behave like mainnet, then use preset: \"mainnet\".**\n\n## Config Structure (`network_params.yaml`)\n\n### `participants`\n\nEach entry is a CL+EL node. Only specify fields you need to override:\n\n```yaml\nparticipants:\n  - el_type: geth           # geth, reth, nethermind, besu, erigon\n    cl_type: lighthouse      # lighthouse, lodestar, prysm, teku, nimbus\n```\n\nAvailable overrides (only use when needed):\n- `el_image` / `cl_image` / `vc_image` — custom Docker images\n- `el_extra_params` / `cl_extra_params` / `vc_extra_params` — extra CLI flags\n- `el_max_cpu` / `el_max_mem` / `cl_max_cpu` / `cl_max_mem` — resource limits (millicores / MB)\n- `vc_type` — separate validator client type (creates a dedicated vc service)\n- `use_remote_signer: true` + `remote_signer_type: web3signer` — remote signing\n- `count` — number of identical instances (default: 1)\n- `validator_count` — validators assigned (default: from network config)\n\n### `network_params`\n\nNetwork-level settings. Only include fields you need to change. Use `kurtosis-ref.sh search <term>` to find exact field names — do not guess.\n\n```yaml\nnetwork_params:\n  # Only add fields the task requires. Examples of available settings:\n  # preset, seconds_per_slot, fork epochs, gas limits, etc.\n  # Verify field names with: bash .claude/skills/kurtosis-ethereum/kurtosis-ref.sh search <term>\n```\n\n### `additional_services`\n\n```yaml\nadditional_services:\n  - dora                     # block explorer\n  - assertoor                # automated testing\n```\n\n## Reference Tool\n\nOne script for all lookups. Use targeted sections instead of `all`.\n\n```bash\nbash .claude/skills/kurtosis-ethereum/kurtosis-ref.sh <section>\n```\n\n| Section | What it shows |\n|---------|--------------|\n| `clients` | Supported EL/CL/VC client types |\n| `participants` | Participant fields with defaults |\n| `network` | network_params fields with defaults |\n| `forks` | Fork epoch fields and defaults |\n| `mev` | MEV types and params |\n| `services` | Additional services list |\n| `sections` | Config subcategory and root-level params |\n| `search <term>` | Search the README for a field/concept |\n| `example <name>` | Fetch a real CI test config (e.g. `remote-signer`, `minimal`, `mix`) |\n| `examples` | List all available CI test configs |\n\nUse targeted sections instead of dumping everything. For example:\n- Need to know MEV options? `kurtosis-ref.sh mev`\n- Unsure about a field name? `kurtosis-ref.sh search gas_limit`\n- Need fork epoch names? `kurtosis-ref.sh forks`\n- Setting up something complex? `kurtosis-ref.sh example remote-signer` to see a working CI config\n\n## Service Naming Convention\n\n- EL: `el-{index}-{el_type}-{cl_type}`\n- CL: `cl-{index}-{cl_type}-{el_type}`\n- VC: `vc-{index}-{el_type}-{cl_type}-{vc_type}` (only when vc_type differs from cl_type)\n\n## Examples\n\n### 2-node devnet\n\n```yaml\nparticipants:\n  - el_type: geth\n    cl_type: lodestar\n  - el_type: reth\n    cl_type: lighthouse\n\nnetwork_params:\n  preset: minimal\n```\n\n### Mixed clients with monitoring\n\n```yaml\nparticipants:\n  - el_type: geth\n    cl_type: lighthouse\n  - el_type: nethermind\n    cl_type: prysm\n  - el_type: besu\n    cl_type: teku\n\nnetwork_params:\n  preset: minimal\n\nadditional_services:\n  - dora\n  - assertoor\n\nassertoor_params:\n  run_stability_check: true\n```\n\n### Custom images\n\n```yaml\nparticipants:\n  - el_type: geth\n    el_image: ethpandaops/geth:my-branch\n    cl_type: lighthouse\n    cl_image: ethpandaops/lighthouse:my-branch\n\nnetwork_params:\n  preset: minimal\n```\n\n### Observer node (no validators)\n\n```yaml\nparticipants:\n  - el_type: geth\n    cl_type: lighthouse\n    validator_count: 0\n\nnetwork_params:\n  preset: minimal\n```\n\n## Monitoring\n\n```bash\n# Check finality\ncurl -s http://127.0.0.1:<cl-port>/eth/v1/beacon/states/head/finality_checkpoints | jq\n\n# Check peers\ncurl -s http://127.0.0.1:<cl-port>/eth/v1/node/peers | jq '.data | length'\n```\n\nFinality requires ~6-8 min after genesis with default settings (32 slots/epoch, 12s/slot).\n\n## Troubleshooting\n\n| Issue | Fix                                                            |\n|-------|----------------------------------------------------------------|\n| Image not found | Verify image exists in registry; use `--image-download always` |\n| Port conflicts | May be conflicting enclaves, ask user how to proceed           |\n"
  },
  {
    "path": ".claude/skills/kurtosis-ethereum/kurtosis-ref.sh",
    "content": "#!/usr/bin/env bash\n# Unified reference tool for ethereum-package configuration.\n# Only fetches the source file(s) needed for the requested section.\n#\n# Usage:\n#   bash .claude/skills/kurtosis/kurtosis-ref.sh <section>\n#\n# Sections:\n#   clients       Supported EL/CL/VC client types\n#   participants  Participant fields with defaults\n#   network       network_params fields with defaults\n#   forks         Fork epoch fields and defaults\n#   mev           MEV types and params\n#   services      Additional services list\n#   sections      Config subcategory and root-level params\n#   search <term> Search the README for a field/concept\n#   example <name> Fetch a CI test config (e.g. remote-signer, minimal, mix)\n#   examples      List available CI test configs\n#   all           Dump all sections\nset -euo pipefail\n\nSECTION=\"${1:-all}\"\nSEARCH_TERM=\"${2:-}\"\n\nBASE=\"https://raw.githubusercontent.com/ethpandaops/ethereum-package/main/src/package_io\"\nREADME_URL=\"https://raw.githubusercontent.com/ethpandaops/ethereum-package/main/README.md\"\nTESTS_URL=\"https://raw.githubusercontent.com/ethpandaops/ethereum-package/main/.github/tests\"\nTESTS_LIST_URL=\"https://api.github.com/repos/ethpandaops/ethereum-package/contents/.github/tests\"\n\n# Lazy loaders — each file fetched at most once per invocation\nfetch_constants()    { [[ -z \"${constants:-}\" ]]    && constants=$(curl -sfL \"$BASE/constants.star\"); }\nfetch_input_parser() { [[ -z \"${input_parser:-}\" ]] && input_parser=$(curl -sfL \"$BASE/input_parser.star\"); }\nfetch_sanity_check() { [[ -z \"${sanity_check:-}\" ]] && sanity_check=$(curl -sfL \"$BASE/sanity_check.star\"); }\n\njoin_csv() { tr '\\n' ',' | sed 's/,$//' | sed 's/,/, /g'; }\n\nshow_clients() {\n  fetch_constants\n  echo \"## Supported Client Types\"\n  echo \"\"\n  echo -n \"EL: \"; echo \"$constants\" | sed -n '/^EL_TYPE = struct(/,/^)/p' | grep '^ ' | sed 's/.*\"\\(.*\\)\".*/\\1/' | join_csv; echo\n  echo -n \"CL: \"; echo \"$constants\" | sed -n '/^CL_TYPE = struct(/,/^)/p' | grep '^ ' | sed 's/.*\"\\(.*\\)\".*/\\1/' | join_csv; echo\n  echo -n \"VC: \"; echo \"$constants\" | sed -n '/^VC_TYPE = struct(/,/^)/p' | grep '^ ' | sed 's/.*\"\\(.*\\)\".*/\\1/' | join_csv; echo\n}\n\nshow_participants() {\n  fetch_input_parser\n  echo \"## Participant Fields (defaults)\"\n  echo \"\"\n  echo \"$input_parser\" | sed -n '/^def default_participant/,/^def /p' | grep '^ *\"[a-z]' | grep -v '^\\s*\"prometheus_config' | grep -v '^\\s*\"scrape_interval' | grep -v '^\\s*\"labels' | sed 's/^ *\"\\(.*\\)\": \\(.*\\),$/\\1: \\2/' | grep -v '^[[:space:]]*$'\n  echo \"prometheus_config: {scrape_interval: \\\"15s\\\", labels: None}\"\n}\n\nshow_network() {\n  fetch_input_parser\n  echo \"## network_params Fields (defaults)\"\n  echo \"\"\n  echo \"$input_parser\" | sed -n '/^def default_network_params/,/^def /p' | grep '^ *\"' | sed 's/^ *\"\\(.*\\)\": \\(.*\\),$/\\1: \\2/' | sed 's/constants\\.DEFAULT_MNEMONIC/\"<default-mnemonic>\"/' | sed 's/constants\\.FAR_FUTURE_EPOCH/FAR_FUTURE/'\n}\n\nshow_forks() {\n  fetch_input_parser\n  echo \"## Fork Epoch Defaults\"\n  echo \"\"\n  echo \"$input_parser\" | sed -n '/^def default_network_params/,/^def /p' | grep '_fork_epoch' | sed 's/^ *\"\\(.*\\)\": \\(.*\\),$/\\1: \\2/' | sed 's/constants.FAR_FUTURE_EPOCH/FAR_FUTURE/'\n}\n\nshow_mev() {\n  fetch_constants\n  echo \"## MEV Types\"\n  echo \"\"\n  echo \"$constants\" | grep '_MEV_TYPE = ' | sed 's/.*= \"\\(.*\\)\"/\\1/' | join_csv; echo\n  echo \"\"\n  echo \"## MEV Config\"\n  echo \"Set mev_type at root level. Optional mev_params for custom images.\"\n  echo \"Participant-level: el_builder_type, cl_builder_type for builder roles.\"\n}\n\nshow_services() {\n  fetch_sanity_check\n  echo \"## Additional Services\"\n  echo \"\"\n  echo \"$sanity_check\" | sed -n '/^ADDITIONAL_SERVICES_PARAMS = \\[/,/^\\]/p' | grep '\"' | sed 's/.*\"\\(.*\\)\".*/\\1/' | join_csv; echo\n}\n\nshow_sections() {\n  fetch_sanity_check\n  echo \"## Config Subcategory Params\"\n  echo \"\"\n  echo \"$sanity_check\" | sed -n '/^SUBCATEGORY_PARAMS = {/,/^}/p' | grep '^ *\"[a-z_]*\": \\[' | sed 's/^ *\"\\([a-z_]*\\)\".*/\\1/' | sort -u | join_csv; echo\n  echo \"\"\n  echo \"## Root-Level Params\"\n  echo \"\"\n  echo \"$sanity_check\" | sed -n '/^ADDITIONAL_CATEGORY_PARAMS = {/,/^}/p' | grep '^ *\"' | sed 's/^ *\"\\([a-z_]*\\)\".*/\\1/' | join_csv; echo\n}\n\ndo_search() {\n  local term=\"$1\"\n  local readme\n  readme=$(curl -sfL \"$README_URL\")\n  echo \"## Matches for '${term}' in ethereum-package README\"\n  echo \"\"\n  echo \"$readme\" | grep -n -i -B3 -A2 \"$term\" | head -80\n  echo \"\"\n  echo \"(Up to 80 lines shown. Refine search term if needed.)\"\n}\n\ndo_example() {\n  local name=\"$1\"\n  # Try with .yaml extension first, then .yml\n  local content\n  content=$(curl -sfL \"$TESTS_URL/${name}.yaml\" 2>/dev/null) || \\\n  content=$(curl -sfL \"$TESTS_URL/${name}.yml\" 2>/dev/null) || \\\n  content=$(curl -sfL \"$TESTS_URL/${name}\" 2>/dev/null) || {\n    echo \"No test config found for '${name}'.\"\n    echo \"Use 'kurtosis-ref.sh examples' to list available configs.\"\n    return 1\n  }\n  echo \"## CI test config: ${name}\"\n  echo \"\"\n  echo \"$content\"\n}\n\ndo_examples_list() {\n  local listing\n  listing=$(curl -sfL \"$TESTS_LIST_URL\") || {\n    echo \"Failed to fetch test config listing.\"\n    return 1\n  }\n  echo \"## Available CI test configs\"\n  echo \"\"\n  echo \"$listing\" | grep '\"name\"' | sed 's/.*\"name\": \"\\(.*\\)\".*/\\1/' | sed 's/\\.yaml$//' | sed 's/\\.yml$//' | sort\n}\n\ncase \"$SECTION\" in\n  clients)      show_clients ;;\n  participants)  show_participants ;;\n  network|network_params) show_network ;;\n  forks)        show_forks ;;\n  mev)          show_mev ;;\n  services)     show_services ;;\n  sections)     show_sections ;;\n  search)\n    if [[ -z \"$SEARCH_TERM\" ]]; then\n      echo \"Usage: kurtosis-ref.sh search <term>\"\n      exit 1\n    fi\n    do_search \"$SEARCH_TERM\"\n    ;;\n  example)\n    if [[ -z \"$SEARCH_TERM\" ]]; then\n      echo \"Usage: kurtosis-ref.sh example <name>\"\n      exit 1\n    fi\n    do_example \"$SEARCH_TERM\"\n    ;;\n  examples) do_examples_list ;;\n  all)\n    fetch_constants; fetch_input_parser; fetch_sanity_check\n    show_clients; echo \"\"\n    show_mev; echo \"\"\n    show_services; echo \"\"\n    show_forks; echo \"\"\n    show_network; echo \"\"\n    show_participants; echo \"\"\n    show_sections\n    ;;\n  *)\n    echo \"Unknown section: $SECTION\"\n    echo \"Available: clients, participants, network, forks, mev, services, sections, search <term>, example <name>, examples, all\"\n    exit 1\n    ;;\nesac\n"
  },
  {
    "path": ".editorconfig",
    "content": "# EditorConfig is awesome: https://EditorConfig.org\n\n# top-most EditorConfig file\nroot = true\n\n[*]\nindent_style = space\nindent_size = 2\nend_of_line = lf\ncharset = utf-8\ntrim_trailing_whitespace = true\ninsert_final_newline = true\n\n# This is the top-most .editorconfig file (do not search in parent directories)\nroot = true\n\n# 4 space indentation for all starlark files\n[*.star]\nindent_style = space\nindent_size = 4\n\n# 4 space indentation for all python files\n[*.py]\n\n# 2 space indentation for all yaml files\n[*.yml, *.yaml]\nindent_style = space\nindent_size = 2\n\n# 2 space indentation for all json files\n[*.json]\nindent_style = space\nindent_size = 2\n\n[*.yaml]\nindent_style = space\nindent_size = 2\n"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/bug-report.md",
    "content": "---\nname: Bug report\nabout: Create a bug report\ntitle: ''\nlabels: bug\nassignees: ''\n\n---\n\n<!-- Ethereum package is meant for strictly development purposes. It is not suitable for production use, and the use of production setup will always be actively discouraged. \nPlease note that all issues related to setting up ethereum package in a production environment e.g:\n- Setup a long running permanent network\n- Exposing services for the public - rpc/beacon/tooling endpoints\n- Syncing external nodes to an already running enclave\n- Running testnet/mainnet validators\n- Any other issues that smell like production use\nAny issues that are related to to the above mentioned topics/related to running kurtosis with ethereum-package in a production like environment will be automatically closed. By opening an issue you agree to these terms.  -->\n"
  },
  {
    "path": ".github/actions/docker-login/action.yaml",
    "content": "name: Docker login\ndescription: Log in to Docker Hub\ninputs:\n  username:\n     required: true\n  password:\n     required: true\nruns:\n  using: composite\n  steps:\n    - name: Check for Docker Hub credentials\n      shell: bash\n      env:\n        DOCKER_USERNAME: ${{ inputs.username }}\n        DOCKER_PASSWORD: ${{ inputs.password }}\n      run: |\n        if [ -z \"$DOCKER_USERNAME\" ] || [ -z \"$DOCKER_PASSWORD\" ]; then\n          echo \"AUTH_EXISTS=false\" >> $GITHUB_ENV\n          echo \"No credentials provided\"\n        else\n          echo \"AUTH_EXISTS=true\" >> $GITHUB_ENV\n          echo \"Credentials provided\"\n        fi\n\n    - name: Login to Docker Hub\n      if: env.AUTH_EXISTS == 'true'\n      uses: docker/login-action@b45d80f862d83dbcd57f89517bcf500b2ab88fb2 # v4.0.0\n      with:\n        username: ${{ inputs.username }}\n        password: ${{ inputs.password }}\n\n    - name: Install regctl\n      uses: regclient/actions/regctl-installer@1b705e32d40851370799ea5814e83d0a5f6a70dc # v0.1.0\n\n    - name: Check Docker Hub Rate Limits\n      shell: bash\n      run: regctl image ratelimit ubuntu:latest\n"
  },
  {
    "path": ".github/actions/kurtosis-install/action.yaml",
    "content": "name: Kurtosis install\ninputs:\n  version:\n    description: 'Version to install'\n    required: false\n    default: 'latest'\nruns:\n  using: composite\n  steps:\n    - name: Install\n      shell: bash\n      run: |\n        echo \"deb [trusted=yes] https://sdk.kurtosis.com/kurtosis-cli-release-artifacts/ /\" | sudo tee /etc/apt/sources.list.d/kurtosis.list\n        sudo apt update\n        if [ \"${{ inputs.version }}\" = \"latest\" ]; then\n          sudo apt install kurtosis-cli\n        else\n          sudo apt install kurtosis-cli=${{ inputs.version }}\n        fi\n        kurtosis analytics disable\n        echo \"$(dirname $(which kurtosis))\" >> $GITHUB_PATH\n\n        # Get the installed version and save it as an environment variable\n        KURTOSIS_VERSION=$(kurtosis version | grep -o 'Version:[[:space:]]*[^[:space:]]*' | cut -d':' -f2 | tr -d ' ')\n        echo \"KURTOSIS_VERSION=$KURTOSIS_VERSION\" >> $GITHUB_ENV\n        echo \"Installed Kurtosis version: $KURTOSIS_VERSION\"\n"
  },
  {
    "path": ".github/check-consensus-spec-values.py",
    "content": "#!/usr/bin/env python3\n\"\"\"\nCompares a generated config.yaml against the upstream consensus-specs config.\n\nExits non-zero if any non-excluded fields have different values or are missing\nfrom our config relative to the upstream spec.\n\"\"\"\n\nimport argparse\nimport sys\nimport urllib.request\n\nimport yaml\n\n\n# Fields that are intentionally testnet-specific or explicitly excluded from comparison.\nEXCLUDED_FIELDS = {\n    # Network identity - intentionally differs for testnets\n    \"CONFIG_NAME\",\n    # Merge transition - testnets start post-merge with TTD=0\n    \"TERMINAL_TOTAL_DIFFICULTY\",\n    # Genesis params - testnet-configurable\n    \"MIN_GENESIS_ACTIVE_VALIDATOR_COUNT\",\n    \"MIN_GENESIS_TIME\",\n    \"GENESIS_FORK_VERSION\",\n    \"GENESIS_DELAY\",\n    # Fork versions - testnet-specific values\n    \"ALTAIR_FORK_VERSION\",\n    \"BELLATRIX_FORK_VERSION\",\n    \"CAPELLA_FORK_VERSION\",\n    \"DENEB_FORK_VERSION\",\n    \"ELECTRA_FORK_VERSION\",\n    \"FULU_FORK_VERSION\",\n    \"GLOAS_FORK_VERSION\",\n    \"HEZE_FORK_VERSION\",\n    \"EIP7928_FORK_VERSION\",\n    # Fork activation epochs - testnets activate all forks at epoch 0\n    \"ALTAIR_FORK_EPOCH\",\n    \"BELLATRIX_FORK_EPOCH\",\n    \"CAPELLA_FORK_EPOCH\",\n    \"DENEB_FORK_EPOCH\",\n    \"ELECTRA_FORK_EPOCH\",\n    \"FULU_FORK_EPOCH\",\n    \"GLOAS_FORK_EPOCH\",\n    \"HEZE_FORK_EPOCH\",\n    \"EIP7928_FORK_EPOCH\",\n    # Deposit contract - testnet-configurable\n    \"DEPOSIT_CHAIN_ID\",\n    \"DEPOSIT_NETWORK_ID\",\n    \"DEPOSIT_CONTRACT_ADDRESS\",\n    # Blob schedule - explicitly excluded\n    \"BLOB_SCHEDULE\",\n    # Deprecated field moved to preset files, not present in spec configs\n    \"SECONDS_PER_SLOT\",\n}\n\n\ndef load_yaml(path_or_url: str) -> dict:\n    if path_or_url.startswith(\"http://\") or path_or_url.startswith(\"https://\"):\n        with urllib.request.urlopen(path_or_url) as response:\n            return yaml.safe_load(response.read().decode())\n    with open(path_or_url) as f:\n        return yaml.safe_load(f)\n\n\ndef compare_configs(our_config: dict, spec_config: dict) -> bool:\n    failures = []\n    warnings = []\n\n    spec_keys = {k for k in spec_config if k not in EXCLUDED_FIELDS}\n    our_keys = {k for k in our_config if k not in EXCLUDED_FIELDS}\n\n    for key in sorted(spec_keys - our_keys):\n        failures.append(\n            f\"  MISSING in our config: {key!r}  (spec has: {spec_config[key]!r})\"\n        )\n\n    for key in sorted(spec_keys & our_keys):\n        spec_val = spec_config[key]\n        our_val = our_config[key]\n        if spec_val != our_val:\n            failures.append(\n                f\"  MISMATCH {key!r}:\\n\"\n                f\"    ours: {our_val!r}\\n\"\n                f\"    spec: {spec_val!r}\"\n            )\n\n    for key in sorted(our_keys - spec_keys):\n        warnings.append(\n            f\"  EXTRA field in our config (not in spec): {key!r} = {our_config[key]!r}\"\n        )\n\n    if warnings:\n        print(\"Warnings (fields present in our config but not in the upstream spec):\")\n        for w in warnings:\n            print(w)\n        print()\n\n    if failures:\n        print(f\"FAILED: {len(failures)} issue(s) found:\")\n        for failure in failures:\n            print(failure)\n        return False\n\n    print(f\"OK: all {len(spec_keys & our_keys)} comparable spec fields match.\")\n    return True\n\n\ndef main():\n    parser = argparse.ArgumentParser(\n        description=\"Compare our generated config.yaml against the upstream consensus-specs config\"\n    )\n    parser.add_argument(\n        \"--our-config\",\n        required=True,\n        help=\"Path to our generated config.yaml\",\n    )\n    parser.add_argument(\n        \"--spec-config\",\n        required=True,\n        help=\"Path or HTTPS URL to the upstream consensus-spec config.yaml\",\n    )\n    args = parser.parse_args()\n\n    our_config = load_yaml(args.our_config)\n    spec_config = load_yaml(args.spec_config)\n\n    if not compare_configs(our_config, spec_config):\n        sys.exit(1)\n\n\nif __name__ == \"__main__\":\n    main()\n"
  },
  {
    "path": ".github/dependabot.yml",
    "content": "version: 2\nupdates:\n   - package-ecosystem: github-actions\n     directory: /\n     schedule:\n        interval: weekly\n     groups:\n        actions:\n           patterns:\n              - '*'\n"
  },
  {
    "path": ".github/remove_trailing_space.py",
    "content": "# This is used by the pr-description-update action\n# to trim trailing newlines and spaces in pr descriptions\n\nimport sys\n\ndef remove():\n    line = sys.argv[1]\n    return line.strip()\n\nif __name__ == \"__main__\":\n    print(remove())\n"
  },
  {
    "path": ".github/tests/1gpu_zkvm.yaml_norun",
    "content": "# EIP-8025 testnet with zkboost backed by a single GPU ZisK prover.\n#\n#\n# Run with:\n#   kurtosis run --enclave eip8025-zkboost-1gpu \\\n#       . \\\n#       --args-file .github/tests/1gpu_zkvm.yaml_norun\n#\n# Prerequisites:\n#   - NVIDIA GPU with drivers installed\n#   - NVIDIA Container Toolkit configured for Docker\n\nparticipants:\n  - cl_type: lighthouse\n    cl_image: ethpandaops/lighthouse:eth-act-optional-proofs\n    el_type: reth\n    el_image: ghcr.io/paradigmxyz/reth\n    supernode: true\n    cl_extra_params:\n      - --target-peers=3\n      - --proof-engine-endpoint=http://zkboost-1:3000\n      - --proof-types=6\n    vc_extra_params:\n      - --proof-engine-endpoint=http://zkboost-1:3000\n      - --proof-types=6\n    count: 2\n  - cl_type: lighthouse\n    cl_image: ethpandaops/lighthouse:eth-act-optional-proofs\n    el_type: dummy\n    supernode: false\n    cl_extra_params:\n      - --target-peers=3\n      - --proof-engine-endpoint=http://zkboost-1:3000\n      - --proof-types=6\n    count: 2\n\nnetwork_params:\n  seconds_per_slot: 30\n\nadditional_services:\n  - zkboost\n  - dora\n  - prometheus\n  - grafana\n  - tempo\n\nzkboost_params:\n  image: ghcr.io/eth-act/zkboost/zkboost:0.6.0\n  env:\n    RUST_LOG: info,zkboost=debug\n  instances:\n    - name: zkboost-1\n      el_participant_index: 0\n  zkvms:\n    - kind: ere\n      proof_type: reth-zisk\n      gpu:\n        device_ids: [\"0\"]\n"
  },
  {
    "path": ".github/tests/8gpu_zkvm.yaml_norun",
    "content": "# EIP-8025 testnet with zkboost backed by GPU (ZisK) provers.\n#\n#\n# Run with:\n#   kurtosis run --enclave eip8025-zkboost-8gpu \\\n#       . \\\n#       --args-file .github/tests/8gpu_zkvm.yaml_norun\n#\n# Prerequisites:\n#   - NVIDIA GPUs with drivers installed (8 GPUs: 4 per prover type)\n#   - NVIDIA Container Toolkit configured for Docker\n\nparticipants:\n  - cl_type: lighthouse\n    cl_image: ethpandaops/lighthouse:eth-act-optional-proofs\n    el_type: reth\n    el_image: ghcr.io/paradigmxyz/reth\n    supernode: true\n    cl_extra_params:\n      - --target-peers=3\n      - --proof-engine-endpoint=http://zkboost-1:3000\n      - --proof-types=2,6\n    vc_extra_params:\n      - --proof-engine-endpoint=http://zkboost-1:3000\n      - --proof-types=2,6\n    count: 2\n  - cl_type: lighthouse\n    cl_image: ethpandaops/lighthouse:eth-act-optional-proofs\n    el_type: reth\n    el_image: ghcr.io/paradigmxyz/reth\n    supernode: false\n    cl_extra_params:\n      - --target-peers=3\n      - --proof-engine-endpoint=http://zkboost-1:3000\n      - --proof-types=6\n    vc_extra_params:\n      - --proof-engine-endpoint=http://zkboost-1:3000\n      - --proof-types=6\n    count: 2\n\nnetwork_params:\n  fulu_fork_epoch: 0\n  seconds_per_slot: 6\n\nsnooper_enabled: false\nglobal_log_level: debug\n\nadditional_services:\n  - zkboost\n  - dora\n  - prometheus\n  - grafana\n  - tempo\n\nzkboost_params:\n  image: ghcr.io/eth-act/zkboost/zkboost:0.6.0\n  env:\n    RUST_LOG: info,zkboost=debug\n  instances:\n    - name: zkboost-1\n      el_participant_index: 0\n  zkvms:\n    - kind: ere\n      proof_type: reth-zisk\n      gpu:\n        device_ids: [\"0\", \"1\", \"2\", \"3\"]\n    - kind: ere\n      proof_type: ethrex-zisk\n      gpu:\n        device_ids: [\"4\", \"5\", \"6\", \"7\"]\n"
  },
  {
    "path": ".github/tests/altair-genesis.yaml",
    "content": "participants:\n  - el_type: geth\n    cl_type: teku\n    supernode: true\n  - el_type: reth\n    cl_type: prysm\n  - el_type: nethermind\n    cl_type: nimbus\n  - el_type: besu\n    cl_type: lighthouse\n  - el_type: nimbus\n    cl_type: lodestar\n  - el_type: erigon\n    cl_type: grandine\n  - el_type: ethrex\n    cl_type: lodestar\nadditional_services:\n  - dora\nnetwork_params:\n  altair_fork_epoch: 0\n  bellatrix_fork_epoch: 1\n  capella_fork_epoch: 2\n  deneb_fork_epoch: 3\n  electra_fork_epoch: 4\n  fulu_fork_epoch: 5\n  bpo_1_epoch: 6\n  gloas_fork_epoch: 7\n  genesis_delay: 120\n\n"
  },
  {
    "path": ".github/tests/archive-storage.yaml.norun",
    "content": "# Test archive mode for clients that default to full (geth, nethermind, besu)\nparticipants:\n  - el_type: geth\n    el_storage_type: archive\n    cl_type: lighthouse\n  - el_type: nethermind\n    el_storage_type: archive\n    cl_type: teku\n  - el_type: besu\n    el_storage_type: archive\n    cl_type: nimbus\n"
  },
  {
    "path": ".github/tests/assertoor.yaml",
    "content": "participants:\n  - el_type: geth\n    cl_type: lighthouse\n    count: 1\n  - el_type: geth\n    cl_type: lodestar\n    count: 1\nadditional_services:\n  - assertoor\n"
  },
  {
    "path": ".github/tests/bal-devnet-0.yaml_norun",
    "content": "participants_matrix:\n  el:\n    - el_type: reth\n      el_image: ethpandaops/reth:bal-devnet-0\n    - el_type: geth\n      el_image: ethpandaops/geth:bal-devnet-0\n    - el_type: besu\n      el_image: ethpandaops/besu:bal-devnet-0\n      el_extra_params: [\"--bonsai-parallel-tx-processing-enabled=false\"]\n  cl:\n    - cl_type: lodestar\n      cl_image: ethpandaops/lodestar:bal-devnet-0\n      supernode: true\n    - cl_type: prysm\n      cl_image: ethpandaops/prysm-beacon-chain:bal-devnet-0\nnetwork_params:\n  genesis_delay: 20\n  fulu_fork_epoch: 0\n  gloas_fork_epoch: 1\nsnooper_enabled: true\ndora_params:\n  image: ethpandaops/dora:eip7928-support\nadditional_services:\n  - dora\n  - tx_fuzz\n  - spamoor\n"
  },
  {
    "path": ".github/tests/bellatrix-genesis.yaml",
    "content": "participants:\n  - el_type: geth\n    cl_type: teku\n    supernode: true\n  - el_type: reth\n    cl_type: prysm\n  - el_type: nethermind\n    cl_type: nimbus\n  - el_type: besu\n    cl_type: lighthouse\n  - el_type: nimbus\n    cl_type: lodestar\n  - el_type: erigon\n    cl_type: grandine\n  - el_type: ethrex\n    cl_type: lodestar\nadditional_services:\n  - dora\nnetwork_params:\n  altair_fork_epoch: 0\n  bellatrix_fork_epoch: 0\n  capella_fork_epoch: 1\n  deneb_fork_epoch: 2\n  electra_fork_epoch: 3\n  fulu_fork_epoch: 4\n  bpo_1_epoch: 5\n  gloas_fork_epoch: 6\n  genesis_delay: 120\n"
  },
  {
    "path": ".github/tests/besu-all.yaml",
    "content": "participants:\n  - el_type: besu\n    cl_type: prysm\n  - el_type: besu\n    cl_type: teku\n  - el_type: besu\n    cl_type: nimbus\n  - el_type: besu\n    cl_type: lighthouse\n  - el_type: besu\n    cl_type: lodestar\n  - el_type: besu\n    cl_type: grandine\n"
  },
  {
    "path": ".github/tests/binary.yaml_norun",
    "content": "participants:\n  - cl_type: lighthouse\n    cl_image: ethpandaops/lighthouse:unstable\n    count: 4\n  - el_type: geth\n    cl_type: lighthouse\n    cl_image: ethpandaops/lighthouse:unstable\n    cl_binary_path: binary/lighthouse\nadditional_services:\n  - dora\n"
  },
  {
    "path": ".github/tests/binary_force.yaml_norun",
    "content": "participants:\n  - cl_type: lighthouse\n    cl_image: ethpandaops/lighthouse:unstable\n    count: 4\n  - el_type: geth\n    cl_type: lighthouse\n    cl_image: ethpandaops/lighthouse:unstable\n    cl_binary_path: binary/lighthouse\n    cl_force_restart: true\nadditional_services:\n  - dora\n"
  },
  {
    "path": ".github/tests/blobber.yaml",
    "content": "participants:\n  - el_type: geth\n    el_image: ethpandaops/geth:master\n    cl_type: lighthouse\n    blobber_enabled: true\n    blobber_image: ethpandaops/blobber:latest\n    blobber_extra_params:\n      - --proposal-action-frequency=1\n      - \"--proposal-action={\\\"name\\\": \\\"blob_gossip_delay\\\", \\\"delay_milliseconds\\\": 3000}\"\n    count: 1\n  - el_type: geth\n    el_image: ethpandaops/geth:master\n    cl_type: lodestar\n    count: 1\n  - el_type: geth\n    el_image: ethpandaops/geth:master\n    cl_type: prysm\n    blobber_enabled: true\n    blobber_image: ethpandaops/blobber:latest\n    blobber_extra_params:\n      - --proposal-action-frequency=1\n      - \"--proposal-action={\\\"name\\\": \\\"blob_gossip_delay\\\", \\\"delay_milliseconds\\\": 30000}\"\n    count: 1\n\nadditional_services:\n  - dora\n  - spamoor\n\n#       - \"--proposal-action={\\\"name\\\": \\\"blob_gossip_delay\\\", \\\"delay_milliseconds\\\": 30000}\"\n#       - \"--proposal-action={\\\"name\\\": \\\"conflicting_blobs\\\"}\"\n"
  },
  {
    "path": ".github/tests/bootnodoor.yaml",
    "content": "participants:\n  - el_type: geth\n    cl_type: lighthouse\n    count: 1\n  - el_type: geth\n    cl_type: lodestar\n    count: 1\nadditional_services:\n  - dora\n  - bootnodoor\n\n"
  },
  {
    "path": ".github/tests/capella-genesis.yaml",
    "content": "participants:\n  - el_type: geth\n    cl_type: teku\n    supernode: true\n  - el_type: reth\n    cl_type: prysm\n  - el_type: nethermind\n    cl_type: nimbus\n  - el_type: besu\n    cl_type: lighthouse\n  - el_type: nimbus\n    cl_type: lodestar\n  - el_type: erigon\n    cl_type: grandine\n  - el_type: ethrex\n    cl_type: teku\nadditional_services:\n  - dora\nnetwork_params:\n  altair_fork_epoch: 0\n  bellatrix_fork_epoch: 0\n  capella_fork_epoch: 0\n  deneb_fork_epoch: 1\n  electra_fork_epoch: 2\n  fulu_fork_epoch: 3\n  bpo_1_epoch: 4\n  gloas_fork_epoch: 5\n  genesis_delay: 120\n"
  },
  {
    "path": ".github/tests/caplin-basic.yaml",
    "content": "participants:\n  - el_type: erigon\n    cl_type: caplin\n    use_separate_vc: true\n    vc_type: lighthouse\n  - el_type: geth\n    cl_type: lighthouse\n"
  },
  {
    "path": ".github/tests/consensoor-basic.yaml",
    "content": "participants:\n  - el_type: geth\n    el_image: ethpandaops/geth:epbs-devnet-0\n    cl_type: consensoor\n    cl_image: ethpandaops/consensoor:main\nnetwork_params:\n  #gloas_fork_epoch: 1  # GLOAS/ePBS at epoch 2 (slot 16 with minimal preset)\n  preset: mainnet\n\n\nadditional_services:\n  - dora\n  #- spamoor\nsnooper_enabled: true\nglobal_log_level: debug\n\nport_publisher:\n  cl:\n    enabled: true\n  additional_services:\n    enabled: true\n"
  },
  {
    "path": ".github/tests/custom-contracts.yaml",
    "content": "participants:\n  - el_type: geth\n    cl_type: teku\n  - el_type: nethermind\n    cl_type: prysm\n  - el_type: erigon\n    cl_type: nimbus\n  - el_type: besu\n    cl_type: lighthouse\n  - el_type: reth\n    cl_type: lodestar\n  - el_type: ethrex\n    cl_type: teku\nnetwork_params:\n  network: kurtosis\n  additional_preloaded_contracts: '{\"0x123463a4B065722E99115D6c222f267d9cABb524\": {\"balance\": \"2ETH\",\"code\": \"0x1234\",\"storage\": {}}}'\n"
  },
  {
    "path": ".github/tests/custom-mnemonics.yaml",
    "content": "participants:\n  - el_type: geth\n    cl_type: teku\n  - el_type: nethermind\n    cl_type: prysm\n  - el_type: erigon\n    cl_type: nimbus\n  - el_type: besu\n    cl_type: lighthouse\n  - el_type: reth\n    cl_type: lodestar\n  - el_type: ethrex\n    cl_type: teku\nnetwork_params:\n  network: kurtosis\n  num_validator_keys_per_node: 128\n  additional_mnemonics:\n    - mnemonic: \"estate dog switch misery manage room million bleak wrap distance always insane usage busy chicken limit already duck feature unhappy dial emotion expire please\"\n      count: 10\n      status: 1 # exited\n    - mnemonic: \"bachelor goose intact globe grab observe youth kit castle purchase ranch safe wire planet portion artist soon captain before cute dinner arrange cat churn\"\n      count: 10\n      status: 2 # slashed & exited\n"
  },
  {
    "path": ".github/tests/deneb-genesis.yaml",
    "content": "participants:\n  - el_type: geth\n    cl_type: teku\n  - el_type: nethermind\n    cl_type: prysm\n  - el_type: erigon\n    cl_type: nimbus\n  - el_type: besu\n    cl_type: lighthouse\n  - el_type: reth\n    cl_type: lodestar\n  - el_type: ethrex\n    cl_type: prysm\nnetwork_params:\n  altair_fork_epoch: 0\n  bellatrix_fork_epoch: 0\n  capella_fork_epoch: 0\n  deneb_fork_epoch: 0\n  electra_fork_epoch: 1\n  fulu_fork_epoch: 2\n  bpo_1_epoch: 3\n  gloas_fork_epoch: 4\n  genesis_delay: 120\n"
  },
  {
    "path": ".github/tests/deneb.yaml",
    "content": "participants:\n  - el_type: geth\n    cl_type: teku\n    supernode: true\n  - el_type: reth\n    cl_type: prysm\n  - el_type: nethermind\n    cl_type: nimbus\n  - el_type: besu\n    cl_type: lighthouse\n  - el_type: nimbus\n    cl_type: lodestar\n  - el_type: erigon\n    cl_type: grandine\n  - el_type: ethrex\n    cl_type: lodestar\nadditional_services:\n  - dora\nnetwork_params:\n  altair_fork_epoch: 0\n  bellatrix_fork_epoch: 0\n  capella_fork_epoch: 0\n  deneb_fork_epoch: 1\n  electra_fork_epoch: 2\n  fulu_fork_epoch: 3\n  bpo_1_epoch: 4\n  gloas_fork_epoch: 5\n  preset: minimal\n"
  },
  {
    "path": ".github/tests/disable-peer-scoring.yaml",
    "content": "participants:\n  - el_type: geth\n    cl_type: teku\n  - el_type: besu\n    cl_type: lighthouse\n  - el_type: reth\n    cl_type: lodestar\n  - el_type: erigon\n    cl_type: nimbus\n  - el_type: nethermind\n    cl_type: prysm\n  - el_type: ethrex\n    cl_type: teku\ndisable_peer_scoring: true\n"
  },
  {
    "path": ".github/tests/dummy-el.yaml",
    "content": "participants:\n  - el_type: geth\n  - el_type: dummy\n    cl_type: teku\n  - el_type: dummy\n    cl_type: prysm\n  - el_type: dummy\n    cl_type: nimbus\n  - el_type: dummy\n    cl_type: lighthouse\n  - el_type: dummy\n    cl_type: lodestar\n  - el_type: dummy\n    cl_type: grandine\n\nnetwork_params:\n  preset: minimal\n"
  },
  {
    "path": ".github/tests/electra-genesis.yaml",
    "content": "participants:\n  - el_type: geth\n    cl_type: teku\n  - el_type: nethermind\n    cl_type: prysm\n  - el_type: erigon\n    cl_type: nimbus\n  - el_type: besu\n    cl_type: lighthouse\n  - el_type: reth\n    cl_type: lodestar\n  - el_type: ethrex\n    cl_type: lighthouse\nnetwork_params:\n  altair_fork_epoch: 0\n  bellatrix_fork_epoch: 0\n  capella_fork_epoch: 0\n  deneb_fork_epoch: 0\n  electra_fork_epoch: 0\n  fulu_fork_epoch: 1\n  bpo_1_epoch: 1\n  gloas_fork_epoch: 2\n  genesis_delay: 120\nadditional_services:\n  - dora\n"
  },
  {
    "path": ".github/tests/ephemery.yaml",
    "content": "participants:\n  - el_type: geth\n    cl_type: teku\n  - el_type: nethermind\n    cl_type: prysm\n  - el_type: erigon\n    cl_type: nimbus\n  - el_type: besu\n    cl_type: lighthouse\n  - el_type: reth\n    cl_type: lodestar\n  - el_type: besu\n    cl_type: grandine\n  - el_type: ethrex\n    cl_type: teku\nnetwork_params:\n  network: sepolia\ncheckpoint_sync_enabled: true\n"
  },
  {
    "path": ".github/tests/erigon-all.yaml",
    "content": "participants:\n  - el_type: erigon\n    cl_type: teku\n  - el_type: erigon\n    cl_type: prysm\n  - el_type: erigon\n    cl_type: nimbus\n  - el_type: erigon\n    cl_type: lighthouse\n  - el_type: erigon\n    cl_type: lodestar\n  - el_type: erigon\n    cl_type: grandine\n  - el_type: erigon\n    cl_type: caplin\n    use_separate_vc: true\n    vc_type: lighthouse\n"
  },
  {
    "path": ".github/tests/erpc.yaml",
    "content": "participants:\n  - el_type: geth\n    cl_type: lighthouse\n    count: 2\n  - el_type: reth\n    cl_type: prysm\n    count: 1\n\n\nadditional_services:\n  - erpc\n"
  },
  {
    "path": ".github/tests/ethereumjs-all.yaml.norun",
    "content": "participants:\n  - el_type: ethereumjs\n    cl_type: teku\n  - el_type: ethereumjs\n    cl_type: prysm\n  - el_type: ethereumjs\n    cl_type: nimbus\n  - el_type: ethereumjs\n    cl_type: lighthouse\n  - el_type: ethereumjs\n    cl_type: lodestar\n  - el_type: ethereumjs\n    cl_type: grandine\n"
  },
  {
    "path": ".github/tests/ethrex.yaml",
    "content": "participants:\n  - el_type: ethrex\n    cl_type: teku\n  - el_type: ethrex\n    cl_type: prysm\n  - el_type: ethrex\n    cl_type: nimbus\n  - el_type: ethrex\n    cl_type: lighthouse\n  - el_type: ethrex\n    cl_type: lodestar\n  - el_type: ethrex\n    cl_type: grandine\n"
  },
  {
    "path": ".github/tests/force.yaml",
    "content": "participants:\n  - cl_type: lighthouse\n    cl_image: ethpandaops/lighthouse:unstable\n    count: 2\n  - el_type: geth\n    cl_type: lighthouse\n    cl_image: ethpandaops/lighthouse:unstable\n    cl_force_restart: true\n"
  },
  {
    "path": ".github/tests/full-storage.yaml.norun",
    "content": "# Test full mode for clients that default to archive (reth, erigon)\nparticipants:\n  - el_type: reth\n    el_storage_type: full\n    cl_type: lighthouse\n  - el_type: erigon\n    el_storage_type: full\n    cl_type: teku\n"
  },
  {
    "path": ".github/tests/fulu-genesis.yaml",
    "content": "participants:\n  - el_type: geth\n    el_image: ethpandaops/geth:master\n    el_extra_params: [\"--miner.extradata=lighthouseFromLocal\"]\n    cl_type: lighthouse\n    cl_image: ethpandaops/lighthouse:unstable\n    supernode: true\n\n  - el_type: nethermind\n    el_image: ethpandaops/nethermind:master\n    el_extra_params: [\"--Blocks.ExtraData=TekuFromLocal\"]\n    cl_type: teku\n    cl_image: ethpandaops/teku:master\n\n  - el_type: reth\n    el_image: ethpandaops/reth:main\n    el_extra_params: [\"--builder.extradata=LodestarFromLocal\"]\n    cl_type: lodestar\n    cl_image: ethpandaops/lodestar:unstable\n\n  - el_type: geth\n    el_image: ethpandaops/geth:master\n    el_extra_params: [\"--miner.extradata=PrysmFromLocal\"]\n    cl_type: prysm\n    cl_image: ethpandaops/prysm-beacon-chain:develop\n\n  - el_type: nethermind\n    el_image: ethpandaops/nethermind:master\n    el_extra_params: [\"--Blocks.ExtraData=NimbusFromLocal\"]\n    cl_type: nimbus\n    cl_image: ethpandaops/nimbus-eth2:unstable\n\n  - el_type: reth\n    el_image: ethpandaops/reth:main\n    el_extra_params: [\"--builder.extradata=GrandineFromLocal\"]\n    cl_type: grandine\n    cl_image: ethpandaops/grandine:develop\nnetwork_params:\n  altair_fork_epoch: 0\n  bellatrix_fork_epoch: 0\n  capella_fork_epoch: 0\n  deneb_fork_epoch: 0\n  electra_fork_epoch: 0\n  fulu_fork_epoch: 0\n  bpo_1_epoch: 1\n  gloas_fork_epoch: 2\n  genesis_delay: 120\nadditional_services:\n  - dora\n\n"
  },
  {
    "path": ".github/tests/fulu-mev.yaml",
    "content": "participants:\n  - el_type: geth\n    el_image: ethpandaops/geth:master\n    cl_type: lighthouse\n    cl_image: ethpandaops/lighthouse:unstable\n    vc_image: ethpandaops/lighthouse:unstable\n    supernode: true\n    count: 2\n  - el_type: nethermind\n    el_image: ethpandaops/nethermind:master\n    cl_type: prysm\n    cl_image: ethpandaops/prysm-beacon-chain:develop\n    supernode: true\n\nadditional_services:\n  - dora\n  - spamoor\n\nmev_type: flashbots\nmev_params:\n  mev_relay_image: ethpandaops/mev-boost-relay:main\n  mev_builder_image: ethpandaops/reth-rbuilder:develop\n  mev_boost_image: ethpandaops/mev-boost:develop\n  mev_builder_cl_image: ethpandaops/lighthouse:unstable\n  mev_builder_subsidy: 1\n\nspamoor_params:\n  spammers:\n     - name: \"Blob Spammer (Kurtosis Package)\"\n       description: \"3 type-4 blob transactions per slot with 1-2 sidecars each, gas/blobgas limit 20 gwei\"\n       scenario: \"blobs\"\n       config:\n         throughput: 10\n     - name: \"ERC txs\"\n       description: \"ERC txs\"\n       scenario: \"erctx\"\n       config:\n         throughput: 50\n         max_pending: 400\n\nnetwork_params:\n  min_validator_withdrawability_delay: 1\n  shard_committee_period: 1\n  churn_limit_quotient: 16\n  prefunded_accounts: '{\"0xb9e79d19f651a941757b35830232e7efc77e1c79\": {\"balance\": \"100000ETH\"}}'\n"
  },
  {
    "path": ".github/tests/fulu.yaml",
    "content": "participants:\n  - el_type: geth\n    cl_type: teku\n    supernode: true\n\n\nnetwork_params:\n  altair_fork_epoch: 0\n  bellatrix_fork_epoch: 0\n  capella_fork_epoch: 0\n  deneb_fork_epoch: 0\n  electra_fork_epoch: 1\n  fulu_fork_epoch: 2\n  bpo_1_epoch: 3\n  gloas_fork_epoch: 4\n\n"
  },
  {
    "path": ".github/tests/geth-all.yaml",
    "content": "participants:\n  - el_type: geth\n    cl_type: teku\n  - el_type: geth\n    cl_type: prysm\n  - el_type: geth\n    cl_type: nimbus\n  - el_type: geth\n    cl_type: lighthouse\n  - el_type: geth\n    cl_type: lodestar\n  - el_type: geth\n    cl_type: grandine\n"
  },
  {
    "path": ".github/tests/grandine-all.yaml",
    "content": "participants:\n  - el_type: geth\n    cl_type: grandine\n  - el_type: nethermind\n    cl_type: grandine\n  - el_type: erigon\n    cl_type: grandine\n  - el_type: besu\n    cl_type: grandine\n  - el_type: reth\n    cl_type: grandine\n  - el_type: ethrex\n    cl_type: grandine\n  - el_type: nimbus\n    cl_type: grandine\n"
  },
  {
    "path": ".github/tests/hoodi-shadowfork.yaml_norun",
    "content": "participants:\n  - el_type: geth\n  - el_type: nethermind\n  - el_type: besu\n  - el_type: reth\n  - el_type: erigon\nnetwork_params:\n  fulu_fork_epoch: 10\n  bpo_1_epoch: 11\n  network: hoodi-shadowfork\nadditional_services:\n  - dora\nsnooper_enabled: true\npersistent: true\n"
  },
  {
    "path": ".github/tests/hoodi-shadowfork_at_height.yaml_norun",
    "content": "participants:\n  - el_type: geth\nnetwork_params:\n  fulu_fork_epoch: 10\n  bpo_1_epoch: 11\n  shadowfork_block_height: 240000\n  network: hoodi-shadowfork\nadditional_services:\n  - dora\npersistent: true\n"
  },
  {
    "path": ".github/tests/lighthouse-all.yaml",
    "content": "participants:\n  - el_type: geth\n    cl_type: lighthouse\n  - el_type: nethermind\n    cl_type: lighthouse\n  - el_type: erigon\n    cl_type: lighthouse\n  - el_type: besu\n    cl_type: lighthouse\n  - el_type: reth\n    cl_type: lighthouse\n  - el_type: ethrex\n    cl_type: lighthouse\n  - el_type: nimbus\n    cl_type: lighthouse\n"
  },
  {
    "path": ".github/tests/lodestar-all.yaml",
    "content": "participants:\n  - el_type: geth\n    cl_type: lodestar\n  - el_type: nethermind\n    cl_type: lodestar\n  - el_type: erigon\n    cl_type: lodestar\n  - el_type: besu\n    cl_type: lodestar\n  - el_type: reth\n    cl_type: lodestar\n  - el_type: ethrex\n    cl_type: lodestar\n  - el_type: nimbus\n    cl_type: lodestar\n"
  },
  {
    "path": ".github/tests/mainnet-split.yaml.norun",
    "content": "participants:\n  # Prysm nodes (33%)\n  - el_type: geth\n    cl_type: prysm\n  - el_type: geth\n    cl_type: prysm\n  - el_type: nethermind\n    cl_type: prysm\n  - el_type: nethermind\n    cl_type: prysm\n  - el_type: besu\n    cl_type: prysm\n\n  # Lighthouse nodes (32%)\n  - el_type: geth\n    cl_type: lighthouse\n  - el_type: geth\n    cl_type: lighthouse\n  - el_type: nethermind\n    cl_type: lighthouse\n  - el_type: nethermind\n    cl_type: lighthouse\n  - el_type: besu\n    cl_type: lighthouse\n\n  # Teku nodes (27%)\n  - el_type: geth\n    cl_type: teku\n  - el_type: nethermind\n    cl_type: teku\n  - el_type: nethermind\n    cl_type: teku\n  - el_type: besu\n    cl_type: teku\n\n  # Nimbus nodes (4%)\n  - el_type: geth\n    cl_type: nimbus\n\n  # One each of Lodestar and Grandine\n  - el_type: reth\n    cl_type: lodestar\n  - el_type: erigon\n    cl_type: grandine\n\n# Enable MEV via the flashbots stack\nmev_type: flashbots\n\nadditional_services:\n  - dora\n  - spamoor\n  - tx_fuzz\n  - assertoor\n\nglobal_log_level: debug\n"
  },
  {
    "path": ".github/tests/mainnet.yaml.norun",
    "content": "participants_matrix:\n  el:\n    - el_type: geth\n      el_image: ethereum/client-go:v1.15.11\n    - el_type: reth\n      el_image: ghcr.io/paradigmxyz/reth:v1.4.8\n    - el_type: nethermind\n      el_image: nethermind/nethermind:1.31.11\n    - el_type: erigon\n      el_image: erigontech/erigon:v3.0.7\n    - el_type: besu\n      el_image: hyperledger/besu:25.6.0\n  cl:\n    - cl_type: lighthouse\n      cl_image: sigp/lighthouse:v7.0.1\n    - cl_type: teku\n      cl_image: consensys/teku:25.5.0\n    - cl_type: nimbus\n      cl_image: statusim/nimbus-eth2:multiarch-v25.6.0\n    - cl_type: lodestar\n      cl_image: chainsafe/lodestar:v1.31.0\n    - cl_type: prysm\n      cl_image: offchainlabs/prysm-beacon-chain:v6.0.4\n      vc_image: offchainlabs/prysm-validator:v6.0.4\nnetwork_params:\n  min_validator_withdrawability_delay: 1\n  shard_committee_period: 1\n  churn_limit_quotient: 16\nadditional_services:\n  - dora\n  - assertoor\n  - spamoor\n\nsnooper_enabled: false\nassertoor_params:\n  image: \"ethpandaops/assertoor:master\"\n  run_stability_check: false\n  run_block_proposal_check: false\n  tests:\n    - { file: \"https://raw.githubusercontent.com/ethpandaops/assertoor-test/master/assertoor-tests/pectra-dev/wait-for-slot.yaml\", id: \"wait1\", config: { slot: 34 }}\n    - { file: \"https://raw.githubusercontent.com/ethpandaops/assertoor/refs/heads/master/playbooks/pectra-dev/validator-lifecycle-test-v3.yaml\"}\n    - { file: \"https://raw.githubusercontent.com/ethpandaops/assertoor/refs/heads/master/playbooks/pectra-dev/kurtosis/all.yaml\" }\n    - { file: \"https://raw.githubusercontent.com/ethpandaops/assertoor/refs/heads/master/playbooks/pectra-dev/execution-spec-tests-sequential.yaml\" }\n"
  },
  {
    "path": ".github/tests/mempool_bridge.yaml",
    "content": "participants:\n  - el_type: geth\n    cl_type: teku\n    count: 2\n\nadditional_services:\n  - mempool_bridge\n  - dora\n\nnetwork_params:\n  network: sepolia\n  shadowfork_block_height: 340000\n  withdrawal_type: \"0x01\"\n  validator_balance: 1000000\n  withdrawal_address: \"0x4d1CB4eB7969f8806E2CaAc0cbbB71f88C8ec413\"\n\npersistent: true\n\nmempool_bridge_params:\n  log_level: \"debug\"\n  mode: \"rpc\"\n  source_enodes:\n    - http://127.0.0.1:8545\n    - http://127.0.0.1:8546\n"
  },
  {
    "path": ".github/tests/mev-buildoor.yaml",
    "content": "participants:\n  - el_type: geth\n    cl_type: lighthouse\n    count: 2\nmev_type: buildoor\nbuildoor_params:\n  builder_api: true\n  epbs_builder: true\nadditional_services:\n  - dora\n  - spamoor\n"
  },
  {
    "path": ".github/tests/mev-commit-boost.yaml",
    "content": "participants:\n  - el_type: geth\n    cl_type: lighthouse\nmev_type: commit-boost\nadditional_services:\n  - tx_fuzz\n  - spamoor\n  - custom_flood\n  - forkmon\n  - dora\n  - prometheus\n  - grafana\nmev_params:\n  mev_boost_image: ghcr.io/commit-boost/pbs:latest\nnetwork_params:\n  seconds_per_slot: 3\n"
  },
  {
    "path": ".github/tests/mev-helix.yaml",
    "content": "participants:\n  - el_type: geth\n    el_image: ethpandaops/geth:master\n    cl_type: lighthouse\n    cl_image: ethpandaops/lighthouse:unstable\n    vc_image: ethpandaops/lighthouse:unstable\n    supernode: true\n    count: 2\n  - el_type: nethermind\n    el_image: ethpandaops/nethermind:master\n    cl_type: prysm\n    cl_image: ethpandaops/prysm-beacon-chain:develop\n    supernode: true\n\nadditional_services:\n  - dora\n  - spamoor\n\nmev_type: helix\nmev_params:\n  mev_relay_image: ghcr.io/gattaca-com/helix-relay:main\n  mev_builder_image: ethpandaops/reth-rbuilder:develop\n  mev_boost_image: ethpandaops/mev-boost:develop\n  mev_builder_cl_image: ethpandaops/lighthouse:unstable\n  mev_builder_subsidy: 1\n\nspamoor_params:\n  spammers:\n     - name: \"Blob Spammer (Kurtosis Package)\"\n       description: \"3 type-4 blob transactions per slot with 1-2 sidecars each, gas/blobgas limit 20 gwei\"\n       scenario: \"blobs\"\n       config:\n         throughput: 10\n     - name: \"ERC txs\"\n       description: \"ERC txs\"\n       scenario: \"erctx\"\n       config:\n         throughput: 50\n         max_pending: 400\n\nnetwork_params:\n  min_validator_withdrawability_delay: 1\n  shard_committee_period: 1\n  churn_limit_quotient: 16\n  prefunded_accounts: '{\"0xb9e79d19f651a941757b35830232e7efc77e1c79\": {\"balance\": \"100000ETH\"}}'\n"
  },
  {
    "path": ".github/tests/mev-mock.yaml",
    "content": "participants:\n  - el_type: geth\n    cl_type: lighthouse\n    count: 3\nmev_type: mock\nadditional_services:\n  - dora\n  - spamoor\n  - tx_fuzz\nmev_params:\n  mock_mev_image: \"ethpandaops/rustic-builder:main\"\n"
  },
  {
    "path": ".github/tests/mev-multiple-relays.yaml",
    "content": "participants:\n  - el_type: geth\n    el_image: ethpandaops/geth:master\n    cl_type: lighthouse\n    cl_image: ethpandaops/lighthouse:unstable\n    vc_image: ethpandaops/lighthouse:unstable\n    supernode: true\n    count: 2\n  - el_type: nethermind\n    el_image: ethpandaops/nethermind:master\n    cl_type: prysm\n    cl_image: ethpandaops/prysm-beacon-chain:develop\n    supernode: true\n\nadditional_services:\n  - dora\n  - spamoor\n\n# Use flashbots as base mev_type, but run_multiple_relays will launch both flashbots and helix\nmev_type: flashbots\nmev_params:\n  mev_relay_image: ethpandaops/mev-boost-relay:main\n  mev_builder_image: ethpandaops/reth-rbuilder:develop\n  mev_boost_image: ethpandaops/mev-boost:develop\n  mev_builder_cl_image: ethpandaops/lighthouse:unstable\n  mev_builder_subsidy: 1\n  run_multiple_relays: true\n  helix_relay_image: ghcr.io/gattaca-com/helix-relay:main\n  \nspamoor_params:\n  spammers:\n    - name: \"Blob Spammer (Kurtosis Package)\"\n      description: \"3 type-4 blob transactions per slot with 1-2 sidecars each, gas/blobgas limit 20 gwei\"\n      scenario: \"blobs\"\n      config:\n        throughput: 10\n    - name: \"ERC txs\"\n      description: \"ERC txs\"\n      scenario: \"erctx\"\n      config:\n        throughput: 50\n        max_pending: 400\n\nnetwork_params:\n  min_validator_withdrawability_delay: 1\n  shard_committee_period: 1\n  churn_limit_quotient: 16\n  prefunded_accounts: '{\"0xb9e79d19f651a941757b35830232e7efc77e1c79\": {\"balance\": \"100000ETH\"}}'\n"
  },
  {
    "path": ".github/tests/mev.yaml",
    "content": "participants:\n  - el_type: geth\n    el_extra_params: [\"--miner.extradata=localGeth\"]\n    cl_type: lighthouse\n\nmev_type: flashbots\nmev_params:\n  mev_builder_image: ethpandaops/reth-rbuilder:develop\n  mev_relay_image: ethpandaops/mev-boost-relay:main\n  mev_boost_image: ethpandaops/mev-boost:develop\n\nadditional_services:\n  - tx_fuzz\n  - custom_flood\n  - spamoor\n  - dora\n  - prometheus\n  - grafana\nnetwork_params:\n  seconds_per_slot: 6\n"
  },
  {
    "path": ".github/tests/minimal-fulu.yaml",
    "content": "participants:\n  - el_type: geth\n    el_image: ethpandaops/geth:master\n    el_extra_params: [\"--miner.extradata=lighthouseFromLocal\"]\n    cl_type: lighthouse\n    cl_image: ethpandaops/lighthouse:unstable\n    supernode: true\n\n  - el_type: nethermind\n    el_image: ethpandaops/nethermind:master\n    el_extra_params: [\"--Blocks.ExtraData=TekuFromLocal\"]\n    cl_type: teku\n    cl_image: ethpandaops/teku:master\n\n  - el_type: reth\n    el_image: ethpandaops/reth:main\n    el_extra_params: [\"--builder.extradata=LodestarFromLocal\"]\n    cl_type: lodestar\n    cl_image: ethpandaops/lodestar:unstable\n\n  - el_type: geth\n    el_image: ethpandaops/geth:master\n    el_extra_params: [\"--miner.extradata=PrysmFromLocal\"]\n    cl_type: prysm\n    cl_image: ethpandaops/prysm-beacon-chain:develop-minimal\n\n  - el_type: nethermind\n    el_image: ethpandaops/nethermind:master\n    el_extra_params: [\"--Blocks.ExtraData=NimbusFromLocal\"]\n    cl_type: nimbus\n    cl_image: ethpandaops/nimbus-eth2:unstable-minimal\n\n  - el_type: reth\n    el_image: ethpandaops/reth:main\n    el_extra_params: [\"--builder.extradata=GrandineFromLocal\"]\n    cl_type: grandine\n    cl_image: ethpandaops/grandine:develop-minimal\nadditional_services:\n  - dora\n  - tx_fuzz\n  - spamoor\n  - assertoor\n\nnetwork_params:\n  min_validator_withdrawability_delay: 1\n  shard_committee_period: 1\n  churn_limit_quotient: 16\n  fulu_fork_epoch: 0\n  genesis_delay: 120\n  preset: minimal\n\nassertoor_params:\n  tests:\n    - file: https://raw.githubusercontent.com/ethpandaops/assertoor/refs/heads/master/playbooks/pectra-dev/kurtosis/fillup-all-el-queues.yaml\n      config:\n        requestCount: 1000  # total number of requests\n        walletCount: 2  # number of wallets to send from for each request type\n        throughputPerWallet: 2 # number of transactions per slot, type and wallet\n        maxPendingPerWallet: 10 # max number of pending requests per type\n"
  },
  {
    "path": ".github/tests/minimal-mev.yaml",
    "content": "participants:\n  - el_type: geth\n    cl_type: teku\n  - el_type: geth\n    cl_type: prysm\n  - el_type: erigon\n    cl_type: nimbus\n  - el_type: besu\n    cl_type: lighthouse\n  - el_type: reth\n    cl_type: lodestar\n  - el_type: geth\n    cl_type: grandine\n  - el_type: ethrex\n    cl_type: lodestar\nnetwork_params:\n  preset: minimal\n  prefunded_accounts: '{\"0xb9e79D19f651a941757b35830232E7EFC77E1c79\": {\"balance\": \"100000ETH\"}}'\n\nadditional_services:\n  - dora\n  - spamoor\n\nmev_type: flashbots\nmev_params:\n  mev_relay_image: ethpandaops/mev-boost-relay:main\n  mev_boost_image: ethpandaops/mev-boost:develop\n  mev_builder_cl_image: ethpandaops/lighthouse:unstable\n  mev_builder_image: ethpandaops/reth-rbuilder:develop\n  mev_builder_subsidy: 1\n"
  },
  {
    "path": ".github/tests/minimal.yaml",
    "content": "participants:\n  - el_type: geth\n    cl_type: teku\n  - el_type: geth\n    cl_type: prysm\n  - el_type: erigon\n    cl_type: nimbus\n  - el_type: besu\n    cl_type: lighthouse\n  - el_type: reth\n    cl_type: lodestar\n  - el_type: nimbus\n    cl_type: nimbus\n  - el_type: ethrex\n    cl_type: grandine\n  - el_type: geth\n    cl_type: grandine\nnetwork_params:\n  preset: minimal\n"
  },
  {
    "path": ".github/tests/mix-assert.yaml",
    "content": "participants:\n  - el_type: geth\n    cl_type: teku\n  - el_type: nethermind\n    cl_type: prysm\n  - el_type: erigon\n    cl_type: nimbus\n  - el_type: besu\n    cl_type: lighthouse\n  - el_type: reth\n    cl_type: lodestar\n  - el_type: ethrex\n    cl_type: grandine\nnetwork_params:\n  preset: minimal\nadditional_services:\n  - assertoor\n  - dora\nassertoor_params:\n  run_stability_check: false\n  run_block_proposal_check: true\n"
  },
  {
    "path": ".github/tests/mix-persistence-k8s.yaml",
    "content": "participants:\n  - el_type: geth\n    cl_type: teku\n    use_separate_vc: true\n  - el_type: nethermind\n    cl_type: prysm\n  - el_type: erigon\n    cl_type: nimbus\n    use_separate_vc: true\n  - el_type: besu\n    cl_type: lighthouse\n  - el_type: reth\n    cl_type: lodestar\n  - el_type: ethrex\n    cl_type: nimbus\npersistent: true\n"
  },
  {
    "path": ".github/tests/mix-persistence.yaml",
    "content": "participants:\n  - el_type: geth\n    cl_type: teku\n    use_separate_vc: true\n  - el_type: nethermind\n    cl_type: prysm\n  - el_type: erigon\n    cl_type: nimbus\n    use_separate_vc: true\n  - el_type: reth\n    cl_type: lodestar\n  - el_type: besu\n    cl_type: lighthouse\n  - el_type: ethrex\n    cl_type: nimbus\npersistent: true\n"
  },
  {
    "path": ".github/tests/mix-public.yaml",
    "content": "participants:\n  - el_type: geth\n    cl_type: teku\n  - el_type: nethermind\n    cl_type: prysm\n  - el_type: erigon\n    cl_type: nimbus\n  - el_type: besu\n    cl_type: lighthouse\n  - el_type: reth\n    cl_type: lodestar\n  - el_type: ethrex\n    cl_type: grandine\nport_publisher:\n  nat_exit_ip: KURTOSIS_IP_ADDR_PLACEHOLDER\n  el:\n    enabled: true\n    public_port_start: 40000\n  cl:\n    enabled: true\n    public_port_start: 41000\n  vc:\n    enabled: true\n    public_port_start: 42000\n  remote_signer:\n    enabled: true\n    public_port_start: 43000\n  additional_services:\n    enabled: true\n    public_port_start: 44000\n  mev:\n    enabled: true\n    public_port_start: 45000\n  other:\n    enabled: true\n    public_port_start: 46000\nadditional_services:\n  - tx_fuzz\n  - forkmon\n  - dora\n  - checkpointz\n  - prometheus\n  - grafana\n  - dugtrio\n  - erpc\n  - apache\n  - tracoor\n  - spamoor\nethereum_metrics_exporter_enabled: true\nsnooper_enabled: true\nkeymanager_enabled: true\n"
  },
  {
    "path": ".github/tests/mix-with-tools-mev.yaml",
    "content": "participants:\n  - el_type: geth\n    cl_type: teku\n  - el_type: nethermind\n    cl_type: prysm\n  - el_type: erigon\n    cl_type: nimbus\n  - el_type: besu\n    cl_type: lighthouse\n  - el_type: reth\n    cl_type: lodestar\n  - el_type: ethrex\n    cl_type: teku\nadditional_services:\n  - tx_fuzz\n  - forkmon\n  - dora\n  - checkpointz\n  - prometheus\n  - grafana\n  - custom_flood\n  - blockscout\n  - dugtrio\n  - erpc\n  - apache\n  - tracoor\n  - spamoor\nethereum_metrics_exporter_enabled: true\nsnooper_enabled: true\nmev_type: flashbots\nmev_params:\n  mev_relay_image: ethpandaops/mev-boost-relay:main\npersistent: True\n"
  },
  {
    "path": ".github/tests/mix-with-tools-minimal.yaml",
    "content": "participants:\n  - el_type: geth\n    cl_type: teku\n  - el_type: geth\n    cl_type: prysm\n  - el_type: erigon\n    cl_type: nimbus\n  - el_type: besu\n    cl_type: lighthouse\n  - el_type: reth\n    cl_type: lodestar\n  - el_type: geth\n    cl_type: grandine\n  - el_type: ethrex\n    cl_type: lodestar\n  - el_type: erigon\n    cl_type: caplin\n    use_separate_vc: true\n    vc_type: lighthouse\nnetwork_params:\n  preset: minimal\nadditional_services:\n  - tx_fuzz\n  - forkmon\n  - dora\n  - checkpointz\n  - prometheus\n  - grafana\n  - custom_flood\n  - blockscout\n  - dugtrio\n  - erpc\n  - apache\n  - tracoor\n  - spamoor\n  - bootnodoor\nethereum_metrics_exporter_enabled: true\nsnooper_enabled: true\nkeymanager_enabled: true\n"
  },
  {
    "path": ".github/tests/mix-with-tools.yaml",
    "content": "participants:\n  - el_type: geth\n    cl_type: teku\n  - el_type: nethermind\n    cl_type: prysm\n  - el_type: erigon\n    cl_type: nimbus\n  - el_type: besu\n    cl_type: lighthouse\n  - el_type: reth\n    cl_type: lodestar\n  - el_type: nimbus\n    cl_type: teku\n  - el_type: ethrex\n    cl_type: grandine\n  - el_type: geth\n    cl_type: grandine\n  - el_type: erigon\n    cl_type: caplin\n    use_separate_vc: true\n    vc_type: lighthouse\nadditional_services:\n  - tx_fuzz\n  - forkmon\n  - dora\n  - checkpointz\n  - prometheus\n  - grafana\n  - dugtrio\n  - erpc\n  - apache\n  - tracoor\n  - spamoor\nethereum_metrics_exporter_enabled: true\nsnooper_enabled: true\nkeymanager_enabled: true\n"
  },
  {
    "path": ".github/tests/mix.yaml",
    "content": "participants:\n  - el_type: geth\n    cl_type: teku\n  - el_type: nethermind\n    cl_type: prysm\n  - el_type: erigon\n    cl_type: nimbus\n  - el_type: besu\n    cl_type: lighthouse\n  - el_type: reth\n    cl_type: lodestar\n  - el_type: nimbus\n    cl_type: teku\n  - el_type: ethrex\n    cl_type: grandine\n  - el_type: erigon\n    cl_type: caplin\n    use_separate_vc: true\n    vc_type: lighthouse\n"
  },
  {
    "path": ".github/tests/mixed-cl-vc.yml",
    "content": "participants:\n  - el_type: geth\n    cl_type: teku\n    use_separate_vc: true\n    vc_type: lodestar\n  - el_type: besu\n    cl_type: nimbus\n    use_separate_vc: true\n    vc_type: lighthouse\n"
  },
  {
    "path": ".github/tests/multi-beacon.yaml",
    "content": "participants:\n  - supernode: true\n  - cl_type: lighthouse\n    vc_beacon_node_indices: []  # Connect to its own beacon node\n  - cl_type: lighthouse\n    vc_beacon_node_indices: [0, 1, 2]  # Connect to both beacon nodes (indices 0, 1 and its own beacon)\n  - cl_type: lodestar\n    vc_beacon_node_indices: [0, 1, 2]  # Connect to both beacon nodes (indices 0, 1 and 2)\n  - cl_type: prysm\n    vc_beacon_node_indices: [0, 1, 2]  # Connect to both beacon nodes (indices 0, 1 and 2)\n  - cl_type: teku\n    use_separate_vc: true\n    vc_beacon_node_indices: [0, 1, 2]  # Connect to both beacon nodes (indices 0, 1 and 2)\n  - cl_type: nimbus\n    use_separate_vc: true\n    vc_beacon_node_indices: [0, 1, 2]  # Connect to both beacon nodes (indices 0, 1 and 2)\nadditional_services:\n  - dora\n"
  },
  {
    "path": ".github/tests/nethermind-all.yaml",
    "content": "participants:\n  - el_type: nethermind\n    cl_type: teku\n  - el_type: nethermind\n    cl_type: prysm\n  - el_type: nethermind\n    cl_type: nimbus\n  - el_type: nethermind\n    cl_type: lighthouse\n  - el_type: nethermind\n    cl_type: lodestar\n  - el_type: nethermind\n    cl_type: grandine\n"
  },
  {
    "path": ".github/tests/nimbus-all.yaml",
    "content": "participants:\n  - el_type: geth\n    cl_type: nimbus\n  - el_type: nethermind\n    cl_type: nimbus\n  - el_type: erigon\n    cl_type: nimbus\n  - el_type: besu\n    cl_type: nimbus\n  - el_type: reth\n    cl_type: nimbus\n  - el_type: ethrex\n    cl_type: nimbus\n  - el_type: nimbus\n    cl_type: nimbus\n"
  },
  {
    "path": ".github/tests/nimbus-eth1-all.yaml",
    "content": "participants:\n  - el_type: geth\n    cl_type: teku\n  - el_type: nimbus\n    cl_type: teku\n  - el_type: nimbus\n    cl_type: prysm\n  - el_type: nimbus\n    cl_type: nimbus\n  - el_type: nimbus\n    cl_type: lighthouse\n  - el_type: nimbus\n    cl_type: lodestar\n  - el_type: nimbus\n    cl_type: grandine\n"
  },
  {
    "path": ".github/tests/nimbus-mev.yaml",
    "content": "participants:\n  - el_type: geth\n    cl_type: nimbus\n    cl_image: ethpandaops/nimbus-eth2:unstable\nmev_type: flashbots\n"
  },
  {
    "path": ".github/tests/node-selectors.yaml",
    "content": "participants:\n  - el_type: reth\n    cl_type: teku\n    use_separate_vc: true\n    node_selectors: {\n      \"kubernetes.io/hostname\": testing-1,\n    }\n  - el_type: reth\n    cl_type: teku\n    use_separate_vc: true\nglobal_node_selectors: {\n  \"kubernetes.io/hostname\": testing-2,\n}\n"
  },
  {
    "path": ".github/tests/parallel-keystores.yaml",
    "content": "participants:\n  - el_type: geth\n    cl_type: teku\n  - el_type: geth\n    cl_type: teku\n    validator_count: 0\n  - el_type: geth\n    cl_type: teku\nparallel_keystore_generation: true\n"
  },
  {
    "path": ".github/tests/participants-matrix.yaml",
    "content": "participants_matrix:\n  el:\n    - el_type: besu\n  cl:\n    - cl_type: prysm\n  vc:\n    - vc_type: nimbus\nparticipants:\n  - count: 1\n"
  },
  {
    "path": ".github/tests/phase0-genesis.yaml",
    "content": "participants:\n  - el_type: geth\n    cl_type: teku\n    supernode: true\n  - el_type: reth\n    cl_type: prysm\n  - el_type: nethermind\n    cl_type: nimbus\n  - el_type: besu\n    cl_type: lighthouse\n  - el_type: nimbus\n    cl_type: lodestar\n  - el_type: erigon\n    cl_type: grandine\n  - el_type: ethrex\n    cl_type: teku\nadditional_services:\n  - dora\nnetwork_params:\n  altair_fork_epoch: 1\n  bellatrix_fork_epoch: 2\n  capella_fork_epoch: 3\n  deneb_fork_epoch: 4\n  electra_fork_epoch: 5\n  fulu_fork_epoch: 6\n  bpo_1_epoch: 7\n  gloas_fork_epoch: 8\n  genesis_delay: 120\n"
  },
  {
    "path": ".github/tests/preregistered_validator_count.yaml",
    "content": "participants:\n  - el_type: geth\n    cl_type: teku\n  - el_type: geth\n    cl_type: prysm\n  - el_type: geth\n    cl_type: nimbus\n  - el_type: geth\n    cl_type: lighthouse\n  - el_type: geth\n    cl_type: lodestar\nnetwork_params:\n  preregistered_validator_count: 400\n"
  },
  {
    "path": ".github/tests/prysm-all.yaml",
    "content": "participants:\n  - el_type: geth\n    cl_type: prysm\n  - el_type: nethermind\n    cl_type: prysm\n  - el_type: erigon\n    cl_type: prysm\n  - el_type: besu\n    cl_type: prysm\n  - el_type: reth\n    cl_type: prysm\n  - el_type: ethrex\n    cl_type: prysm\n  - el_type: nimbus\n    cl_type: prysm\n"
  },
  {
    "path": ".github/tests/rakoon.yaml",
    "content": "participants:\n  - el_type: geth\n    cl_type: lighthouse\n  - el_type: reth\n    cl_type: teku\nadditional_services:\n  - rakoon\n  - dora\nrakoon_params:\n  tx_type: \"eip7702\"\n  workers: 50\n  batch_size: 100\n"
  },
  {
    "path": ".github/tests/remote-signer.yaml",
    "content": "participants:\n  - el_type: geth\n    cl_type: lodestar\n    use_separate_vc: true\n    use_remote_signer: true\n  - el_type: geth\n    cl_type: nimbus\n    use_separate_vc: true\n    use_remote_signer: true\n  - el_type: geth\n    cl_type: prysm\n    use_separate_vc: true\n    use_remote_signer: true\n  - el_type: geth\n    cl_type: teku\n    use_separate_vc: true\n    use_remote_signer: true\n  - el_type: geth\n    cl_type: grandine\n    use_separate_vc: true\n    use_remote_signer: true\n    # Grandine doesn't have a separate VC\n    vc_type: lodestar\n"
  },
  {
    "path": ".github/tests/reth-all.yaml",
    "content": "participants:\n  - el_type: reth\n    cl_type: teku\n  - el_type: reth\n    cl_type: prysm\n  - el_type: reth\n    cl_type: nimbus\n  - el_type: reth\n    cl_type: lighthouse\n  - el_type: reth\n    cl_type: lodestar\n  - el_type: reth\n    cl_type: grandine\n"
  },
  {
    "path": ".github/tests/sepolia-mix.yaml",
    "content": "participants:\n  - el_type: geth\n    cl_type: teku\n  - el_type: nethermind\n    cl_type: prysm\n  - el_type: erigon\n    cl_type: lighthouse\n  - el_type: besu\n    cl_type: lighthouse\n  - el_type: reth\n    cl_type: lodestar\n  - el_type: ethrex\n    cl_type: nimbus\nnetwork_params:\n  network: sepolia\ncheckpoint_sync_enabled: true\n"
  },
  {
    "path": ".github/tests/skip.yaml",
    "content": "participants:\n  - cl_type: prysm\n\n  - cl_type: lighthouse\n    checkpoint_sync_enabled: true\n    skip_start: true\n    validator_count: 1\n\n  - cl_type: teku\n    checkpoint_sync_enabled: true\n    skip_start: true\n    validator_count: 1\n\n  - cl_type: lodestar\n    checkpoint_sync_enabled: true\n    skip_start: true\n    validator_count: 1\n\n  - cl_type: grandine\n    checkpoint_sync_enabled: true\n    skip_start: true\n    validator_count: 1\n\nnetwork_params:\n  seconds_per_slot: 4\n  preset: minimal\nadditional_services:\n  - dora\n  - checkpointz\n\n"
  },
  {
    "path": ".github/tests/split-nimbus.yaml",
    "content": "participants:\n  - el_type: geth\n    cl_type: nimbus\n    use_separate_vc: true\n    validator_count: 0\n  - el_type: nethermind\n    cl_type: nimbus\n    use_separate_vc: true\n  - el_type: erigon\n    cl_type: nimbus\n    use_separate_vc: true\n  - el_type: besu\n    cl_type: nimbus\n    use_separate_vc: true\n  - el_type: reth\n    cl_type: nimbus\n    use_separate_vc: true\n  - el_type: ethrex\n    cl_type: nimbus\n    use_separate_vc: true\n"
  },
  {
    "path": ".github/tests/split-teku.yaml",
    "content": "participants:\n  - el_type: geth\n    cl_type: teku\n    validator_count: 0\n    use_separate_vc: true\n  - el_type: nethermind\n    cl_type: teku\n    use_separate_vc: true\n  - el_type: erigon\n    cl_type: teku\n    use_separate_vc: true\n  - el_type: besu\n    cl_type: teku\n    use_separate_vc: true\n  - el_type: reth\n    cl_type: teku\n    use_separate_vc: true\n  - el_type: ethrex\n    cl_type: teku\n    use_separate_vc: true\n"
  },
  {
    "path": ".github/tests/teku-all.yaml",
    "content": "participants:\n  - el_type: geth\n    cl_type: teku\n  - el_type: nethermind\n    cl_type: teku\n  - el_type: erigon\n    cl_type: teku\n  - el_type: besu\n    cl_type: teku\n  - el_type: reth\n    cl_type: teku\n  - el_type: ethrex\n    cl_type: teku\n  - el_type: nimbus\n    cl_type: teku\n"
  },
  {
    "path": ".github/tests/tolerations.yaml",
    "content": "participants:\n  - el_type: reth\n    cl_type: teku\n    use_separate_vc: true\n    cl_tolerations:\n      - key: \"node-role.kubernetes.io/master1\"\n        operator: \"Exists\"\n        effect: \"NoSchedule\"\n      - key: \"node-role.kubernetes.io/master2\"\n        operator: \"Exists\"\n        effect: \"NoSchedule\"\n    el_tolerations:\n      - key: \"node-role.kubernetes.io/master3\"\n        operator: \"Exists\"\n        effect: \"NoSchedule\"\n    vc_tolerations:\n      - key: \"node-role.kubernetes.io/master4\"\n        operator: \"Exists\"\n        effect: \"NoSchedule\"\n  - el_type: reth\n    cl_type: teku\n    use_separate_vc: true\n    tolerations:\n      - key: \"node-role.kubernetes.io/master5\"\n        operator: \"Exists\"\n        effect: \"NoSchedule\"\n  - el_type: reth\n    cl_type: teku\n    use_separate_vc: true\nadditional_services:\n  - dora\nglobal_tolerations:\n  - key: \"node-role.kubernetes.io/master6\"\n    value: \"true\"\n    operator: \"Equal\"\n    effect: \"NoSchedule\"\n"
  },
  {
    "path": ".github/tests/vero-all.yaml",
    "content": "participants:\n  - el_type: besu\n    cl_type: grandine\n    use_separate_vc: true\n    vc_type: vero\n    use_remote_signer: true\n  - el_type: erigon\n    cl_type: lighthouse\n    use_separate_vc: true\n    vc_type: vero\n    use_remote_signer: true\n  - el_type: ethrex\n    cl_type: lodestar\n    use_separate_vc: true\n    vc_type: vero\n    use_remote_signer: true\n  - el_type: geth\n    cl_type: nimbus\n    use_separate_vc: true\n    vc_type: vero\n    use_remote_signer: true\n  - el_type: nethermind\n    cl_type: prysm\n    use_separate_vc: true\n    vc_type: vero\n    use_remote_signer: true\n  - el_type: reth\n    cl_type: teku\n    use_separate_vc: true\n    vc_type: vero\n    use_remote_signer: true\n"
  },
  {
    "path": ".github/tests/zkboost.yaml",
    "content": "participants:\n  - cl_type: lighthouse\n    cl_image: ethpandaops/lighthouse:eth-act-optional-proofs\n    el_type: reth\n    supernode: true\n    cl_extra_params:\n      - --target-peers=3\n      - --proof-engine-endpoint=http://zkboost:3000\n      - --proof-types=6\n    vc_extra_params:\n      - --proof-engine-endpoint=http://zkboost:3000\n      - --proof-types=6\n    count: 2\n  - cl_type: lighthouse\n    cl_image: ethpandaops/lighthouse:eth-act-optional-proofs\n    el_type: reth\n    supernode: false\n    cl_extra_params:\n      - --target-peers=3\n      - --proof-engine-endpoint=http://zkboost:3000\n      - --proof-types=6\n    count: 2\n\nadditional_services:\n  - zkboost\n  - dora\n  - prometheus\n  - grafana\n  - tempo\n"
  },
  {
    "path": ".github/workflows/check-consensus-spec-values.yml",
    "content": "name: Check consensus spec values\n\non:\n  schedule:\n    - cron: '0 8 * * *'\n  workflow_dispatch:\n\nconcurrency:\n  group: ${{ github.workflow }}-${{ github.ref }}\n  cancel-in-progress: true\n\njobs:\n  check-consensus-spec-values:\n    name: Check consensus spec values (${{ matrix.preset }})\n    runs-on: ubuntu-latest\n    strategy:\n      fail-fast: false\n      matrix:\n        include:\n          - preset: mainnet\n            args_file: network_params.yaml\n          - preset: minimal\n            args_file: .github/tests/minimal.yaml\n    steps:\n      - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2\n      - uses: ./.github/actions/docker-login\n        with:\n          username: ethpandaops\n          password: ${{ secrets.DOCKER_PASSWORD }}\n      - name: Setup Kurtosis\n        uses: ./.github/actions/kurtosis-install\n      - name: Run genesis\n        run: |\n          kurtosis run ${{ github.workspace }} --enclave spec-check-${{ matrix.preset }} --args-file ${{ matrix.args_file }} --verbosity detailed --image-download always\n      - name: Check consensus spec values\n        run: |\n          pip install pyyaml --quiet\n          curl -fsSL \\\n            \"https://raw.githubusercontent.com/ethereum/consensus-specs/master/configs/${{ matrix.preset }}.yaml\" \\\n            -o /tmp/spec.yaml\n          kurtosis files download spec-check-${{ matrix.preset }} el_cl_genesis_data /tmp/genesis\n          python3 .github/check-consensus-spec-values.py \\\n            --our-config /tmp/genesis/config.yaml \\\n            --spec-config /tmp/spec.yaml\n"
  },
  {
    "path": ".github/workflows/check-typos.yml",
    "content": "name: Check typos\n\non:\n  pull_request:\n    branches:\n      - main\n\njobs:\n  check-typos:\n    runs-on: ubuntu-latest\n    steps:\n      - name: Checkout repository\n        uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2\n\n      - name: Check for typos\n        uses: crate-ci/typos@cf5f1c29a8ac336af8568821ec41919923b05a83 # v1.45.1\n"
  },
  {
    "path": ".github/workflows/conventional-pr-title-checker.yml",
    "content": "# Check PR title for conventional commits\nname: Check PR title\non:\n  pull_request_target:\n    types:\n      - opened\n      - reopened\n      - edited\n      - synchronize\n\n# cancel redundant builds\nconcurrency:\n  group: \"title-checker-${{ github.head_ref }}\"\n  cancel-in-progress: true\n\njobs:\n  title_check:\n    runs-on: ubuntu-latest\n    steps:\n      - uses: amannn/action-semantic-pull-request@48f256284bd46cdaab1048c3721360e808335d50 # v6.1.1\n        env:\n          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}\n"
  },
  {
    "path": ".github/workflows/nightly.yml",
    "content": "name: Nightly test Workflow\n\non:\n  schedule:\n    - cron: \"0 2 * * *\" # This schedules the workflow to run at 02:00 UTC every day\n  workflow_dispatch:\n\njobs:\n  list-yamls:\n    runs-on: ubuntu-latest\n    outputs:\n      matrix: ${{ steps.set-matrix.outputs.matrix }}\n    steps:\n      - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2\n      - id: set-matrix\n        # List all yaml files in the .github/tests directory, except for the k8s.yaml file\n        run: echo \"matrix=$(ls ./.github/tests/*.yaml | grep -vE 'k8s.yaml$' | jq -R -s -c 'split(\"\\n\")[:-1]')\" >> $GITHUB_OUTPUT\n  run_with_args:\n    needs:\n      - list-yamls\n    strategy:\n      matrix:\n          file_name: ${{ fromJson(needs.list-yamls.outputs.matrix) }}\n    runs-on: ubuntu-latest\n    continue-on-error: true\n    steps:\n      - name: Checkout Repository\n        uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2\n      - uses: ./.github/actions/docker-login\n        with:\n          username: ethpandaops\n          password: ${{ secrets.DOCKER_PASSWORD }}\n      - name: Setup Kurtosis\n        uses: ./.github/actions/kurtosis-install\n\n      - name: Run Starlark\n        run: |\n          if [ \"${{ matrix.file_name }}\" != \"./.github/tests/mix-with-tools-mev.yaml\" ]; then\n            kurtosis run ${{ github.workspace }} --verbosity detailed --args-file ${{ matrix.file_name }}\n          else\n            echo \"Skipping ./.github/tests/mix-with-tools-mev.yaml\"\n          fi\n\n      - name: Check if Discord Webhook is Set\n        id: check_discord_webhook\n        env:\n          DISCORD_WEBHOOK: ${{ secrets.DISCORD_WEBHOOK }}\n        run: |\n          if [ -z \"$DISCORD_WEBHOOK\" ]; then\n            echo \"discord_webhook_set=false\" >> $GITHUB_ENV\n          else\n            echo \"discord_webhook_set=true\" >> $GITHUB_ENV\n          fi\n\n      - name: Notify\n        if: (cancelled() || failure()) && env.discord_webhook_set == 'true'\n        uses: nobrayner/discord-webhook@1766a33bf571acdcc0678f00da4fb83aad01ebc7 # v1\n        with:\n          description: \"The nightly test for ${{matrix.file_name}} on ethereum-package has failed find it here ${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}\"\n          github-token: ${{ secrets.github_token }}\n          discord-webhook: ${{ secrets.DISCORD_WEBHOOK }}\n\n  assertoor-mix-assert:\n    runs-on: ubuntu-latest\n    steps:\n      - name: Checkout Repository\n        uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2\n      - uses: ./.github/actions/docker-login\n        with:\n          username: ethpandaops\n          password: ${{ secrets.DOCKER_PASSWORD }}\n      - name: Kurtosis Assertoor GitHub Action\n        uses: ethpandaops/kurtosis-assertoor-github-action@f64942cbc780df731a731ea9f45765b161d2c8df # v1\n        with:\n          kurtosis_extra_args: \"--image-download always --non-blocking-tasks --verbosity DETAILED\"\n          ethereum_package_branch: \"\"\n          ethereum_package_args: .github/tests/mix-assert.yaml\n          ethereum_package_url: \"$GITHUB_WORKSPACE\"\n          persistent_logs: \"true\"\n"
  },
  {
    "path": ".github/workflows/per-pr.yml",
    "content": "name: CI\n\non:\n  pull_request:\n\nconcurrency:\n  group: \"tests-${{ github.head_ref }}\"\n  cancel-in-progress: true\n\njobs:\n  run_with_args:\n    strategy:\n      matrix:\n        file_name:\n          [\n            \"./.github/tests/mev.yaml\",\n            \"./.github/tests/mev-mock.yaml\",\n            \"./.github/tests/mix-with-tools.yaml\",\n            \"./.github/tests/mix-persistence.yaml\",\n            \"./.github/tests/mix-public.yaml\",\n            \"./.github/tests/minimal.yaml\",\n            \"./network_params.yaml\",\n            \".\"\n          ]\n    runs-on: ubuntu-latest\n    steps:\n      - name: Checkout Repository\n        uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2\n      - uses: ./.github/actions/docker-login\n        with:\n          username: ethpandaops\n          password: ${{ secrets.DOCKER_PASSWORD }}\n      - name: Setup Kurtosis\n        uses: ./.github/actions/kurtosis-install\n      - name: Run Starlark\n        run: |\n          if [[ \"${{ matrix.file_name }}\" == \".\" ]]; then\n            echo \"ENCLAVE=default\" >> \"$GITHUB_ENV\"\n            kurtosis run ${{ github.workspace }} --enclave \"default\" --verbosity detailed --image-download always\n          else\n            enclave=$(basename \"${{ matrix.file_name }}\" .yaml | tr '_.' '--')\n            echo \"ENCLAVE=$enclave\" >> \"$GITHUB_ENV\"\n            kurtosis run ${{ github.workspace }} --enclave \"$enclave\" --args-file ${{ matrix.file_name }} --verbosity detailed --image-download always\n          fi\n      - name: Upload genesis config\n        if: matrix.file_name == '.' || matrix.file_name == './network_params.yaml' || matrix.file_name == './.github/tests/minimal.yaml'\n        run: kurtosis files download \"$ENCLAVE\" el_cl_genesis_data /tmp/genesis-$ENCLAVE\n      - uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1\n        if: matrix.file_name == '.' || matrix.file_name == './network_params.yaml' || matrix.file_name == './.github/tests/minimal.yaml'\n        with:\n          name: genesis-config-${{ env.ENCLAVE }}\n          path: /tmp/genesis-${{ env.ENCLAVE }}/config.yaml\n          retention-days: 1\n\n  check-consensus-spec-values:\n    name: Check consensus spec values (${{ matrix.label }})\n    needs: run_with_args\n    continue-on-error: true\n    runs-on: ubuntu-latest\n    strategy:\n      fail-fast: false\n      matrix:\n        include:\n          - label: default\n            artifact: genesis-config-default\n            preset: mainnet\n          - label: network-params\n            artifact: genesis-config-network-params\n            preset: mainnet\n          - label: minimal\n            artifact: genesis-config-minimal\n            preset: minimal\n    steps:\n      - name: Checkout Repository\n        uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2\n      - uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8.0.1\n        with:\n          name: ${{ matrix.artifact }}\n          path: /tmp/genesis\n      - name: Install pyyaml\n        run: pip install pyyaml --quiet\n      - name: Download upstream consensus-specs config\n        run: |\n          curl -fsSL \\\n            \"https://raw.githubusercontent.com/ethereum/consensus-specs/master/configs/${{ matrix.preset }}.yaml\" \\\n            -o /tmp/spec.yaml\n      - name: Compare genesis config.yaml against upstream spec\n        run: |\n          python3 .github/check-consensus-spec-values.py \\\n            --our-config /tmp/genesis/config.yaml \\\n            --spec-config /tmp/spec.yaml\n\n  lint:\n    runs-on: ubuntu-latest\n    steps:\n      - name: Checkout Repository\n        uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2\n      - name: Setup Kurtosis\n        uses: ./.github/actions/kurtosis-install\n      - name: Kurtosis Lint\n        run: kurtosis lint ${{ github.workspace }}\n\n  assertoor:\n    runs-on: ubuntu-latest\n    timeout-minutes: 30\n    steps:\n      - name: Checkout Repository\n        uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2\n      - uses: ./.github/actions/docker-login\n        with:\n          username: ethpandaops\n          password: ${{ secrets.DOCKER_PASSWORD }}\n      - name: Kurtosis Assertoor GitHub Action\n        uses: ethpandaops/kurtosis-assertoor-github-action@f64942cbc780df731a731ea9f45765b161d2c8df # v1\n        with:\n          ethereum_package_url: \".\"\n          ethereum_package_branch: \"\"\n          ethereum_package_args: .github/tests/mix-assert.yaml\n\n\n  #check_optimism_package:\n  #  runs-on: ubuntu-latest\n  #  steps:\n  #    - name: Check out Repository\n  #      uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2\n  #    - name: Setup Kurtosis\n  #      uses: ./.github/actions/kurtosis-install\n  #    - name: Run L1\n  #      run: |\n  #        kurtosis run --enclave test ${{ github.workspace }} --args-file https://raw.githubusercontent.com/ethpandaops/optimism-package/refs/heads/main/.github/tests/external-l1/ethereum.yaml --verbosity detailed\n  #    - name: Run L2\n  #      run: |\n  #        kurtosis run --enclave test github.com/ethpandaops/optimism-package --args-file https://raw.githubusercontent.com/ethpandaops/optimism-package/refs/heads/main/.github/tests/external-l1/optimism.yaml --verbosity detailed\n"
  },
  {
    "path": ".github/workflows/release-please.yml",
    "content": "on:\n  push:\n    branches:\n      - main\n\npermissions:\n  contents: write\n  pull-requests: write\n\nname: release-please\n\njobs:\n  release-please:\n    runs-on: ubuntu-latest\n    steps:\n      - name: Run Release Please\n        uses: googleapis/release-please-action@45996ed1f6d02564a971a2fa1b5860e934307cf7 # v5.0.0\n        with:\n          token: ${{ secrets.PAT }}\n          config-file: release-please-config.json\n          manifest-file: .release-please-manifest.json\n"
  },
  {
    "path": ".github/workflows/run-k8s.yml",
    "content": "name: Run k8s test\n\non:\n  pull_request:\n  workflow_dispatch:\n  schedule:\n    - cron: '0 2 * * *'\n\nconcurrency:\n  group: \"scheduled-test\"\n  cancel-in-progress: false\n\njobs:\n  run_k8s_test:\n    strategy:\n      matrix:\n        payload:\n          - { name: \"minimal\", file: \"./.github/tests/minimal.yaml\" }\n          - { name: \"network-params\", file: \"./network_params.yaml\" }\n    runs-on: ubuntu-latest\n    steps:\n      - name: Checkout Repository\n        uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2\n\n      - name: Setup minikube\n        id: minikube\n        uses: medyagh/setup-minikube@e9e035a86bbc3caea26a450bd4dbf9d0c453682e # v0.0.21\n\n      - name: Get kubeconfig\n        id: kubeconfig\n        shell: bash\n        run: |\n          cat ~/.kube/config > kubeconfig\n          echo \"kubeconfig=$(cat kubeconfig | base64 -w 0)\" >> $GITHUB_OUTPUT\n\n      # run kurtosis test and assertoor\n      - name: Run kurtosis testnet\n        id: testnet\n        uses: ethpandaops/kurtosis-assertoor-github-action@f64942cbc780df731a731ea9f45765b161d2c8df # v1\n        with:\n          kurtosis_extra_args: \"--image-download always --non-blocking-tasks --verbosity DETAILED\"\n          kurtosis_backend: \"kubernetes\"\n          kubernetes_config: \"${{ steps.kubeconfig.outputs.kubeconfig }}\"\n          kubernetes_cluster: \"minikube\"\n          kubernetes_storage_class: \"standard\"\n          ethereum_package_branch: \"\"\n          ethereum_package_args: \"${{ matrix.payload.file }}\"\n          ethereum_package_url: \"$GITHUB_WORKSPACE\"\n          enclave_name: \"ethereum-package-${{ matrix.payload.name }}-${{ github.run_id }}\"\n          persistent_logs: \"true\"\n\n      - name: Check if Discord Webhook is Set\n        id: check_discord_webhook\n        env:\n          DISCORD_WEBHOOK: ${{ secrets.DISCORD_WEBHOOK }}\n        run: |\n          if [ -z \"$DISCORD_WEBHOOK\" ]; then\n            echo \"discord_webhook_set=false\" >> $GITHUB_ENV\n          else\n            echo \"discord_webhook_set=true\" >> $GITHUB_ENV\n          fi\n\n      - name: Notify\n        if: (cancelled() || failure()) && env.discord_webhook_set == 'true'\n        uses: Ilshidur/action-discord@d2594079a10f1d6739ee50a2471f0ca57418b554 # dependabot/npm_and_yarn/axios-1.3.4-08d9328\n        env:\n          DISCORD_WEBHOOK: ${{ secrets.DISCORD_WEBHOOK }}\n        with:\n          args: \"The k8s nightly/per PR test for ${{matrix.payload.name}} on ethereum-package has failed. Find it here: ${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}\"\n"
  },
  {
    "path": ".gitignore",
    "content": "# IntelliJ\n.idea\n*.iws\n*.iml\n*.ipr\n\n# VS Code\n*.vscode\n\n# Jenv\n.java-version\n\n# Pyenv\n.python-version\n\n# Mac spotlight index files\n.DS_Store\n\n*.un~\nSession.vim\n.netrwhist\n*~\n*.pyc\n*.pydevproject\n.project\n.metadata\nbin/**\ntmp/**\ntmp/**/*\n*.tmp\n*.bak\n*~.nib\nlocal.properties\n.classpath\n.settings/\n.loadpath\n\n# Vim swapfiles\n*.swp\n\n# Binaries for programs and plugins\n*.exe\n*.exe~\n*.dll\n*.so\n*.dylib\n\n# Archive files\n*.tgz\n*.zip\n\n# External tool builders\n.externalToolBuilders/\n\n# Locally stored \"Eclipse launch configurations\"\n*.launch\n\n# CDT-specific\n.cproject\n\n# PDT-specific\n.buildpath\n\n# Ignore Vim helptags\ndoc/tags\n\n# Output of the go coverage tool, specifically when used with LiteIDE\n*.out\n\n# Test binary, built with `go test -c`\n*.test\n\n\n# Output directories\nbuild/\ndist/\n\n# Java\n.gradle\n\n# Node\nnode_modules\nyarn-error.log\n\n# Bazel\n/bazel-*\n\n# enclave dumps\ndump/\n\n# binary files\nbinary\nbinaries\n\n# Claude file\nCLAUDE.md\n"
  },
  {
    "path": ".release-please-manifest.json",
    "content": "{\n  \".\": \"6.1.0\"\n}\n"
  },
  {
    "path": ".typos.toml",
    "content": "[default]\nextend-ignore-re = [\n    # Ignore Ethereum Node Records (ENR)\n    \"enr:-.*\",\n    # Ignore blutgang config typo\n    \"supress_rpc_check\",\n]\n\n[files]\nextend-exclude = [\n  \"CHANGELOG.md\",\n]\n"
  },
  {
    "path": "CHANGELOG.md",
    "content": "# Changelog\n\n## [6.1.0](https://github.com/ethpandaops/ethereum-package/compare/6.0.0...6.1.0) (2026-04-01)\n\n\n### Features\n\n* Add Besu and Teku grafana dashboards ([#1281](https://github.com/ethpandaops/ethereum-package/issues/1281)) ([7a3cc83](https://github.com/ethpandaops/ethereum-package/commit/7a3cc83c6a5de4a49eaa7b3e66d4ca936ad240f7))\n* add buildoor as separate mev stack ([#1309](https://github.com/ethpandaops/ethereum-package/issues/1309)) ([903fd99](https://github.com/ethpandaops/ethereum-package/commit/903fd992c9a06a350a92a82bd392a3ebc5aa70ea))\n* add Caplin (Erigon embedded CL) as a supported consensus launcher ([#1339](https://github.com/ethpandaops/ethereum-package/issues/1339)) ([173e3d5](https://github.com/ethpandaops/ethereum-package/commit/173e3d5c32ca031789d1853f2acead0736e7ad9d))\n* add custom binary execution functionality ([#1287](https://github.com/ethpandaops/ethereum-package/issues/1287)) ([68f9c19](https://github.com/ethpandaops/ethereum-package/commit/68f9c19ddb7c65cdefba260aa4f33cf080978f87))\n* add ews (execution witness sentry) ([#1285](https://github.com/ethpandaops/ethereum-package/issues/1285)) ([5593889](https://github.com/ethpandaops/ethereum-package/commit/559388991071d3cb8b665a131dc3b97d2e44b974))\n* add force_restart - to be able to replace images/binaries without killing enclave ([#1289](https://github.com/ethpandaops/ethereum-package/issues/1289)) ([e243677](https://github.com/ethpandaops/ethereum-package/commit/e243677d68affc719ca596664119d860cab8e856))\n* add heze ([#1323](https://github.com/ethpandaops/ethereum-package/issues/1323)) ([eb8c590](https://github.com/ethpandaops/ethereum-package/commit/eb8c590a3634188ecb29ae1319ee53bd356e16e7))\n* add mev-builder-cl-extra-params ([#1284](https://github.com/ethpandaops/ethereum-package/issues/1284)) ([c7027e8](https://github.com/ethpandaops/ethereum-package/commit/c7027e863fb60c218d9d00d24e4061c5aabd1882))\n* add min builder withdrawal delay ([#1294](https://github.com/ethpandaops/ethereum-package/issues/1294)) ([7f67acd](https://github.com/ethpandaops/ethereum-package/commit/7f67acda08e12705a64fe157c200f316ca4b01bf))\n* Add skill for more efficient use of the package for running devnets ([#1326](https://github.com/ethpandaops/ethereum-package/issues/1326)) ([ff545a6](https://github.com/ethpandaops/ethereum-package/commit/ff545a6e19fbaca65d576647de0aa90822e3fa28))\n* add slashoor ([#1308](https://github.com/ethpandaops/ethereum-package/issues/1308)) ([e4b3305](https://github.com/ethpandaops/ethereum-package/commit/e4b330579580477814cfaebb004e354f7eb396f4))\n* add snooper_params ([#1327](https://github.com/ethpandaops/ethereum-package/issues/1327)) ([c2bc134](https://github.com/ethpandaops/ethereum-package/commit/c2bc134c2225c77296011cc9ebd7f1512564e5c0))\n* added option for custom logging (Teku only) ([#1321](https://github.com/ethpandaops/ethereum-package/issues/1321)) ([582ebad](https://github.com/ethpandaops/ethereum-package/commit/582ebad9ec0f74efb1bcff2418414dd18c77833f))\n* Adding rakoon as tool ([#1303](https://github.com/ethpandaops/ethereum-package/issues/1303)) ([0272744](https://github.com/ethpandaops/ethereum-package/commit/02727445663d0554374898dd9b310653a6e1e430))\n* **checkpointz:** add automatic GLOAS fork image detection ([#1344](https://github.com/ethpandaops/ethereum-package/issues/1344)) ([44f21e7](https://github.com/ethpandaops/ethereum-package/commit/44f21e7d9fe61c7a8dfc5336ab06d7a72ed29ae8))\n* **ci:** add consensoor ([#1301](https://github.com/ethpandaops/ethereum-package/issues/1301)) ([865e221](https://github.com/ethpandaops/ethereum-package/commit/865e221fe5ca4e397f5b522e868477aa197deff1))\n* **constants:** add 'consensoor' to CL_TYPE and VC_TYPE constants ([865e221](https://github.com/ethpandaops/ethereum-package/commit/865e221fe5ca4e397f5b522e868477aa197deff1))\n* enable dora execution indexer ([#1282](https://github.com/ethpandaops/ethereum-package/issues/1282)) ([5c8fd38](https://github.com/ethpandaops/ethereum-package/commit/5c8fd3867d8536047c972561f28a79ccbd73e12e))\n* enable execution details indexing & tracing for dora ([#1317](https://github.com/ethpandaops/ethereum-package/issues/1317)) ([2f2690b](https://github.com/ethpandaops/ethereum-package/commit/2f2690ba6926497a75ecc57b081b57d97dcebb5c))\n* **launcher:** add publish_udp to participant configurations ([#1300](https://github.com/ethpandaops/ethereum-package/issues/1300)) ([a412048](https://github.com/ethpandaops/ethereum-package/commit/a4120483625f12acc7c090013657c9d9603fbde6))\n* **launcher:** integrate consensoor client launcher ([865e221](https://github.com/ethpandaops/ethereum-package/commit/865e221fe5ca4e397f5b522e868477aa197deff1))\n* replace ews with zkboost ([#1338](https://github.com/ethpandaops/ethereum-package/issues/1338)) ([964a9f4](https://github.com/ethpandaops/ethereum-package/commit/964a9f4851fa4af8892b4266b889026ca17293f5))\n* **starlark:** add Consensoor launcher support for Starlark ([865e221](https://github.com/ethpandaops/ethereum-package/commit/865e221fe5ca4e397f5b522e868477aa197deff1))\n* support spinning up multiple relays ([#1272](https://github.com/ethpandaops/ethereum-package/issues/1272)) ([c26e7e2](https://github.com/ethpandaops/ethereum-package/commit/c26e7e2e9f1b93ec0755012c4a2007ee7082531d))\n* update assertoor config ([#1312](https://github.com/ethpandaops/ethereum-package/issues/1312)) ([8afc10c](https://github.com/ethpandaops/ethereum-package/commit/8afc10c8c16b168c46592c855e3ee4d0a4cd2d07))\n* use gloas-support image image for assertoor when gloas is scheduled ([#1318](https://github.com/ethpandaops/ethereum-package/issues/1318)) ([f18408b](https://github.com/ethpandaops/ethereum-package/commit/f18408b0195c03dc1c930ad2ca200050c4b14080))\n* **vc:** allow 'consensoor' VC type in vc_launcher ([865e221](https://github.com/ethpandaops/ethereum-package/commit/865e221fe5ca4e397f5b522e868477aa197deff1))\n\n\n### Bug Fixes\n\n* **besu:** remove CLIQUE from RPC API lists ([#1341](https://github.com/ethpandaops/ethereum-package/issues/1341)) ([6307765](https://github.com/ethpandaops/ethereum-package/commit/6307765a78a0c7f44cb9106c2451712dff051770))\n* binary rename from nimbus_exe.. to nimbus ([#1325](https://github.com/ethpandaops/ethereum-package/issues/1325)) ([343ae7f](https://github.com/ethpandaops/ethereum-package/commit/343ae7f946408cde2950241bb3239d4810acc306))\n* bump ethereum-genesis-generator to 5.3.1 ([#1330](https://github.com/ethpandaops/ethereum-package/issues/1330)) ([429e3cb](https://github.com/ethpandaops/ethereum-package/commit/429e3cb9316e0811165f8b963d0245e0cfbcc0d7))\n* bump ethereum-genesis-generator to 5.3.5 ([#1332](https://github.com/ethpandaops/ethereum-package/issues/1332)) ([56535d9](https://github.com/ethpandaops/ethereum-package/commit/56535d9ed5c88149b7ac82039daa4b8cde9ae48d))\n* bump GitHub Actions to latest releases ([#1342](https://github.com/ethpandaops/ethereum-package/issues/1342)) ([0dedf87](https://github.com/ethpandaops/ethereum-package/commit/0dedf877ec283014c62aecab5b28295b16aaf3e9))\n* bump kurtosis-assertoor-github-action to fix Node.js 20 deprecation warnings ([#1336](https://github.com/ethpandaops/ethereum-package/issues/1336)) ([b31af5e](https://github.com/ethpandaops/ethereum-package/commit/b31af5e2f8656c05b4b923b07d4065b00c43c184))\n* claude skill install command does exist ([#1331](https://github.com/ethpandaops/ethereum-package/issues/1331)) ([a0f3436](https://github.com/ethpandaops/ethereum-package/commit/a0f3436b0c308e12ff53583a596aa0b6e03a2b01))\n* dora eip7732-support to gloas-support ([#1298](https://github.com/ethpandaops/ethereum-package/issues/1298)) ([c6ca605](https://github.com/ethpandaops/ethereum-package/commit/c6ca605fc7af611d88864355285f8ef4ebfd42a1))\n* enable private discovery for Grandine for both built-in and external vc ([#1315](https://github.com/ethpandaops/ethereum-package/issues/1315)) ([7282336](https://github.com/ethpandaops/ethereum-package/commit/72823365ae5078e2d38de0f36865b7c3f1ac006a))\n* enforce spammer names to avoid deduplication on spammor side ([#1296](https://github.com/ethpandaops/ethereum-package/issues/1296)) ([2faba19](https://github.com/ethpandaops/ethereum-package/commit/2faba1900ccdb1deeff9dccb888a0b072bf85fd5))\n* fail if dummy first error handling ([#1290](https://github.com/ethpandaops/ethereum-package/issues/1290)) ([8803a15](https://github.com/ethpandaops/ethereum-package/commit/8803a1598745e5195c66737c8670b52ef93adaf9))\n* grafana dashboard data source ([#1291](https://github.com/ethpandaops/ethereum-package/issues/1291)) ([6b605f1](https://github.com/ethpandaops/ethereum-package/commit/6b605f15c6389cbd53f280fb4ffac03559eee181))\n* **input_parser:** expand VC matrix as cartesian product in participants_matrix ([#1347](https://github.com/ethpandaops/ethereum-package/issues/1347)) ([4cb71e5](https://github.com/ethpandaops/ethereum-package/commit/4cb71e5c53fa8faa7b7dea9732d5c14521f5937b))\n* mev api ci startup bug ([#1297](https://github.com/ethpandaops/ethereum-package/issues/1297)) ([103b078](https://github.com/ethpandaops/ethereum-package/commit/103b078f107ade53c3d61c12b9e040a1d04ed07a))\n* treat besu/teku as special butterflies ([#1322](https://github.com/ethpandaops/ethereum-package/issues/1322)) ([87df9d9](https://github.com/ethpandaops/ethereum-package/commit/87df9d9d15e493ea91db788161e54324c39f6a6e))\n* update assertoor ai models ([#1313](https://github.com/ethpandaops/ethereum-package/issues/1313)) ([234fb54](https://github.com/ethpandaops/ethereum-package/commit/234fb54662a42734b77720bc95e9ef45ba4115f9))\n* update docker/login-action to v4.0.0 for Node.js 24 ([#1333](https://github.com/ethpandaops/ethereum-package/issues/1333)) ([4918751](https://github.com/ethpandaops/ethereum-package/commit/49187518a755123a1a6a866d2fbc97df122fad6f))\n* update kurtosis apt source to sdk.kurtosis.com ([#1334](https://github.com/ethpandaops/ethereum-package/issues/1334)) ([b031d21](https://github.com/ethpandaops/ethereum-package/commit/b031d21763c199571167026504191f6539935604))\n\n## [6.0.0](https://github.com/ethpandaops/ethereum-package/compare/5.0.1...6.0.0) (2026-01-05)\n\n\n### ⚠ BREAKING CHANGES\n\n* geth genesis flag, osaka time passthrough for public networks ([#1229](https://github.com/ethpandaops/ethereum-package/issues/1229))\n* remove mev_flood  ([#1091](https://github.com/ethpandaops/ethereum-package/issues/1091))\n\n### Features\n\n* Add 'trace' to enabled JSON-RPC modules ([#1235](https://github.com/ethpandaops/ethereum-package/issues/1235)) ([ea241af](https://github.com/ethpandaops/ethereum-package/commit/ea241af2bdd5b125fb6c909af1b2498bfcdaf327))\n* add `depends_on` to store service files for parallel ([#1208](https://github.com/ethpandaops/ethereum-package/issues/1208)) ([98206c8](https://github.com/ethpandaops/ethereum-package/commit/98206c89e06f616e94fea85f7c84fb062de7277a))\n* add `env` parameter to Blockscout configuration for custom environment variables ([#1262](https://github.com/ethpandaops/ethereum-package/issues/1262)) ([627619c](https://github.com/ethpandaops/ethereum-package/commit/627619c192bf55c340681d18388b0cb84706aa80))\n* add api to dora ([#1120](https://github.com/ethpandaops/ethereum-package/issues/1120)) ([9dbde5a](https://github.com/ethpandaops/ethereum-package/commit/9dbde5a5199360093c44866880ef5596e1fddb5a))\n* add bpo ([#1016](https://github.com/ethpandaops/ethereum-package/issues/1016)) ([37082b2](https://github.com/ethpandaops/ethereum-package/commit/37082b2253e3df3526cd96f48858d43bfadb9ebf))\n* add chainspec support for fusaka-devnet-2 ([#1055](https://github.com/ethpandaops/ethereum-package/issues/1055)) ([0e18733](https://github.com/ethpandaops/ethereum-package/commit/0e18733e0db851310ceb287bd72a96ec7336e4ab))\n* add checkpointz ([#1254](https://github.com/ethpandaops/ethereum-package/issues/1254)) ([c9d72f9](https://github.com/ethpandaops/ethereum-package/commit/c9d72f9c4ce4b9466b39c44862be6a7bb8ebc51a))\n* Add cl_devices parameter for mounting host devices to CL containers ([#1251](https://github.com/ethpandaops/ethereum-package/issues/1251)) ([ab9e55f](https://github.com/ethpandaops/ethereum-package/commit/ab9e55fc24441dac4c9ef41ce36fb4628afdebab))\n* add client-language label to ethereum service containers ([#1074](https://github.com/ethpandaops/ethereum-package/issues/1074)) ([6955763](https://github.com/ethpandaops/ethereum-package/commit/6955763975046e2291217cf45eab8d5bde2f00d9))\n* add custody group and getBlobsV2 metrics on PeerDAS dashboard ([#982](https://github.com/ethpandaops/ethereum-package/issues/982)) ([e43e569](https://github.com/ethpandaops/ethereum-package/commit/e43e569c47b6f8ee06a73add24bb59518aa74396))\n* add debug port for ethjs ([#1044](https://github.com/ethpandaops/ethereum-package/issues/1044)) ([459a931](https://github.com/ethpandaops/ethereum-package/commit/459a9312d6f503c3107c5b6cf25822b1e72aafae))\n* add disk usage as a metric for ethereum-metrics-exporter ([#1026](https://github.com/ethpandaops/ethereum-package/issues/1026)) ([8e793a5](https://github.com/ethpandaops/ethereum-package/commit/8e793a52da52eb13336c74184deff569ce5a47a8))\n* add el genesis files to dora config for extended blob gas display ([#1180](https://github.com/ethpandaops/ethereum-package/issues/1180)) ([2fd2b41](https://github.com/ethpandaops/ethereum-package/commit/2fd2b4177a6e03c535c8b51b346cfac495828429))\n* add engine snooper urls to dora config for block execution time tracking ([#1083](https://github.com/ethpandaops/ethereum-package/issues/1083)) ([7ffb9d5](https://github.com/ethpandaops/ethereum-package/commit/7ffb9d5af373f28db31fc257ff67ae0c68012dd9))\n* Add eRPC integration ([#1223](https://github.com/ethpandaops/ethereum-package/issues/1223)) ([16b72b7](https://github.com/ethpandaops/ethereum-package/commit/16b72b79d3392a851f0a18aaf18fe4b4fce20c03))\n* add ethrex execution client ([#1131](https://github.com/ethpandaops/ethereum-package/issues/1131)) ([82e5a71](https://github.com/ethpandaops/ethereum-package/commit/82e5a7178138d892c0c31c3839c89d53ffd42d9a))\n* add extra labels ([#1030](https://github.com/ethpandaops/ethereum-package/issues/1030)) ([12447f8](https://github.com/ethpandaops/ethereum-package/commit/12447f8ece26d48c4f5b324d288d19cf518c1a36))\n* add genesis_time as a possible network_param config value ([#1216](https://github.com/ethpandaops/ethereum-package/issues/1216)) ([b11ce6f](https://github.com/ethpandaops/ethereum-package/commit/b11ce6f5739a849496440ff64967dcfb72fbd035))\n* Add Geth dashboard  to the grafana module ([#1166](https://github.com/ethpandaops/ethereum-package/issues/1166)) ([47c90f6](https://github.com/ethpandaops/ethereum-package/commit/47c90f6defb3777e0667984a1eec63f45c8496d2))\n* Add Kurtosis config for BALs devnet 0 ([#1197](https://github.com/ethpandaops/ethereum-package/issues/1197)) ([9a93b33](https://github.com/ethpandaops/ethereum-package/commit/9a93b33071be666b583a77c849b13a2ea2dcd6c8))\n* add log level to ethrex ([#1269](https://github.com/ethpandaops/ethereum-package/issues/1269)) ([57af564](https://github.com/ethpandaops/ethereum-package/commit/57af564deb618745b752f76396c8371fd936f78f))\n* add maxblobspertx ([#1063](https://github.com/ethpandaops/ethereum-package/issues/1063)) ([1944080](https://github.com/ethpandaops/ethereum-package/commit/19440801b1837d266ad4d847f399a577f9c57550))\n* add mempool-bridge service integration ([#1222](https://github.com/ethpandaops/ethereum-package/issues/1222)) ([92d2239](https://github.com/ethpandaops/ethereum-package/commit/92d2239c5c8d87d182273cf17122bdb32a14e2f0))\n* add mev-fulu test ([#1014](https://github.com/ethpandaops/ethereum-package/issues/1014)) ([67a76e9](https://github.com/ethpandaops/ethereum-package/commit/67a76e9ce49d64092afd13cde54db943928c71ab))\n* add MIN_EPOCHS_FOR_DATA_COLUMN_SIDECARS_REQUESTS as config option ([#1057](https://github.com/ethpandaops/ethereum-package/issues/1057)) ([97afe9c](https://github.com/ethpandaops/ethereum-package/commit/97afe9cf764447780db6a52acc666f370f8258ba))\n* add more groups to spamoor clients ([#1066](https://github.com/ethpandaops/ethereum-package/issues/1066)) ([c9ed485](https://github.com/ethpandaops/ethereum-package/commit/c9ed4855cde389c3917b4905438c1a073afc9e72))\n* add multiple bn nodes per vc ([#1189](https://github.com/ethpandaops/ethereum-package/issues/1189)) ([7727330](https://github.com/ethpandaops/ethereum-package/commit/7727330b96a6f9fc7a119b1bba72f2ca208b5d60))\n* add name and nameoverride func to clients page spamoor ([#1068](https://github.com/ethpandaops/ethereum-package/issues/1068)) ([e3abf47](https://github.com/ethpandaops/ethereum-package/commit/e3abf47d30c90a07c571af1b006a8d0902b8449f))\n* add new timing parameters ([#1168](https://github.com/ethpandaops/ethereum-package/issues/1168)) ([1d524c8](https://github.com/ethpandaops/ethereum-package/commit/1d524c82182ce053a1aed06129017442de1de97a))\n* add nginx file server implementation ([#1065](https://github.com/ethpandaops/ethereum-package/issues/1065)) ([fd76bba](https://github.com/ethpandaops/ethereum-package/commit/fd76bba46326469872afb02c883a81c2fbfb9b0b))\n* add node index label ([#1086](https://github.com/ethpandaops/ethereum-package/issues/1086)) ([5aa0d44](https://github.com/ethpandaops/ethereum-package/commit/5aa0d442501c2193d8c54e5a1a0a374679a9d5d3))\n* add node selectors and tolerations to run_sh ([#1167](https://github.com/ethpandaops/ethereum-package/issues/1167)) ([c4e0c89](https://github.com/ethpandaops/ethereum-package/commit/c4e0c8945ede598729f496a58a9be59f71f558d5))\n* add OTLP collector URL to Lighthouse validator client ([#1252](https://github.com/ethpandaops/ethereum-package/issues/1252)) ([f507360](https://github.com/ethpandaops/ethereum-package/commit/f5073608b8ea23d99bd1f36c911e42632dd0b629))\n* add peercount support for nimbusel ([#1092](https://github.com/ethpandaops/ethereum-package/issues/1092)) ([12409e4](https://github.com/ethpandaops/ethereum-package/commit/12409e4912124f4a188994f623da49c623b7555c))\n* add per participant checkpoint sync enabled flag ([#1243](https://github.com/ethpandaops/ethereum-package/issues/1243)) ([2101448](https://github.com/ethpandaops/ethereum-package/commit/2101448191a8937cf77e3f5806e14e598c2e1995))\n* add public ports for mev ([#1023](https://github.com/ethpandaops/ethereum-package/issues/1023)) ([5d89274](https://github.com/ethpandaops/ethereum-package/commit/5d89274b8c0189add903dd814261eccdc1ef869f))\n* add public ports for other tools ([#1025](https://github.com/ethpandaops/ethereum-package/issues/1025)) ([fa9d05e](https://github.com/ethpandaops/ethereum-package/commit/fa9d05ef4bbc55ec307f1e50e46f365c5d293b3d))\n* add sanity check for lack of supernodes ([#1145](https://github.com/ethpandaops/ethereum-package/issues/1145)) ([70dd011](https://github.com/ethpandaops/ethereum-package/commit/70dd01125ef97484447c13af1c43ea9cec0c2d8c))\n* add sanity check for perfect peerdas ([#1217](https://github.com/ethpandaops/ethereum-package/issues/1217)) ([6c51752](https://github.com/ethpandaops/ethereum-package/commit/6c517523ac22ffe258f21cbc00be796e4a7efe74))\n* add skip_start ([#1253](https://github.com/ethpandaops/ethereum-package/issues/1253)) ([338bb88](https://github.com/ethpandaops/ethereum-package/commit/338bb88719985557bbbf229fb98f3513183201b6))\n* Add support for dummy EL in kurtosis config ([#1276](https://github.com/ethpandaops/ethereum-package/issues/1276)) ([b8007fd](https://github.com/ethpandaops/ethereum-package/commit/b8007fd3eddcb35aba48c324ffe12ae95d18dcf6))\n* add support for extra mounts for CL, EL, and VC clients ([#1136](https://github.com/ethpandaops/ethereum-package/issues/1136)) ([d385265](https://github.com/ethpandaops/ethereum-package/commit/d385265162c02d08df131d833b2729ef874afb67))\n* add support for MIN_EPOCHS_FOR_BLOCK_REQUESTS ([#1211](https://github.com/ethpandaops/ethereum-package/issues/1211)) ([17ad84a](https://github.com/ethpandaops/ethereum-package/commit/17ad84a110801c2a0fd82eb550a45c180fc6d44d))\n* add support for separate bootnode with bootnodoor ([#1238](https://github.com/ethpandaops/ethereum-package/issues/1238)) ([f8f4de6](https://github.com/ethpandaops/ethereum-package/commit/f8f4de6590ec18df5a9d7287ab51245c38b6be17))\n* Add support for the helix relay ([#1237](https://github.com/ethpandaops/ethereum-package/issues/1237)) ([e17cb60](https://github.com/ethpandaops/ethereum-package/commit/e17cb60cc1e8e0962f48804d55108e433f702605))\n* add telemetry service name flag to Lighthouse ([#1160](https://github.com/ethpandaops/ethereum-package/issues/1160)) ([2f61b9c](https://github.com/ethpandaops/ethereum-package/commit/2f61b9c65a49dca7428c02831c3bb034d8e11b79))\n* add Tempo as an additional service to collect Lighthouse tracing data ([#1150](https://github.com/ethpandaops/ethereum-package/issues/1150)) ([ba328bb](https://github.com/ethpandaops/ethereum-package/commit/ba328bb51fa63fcabf0dc7cc14ffe43d4f9a64a8))\n* add tolerations ([#1137](https://github.com/ethpandaops/ethereum-package/issues/1137)) ([a4b52da](https://github.com/ethpandaops/ethereum-package/commit/a4b52da3efdd58fbb27a66616ee2ee44fdd2455c))\n* add tx snooper ([#1043](https://github.com/ethpandaops/ethereum-package/issues/1043)) ([34e1151](https://github.com/ethpandaops/ethereum-package/commit/34e11513881aebba04e50e57515b3cad42a5f168))\n* add validator balance ([#1032](https://github.com/ethpandaops/ethereum-package/issues/1032)) ([3601346](https://github.com/ethpandaops/ethereum-package/commit/36013462cd74c1fd68de519d9dc0576f6920da97))\n* add validator ranges for devnets ([#1176](https://github.com/ethpandaops/ethereum-package/issues/1176)) ([3fb5084](https://github.com/ethpandaops/ethereum-package/commit/3fb508465a65281044bd5d02952884bd11f6f207))\n* add validator summary dora ([#1177](https://github.com/ethpandaops/ethereum-package/issues/1177)) ([f289914](https://github.com/ethpandaops/ethereum-package/commit/f28991489c922aace369a21f450a67bdc358b775))\n* **ai:** Add docs ([#1061](https://github.com/ethpandaops/ethereum-package/issues/1061)) ([1bf0893](https://github.com/ethpandaops/ethereum-package/commit/1bf08937f7ec376d5e281fef87dc1efc28aeefef))\n* allow passing custom env vars to the genesis generator ([#1227](https://github.com/ethpandaops/ethereum-package/issues/1227)) ([a43368e](https://github.com/ethpandaops/ethereum-package/commit/a43368eb3085a20f5950de0c7d11dc4bece37348))\n* allow specifying additional mnemonics ([#1267](https://github.com/ethpandaops/ethereum-package/issues/1267)) ([dad4ea3](https://github.com/ethpandaops/ethereum-package/commit/dad4ea34e70f0e1a7b67c9569526c561bbcc3653))\n* automatically generate a 2/3 ratio for target/max blobs  ([#1156](https://github.com/ethpandaops/ethereum-package/issues/1156)) ([2d1aa15](https://github.com/ethpandaops/ethereum-package/commit/2d1aa15be3f76e376baaf4e5cacfe3a3e96b96ef))\n* bump egg (fulu genesis support) ([#1140](https://github.com/ethpandaops/ethereum-package/issues/1140)) ([601df3b](https://github.com/ethpandaops/ethereum-package/commit/601df3b1d51d6dd9b9b12f242f4f453bf5430ed8))\n* configure Blockscout to index from shadowfork block height ([#1221](https://github.com/ethpandaops/ethereum-package/issues/1221)) ([a1347fe](https://github.com/ethpandaops/ethereum-package/commit/a1347fecad5e67bd6d31eec140bcf2b6792de217))\n* default to ethpandaops/client:devnet images ([#1097](https://github.com/ethpandaops/ethereum-package/issues/1097)) ([fa4f99a](https://github.com/ethpandaops/ethereum-package/commit/fa4f99a70a6789254ee5127d8f9bbcd9ec4f3e9f))\n* enable `custom_preset` in checkpointz config ([#1259](https://github.com/ethpandaops/ethereum-package/issues/1259)) ([8e9913b](https://github.com/ethpandaops/ethereum-package/commit/8e9913bdbda58209011533bf31fc3029b4f0e6cf))\n* enable extra env vars to be set during runtime mev, enable pprof by default ([#1012](https://github.com/ethpandaops/ethereum-package/issues/1012)) ([94a7f22](https://github.com/ethpandaops/ethereum-package/commit/94a7f22c93f79a66d244fa6d9f179213afe6147e))\n* enable mass das guardian scans in dora ([#1125](https://github.com/ethpandaops/ethereum-package/issues/1125)) ([0671925](https://github.com/ethpandaops/ethereum-package/commit/06719250033abf51b4caabf36211e29906c6358b))\n* enable prom and grafana to be ran separatly ([#1028](https://github.com/ethpandaops/ethereum-package/issues/1028)) ([500c3f0](https://github.com/ethpandaops/ethereum-package/commit/500c3f06a53db0648406c78de7370c8f15b769f2))\n* enable rpc proxy in dora ([#1212](https://github.com/ethpandaops/ethereum-package/issues/1212)) ([4de44ce](https://github.com/ethpandaops/ethereum-package/commit/4de44ceb5c3f0a57d98759beb393637773fe755e))\n* enable tty for prysm ([#1076](https://github.com/ethpandaops/ethereum-package/issues/1076)) ([1ae1826](https://github.com/ethpandaops/ethereum-package/commit/1ae18265fa2c0421ff950e0aae6873aac2e4654b))\n* enable validator block on sentry ([#1224](https://github.com/ethpandaops/ethereum-package/issues/1224)) ([0f61746](https://github.com/ethpandaops/ethereum-package/commit/0f61746d8ab4e304c6d603923dd021b134945210))\n* Extra Files for `*_extra_mounts` support ([#1144](https://github.com/ethpandaops/ethereum-package/issues/1144)) ([1b889f6](https://github.com/ethpandaops/ethereum-package/commit/1b889f6da26914699b8a71aea06a26eefa5b29ad))\n* feature flag for DisableFinalizedRootCheck ([#1228](https://github.com/ethpandaops/ethereum-package/issues/1228)) ([c51f183](https://github.com/ethpandaops/ethereum-package/commit/c51f183b336b2b6a2af89526a5102f9625821b1b))\n* fine grained control with public ip addresses per service ([#1111](https://github.com/ethpandaops/ethereum-package/issues/1111)) ([3f60fa8](https://github.com/ethpandaops/ethereum-package/commit/3f60fa8540538dd94335aed6656d0034bf7c1255))\n* make default node a supernode ([#1230](https://github.com/ethpandaops/ethereum-package/issues/1230)) ([802c045](https://github.com/ethpandaops/ethereum-package/commit/802c0454bb21d31991b0736ea603ef6b7f071f7a))\n* remove maxBlobsPerTx ([#1113](https://github.com/ethpandaops/ethereum-package/issues/1113)) ([9f40d0a](https://github.com/ethpandaops/ethereum-package/commit/9f40d0ac052759dcdc6515e7d6969c780f4f1b9b))\n* remove mev_flood  ([#1091](https://github.com/ethpandaops/ethereum-package/issues/1091)) ([2d3b170](https://github.com/ethpandaops/ethereum-package/commit/2d3b17048a37daa8f5742b978828eef6aa83b55c))\n* rename eip7732 to gloas ([#1157](https://github.com/ethpandaops/ethereum-package/issues/1157)) ([f0c5522](https://github.com/ethpandaops/ethereum-package/commit/f0c552299d076609d3edacc4643c7f0abe8767d0))\n* set fulu fork epoch at genesis ([#1261](https://github.com/ethpandaops/ethereum-package/issues/1261)) ([6ae2474](https://github.com/ethpandaops/ethereum-package/commit/6ae24741119d429704d41251f47a7d0e0893bc39))\n* sps setting Qu0b/nethermind sps ([#1225](https://github.com/ethpandaops/ethereum-package/issues/1225)) ([969a707](https://github.com/ethpandaops/ethereum-package/commit/969a7076d1694f8cf2010459cf19babf679466b2))\n* Support el_storage_type flag ([#1257](https://github.com/ethpandaops/ethereum-package/issues/1257)) ([2eb1e85](https://github.com/ethpandaops/ethereum-package/commit/2eb1e858e2e2bd7439ca205dfb56ab8157201d8e))\n* use dns names instead of ip addresses for services ([#1194](https://github.com/ethpandaops/ethereum-package/issues/1194)) ([f360a51](https://github.com/ethpandaops/ethereum-package/commit/f360a513b8298c1f89b89537848c28de5ba30713))\n\n\n### Bug Fixes\n\n* add fulu fork version for mev-boost-relay ([#1088](https://github.com/ethpandaops/ethereum-package/issues/1088)) ([953ec57](https://github.com/ethpandaops/ethereum-package/commit/953ec57c2446ba52f52c19d5d73f00529721aa61))\n* add input option for blobber ([#1072](https://github.com/ethpandaops/ethereum-package/issues/1072)) ([293286d](https://github.com/ethpandaops/ethereum-package/commit/293286dfe970868b2d18265e28ffe708b19907ff))\n* assertoor image for fulu support ([#1240](https://github.com/ethpandaops/ethereum-package/issues/1240)) ([b0f4fab](https://github.com/ethpandaops/ethereum-package/commit/b0f4fabf9d2958d7b67e56a2e0dc91ef26c2dd9a))\n* besu sync snap if non kurtosis ([#1034](https://github.com/ethpandaops/ethereum-package/issues/1034)) ([6752218](https://github.com/ethpandaops/ethereum-package/commit/6752218a02be6ef293b6adfc432535b53ac03748))\n* **blockscout:** make frontend available in kubernetes ([#1033](https://github.com/ethpandaops/ethereum-package/issues/1033)) ([d3ae571](https://github.com/ethpandaops/ethereum-package/commit/d3ae57110f8761bd26e47e2616ea6d52f8bff21c))\n* bump egg,fix minimal preset ([#1165](https://github.com/ethpandaops/ethereum-package/issues/1165)) ([0f877c6](https://github.com/ethpandaops/ethereum-package/commit/0f877c6e2b7098705478931b83c1535064b61ad1))\n* bump ethereum-genesis-generator to fix issues with large additional contracts ([#1019](https://github.com/ethpandaops/ethereum-package/issues/1019)) ([cb644af](https://github.com/ethpandaops/ethereum-package/commit/cb644aff035c6883575959ee50a64eef83615486))\n* change default images ([#1099](https://github.com/ethpandaops/ethereum-package/issues/1099)) ([ba92830](https://github.com/ethpandaops/ethereum-package/commit/ba9283094612b1605599a03361cbb74305db17d0))\n* change lh supernode flag ([#1186](https://github.com/ethpandaops/ethereum-package/issues/1186)) ([f64ff38](https://github.com/ethpandaops/ethereum-package/commit/f64ff386db4a31799a83f6c08ec7bc3a69ebd13a))\n* change nimbus supernode flag ([#1275](https://github.com/ethpandaops/ethereum-package/issues/1275)) ([094b3f3](https://github.com/ethpandaops/ethereum-package/commit/094b3f3da003ae91cd83c0517deccec4c0f73425))\n* cl node discovery on k8s ([#1162](https://github.com/ethpandaops/ethereum-package/issues/1162)) ([5643dfd](https://github.com/ethpandaops/ethereum-package/commit/5643dfd26f04f7b77c7556d2e3d67a84c2ea9822))\n* cleanup besu ([#1139](https://github.com/ethpandaops/ethereum-package/issues/1139)) ([5001427](https://github.com/ethpandaops/ethereum-package/commit/5001427aa3acf8411f6286a6772ab591996f8df3))\n* commit boost cb-config ([#1233](https://github.com/ethpandaops/ethereum-package/issues/1233)) ([87f3e03](https://github.com/ethpandaops/ethereum-package/commit/87f3e03ae478acb8e3a61a0f1e0af8c430c5569f))\n* commit boost integration ([#1204](https://github.com/ethpandaops/ethereum-package/issues/1204)) ([69e60b3](https://github.com/ethpandaops/ethereum-package/commit/69e60b3b86c470d449ed0045af508e514b1c9c41))\n* default to empty blob schedule if non defined ([#1115](https://github.com/ethpandaops/ethereum-package/issues/1115)) ([35c298d](https://github.com/ethpandaops/ethereum-package/commit/35c298d2d912ad6dadc1c6dd97c71f724829e16c))\n* default to pandaops ethrex image for arm/amd ([#1249](https://github.com/ethpandaops/ethereum-package/issues/1249)) ([b03a571](https://github.com/ethpandaops/ethereum-package/commit/b03a571162f6132c147810ab829fc2a35aa9504b))\n* disable page cache in dora ([#1079](https://github.com/ethpandaops/ethereum-package/issues/1079)) ([1e51446](https://github.com/ethpandaops/ethereum-package/commit/1e514461501c3c54594231c553305b2e3e2fd424))\n* dora,assertoor pull through cache ([#1059](https://github.com/ethpandaops/ethereum-package/issues/1059)) ([69c965f](https://github.com/ethpandaops/ethereum-package/commit/69c965fb434622805a56267604562afdd9c869cb))\n* downgrade teku from latest to master ([#1155](https://github.com/ethpandaops/ethereum-package/issues/1155)) ([996c2a1](https://github.com/ethpandaops/ethereum-package/commit/996c2a1b2483d9a4151023d465c0d5735524e08b))\n* el/cl/vc index calculation bug, due to parallel execution ([#1121](https://github.com/ethpandaops/ethereum-package/issues/1121)) ([fc4e65e](https://github.com/ethpandaops/ethereum-package/commit/fc4e65e15c3b1b859e0f5eda31489d95e05abb7a))\n* enable submission pages in dora ([#1031](https://github.com/ethpandaops/ethereum-package/issues/1031)) ([33e3f7b](https://github.com/ethpandaops/ethereum-package/commit/33e3f7b1d1b818ae993885ceaee530bdbf9a8a30))\n* ensure proper bpo scheduling ([#1266](https://github.com/ethpandaops/ethereum-package/issues/1266)) ([57120bf](https://github.com/ethpandaops/ethereum-package/commit/57120bf668913b0f6cd62df929b8a265e8a2ae08))\n* erigon db size alloc ([#1096](https://github.com/ethpandaops/ethereum-package/issues/1096)) ([777d37e](https://github.com/ethpandaops/ethereum-package/commit/777d37ed213916137e46b8886ed2e94d9140239b))\n* failed to start network: ethereum-package execution error: Evaluation error: key osaka_time not in dict ([#1218](https://github.com/ethpandaops/ethereum-package/issues/1218)) ([ae74385](https://github.com/ethpandaops/ethereum-package/commit/ae74385e68086c1984fcd4a4eba995d0cb09afa7))\n* fix checkpointz params override ([#1258](https://github.com/ethpandaops/ethereum-package/issues/1258)) ([9518b72](https://github.com/ethpandaops/ethereum-package/commit/9518b723cb1b349c81cb7003f6f18b49a88a28de))\n* geth genesis flag, osaka time passthrough for public networks ([#1229](https://github.com/ethpandaops/ethereum-package/issues/1229)) ([d58cab7](https://github.com/ethpandaops/ethereum-package/commit/d58cab71d0e4ea0f75752232a2a78b024e2bf8a4))\n* geth peering bug ([#1133](https://github.com/ethpandaops/ethereum-package/issues/1133)) ([bc62c0c](https://github.com/ethpandaops/ethereum-package/commit/bc62c0c30229b66fa67b73e32398cbb257d81e63))\n* gloas minimal config values ([#1250](https://github.com/ethpandaops/ethereum-package/issues/1250)) ([2ec3a94](https://github.com/ethpandaops/ethereum-package/commit/2ec3a94a15c1e80eee70516e413fc53a1b0c6e44))\n* helix logging type ([#1279](https://github.com/ethpandaops/ethereum-package/issues/1279)) ([756bfdd](https://github.com/ethpandaops/ethereum-package/commit/756bfdd19cd44d3a373d9e81c914992e66f6e2b0))\n* **lighthouse:** allow genesis sync when checkpoint sync isn't enabled ([#1192](https://github.com/ethpandaops/ethereum-package/issues/1192)) ([4053331](https://github.com/ethpandaops/ethereum-package/commit/4053331ffff1977b9b3d7d4b48e4f504d6bfea51))\n* make sure builder cl is supernode ([#1188](https://github.com/ethpandaops/ethereum-package/issues/1188)) ([dfef921](https://github.com/ethpandaops/ethereum-package/commit/dfef9215f1cfae27a9d39604726cfd0388440584))\n* mev rbuilder remove unused config param ([#1248](https://github.com/ethpandaops/ethereum-package/issues/1248)) ([3838a5f](https://github.com/ethpandaops/ethereum-package/commit/3838a5fa80958d1bc66af844b6bebc79ae3739f9))\n* minimal builds should use latest unstable branches ([#1174](https://github.com/ethpandaops/ethereum-package/issues/1174)) ([d6d6d5f](https://github.com/ethpandaops/ethereum-package/commit/d6d6d5f168b443be6ce6b4434275774cd6bb5ed9))\n* minimal spec ([#1037](https://github.com/ethpandaops/ethereum-package/issues/1037)) ([2372550](https://github.com/ethpandaops/ethereum-package/commit/23725502f0ee74106d84f7d9eb5d9d210ca983c5))\n* missing dns_name ([#1274](https://github.com/ethpandaops/ethereum-package/issues/1274)) ([3238be5](https://github.com/ethpandaops/ethereum-package/commit/3238be51bd23edccdae35f38ec94c22ea3fd3ee9))\n* move bootnodoor to additional_services ([#1264](https://github.com/ethpandaops/ethereum-package/issues/1264)) ([bf40917](https://github.com/ethpandaops/ethereum-package/commit/bf409170c2a7632bb9e80128a0c933b479bb455d))\n* nethermind chainspec, default genesis gas to 60M ([#1039](https://github.com/ethpandaops/ethereum-package/issues/1039)) ([b839e61](https://github.com/ethpandaops/ethereum-package/commit/b839e6148c04a11bc7b33559fd0f891a4ec324ef))\n* network params default images ([#1213](https://github.com/ethpandaops/ethereum-package/issues/1213)) ([33a0db2](https://github.com/ethpandaops/ethereum-package/commit/33a0db2f85303add140bbc997bd8ca5d25a46081))\n* nimbus checkpoint syncing ([#1181](https://github.com/ethpandaops/ethereum-package/issues/1181)) ([d464295](https://github.com/ethpandaops/ethereum-package/commit/d4642957cf3ceac6df8381ea9eff12ed3a0e17a3))\n* only add --target-peers=0 only when the network is kurtosis ([#1119](https://github.com/ethpandaops/ethereum-package/issues/1119)) ([572cbfc](https://github.com/ethpandaops/ethereum-package/commit/572cbfcf48a6a2ccff7c25e3c9ff8c39488fe6c9))\n* only append blob schedule, if defined ([#1022](https://github.com/ethpandaops/ethereum-package/issues/1022)) ([43db03a](https://github.com/ethpandaops/ethereum-package/commit/43db03ac65e20398288d5c639a261153de0aa942))\n* override bpo1,2 ([#1196](https://github.com/ethpandaops/ethereum-package/issues/1196)) ([836cbb8](https://github.com/ethpandaops/ethereum-package/commit/836cbb8b41a832f8f2fa0632a533c2634b1de19b))\n* pass gas limit to ethrex if network gas_limit was specified ([#1232](https://github.com/ethpandaops/ethereum-package/issues/1232)) ([39ac09b](https://github.com/ethpandaops/ethereum-package/commit/39ac09b15fae9912e21e6878e4bbd674cb1a16ef))\n* prysm gzip encoding bug ([#1112](https://github.com/ethpandaops/ethereum-package/issues/1112)) ([9f5fc45](https://github.com/ethpandaops/ethereum-package/commit/9f5fc45bd50c4f272c284684a3bccd6cff2a561e))\n* pull kurtosis images in kurtosis install ([#1048](https://github.com/ethpandaops/ethereum-package/issues/1048)) ([a00b6dd](https://github.com/ethpandaops/ethereum-package/commit/a00b6ddb10b0232a4d674b8b8b7b65ad5ff49e2f))\n* rbuilder parallel safe sorting ([#1046](https://github.com/ethpandaops/ethereum-package/issues/1046)) ([ec5895d](https://github.com/ethpandaops/ethereum-package/commit/ec5895dcc14046c48db4dcf330f9d760b8f009f6))\n* readme for additional services ([#1270](https://github.com/ethpandaops/ethereum-package/issues/1270)) ([ba855e0](https://github.com/ethpandaops/ethereum-package/commit/ba855e0ada309474aa5df4f438a7b287dfc19780))\n* readme/CI jobs  ([#1263](https://github.com/ethpandaops/ethereum-package/issues/1263)) ([ca6b7d2](https://github.com/ethpandaops/ethereum-package/commit/ca6b7d221ea6da9b3798126cf3ec0587cd415082))\n* remove default basefee fraction ([#1143](https://github.com/ethpandaops/ethereum-package/issues/1143)) ([d29e0bf](https://github.com/ethpandaops/ethereum-package/commit/d29e0bf10dfcc09ffb271805e80175e5a572ad90))\n* remove graffiti ([#1082](https://github.com/ethpandaops/ethereum-package/issues/1082)) ([ee4fff4](https://github.com/ethpandaops/ethereum-package/commit/ee4fff44d1ab01ee6ff3f00c8324fbe8cbdb29d2))\n* remove unused env ([#1153](https://github.com/ethpandaops/ethereum-package/issues/1153)) ([ea73a95](https://github.com/ethpandaops/ethereum-package/commit/ea73a95cc6da41572a356712cb661ed4cd169309))\n* revert prometheus branch ([#1024](https://github.com/ethpandaops/ethereum-package/issues/1024)) ([1559386](https://github.com/ethpandaops/ethereum-package/commit/1559386a3ca922bb11be2c2f011c083a052f6a55))\n* sanity check for all subfields ([#1130](https://github.com/ethpandaops/ethereum-package/issues/1130)) ([3d2c71c](https://github.com/ethpandaops/ethereum-package/commit/3d2c71c72a4ed32c94c3334e41f7821b124aab3e))\n* service ports ([#1021](https://github.com/ethpandaops/ethereum-package/issues/1021)) ([e83a1ad](https://github.com/ethpandaops/ethereum-package/commit/e83a1ad903eada1b2d193a305e43f1e33c41821f))\n* set deploy_client_group for mev related uniswap spammer ([#1195](https://github.com/ethpandaops/ethereum-package/issues/1195)) ([09d09b0](https://github.com/ethpandaops/ethereum-package/commit/09d09b0df362b2194e32e36eb40b5fcb14a9e631))\n* set miner gasprice for geth if running kt' ([#1027](https://github.com/ethpandaops/ethereum-package/issues/1027)) ([161fc14](https://github.com/ethpandaops/ethereum-package/commit/161fc14275420827e673617768b2e4aa5115e55d))\n* sf for erigon/geth post fulu ([#1183](https://github.com/ethpandaops/ethereum-package/issues/1183)) ([e964e30](https://github.com/ethpandaops/ethereum-package/commit/e964e305a19d56b798800e84d264f97b87952c55))\n* shadowfork enclave edits ([#1070](https://github.com/ethpandaops/ethereum-package/issues/1070)) ([63689ec](https://github.com/ethpandaops/ethereum-package/commit/63689ecf0a7119d2383d0dc08beaef0798e6a4ba))\n* shadowfork latest bug ([#1045](https://github.com/ethpandaops/ethereum-package/issues/1045)) ([197cdf8](https://github.com/ethpandaops/ethereum-package/commit/197cdf84cbcc713f46bb37c4af84c4a0cf1854ff))\n* shadowfork upstream to eth-clients ([#1047](https://github.com/ethpandaops/ethereum-package/issues/1047)) ([7c11a34](https://github.com/ethpandaops/ethereum-package/commit/7c11a34b8afc3f059aa6ca114f903d4f678bad29))\n* single-node lighthouse startup issue ([#1073](https://github.com/ethpandaops/ethereum-package/issues/1073)) ([6d29b3a](https://github.com/ethpandaops/ethereum-package/commit/6d29b3ab4e729913188358bc7a4ccdba9cf1e767))\n* some tests ([#1190](https://github.com/ethpandaops/ethereum-package/issues/1190)) ([fca81b3](https://github.com/ethpandaops/ethereum-package/commit/fca81b36413bd1d0cbb17e25c8d2c576b3c0a408))\n* specify devnet size for persistent flag ([#1054](https://github.com/ethpandaops/ethereum-package/issues/1054)) ([b4c398c](https://github.com/ethpandaops/ethereum-package/commit/b4c398c8fb6307024b02149e9269f479ed730215))\n* update custom-network to --network ([#1159](https://github.com/ethpandaops/ethereum-package/issues/1159)) ([1f57a7b](https://github.com/ethpandaops/ethereum-package/commit/1f57a7b70fadb770934bdc4d7834255e0362bef4))\n* Update mainnet yaml ([#1069](https://github.com/ethpandaops/ethereum-package/issues/1069)) ([288919b](https://github.com/ethpandaops/ethereum-package/commit/288919b9519eeb90db6b95cd27459d4aafe10f88))\n* Update sf to osaka ([#1105](https://github.com/ethpandaops/ethereum-package/issues/1105)) ([59579bb](https://github.com/ethpandaops/ethereum-package/commit/59579bb09baad5cd9990b294bbc37517c3682ef0))\n* update some tests ([#1122](https://github.com/ethpandaops/ethereum-package/issues/1122)) ([9488046](https://github.com/ethpandaops/ethereum-package/commit/94880461c85946c2e3b7e4af06f21ce88cd0184a))\n* use default dora image for fulu networks ([#1128](https://github.com/ethpandaops/ethereum-package/issues/1128)) ([b1f4e5c](https://github.com/ethpandaops/ethereum-package/commit/b1f4e5c4bd8823e39ea9171a664292b691de71a1))\n* use reth-rbuilder image as the default mev_builder_image in network_params.yaml ([#1077](https://github.com/ethpandaops/ethereum-package/issues/1077)) ([f07f3b6](https://github.com/ethpandaops/ethereum-package/commit/f07f3b6acc3642dfdd10c162cb05353e835bbd1a))\n* use self hosted runners ([#1100](https://github.com/ethpandaops/ethereum-package/issues/1100)) ([2fc4a3c](https://github.com/ethpandaops/ethereum-package/commit/2fc4a3c4cb96ecef81894fa3284ead609e30c088))\n* use ubuntu-latest ([#1078](https://github.com/ethpandaops/ethereum-package/issues/1078)) ([d209af4](https://github.com/ethpandaops/ethereum-package/commit/d209af4abc698a8ac1e2599d47aefb06d7532b8f))\n* validator client compatibility update ([#1114](https://github.com/ethpandaops/ethereum-package/issues/1114)) ([b826cc9](https://github.com/ethpandaops/ethereum-package/commit/b826cc991925fac696a698a5d41f6df492410230))\n* yeet unused mev builder ([#1056](https://github.com/ethpandaops/ethereum-package/issues/1056)) ([40767fe](https://github.com/ethpandaops/ethereum-package/commit/40767fef19cc1f91c6b0ab435bc5c70ca616cf4c))\n* yeet-7907 ([#1116](https://github.com/ethpandaops/ethereum-package/issues/1116)) ([93c6630](https://github.com/ethpandaops/ethereum-package/commit/93c66309b4c437dd342a306be62682a816879932))\n\n## [5.0.1](https://github.com/ethpandaops/ethereum-package/compare/5.0.0...5.0.1) (2025-05-08)\n\n\n### Bug Fixes\n\n* lighthouse target peers revert ([#1008](https://github.com/ethpandaops/ethereum-package/issues/1008)) ([c26e9f6](https://github.com/ethpandaops/ethereum-package/commit/c26e9f6d40b9c1c6f9ca1d4214f937f6846be1db))\n\n## [5.0.0](https://github.com/ethpandaops/ethereum-package/compare/4.6.0...5.0.0) (2025-05-08)\n\n\n### ⚠ BREAKING CHANGES\n\n* refactor open ports + add quic support ([#1000](https://github.com/ethpandaops/ethereum-package/issues/1000))\n* launch spamoor daemon with web ui ([#964](https://github.com/ethpandaops/ethereum-package/issues/964))\n* rename max_blob to sidecar for spamoor-blob ([#959](https://github.com/ethpandaops/ethereum-package/issues/959))\n* rename transaction spammer, remove beacon metrics gazer ([#923](https://github.com/ethpandaops/ethereum-package/issues/923))\n\n### Features\n\n* add force snapshot syncing capability ([#993](https://github.com/ethpandaops/ethereum-package/issues/993)) ([28b6e95](https://github.com/ethpandaops/ethereum-package/commit/28b6e9566526c3b1fd565901164f36c66cbd5b63))\n* add fraction as a config param ([#944](https://github.com/ethpandaops/ethereum-package/issues/944)) ([ad5ed42](https://github.com/ethpandaops/ethereum-package/commit/ad5ed42f3b4ee97f1d6bfc8bd950ce76b9a37579))\n* add gas limit overrides ([#968](https://github.com/ethpandaops/ethereum-package/issues/968)) ([35a3667](https://github.com/ethpandaops/ethereum-package/commit/35a3667b91fdf8994854f0f9d417e7dfeb73cec9))\n* add params to configure spamoor resource limits ([#1001](https://github.com/ethpandaops/ethereum-package/issues/1001)) ([0c2945c](https://github.com/ethpandaops/ethereum-package/commit/0c2945c319eead7846c4774f20e1363666963583))\n* add peerdas fulu support to nethermind ([#937](https://github.com/ethpandaops/ethereum-package/issues/937)) ([c187400](https://github.com/ethpandaops/ethereum-package/commit/c18740085c1980745b7df2340153474712257a4b))\n* add perfect peerdas testing ([#928](https://github.com/ethpandaops/ethereum-package/issues/928)) ([7e9a17f](https://github.com/ethpandaops/ethereum-package/commit/7e9a17f2f71d3346bd3ea7cff7e7828061ff757e))\n* add shadowfork at block height ([#1006](https://github.com/ethpandaops/ethereum-package/issues/1006)) ([595d663](https://github.com/ethpandaops/ethereum-package/commit/595d66324d0de365534ba7458cd811f95252dac6))\n* add spammor_blob wrapper v1 to activate with fulu ([#948](https://github.com/ethpandaops/ethereum-package/issues/948)) ([8c35011](https://github.com/ethpandaops/ethereum-package/commit/8c35011c72b89bf718147a1d0ffca6a8fc18e372))\n* add validator custody ([#929](https://github.com/ethpandaops/ethereum-package/issues/929)) ([2ab3246](https://github.com/ethpandaops/ethereum-package/commit/2ab3246f8c214f16e59f4fa4b295addec11afa08))\n* enable checkpoint sync for ephemery and public devnets ([#949](https://github.com/ethpandaops/ethereum-package/issues/949)) ([423b8c1](https://github.com/ethpandaops/ethereum-package/commit/423b8c1d232678475010ff9ec315dd85c141361d))\n* enable checkpoint sync for public networks ([#935](https://github.com/ethpandaops/ethereum-package/issues/935)) ([13dbe4d](https://github.com/ethpandaops/ethereum-package/commit/13dbe4d99a80f183dd7546955a0fe491e111abc8))\n* launch spamoor daemon with web ui ([#964](https://github.com/ethpandaops/ethereum-package/issues/964)) ([dabce8c](https://github.com/ethpandaops/ethereum-package/commit/dabce8c5ae92e68ad2bb3d124f30c33b32d111c7))\n* make genesis electra ([#940](https://github.com/ethpandaops/ethereum-package/issues/940)) ([1d4e943](https://github.com/ethpandaops/ethereum-package/commit/1d4e943b19e29308cf02c40c3b57c1b7ba744b4d))\n* remove python dependency ([#958](https://github.com/ethpandaops/ethereum-package/issues/958)) ([96cc80e](https://github.com/ethpandaops/ethereum-package/commit/96cc80e6d26aaed4892b3dda390e3b9cf3ac5609))\n* rename max_blob to sidecar for spamoor-blob ([#959](https://github.com/ethpandaops/ethereum-package/issues/959)) ([8aa239e](https://github.com/ethpandaops/ethereum-package/commit/8aa239e86c4916e8faf6ccdeef0d1a6fec832016))\n* test new eth-beacon-genesis ([#938](https://github.com/ethpandaops/ethereum-package/issues/938)) ([7ae4061](https://github.com/ethpandaops/ethereum-package/commit/7ae406180239bc6b67c65023bd4782e596031b52))\n* Update pectra files ([#983](https://github.com/ethpandaops/ethereum-package/issues/983)) ([cf13b4b](https://github.com/ethpandaops/ethereum-package/commit/cf13b4b87030df42854a0bddd314bcda73168b6b))\n\n\n### Bug Fixes\n\n* able to override spamoor blob image ([#954](https://github.com/ethpandaops/ethereum-package/issues/954)) ([07ad4cf](https://github.com/ethpandaops/ethereum-package/commit/07ad4cf1482b76704e78172f59057f7edbea54ee))\n* add blobscan DIRECT_URL env var ([#936](https://github.com/ethpandaops/ethereum-package/issues/936)) ([084e08d](https://github.com/ethpandaops/ethereum-package/commit/084e08d459a288839e24d4ef1c4fd9aa0fc36b8e)), closes [#916](https://github.com/ethpandaops/ethereum-package/issues/916)\n* add missing flags to rbuilder ([#947](https://github.com/ethpandaops/ethereum-package/issues/947)) ([b710250](https://github.com/ethpandaops/ethereum-package/commit/b710250dac7c60a24f7b48896b9a459580ae20a2))\n* add sec per slot to mev boost ([#984](https://github.com/ethpandaops/ethereum-package/issues/984)) ([ee447ec](https://github.com/ethpandaops/ethereum-package/commit/ee447ecef14302898db4e1d67b02b0ee722818b9))\n* allow prysm to be forever-alone ([#969](https://github.com/ethpandaops/ethereum-package/issues/969)) ([6c82d40](https://github.com/ethpandaops/ethereum-package/commit/6c82d405cbb215d575979ec8408b10842c2bec0e))\n* bump egg to v4.0.1 ([#939](https://github.com/ethpandaops/ethereum-package/issues/939)) ([4e3099c](https://github.com/ethpandaops/ethereum-package/commit/4e3099c9bf37c3c81c5d460cb43ca26b9f4d5d7f))\n* bump eth metrics export and egg ([#991](https://github.com/ethpandaops/ethereum-package/issues/991)) ([1e65a6f](https://github.com/ethpandaops/ethereum-package/commit/1e65a6fc75c2b843d789f53f318f7bbbc6d51ba2))\n* bump mev relay mem limit ([#1003](https://github.com/ethpandaops/ethereum-package/issues/1003)) ([8e54d8d](https://github.com/ethpandaops/ethereum-package/commit/8e54d8db091700de2af52488be5f8ba36625c7ac))\n* bump tests ([#942](https://github.com/ethpandaops/ethereum-package/issues/942)) ([09ce03f](https://github.com/ethpandaops/ethereum-package/commit/09ce03f87140f2b058ca3ce9c7007860a7ceb2fd))\n* cancellations for mev_relay_launcher.star ([#961](https://github.com/ethpandaops/ethereum-package/issues/961)) ([6b8f5e4](https://github.com/ethpandaops/ethereum-package/commit/6b8f5e4a9c9559894511a3e8e53096e48fba103e))\n* change all deposit addresses to mainnet ([#981](https://github.com/ethpandaops/ethereum-package/issues/981)) ([d677e63](https://github.com/ethpandaops/ethereum-package/commit/d677e630f8e69137a3314df525e718f9dee6d286))\n* **ci:** make docker rate limits appear correctly ([#946](https://github.com/ethpandaops/ethereum-package/issues/946)) ([0d9550a](https://github.com/ethpandaops/ethereum-package/commit/0d9550a788f936d4189f6fafe3756f8371f6a23f))\n* cleanup spamoor blob ([#972](https://github.com/ethpandaops/ethereum-package/issues/972)) ([9f3a81e](https://github.com/ethpandaops/ethereum-package/commit/9f3a81e05bb04cfd6f8fca176d0b85e8ccc74928))\n* geth network id cant be set with public networks ([#1005](https://github.com/ethpandaops/ethereum-package/issues/1005)) ([09ded2a](https://github.com/ethpandaops/ethereum-package/commit/09ded2a501f4b6d04bf46df42912d74d045abbe8))\n* handle extra args for spamoor ([#975](https://github.com/ethpandaops/ethereum-package/issues/975)) ([12736e6](https://github.com/ethpandaops/ethereum-package/commit/12736e69c6d76395f94508cfab2de0ef155d27ae))\n* lighthouse to be able to run alone ([#1007](https://github.com/ethpandaops/ethereum-package/issues/1007)) ([4c75506](https://github.com/ethpandaops/ethereum-package/commit/4c75506efb0b3a93c91cc660a688e350b2808166))\n* make geth default to snap-sync ([#998](https://github.com/ethpandaops/ethereum-package/issues/998)) ([067ca8c](https://github.com/ethpandaops/ethereum-package/commit/067ca8cf4c374d658e1e530144de304d46a45663))\n* make mev work with minimal preset ([#992](https://github.com/ethpandaops/ethereum-package/issues/992)) ([ff3da12](https://github.com/ethpandaops/ethereum-package/commit/ff3da1210a17b6fcf874657a5e620dd949b6606e))\n* mev-pectra workflow ([#963](https://github.com/ethpandaops/ethereum-package/issues/963)) ([729ead8](https://github.com/ethpandaops/ethereum-package/commit/729ead846c3dac302bf6efd17ba842700bdb521c))\n* nimbus supernode flag ([#997](https://github.com/ethpandaops/ethereum-package/issues/997)) ([8518302](https://github.com/ethpandaops/ethereum-package/commit/85183028766167dc52bdca56a26d1b5e48a4d5b1))\n* osaka blob schedule chainspec ([#943](https://github.com/ethpandaops/ethereum-package/issues/943)) ([59ebc52](https://github.com/ethpandaops/ethereum-package/commit/59ebc524048024665e4902923c0edb24e9541f17))\n* public networks wont fetch prague and osaka time ([#950](https://github.com/ethpandaops/ethereum-package/issues/950)) ([7fe59a8](https://github.com/ethpandaops/ethereum-package/commit/7fe59a8999f19498da981c57fde327540ecfeff0))\n* python 3.11 bug, bump to 3.12 ([#957](https://github.com/ethpandaops/ethereum-package/issues/957)) ([83830d4](https://github.com/ethpandaops/ethereum-package/commit/83830d44823767af65eda7dfe6b26c87c536c4cf))\n* refactor open ports + add quic support ([#1000](https://github.com/ethpandaops/ethereum-package/issues/1000)) ([a9247f3](https://github.com/ethpandaops/ethereum-package/commit/a9247f32e62db707407482ed20a0ad8a3f3765c9))\n* reth-builder client name type ([#967](https://github.com/ethpandaops/ethereum-package/issues/967)) ([d27d959](https://github.com/ethpandaops/ethereum-package/commit/d27d959d0a6f2be74eb68c97ae3a1f9819d3ac2e))\n* set fulu specific properties for blob scenarios in spamoor ([#971](https://github.com/ethpandaops/ethereum-package/issues/971)) ([74e98f0](https://github.com/ethpandaops/ethereum-package/commit/74e98f0e4e2546e8603bdc2b7fc4668f0bde7cc4))\n* supernode bool in participant matrix ([#951](https://github.com/ethpandaops/ethereum-package/issues/951)) ([3a0a9a0](https://github.com/ethpandaops/ethereum-package/commit/3a0a9a00e94c42c8d5b99045eea64e8f53682d68))\n* teku initial state to genesis state ([#962](https://github.com/ethpandaops/ethereum-package/issues/962)) ([1ad949f](https://github.com/ethpandaops/ethereum-package/commit/1ad949f4f65a34f041bd90050ca407e370eee579))\n* update nimbus latest image ([#987](https://github.com/ethpandaops/ethereum-package/issues/987)) ([a5a1561](https://github.com/ethpandaops/ethereum-package/commit/a5a15619d89e5f193ef1d764f73259f425c4ffa2))\n* update prysm supernode flag ([#999](https://github.com/ethpandaops/ethereum-package/issues/999)) ([eed788c](https://github.com/ethpandaops/ethereum-package/commit/eed788c074b3342b71498f8b864a3f5495ef4f38))\n* Update tests ([#918](https://github.com/ethpandaops/ethereum-package/issues/918)) ([d8e035b](https://github.com/ethpandaops/ethereum-package/commit/d8e035b7a6e3e498b84b0edd77f0e526092a5fb1))\n* use latest spamoor instead of blob-v1 for peerdas ([#1004](https://github.com/ethpandaops/ethereum-package/issues/1004)) ([f2c19b1](https://github.com/ethpandaops/ethereum-package/commit/f2c19b105ccf5824f7fc7ae3bf615ab504fd4e26))\n* use next js proxy for blockscout frontend ([#873](https://github.com/ethpandaops/ethereum-package/issues/873)) ([151ff0a](https://github.com/ethpandaops/ethereum-package/commit/151ff0a1c865eb8365b7ec2f1ccfa0788d532d9f))\n* use separate file for additional contracts & fix disabled fork activation epoch ([#849](https://github.com/ethpandaops/ethereum-package/issues/849)) ([e8cd95d](https://github.com/ethpandaops/ethereum-package/commit/e8cd95d9a9cc7e7b1f14584fed6c56ac0b0a6bd3))\n* yeet trailing comma from enr list ([#965](https://github.com/ethpandaops/ethereum-package/issues/965)) ([63a6d50](https://github.com/ethpandaops/ethereum-package/commit/63a6d502d0a2d037ff083cb524f024c2d2e0b4db))\n\n\n### Code Refactoring\n\n* rename transaction spammer, remove beacon metrics gazer ([#923](https://github.com/ethpandaops/ethereum-package/issues/923)) ([96eeb99](https://github.com/ethpandaops/ethereum-package/commit/96eeb99bed7abc14dcec1eca5eae0f852eeb9fb0))\n\n## [4.6.0](https://github.com/ethpandaops/ethereum-package/compare/4.5.0...4.6.0) (2025-03-19)\n\n\n### Features\n\n* use `eip7805-support` image for dora when eip7805 is scheduled for activation ([#900](https://github.com/ethpandaops/ethereum-package/issues/900)) ([9b3ee49](https://github.com/ethpandaops/ethereum-package/commit/9b3ee49c6086dcbdce833b68d8165f740273f23c))\n\n\n### Bug Fixes\n\n* add milliseconds to histograms ([#879](https://github.com/ethpandaops/ethereum-package/issues/879)) ([53602f1](https://github.com/ethpandaops/ethereum-package/commit/53602f1b042d2c8a2a5c064ce087a5f00ae53f7f))\n* commit boost startup ([#906](https://github.com/ethpandaops/ethereum-package/issues/906)) ([040e622](https://github.com/ethpandaops/ethereum-package/commit/040e622cdf28e02721aa2e54904ee3d902485c18))\n* decrease lighthouse mev --prepare-payload-lookahead from 12 to 8s ([#904](https://github.com/ethpandaops/ethereum-package/issues/904)) ([03bb449](https://github.com/ethpandaops/ethereum-package/commit/03bb449cfd327e55188fb1ff4407c4b75606b911))\n* lighthouse minimal image ([#915](https://github.com/ethpandaops/ethereum-package/issues/915)) ([c3ecee8](https://github.com/ethpandaops/ethereum-package/commit/c3ecee8148068d5270d9e549d042066d2eb8aec0))\n* prometheus shouldnt use latest ([#924](https://github.com/ethpandaops/ethereum-package/issues/924)) ([5cc99c8](https://github.com/ethpandaops/ethereum-package/commit/5cc99c8f30a758c77243a0f07c8f07462522436f))\n* provide `--network-custom-config-path` to Vero ([#905](https://github.com/ethpandaops/ethereum-package/issues/905)) ([998063f](https://github.com/ethpandaops/ethereum-package/commit/998063fae8c68288dbc760e4a76bfdfa23ecd62b))\n* Update config.toml.tmpl ([#919](https://github.com/ethpandaops/ethereum-package/issues/919)) ([8f8830f](https://github.com/ethpandaops/ethereum-package/commit/8f8830fd1992db4e5678c125bc400e310d5b6006))\n* update to latest spec ([a9058f5](https://github.com/ethpandaops/ethereum-package/commit/a9058f540c6d34584dae6f73a79fae33d9fa29d6))\n\n## [4.5.0](https://github.com/ethpandaops/ethereum-package/compare/4.4.0...4.5.0) (2025-02-10)\n\n\n### ⚠ BREAKING CHANGES\n\n* remove vc_count ([#844](https://github.com/ethpandaops/ethereum-package/issues/844))\n\n### Features\n\n* add custom image for egg ([#859](https://github.com/ethpandaops/ethereum-package/issues/859)) ([e60afbe](https://github.com/ethpandaops/ethereum-package/commit/e60afbeb7cefd1ee853c9bdca0041a6d4040fe78))\n* add gossip limit as a configuratable flag ([#856](https://github.com/ethpandaops/ethereum-package/issues/856)) ([56a3197](https://github.com/ethpandaops/ethereum-package/commit/56a3197f5385de7d8c1e768fe4b537603c86abcf))\n* add max,target blobs for future forks ([#851](https://github.com/ethpandaops/ethereum-package/issues/851)) ([1c33375](https://github.com/ethpandaops/ethereum-package/commit/1c333758f26ffc17dcfae92db68eda0bd8d2951b))\n* add op package per pr check ([#854](https://github.com/ethpandaops/ethereum-package/issues/854)) ([0e4e7aa](https://github.com/ethpandaops/ethereum-package/commit/0e4e7aa8da7dc7f4e2270efdc1acded484a31322))\n* add spamoor ([#850](https://github.com/ethpandaops/ethereum-package/issues/850)) ([a01d772](https://github.com/ethpandaops/ethereum-package/commit/a01d77274ebf7790a610932e225b8415575df492))\n* add support for pull through cache ([#833](https://github.com/ethpandaops/ethereum-package/issues/833)) ([0b2a2ae](https://github.com/ethpandaops/ethereum-package/commit/0b2a2ae081652f5c7e7ef1da13744a40c7279f37))\n* add vero `vc_type` ([#827](https://github.com/ethpandaops/ethereum-package/issues/827)) ([c2af143](https://github.com/ethpandaops/ethereum-package/commit/c2af14377ccb118e1ba6b06f1ee8335113ff6e16))\n* Add-blockscout_params ([#838](https://github.com/ethpandaops/ethereum-package/issues/838)) ([777ec06](https://github.com/ethpandaops/ethereum-package/commit/777ec065efe9714acb2f6762ec21c6f5c1961f4a))\n* Adding support for EIP-7732 and EIP-7805 ([#880](https://github.com/ethpandaops/ethereum-package/issues/880)) ([6b7a409](https://github.com/ethpandaops/ethereum-package/commit/6b7a409f2d78d50dfb66d8de7aededa080ab6230))\n* Adding support for new system contracts + updating devnet config ([#862](https://github.com/ethpandaops/ethereum-package/issues/862)) ([8ed275a](https://github.com/ethpandaops/ethereum-package/commit/8ed275a4ec4524b1df4b7cfe38a5f2374711760d))\n* Replacing mock builder ([#864](https://github.com/ethpandaops/ethereum-package/issues/864)) ([d3a0024](https://github.com/ethpandaops/ethereum-package/commit/d3a002494822c23bd7a0b677b738107c262ad0ff))\n* support older forks ([#846](https://github.com/ethpandaops/ethereum-package/issues/846)) ([d7e31e0](https://github.com/ethpandaops/ethereum-package/commit/d7e31e01ca6fff88c64ee3846d517e2f32d7bbcf))\n* update blockscout with new frontend ([#843](https://github.com/ethpandaops/ethereum-package/issues/843)) ([4f69962](https://github.com/ethpandaops/ethereum-package/commit/4f69962f440fc85c61e9ec2b812463d9ab965f7a))\n* Update devnet-5 example ([#863](https://github.com/ethpandaops/ethereum-package/issues/863)) ([04e13f3](https://github.com/ethpandaops/ethereum-package/commit/04e13f3bca8f14207b4b8f6014790c7b1b4affe7))\n* Update egg to support new system contract addresses ([#883](https://github.com/ethpandaops/ethereum-package/issues/883)) ([9f7ad78](https://github.com/ethpandaops/ethereum-package/commit/9f7ad78bdea16f2da63e0085272b78e55ccdc823))\n* use `eip7732-support` image for dora when eip7732 is scheduled for activation (ePBS) ([#881](https://github.com/ethpandaops/ethereum-package/issues/881)) ([dbe7912](https://github.com/ethpandaops/ethereum-package/commit/dbe7912b932261ca3946562c263595e597bc6f8d))\n\n\n### Bug Fixes\n\n* add fulu overrides automatically for assertoor and dora if fulu is active ([#858](https://github.com/ethpandaops/ethereum-package/issues/858)) ([d6bec16](https://github.com/ethpandaops/ethereum-package/commit/d6bec165b9bbb3e2a63cbafb063fd52197b23af9))\n* add txpool to reth api ([#841](https://github.com/ethpandaops/ethereum-package/issues/841)) ([35ec958](https://github.com/ethpandaops/ethereum-package/commit/35ec9585a728d373f3e9ec8c84e9abcddfed82a1))\n* bump assertoor memory limit to 8G ([#874](https://github.com/ethpandaops/ethereum-package/issues/874)) ([8ff3b11](https://github.com/ethpandaops/ethereum-package/commit/8ff3b1138d910cdbff1bc60764e9ddb596c3a551))\n* comment out optimism check from per-PR workflow ([#878](https://github.com/ethpandaops/ethereum-package/issues/878)) ([02323a3](https://github.com/ethpandaops/ethereum-package/commit/02323a3bf34089117ee303f114ac08267c34f9d0))\n* dora override ([#857](https://github.com/ethpandaops/ethereum-package/issues/857)) ([50ec581](https://github.com/ethpandaops/ethereum-package/commit/50ec58115674dced97f9159123ba7e2b044518d4))\n* Enable txpool on geth,besu and nethermind ([#868](https://github.com/ethpandaops/ethereum-package/issues/868)) ([f9d0b50](https://github.com/ethpandaops/ethereum-package/commit/f9d0b501a7a6543149d2ccd9b063f5beb34d30c9))\n* Fixes minimal runs with deneb state ([#871](https://github.com/ethpandaops/ethereum-package/issues/871)) ([2ca35e8](https://github.com/ethpandaops/ethereum-package/commit/2ca35e8eb74d8a78e5b6fed110d69b0e68308c76))\n* mev-builder custom image ([#847](https://github.com/ethpandaops/ethereum-package/issues/847)) ([bc89ad3](https://github.com/ethpandaops/ethereum-package/commit/bc89ad316b9b7b137382269138fc37e241a645d1))\n* Private key for account 20 ([#870](https://github.com/ethpandaops/ethereum-package/issues/870)) ([9782552](https://github.com/ethpandaops/ethereum-package/commit/9782552e6828019f07f177c524988c24b4da1e1f))\n* **prysm:** run p2p-udp on different port as it might conflict with the new quic port ([#845](https://github.com/ethpandaops/ethereum-package/issues/845)) ([3bb88e0](https://github.com/ethpandaops/ethereum-package/commit/3bb88e04d2fa9f27418c013d656b02a714c20f4d))\n* rbuilder upstream repo with reth-rbuilder binary ([#828](https://github.com/ethpandaops/ethereum-package/issues/828)) ([55df658](https://github.com/ethpandaops/ethereum-package/commit/55df658f7757d29419aca7510830cf1d5c70d492))\n* remove vc_count ([#844](https://github.com/ethpandaops/ethereum-package/issues/844)) ([b61a128](https://github.com/ethpandaops/ethereum-package/commit/b61a128bf1d96e8dd11f028925dee9b70e37ac6f))\n* replace goomy with spamoor ([#860](https://github.com/ethpandaops/ethereum-package/issues/860)) ([28f7b7d](https://github.com/ethpandaops/ethereum-package/commit/28f7b7d4849ceeab56ac648949b74a1aa0e28dee))\n* revert egg version ([#852](https://github.com/ethpandaops/ethereum-package/issues/852)) ([a182f30](https://github.com/ethpandaops/ethereum-package/commit/a182f3039b91c15cde5b0d0967666d336a9629ac))\n* sanity check for count ([#835](https://github.com/ethpandaops/ethereum-package/issues/835)) ([2633d15](https://github.com/ethpandaops/ethereum-package/commit/2633d15b9739520bb979887965a04382869d16d8))\n* Update default mev-images source ([#884](https://github.com/ethpandaops/ethereum-package/issues/884)) ([176b08a](https://github.com/ethpandaops/ethereum-package/commit/176b08a7062a2fe7bd71a141b1e796f040a38dc4))\n* Update Erigon docker image repo naming ([#834](https://github.com/ethpandaops/ethereum-package/issues/834)) ([ceb1444](https://github.com/ethpandaops/ethereum-package/commit/ceb14448b4e3b48b4cbf893bf5d95572bfd8949c))\n* Update ethereum-genesis-generator to fix eip7623 timestamp missing for Nethermind ([#875](https://github.com/ethpandaops/ethereum-package/issues/875)) ([1c1d698](https://github.com/ethpandaops/ethereum-package/commit/1c1d6988f9c1028ec9cdb22655b556977db901b1))\n* update kt config ([#876](https://github.com/ethpandaops/ethereum-package/issues/876)) ([1704194](https://github.com/ethpandaops/ethereum-package/commit/1704194121ba25e1e845f210f248b9b5993d24c2))\n* Update rbuilder flag and add mainnet split example ([#885](https://github.com/ethpandaops/ethereum-package/issues/885)) ([4bbd070](https://github.com/ethpandaops/ethereum-package/commit/4bbd0705d80770df230129d43920784b123b6bbd))\n* Update test files ([#893](https://github.com/ethpandaops/ethereum-package/issues/893)) ([4fcca66](https://github.com/ethpandaops/ethereum-package/commit/4fcca6677bd87b2cb712989bfbcbd1e7bb7152f4))\n* use default image for assertoor with electra enabled ([#855](https://github.com/ethpandaops/ethereum-package/issues/855)) ([3b51e5e](https://github.com/ethpandaops/ethereum-package/commit/3b51e5e280e9fc1c7dba890c4e8e795a75e525b2))\n* use writable path for assertoor db ([#877](https://github.com/ethpandaops/ethereum-package/issues/877)) ([a913455](https://github.com/ethpandaops/ethereum-package/commit/a913455bb3cdf9abb5dea8e27def320b5bf3ae75))\n\n\n### Miscellaneous Chores\n\n* release 4.5.0 ([#896](https://github.com/ethpandaops/ethereum-package/issues/896)) ([0dc54e0](https://github.com/ethpandaops/ethereum-package/commit/0dc54e0018356e88a478bbaf4c6782cdcb0c9b6f))\n\n## [4.4.0](https://github.com/ethpandaops/ethereum-package/compare/4.3.0...4.4.0) (2024-11-01)\n\n\n### Features\n\n* add checkpoint sync capabilities to nimbus ([#804](https://github.com/ethpandaops/ethereum-package/issues/804)) ([853417e](https://github.com/ethpandaops/ethereum-package/commit/853417efb5a79056bb6e8a1f37739747131066d5))\n* add commit-boost support ([#779](https://github.com/ethpandaops/ethereum-package/issues/779)) ([ebbbe83](https://github.com/ethpandaops/ethereum-package/commit/ebbbe8365730a79b98e6bf96b72a8f75a9744f1b))\n* add docker authentication ([#816](https://github.com/ethpandaops/ethereum-package/issues/816)) ([807f6aa](https://github.com/ethpandaops/ethereum-package/commit/807f6aa8a992d1868d2d0aed7f5857df3c5857e5))\n* add peerdas metrics dashboard ([#790](https://github.com/ethpandaops/ethereum-package/issues/790)) ([12b787d](https://github.com/ethpandaops/ethereum-package/commit/12b787dd7f1b7130dde369c1eb643dedde4ca03c))\n* add rbuilder remove old geth builder - flashbots ([#786](https://github.com/ethpandaops/ethereum-package/issues/786)) ([de95c61](https://github.com/ethpandaops/ethereum-package/commit/de95c61cf5d2243a3838d2104b5a4591a57e988f))\n* add resource configuration for prometheus and grafana ([#773](https://github.com/ethpandaops/ethereum-package/issues/773)) ([d296c26](https://github.com/ethpandaops/ethereum-package/commit/d296c265ab7e4e67c9c6774c665fe3b3184f9f13))\n* add supernode label to every container ([#788](https://github.com/ethpandaops/ethereum-package/issues/788)) ([43edfd5](https://github.com/ethpandaops/ethereum-package/commit/43edfd5a5bb597636dcbaa1d7f299868d27cdab2))\n* add support for fulu/osaka fusaka ([#798](https://github.com/ethpandaops/ethereum-package/issues/798)) ([0a9e445](https://github.com/ethpandaops/ethereum-package/commit/0a9e445b3cf8a8557bf03b454b0967bf51f6734f))\n* add support for remote signers - `use_remote_signer` ([#791](https://github.com/ethpandaops/ethereum-package/issues/791)) ([9f1b6e9](https://github.com/ethpandaops/ethereum-package/commit/9f1b6e953fec3fd172543ed8fad510523382c576))\n* enable one parameter supernode, refactor el,cl,vc ([#778](https://github.com/ethpandaops/ethereum-package/issues/778)) ([8513c06](https://github.com/ethpandaops/ethereum-package/commit/8513c06020812e33a61ecaee073a165d85ed7ce0))\n\n\n### Bug Fixes\n\n* add database config to assertoor ([#783](https://github.com/ethpandaops/ethereum-package/issues/783)) ([56532cf](https://github.com/ethpandaops/ethereum-package/commit/56532cf50fc56e5958b5839905f7f1b1081ad169))\n* add nimbus-eth1 net-key ([#811](https://github.com/ethpandaops/ethereum-package/issues/811)) ([c91bbbb](https://github.com/ethpandaops/ethereum-package/commit/c91bbbbe20d14712e3731e37bea46a9cf4c88da6))\n* delete unnecessary port assignment for prysm ([#810](https://github.com/ethpandaops/ethereum-package/issues/810)) ([47204c3](https://github.com/ethpandaops/ethereum-package/commit/47204c350117b2a7b1cfa4c38d3308bd5e90828e))\n* docker login to separate action yaml ([#819](https://github.com/ethpandaops/ethereum-package/issues/819)) ([2494022](https://github.com/ethpandaops/ethereum-package/commit/2494022122d3590f5dc1ec701a9fb7e081d5c0e6))\n* get volume size recommendations when in shadowfork mode ([#820](https://github.com/ethpandaops/ethereum-package/issues/820)) ([b1f27c6](https://github.com/ethpandaops/ethereum-package/commit/b1f27c649e61f29700baf9f204b89054e507c44a))\n* mixed up labels ([#799](https://github.com/ethpandaops/ethereum-package/issues/799)) ([e2c1528](https://github.com/ethpandaops/ethereum-package/commit/e2c1528834809db1f68f79133edc6016132d2f2f))\n* only set supernode if its true ([#796](https://github.com/ethpandaops/ethereum-package/issues/796)) ([2110a60](https://github.com/ethpandaops/ethereum-package/commit/2110a608205e06e1986c58efeeeefefd37df51eb))\n* prefund container suffixes for k8s ([#818](https://github.com/ethpandaops/ethereum-package/issues/818)) ([968cfbd](https://github.com/ethpandaops/ethereum-package/commit/968cfbdb702e5e277bec8704e5185055dedabe74))\n* remove deprecated http-allow-sync-stalled from LH ([#805](https://github.com/ethpandaops/ethereum-package/issues/805)) ([1825dbf](https://github.com/ethpandaops/ethereum-package/commit/1825dbfc6d58a6326f11fa5a9531b6867b0d5b77))\n* Remove not necessary \"/api\" (and bump verifier version) ([#792](https://github.com/ethpandaops/ethereum-package/issues/792)) ([befde97](https://github.com/ethpandaops/ethereum-package/commit/befde97ce72f133bd8b491fe2e4a40870af52f12))\n* set default for label-maker ([#797](https://github.com/ethpandaops/ethereum-package/issues/797)) ([5b2d234](https://github.com/ethpandaops/ethereum-package/commit/5b2d234217de686ac002b077d3047708d0a0a132))\n* swap http/grpc server ports and replace flags ([#802](https://github.com/ethpandaops/ethereum-package/issues/802)) ([8c6df26](https://github.com/ethpandaops/ethereum-package/commit/8c6df267a4d517e670425e0de4c18cff122500af))\n* update built in assertoor tests ([#782](https://github.com/ethpandaops/ethereum-package/issues/782)) ([d24fb2a](https://github.com/ethpandaops/ethereum-package/commit/d24fb2a2ec529bb17b386d3c99bcdf9dd2a94118))\n* update nethermind config option ([#824](https://github.com/ethpandaops/ethereum-package/issues/824)) ([08ce034](https://github.com/ethpandaops/ethereum-package/commit/08ce034e06ecdcc2885e3f5ecf721cf6df6caddd))\n\n## [4.3.0](https://github.com/ethpandaops/ethereum-package/compare/4.2.0...4.3.0) (2024-09-23)\n\n\n### Features\n\n* add prefunded accounts ([#752](https://github.com/ethpandaops/ethereum-package/issues/752)) ([1be7efa](https://github.com/ethpandaops/ethereum-package/commit/1be7efa028d5b72837a9c4b5de5b70e102e2f166))\n* dora - show more infos about all peers on client pages ([#760](https://github.com/ethpandaops/ethereum-package/issues/760)) ([c77d95f](https://github.com/ethpandaops/ethereum-package/commit/c77d95fe21deb9dd09481998d2e39f46b148f146))\n\n\n### Bug Fixes\n\n* `metrics-host-allowlist` for Teku ([#765](https://github.com/ethpandaops/ethereum-package/issues/765)) ([ad75fcc](https://github.com/ethpandaops/ethereum-package/commit/ad75fcce4aa3dcd0064a6d538462587e430478a0))\n* built in validator lifecycle test for assertoor ([#763](https://github.com/ethpandaops/ethereum-package/issues/763)) ([6f868cc](https://github.com/ethpandaops/ethereum-package/commit/6f868ccf26abf341a83bc96569dea0fa890f90f7))\n* explicitly set client contexts ([#755](https://github.com/ethpandaops/ethereum-package/issues/755)) ([94dc531](https://github.com/ethpandaops/ethereum-package/commit/94dc531e332f4fd4466a9473dfec328a3a681b01))\n* no default resource limits ([#768](https://github.com/ethpandaops/ethereum-package/issues/768)) ([4c4831b](https://github.com/ethpandaops/ethereum-package/commit/4c4831bc509ae580f68b85c2c5b469d454586def))\n* prysm gRPC removal - use http server instead for keymanager ([#761](https://github.com/ethpandaops/ethereum-package/issues/761)) ([ba91174](https://github.com/ethpandaops/ethereum-package/commit/ba911745b5e6cdc0216c5394394605d274ce70ef))\n* remove epoch checker for goomy ([#754](https://github.com/ethpandaops/ethereum-package/issues/754)) ([f124bbf](https://github.com/ethpandaops/ethereum-package/commit/f124bbf96847ec08d3aa7e8b65df336ef6722475))\n* remove exp RPC API namespace flag from nimbus-eth1 configuration ([#767](https://github.com/ethpandaops/ethereum-package/issues/767)) ([8fec454](https://github.com/ethpandaops/ethereum-package/commit/8fec454f7af0733277336fc3f06376442b7b4fa4))\n* reth-builder volume claim ([#771](https://github.com/ethpandaops/ethereum-package/issues/771)) ([4570328](https://github.com/ethpandaops/ethereum-package/commit/4570328e47b6ef5a59a47635f6c58acd3f8ad2d1))\n* update dora config for latest release & remove custom images ([#748](https://github.com/ethpandaops/ethereum-package/issues/748)) ([a433c50](https://github.com/ethpandaops/ethereum-package/commit/a433c50e1c61dd20a6c28dcebfde704c136ddb69))\n\n## [4.2.0](https://github.com/ethpandaops/ethereum-package/compare/4.1.0...4.2.0) (2024-08-19)\n\n\n### Features\n\n* add customizable configuraiton for prometheus retention ([#745](https://github.com/ethpandaops/ethereum-package/issues/745)) ([6c02dfe](https://github.com/ethpandaops/ethereum-package/commit/6c02dfee67e239650f9f21786ff5c976770a733b))\n* add genesis_gaslimit param configuration ([#726](https://github.com/ethpandaops/ethereum-package/issues/726)) ([a4ba9a6](https://github.com/ethpandaops/ethereum-package/commit/a4ba9a65852411db43dbcf3c727c9ad52040e482))\n* Add Lighthouse PeerDAS Dashboard ([#736](https://github.com/ethpandaops/ethereum-package/issues/736)) ([ffbfde2](https://github.com/ethpandaops/ethereum-package/commit/ffbfde23f2e58350145ab48d0dbce5e245385ab5))\n* add peerdas-electra-support ([#740](https://github.com/ethpandaops/ethereum-package/issues/740)) ([663e7e6](https://github.com/ethpandaops/ethereum-package/commit/663e7e654b81fb623a1fa486ccf7092ba2e39d80))\n* add profiling for prysm ([#722](https://github.com/ethpandaops/ethereum-package/issues/722)) ([7dc6660](https://github.com/ethpandaops/ethereum-package/commit/7dc66606f5d5f86d4ef394bc70fe2e936cd55c75))\n* add sanity check ([#710](https://github.com/ethpandaops/ethereum-package/issues/710)) ([b824cac](https://github.com/ethpandaops/ethereum-package/commit/b824cac89ca2c78604c82544888a89c0c1d3aa80))\n* enable dora pprof ([#743](https://github.com/ethpandaops/ethereum-package/issues/743)) ([2b7be9a](https://github.com/ethpandaops/ethereum-package/commit/2b7be9a27c516b17322e8028c23813620bfc6afe))\n* generate keys if not default key is used ([#707](https://github.com/ethpandaops/ethereum-package/issues/707)) ([2d1cab5](https://github.com/ethpandaops/ethereum-package/commit/2d1cab5317dac62524601f392a4a62a7c3a88b80))\n* lodestar persists invalid ssz objects by default ([#730](https://github.com/ethpandaops/ethereum-package/issues/730)) ([5a45991](https://github.com/ethpandaops/ethereum-package/commit/5a459914327e33c426e82df62af6336970857f08))\n* update egg config parameters ([#737](https://github.com/ethpandaops/ethereum-package/issues/737)) ([78c2bc7](https://github.com/ethpandaops/ethereum-package/commit/78c2bc77caaf814cf360499b6b61337ea7eb7099))\n\n\n### Bug Fixes\n\n* add debug ns to nethermind ([#732](https://github.com/ethpandaops/ethereum-package/issues/732)) ([372bb52](https://github.com/ethpandaops/ethereum-package/commit/372bb521525948bc0a97a1999e6d233cb2792626))\n* allow vc properties in participants_matrix.cl ([#715](https://github.com/ethpandaops/ethereum-package/issues/715)) ([c8b9b19](https://github.com/ethpandaops/ethereum-package/commit/c8b9b19c045f6075fa02f9abf8f761a5a8056ba3))\n* besu devnet schedule ([#734](https://github.com/ethpandaops/ethereum-package/issues/734)) ([28b67cd](https://github.com/ethpandaops/ethereum-package/commit/28b67cd17a6f0abf80c46821465872d4006f9277))\n* blobscan redis dependency ([#712](https://github.com/ethpandaops/ethereum-package/issues/712)) ([0ed1c9c](https://github.com/ethpandaops/ethereum-package/commit/0ed1c9c8e974f7c6900f68679602d95cfcb17831))\n* change churn limit default for pectra tests ([#747](https://github.com/ethpandaops/ethereum-package/issues/747)) ([8109054](https://github.com/ethpandaops/ethereum-package/commit/8109054e20121092ad5ad3eebbf1a16a20677887))\n* correctly apply extra params if builder is enabled ([#725](https://github.com/ethpandaops/ethereum-package/issues/725)) ([a94caf0](https://github.com/ethpandaops/ethereum-package/commit/a94caf02c327347a7e6b4ed2f99badb787a25dc7))\n* disable all assertoor tests by default ([#738](https://github.com/ethpandaops/ethereum-package/issues/738)) ([2961f96](https://github.com/ethpandaops/ethereum-package/commit/2961f969402b3f3dbf6f584e74644cf32cfd7902))\n* lodestar vc faster startup ([#721](https://github.com/ethpandaops/ethereum-package/issues/721)) ([225e3d8](https://github.com/ethpandaops/ethereum-package/commit/225e3d80fe0389f6a22c88a56075ad86a1ae2b00))\n* readme eof ([#739](https://github.com/ethpandaops/ethereum-package/issues/739)) ([7f94f6e](https://github.com/ethpandaops/ethereum-package/commit/7f94f6e2fefe21e11edb7cf5dc827e3f486afe98))\n* remove custom peerdas images for dora & assertoor ([#741](https://github.com/ethpandaops/ethereum-package/issues/741)) ([a19398d](https://github.com/ethpandaops/ethereum-package/commit/a19398decc892ba6749284495891184de987cab0))\n* remove subscribe all subnet nimbus ([#719](https://github.com/ethpandaops/ethereum-package/issues/719)) ([ef92f8f](https://github.com/ethpandaops/ethereum-package/commit/ef92f8f45e4e32d0e2b9711ca9671ff5d1bcab00))\n* remove subscribe-all-subnets from default prysm config ([#717](https://github.com/ethpandaops/ethereum-package/issues/717)) ([6348c0b](https://github.com/ethpandaops/ethereum-package/commit/6348c0b4c0b8a03a27cdf8a5fa8615b0ab323d7b))\n* remove subscribe-all-subnets lighthouse/lodestar/teku ([#720](https://github.com/ethpandaops/ethereum-package/issues/720)) ([cdb20e1](https://github.com/ethpandaops/ethereum-package/commit/cdb20e18110e3c85817adc7e970d4b4cbd445feb))\n* update snapshots URL ([#731](https://github.com/ethpandaops/ethereum-package/issues/731)) ([f9269ad](https://github.com/ethpandaops/ethereum-package/commit/f9269ad7e7bc04fae486b340f8d189d3b965f4b2))\n\n## [4.1.0](https://github.com/ethpandaops/ethereum-package/compare/4.0.0...4.1.0) (2024-07-03)\n\n\n### Features\n\n* add back k8s tests ([#699](https://github.com/ethpandaops/ethereum-package/issues/699)) ([d621cf0](https://github.com/ethpandaops/ethereum-package/commit/d621cf0a4936c40778e492bb307fef990477aa52))\n* add checkpoint_enabled and checkpoint_url flags ([#689](https://github.com/ethpandaops/ethereum-package/issues/689)) ([b8cd2b4](https://github.com/ethpandaops/ethereum-package/commit/b8cd2b4574d4f8defa343532a7725b9ae3be692b))\n* add eof support ([#682](https://github.com/ethpandaops/ethereum-package/issues/682)) ([cb203ff](https://github.com/ethpandaops/ethereum-package/commit/cb203ff1e9929529570f4dc59b7b3cb6022ff670))\n* add mev relays to dora config ([#679](https://github.com/ethpandaops/ethereum-package/issues/679)) ([293001a](https://github.com/ethpandaops/ethereum-package/commit/293001a1e116e7e727d19ed42ba3e7113171f561))\n* Add static ports ([#677](https://github.com/ethpandaops/ethereum-package/issues/677)) ([4f054d0](https://github.com/ethpandaops/ethereum-package/commit/4f054d0566c1a8a8f90a5436d022cd5fe36d7c3c))\n* add ws_url to el_context ([#696](https://github.com/ethpandaops/ethereum-package/issues/696)) ([26fea61](https://github.com/ethpandaops/ethereum-package/commit/26fea619789253f73c1f53eb9478347bb908387a))\n* introduce devnet_repo override ([#686](https://github.com/ethpandaops/ethereum-package/issues/686)) ([9952361](https://github.com/ethpandaops/ethereum-package/commit/99523611622dbbefc2a523e6b011e63487b1cbf7))\n* use CDN URL for data snapshots used for shadow forks ([#676](https://github.com/ethpandaops/ethereum-package/issues/676)) ([91dc68c](https://github.com/ethpandaops/ethereum-package/commit/91dc68c9e709729e2a8c2fa59f48d8901eb49bb5))\n\n\n### Bug Fixes\n\n* besu bonsai log disable ([#673](https://github.com/ethpandaops/ethereum-package/issues/673)) ([955f19f](https://github.com/ethpandaops/ethereum-package/commit/955f19f8a79eda7d3d645c0c3d3a822705f10a7d))\n* blockscout bad return ([#685](https://github.com/ethpandaops/ethereum-package/issues/685)) ([e80870b](https://github.com/ethpandaops/ethereum-package/commit/e80870b3f955d5e350e3b14ab8ea2e49fa8d2f48))\n* bump peerdas images ([#678](https://github.com/ethpandaops/ethereum-package/issues/678)) ([1acc201](https://github.com/ethpandaops/ethereum-package/commit/1acc201cbb7314c593963e042796e4d93ceaf960))\n* DNS-1035 label ([#697](https://github.com/ethpandaops/ethereum-package/issues/697)) ([440fb31](https://github.com/ethpandaops/ethereum-package/commit/440fb319084fc8ea16f961410162d35290deeb22))\n* ephemery genesis loader ([#700](https://github.com/ethpandaops/ethereum-package/issues/700)) ([0235063](https://github.com/ethpandaops/ethereum-package/commit/023506362d489124d88f1d2b15408f08fbdd173e))\n* ignore bootnodes if in shadowfork ([#660](https://github.com/ethpandaops/ethereum-package/issues/660)) ([cda5dda](https://github.com/ethpandaops/ethereum-package/commit/cda5ddac51e4ce2228f2a4da1d242b2fcb7eeccd))\n* minimal eof ([#687](https://github.com/ethpandaops/ethereum-package/issues/687)) ([26a7618](https://github.com/ethpandaops/ethereum-package/commit/26a76187cd65114640764cc4eefc4a6c7517b57a))\n* release please manifest ([#675](https://github.com/ethpandaops/ethereum-package/issues/675)) ([75ed7e1](https://github.com/ethpandaops/ethereum-package/commit/75ed7e18309d1d3884e222abcd097366649288cc))\n* remove docker login ([#701](https://github.com/ethpandaops/ethereum-package/issues/701)) ([ede5962](https://github.com/ethpandaops/ethereum-package/commit/ede596266d2a0fe8af0e1bf21c6a09e4685b67a5))\n* return empty services ([#688](https://github.com/ethpandaops/ethereum-package/issues/688)) ([6571a70](https://github.com/ethpandaops/ethereum-package/commit/6571a70bccb310957d531daea6685f641469b546))\n* return the correct network_id ([#705](https://github.com/ethpandaops/ethereum-package/issues/705)) ([7c592f6](https://github.com/ethpandaops/ethereum-package/commit/7c592f6741718c20bdce4bd3bd6035b3ce37f38d))\n\n## [4.0.0](https://github.com/ethpandaops/ethereum-package/compare/3.1.0...v4.0.0) (2024-06-13)\n\n\n### ⚠ BREAKING CHANGES\n\n* migrate from kurtosis-tech to ethpandaops repository ([#663](https://github.com/ethpandaops/ethereum-package/issues/663))\n\n### Features\n\n* add names to run-sh ([#666](https://github.com/ethpandaops/ethereum-package/issues/666)) ([6b447b7](https://github.com/ethpandaops/ethereum-package/commit/6b447b7254ce1e9d7a2383eb1a0b9435bbabf237))\n* Adding arbitrary contract definition ([#646](https://github.com/ethpandaops/ethereum-package/issues/646)) ([cb58b65](https://github.com/ethpandaops/ethereum-package/commit/cb58b65911828b333c2aabf9052e30d79a8a55aa))\n* migrate from kurtosis-tech to ethpandaops repository ([#663](https://github.com/ethpandaops/ethereum-package/issues/663)) ([d980fee](https://github.com/ethpandaops/ethereum-package/commit/d980feedac0fbe6a18a6b699f62d3f3275657b16))\n* update Lodestar BN &lt;&gt; VC compatibility ([#664](https://github.com/ethpandaops/ethereum-package/issues/664)) ([7f365da](https://github.com/ethpandaops/ethereum-package/commit/7f365da6607bd863b12170ed475b77f4fafcc146))\n\n\n### Bug Fixes\n\n* permissions on autorelease ([#671](https://github.com/ethpandaops/ethereum-package/issues/671)) ([fcaa2c2](https://github.com/ethpandaops/ethereum-package/commit/fcaa2c23301c0f7012301fe019a75b0fa369961b))\n* update release please ([#670](https://github.com/ethpandaops/ethereum-package/issues/670)) ([fa53672](https://github.com/ethpandaops/ethereum-package/commit/fa536729886fa911ce4778b6d4097e2fb69a6c06))\n\n## [3.1.0](https://github.com/kurtosis-tech/ethereum-package/compare/3.0.0...3.1.0) (2024-06-07)\n\n\n### Features\n\n* add http url to el context ([#656](https://github.com/kurtosis-tech/ethereum-package/issues/656)) ([4e69a4c](https://github.com/kurtosis-tech/ethereum-package/commit/4e69a4c057c600d479879691837ba2ef7f683a34))\n* add prefunded accounts to output ([#657](https://github.com/kurtosis-tech/ethereum-package/issues/657)) ([bc06e2a](https://github.com/kurtosis-tech/ethereum-package/commit/bc06e2a4e93add97c75c5b520b87a6b9863a9faf))\n* add tracoor ([#651](https://github.com/kurtosis-tech/ethereum-package/issues/651)) ([b100cb6](https://github.com/kurtosis-tech/ethereum-package/commit/b100cb6fac5646783c0ee580ec3425fd74e0e4a1))\n* add vc_count to increase the number of validators per participant ([#633](https://github.com/kurtosis-tech/ethereum-package/issues/633)) ([4272ff3](https://github.com/kurtosis-tech/ethereum-package/commit/4272ff3e27be1c85fd5e8e606b956ea31c0ae3b9))\n* allow setting custom dora image & env variables ([#623](https://github.com/kurtosis-tech/ethereum-package/issues/623)) ([08a65c3](https://github.com/kurtosis-tech/ethereum-package/commit/08a65c33b645a1dc656feb0671513d9bf1b84c66))\n* **apache:** Serve all config files ([#606](https://github.com/kurtosis-tech/ethereum-package/issues/606)) ([3f1f5e1](https://github.com/kurtosis-tech/ethereum-package/commit/3f1f5e118e5d125ec108a40f0edc0b0617a60b5f))\n* **config:** add peerdas vars ([#619](https://github.com/kurtosis-tech/ethereum-package/issues/619)) ([22f1498](https://github.com/kurtosis-tech/ethereum-package/commit/22f1498a3d344150827a2393df3e3ff0c693a6ff))\n* expose network-params ([#659](https://github.com/kurtosis-tech/ethereum-package/issues/659)) ([b0820dd](https://github.com/kurtosis-tech/ethereum-package/commit/b0820ddae77e7d45d090c00e47aa3e8d3832e194))\n* forky ([#625](https://github.com/kurtosis-tech/ethereum-package/issues/625)) ([ded68bd](https://github.com/kurtosis-tech/ethereum-package/commit/ded68bdc73dbb0e166ef8e02dc3ab577066d0214))\n* Support participants_matrix ([#620](https://github.com/kurtosis-tech/ethereum-package/issues/620)) ([3a57467](https://github.com/kurtosis-tech/ethereum-package/commit/3a57467519ca20a519985ce2e2257c3694dc4fde))\n* use `peer-das` image for dora when eip7594 is active ([#593](https://github.com/kurtosis-tech/ethereum-package/issues/593)) ([1b4bd3d](https://github.com/kurtosis-tech/ethereum-package/commit/1b4bd3d1478839474a26d163312e99a810399b1b))\n\n\n### Bug Fixes\n\n* add additional prefund addresses ([#655](https://github.com/kurtosis-tech/ethereum-package/issues/655)) ([6d2cdb6](https://github.com/kurtosis-tech/ethereum-package/commit/6d2cdb6982da76f95bdde2b7930fbea9117016b8))\n* add cl log level to builders ([#638](https://github.com/kurtosis-tech/ethereum-package/issues/638)) ([ad46dbd](https://github.com/kurtosis-tech/ethereum-package/commit/ad46dbdf8babbc5bf6a5aae9ee9ee4be54491a92))\n* Add EIP-7002 & EIP-2935 bytecode to ethereum-genesis-generator ([#597](https://github.com/kurtosis-tech/ethereum-package/issues/597)) ([3d316ef](https://github.com/kurtosis-tech/ethereum-package/commit/3d316ef631b038355b88d23024d19086699bd452))\n* add http to teku endpoint ([#622](https://github.com/kurtosis-tech/ethereum-package/issues/622)) ([085b6e1](https://github.com/kurtosis-tech/ethereum-package/commit/085b6e126fc0ccf98431d74f56e9965fa8b1f665))\n* add peer_das_epoch to egg ([#603](https://github.com/kurtosis-tech/ethereum-package/issues/603)) ([91694df](https://github.com/kurtosis-tech/ethereum-package/commit/91694dfc1e8b64ac76b7dfda006f19db358941fa))\n* add sha256 as an image label (if present) ([#637](https://github.com/kurtosis-tech/ethereum-package/issues/637)) ([3dcf888](https://github.com/kurtosis-tech/ethereum-package/commit/3dcf888326266aaba38f8253e47b3dd85a457cd0))\n* add static port config for apache ([#608](https://github.com/kurtosis-tech/ethereum-package/issues/608)) ([b96e502](https://github.com/kurtosis-tech/ethereum-package/commit/b96e502145010694579d7b938a8112e0311ecb8b))\n* **apache:** only set static port if wanted ([#610](https://github.com/kurtosis-tech/ethereum-package/issues/610)) ([2c6b7b1](https://github.com/kurtosis-tech/ethereum-package/commit/2c6b7b1af7b7513adf46394b9138f726a57f9e38))\n* blockscout fix for json variant ([#662](https://github.com/kurtosis-tech/ethereum-package/issues/662)) ([e79c510](https://github.com/kurtosis-tech/ethereum-package/commit/e79c5101f44ca3a5bd70f16b2cf24976db8e555e))\n* churn adjustments ([#614](https://github.com/kurtosis-tech/ethereum-package/issues/614)) ([12ca872](https://github.com/kurtosis-tech/ethereum-package/commit/12ca8721b42e000bcf8b6624a0b3c7b6cbde57bd))\n* default config ([#632](https://github.com/kurtosis-tech/ethereum-package/issues/632)) ([14be117](https://github.com/kurtosis-tech/ethereum-package/commit/14be117598bca0d733cb8b1dc439abdde5be8ae1))\n* drop everythign after [@sha](https://github.com/sha) from image labels ([#636](https://github.com/kurtosis-tech/ethereum-package/issues/636)) ([5d35463](https://github.com/kurtosis-tech/ethereum-package/commit/5d35463853b6bb7e58112b5df246660c8d1bd02d))\n* erigon v3 - new default image ([#629](https://github.com/kurtosis-tech/ethereum-package/issues/629)) ([72cf150](https://github.com/kurtosis-tech/ethereum-package/commit/72cf150c580addc00c1ca0693b568d62b06118a1))\n* genesis generator bump ([#611](https://github.com/kurtosis-tech/ethereum-package/issues/611)) ([5460f6f](https://github.com/kurtosis-tech/ethereum-package/commit/5460f6fc26972fe576ef89d521d5251470e65b5e))\n* nightly tests ([#595](https://github.com/kurtosis-tech/ethereum-package/issues/595)) ([76c31e9](https://github.com/kurtosis-tech/ethereum-package/commit/76c31e91d830490c956321cc2f6b3301a8d6fd27))\n* pectra example ([#605](https://github.com/kurtosis-tech/ethereum-package/issues/605)) ([67e3da0](https://github.com/kurtosis-tech/ethereum-package/commit/67e3da0e0cf4314353d5cea806186530df54a1cd))\n* prysm vc key manager ports ([#639](https://github.com/kurtosis-tech/ethereum-package/issues/639)) ([81c1ee7](https://github.com/kurtosis-tech/ethereum-package/commit/81c1ee70a56f910ecd6b710dd0fe3721d81b6dcf))\n* re-add images to labels ([#634](https://github.com/kurtosis-tech/ethereum-package/issues/634)) ([71f6e28](https://github.com/kurtosis-tech/ethereum-package/commit/71f6e28e682e47a550ffef037c7b26ce836d96df))\n* README has invalid configs ([#631](https://github.com/kurtosis-tech/ethereum-package/issues/631)) ([e33b971](https://github.com/kurtosis-tech/ethereum-package/commit/e33b97171f1aedb647191e3b02835a8004cbaade))\n* readme indentation ([#600](https://github.com/kurtosis-tech/ethereum-package/issues/600)) ([583db1b](https://github.com/kurtosis-tech/ethereum-package/commit/583db1b4ebaa5ab2e5eb2f97aa7414f89376b022))\n* registration flags when using beacon node only ([#618](https://github.com/kurtosis-tech/ethereum-package/issues/618)) ([c12506b](https://github.com/kurtosis-tech/ethereum-package/commit/c12506b9587c9a87e89d2938351d72c4676160e1))\n* repair check workflow for external PRs ([#616](https://github.com/kurtosis-tech/ethereum-package/issues/616)) ([a584682](https://github.com/kurtosis-tech/ethereum-package/commit/a5846821563d318b993de48baab5e3a9c9e267d0))\n* seperate vc service names ([#654](https://github.com/kurtosis-tech/ethereum-package/issues/654)) ([a5ffe14](https://github.com/kurtosis-tech/ethereum-package/commit/a5ffe14e7d3c9f7ec6dbebd79a4b42c24394c0f7))\n* tune Besu options to work with tx_spammer ([#612](https://github.com/kurtosis-tech/ethereum-package/issues/612)) ([b395189](https://github.com/kurtosis-tech/ethereum-package/commit/b39518904fbf2cad5ca2ec18ce1bc18455207014))\n* update dora images ([#598](https://github.com/kurtosis-tech/ethereum-package/issues/598)) ([dd28d61](https://github.com/kurtosis-tech/ethereum-package/commit/dd28d61a31bdc4c58c33ca733487535041f5ae0a))\n* update prysm image ([#599](https://github.com/kurtosis-tech/ethereum-package/issues/599)) ([0a38114](https://github.com/kurtosis-tech/ethereum-package/commit/0a38114e8444837d7cff9aab9afe6b06e1c99d84))\n* use `electra-support` image for assertoor when electra fork epoch is set ([#607](https://github.com/kurtosis-tech/ethereum-package/issues/607)) ([cdeab93](https://github.com/kurtosis-tech/ethereum-package/commit/cdeab939eda037770b89b580658a87817aac1158))\n\n## [3.0.0](https://github.com/kurtosis-tech/ethereum-package/compare/2.2.0...3.0.0) (2024-05-06)\n\n\n### ⚠ BREAKING CHANGES\n\n* add mev-rs relay/builder/boost ([#586](https://github.com/kurtosis-tech/ethereum-package/issues/586))\n* upcoming file path change in kurtosis upstream ([#582](https://github.com/kurtosis-tech/ethereum-package/issues/582))\n\n### Features\n\n* add apache file server ([#581](https://github.com/kurtosis-tech/ethereum-package/issues/581)) ([205256a](https://github.com/kurtosis-tech/ethereum-package/commit/205256a6d79303719973655b459e803d9b8e311f))\n* add enr/enode to apache ([#589](https://github.com/kurtosis-tech/ethereum-package/issues/589)) ([b789e17](https://github.com/kurtosis-tech/ethereum-package/commit/b789e1705f076ec6aa01ceffbf5fbeebb02d8c0f))\n* add execution client urls to dora config ([#588](https://github.com/kurtosis-tech/ethereum-package/issues/588)) ([2a20d5a](https://github.com/kurtosis-tech/ethereum-package/commit/2a20d5ad7d2bf8f9a9eb2b619681b438810176d2))\n* add mev-rs relay/builder/boost ([#586](https://github.com/kurtosis-tech/ethereum-package/issues/586)) ([525a8fb](https://github.com/kurtosis-tech/ethereum-package/commit/525a8fb3d794f8030a574f55f3a7e719c1b58dca))\n* Add peerdas support ([#591](https://github.com/kurtosis-tech/ethereum-package/issues/591)) ([14296ca](https://github.com/kurtosis-tech/ethereum-package/commit/14296cab11d8c7a9572cf57a37980e1d93285cad))\n* add snooper urls to assertoor config ([#571](https://github.com/kurtosis-tech/ethereum-package/issues/571)) ([87f383f](https://github.com/kurtosis-tech/ethereum-package/commit/87f383fbc7f9e28d383853fcb7cd491abe13a0cc))\n* allow setting exit ip address ([#584](https://github.com/kurtosis-tech/ethereum-package/issues/584)) ([aabc942](https://github.com/kurtosis-tech/ethereum-package/commit/aabc942c4e8534288f28cdbb1e9e55f2613f383c))\n\n\n### Bug Fixes\n\n* non-existent field access on error message ([#577](https://github.com/kurtosis-tech/ethereum-package/issues/577)) ([8515d27](https://github.com/kurtosis-tech/ethereum-package/commit/8515d276056a47f9e6a77dd498f823042bff1a8f))\n* participant redefining global flag ([#573](https://github.com/kurtosis-tech/ethereum-package/issues/573)) ([9139f4b](https://github.com/kurtosis-tech/ethereum-package/commit/9139f4b4c77bc43477740972512171d7f28bfa84))\n* path for shadowforks post kt update ([#585](https://github.com/kurtosis-tech/ethereum-package/issues/585)) ([e0622a7](https://github.com/kurtosis-tech/ethereum-package/commit/e0622a77305732e01ee0fce183fda15c3dcd2dad))\n* remove erigon's --chain parameter ([#575](https://github.com/kurtosis-tech/ethereum-package/issues/575)) ([02b9c50](https://github.com/kurtosis-tech/ethereum-package/commit/02b9c50495f9b8cce0b0df502f19b37c0cb21ffd))\n* upcoming file path change in kurtosis upstream ([#582](https://github.com/kurtosis-tech/ethereum-package/issues/582)) ([8d7c4f9](https://github.com/kurtosis-tech/ethereum-package/commit/8d7c4f9c1feba07511c22d006b5121b45893f642))\n\n## [2.2.0](https://github.com/kurtosis-tech/ethereum-package/compare/2.1.0...2.2.0) (2024-04-19)\n\n\n### Features\n\n* add assertoor test for per PR CI job ([#537](https://github.com/kurtosis-tech/ethereum-package/issues/537)) ([8ef5c57](https://github.com/kurtosis-tech/ethereum-package/commit/8ef5c57fc00b1e5ea9d59011fa61d771b1af5133))\n* add blutgang rpc load balancer ([#569](https://github.com/kurtosis-tech/ethereum-package/issues/569)) ([1be5f95](https://github.com/kurtosis-tech/ethereum-package/commit/1be5f9542cf43b7b5afc3f565358b50dfbb81d50))\n* add dugtrio beacon load balancer ([#568](https://github.com/kurtosis-tech/ethereum-package/issues/568)) ([56d2fa3](https://github.com/kurtosis-tech/ethereum-package/commit/56d2fa38e59018fa331c12a271a906ec4fe67e6e))\n* add new assertoor test to per ci jobs ([#545](https://github.com/kurtosis-tech/ethereum-package/issues/545)) ([3005d46](https://github.com/kurtosis-tech/ethereum-package/commit/3005d46d60970be18e66f6a7f590d0b4689e84f4))\n* use new rpc snooper from `ethpandaops/rpc-snooper` ([#567](https://github.com/kurtosis-tech/ethereum-package/issues/567)) ([5676f0d](https://github.com/kurtosis-tech/ethereum-package/commit/5676f0dd4d62ee25a7f8ca2959596e419743916d))\n\n\n### Bug Fixes\n\n* add --contract-deployment-block parameter for Prysm ([#557](https://github.com/kurtosis-tech/ethereum-package/issues/557)) ([d8dfbae](https://github.com/kurtosis-tech/ethereum-package/commit/d8dfbae531c038e3985cb15ca6bcbcf37f6526a0))\n* Added '--enable-private-discovery' to Grandine ([#541](https://github.com/kurtosis-tech/ethereum-package/issues/541)) ([a1ae708](https://github.com/kurtosis-tech/ethereum-package/commit/a1ae708183873dec97e91986d6104c8dedc92100))\n* beaconchain explorer ([#531](https://github.com/kurtosis-tech/ethereum-package/issues/531)) ([b62ed6f](https://github.com/kurtosis-tech/ethereum-package/commit/b62ed6f129c65b62f084ea2a78fab0fa80afd9e2))\n* beaconchain explorer ([#538](https://github.com/kurtosis-tech/ethereum-package/issues/538)) ([ce1f337](https://github.com/kurtosis-tech/ethereum-package/commit/ce1f3373000d552a9b4b8b09ad5754ab092a61cb))\n* blobber incorrect url ([#528](https://github.com/kurtosis-tech/ethereum-package/issues/528)) ([6f84e3d](https://github.com/kurtosis-tech/ethereum-package/commit/6f84e3d5ec5fd7c02016530b3b64c79114d5891e))\n* bump json rpc snooper ([#553](https://github.com/kurtosis-tech/ethereum-package/issues/553)) ([f69c4a7](https://github.com/kurtosis-tech/ethereum-package/commit/f69c4a7468f97a4aa3aaea64dd18a63e561a6704))\n* disable full sync if gcmode is archive ([#563](https://github.com/kurtosis-tech/ethereum-package/issues/563)) ([b7592ec](https://github.com/kurtosis-tech/ethereum-package/commit/b7592ecac5ca8820aa6de6fc5ae9bb9c0dc27c20))\n* disable pbss when gcmode archive set ([#559](https://github.com/kurtosis-tech/ethereum-package/issues/559)) ([e085462](https://github.com/kurtosis-tech/ethereum-package/commit/e0854624ef69a069bb7ba482694cb83180df0680))\n* disable pbss when gcmode archive set, force hash based init ([#562](https://github.com/kurtosis-tech/ethereum-package/issues/562)) ([3e1c7a6](https://github.com/kurtosis-tech/ethereum-package/commit/3e1c7a6585a50398e5750f6e37cf3d0685d35536))\n* disable static peers ([#529](https://github.com/kurtosis-tech/ethereum-package/issues/529)) ([c5d4028](https://github.com/kurtosis-tech/ethereum-package/commit/c5d4028939691b887b928b91532f8139478ee4d2))\n* enable single node mode on lodestar by default ([#558](https://github.com/kurtosis-tech/ethereum-package/issues/558)) ([555ad7d](https://github.com/kurtosis-tech/ethereum-package/commit/555ad7dc5180cc7f47e14baa3438879e6d4779e9))\n* fix doc string typo ([#560](https://github.com/kurtosis-tech/ethereum-package/issues/560)) ([13de3f6](https://github.com/kurtosis-tech/ethereum-package/commit/13de3f68706a80088b28fbfefc69d738e06d13ef))\n* fix failing persistence test ([#554](https://github.com/kurtosis-tech/ethereum-package/issues/554)) ([99242d6](https://github.com/kurtosis-tech/ethereum-package/commit/99242d66f3e0254684b75bce14353a854e735721))\n* increase mem limit of snooper ([#546](https://github.com/kurtosis-tech/ethereum-package/issues/546)) ([6ba5770](https://github.com/kurtosis-tech/ethereum-package/commit/6ba577006e6f6eb0b477619399edb232f4ed9783))\n* prysm beacon http url  ([#536](https://github.com/kurtosis-tech/ethereum-package/issues/536)) ([4914531](https://github.com/kurtosis-tech/ethereum-package/commit/4914531690eae32ba274e10ee7fa0ecf6d82ac68))\n* prysm beacon_http_url ([#535](https://github.com/kurtosis-tech/ethereum-package/issues/535)) ([ee7528c](https://github.com/kurtosis-tech/ethereum-package/commit/ee7528c5d5872768e7ddc25e9da963e764e3b594))\n* prysm vc ([#533](https://github.com/kurtosis-tech/ethereum-package/issues/533)) ([72ddeb2](https://github.com/kurtosis-tech/ethereum-package/commit/72ddeb25c1bb0a8132c1a3a73bd8f7764cb01659))\n* remove un-needed prysm vc check ([#542](https://github.com/kurtosis-tech/ethereum-package/issues/542)) ([f6326fe](https://github.com/kurtosis-tech/ethereum-package/commit/f6326fe2119648478ab1bfc90220cbd4b4e12cac))\n* set application protocol to be http for rpc ([#548](https://github.com/kurtosis-tech/ethereum-package/issues/548)) ([905de7c](https://github.com/kurtosis-tech/ethereum-package/commit/905de7c3635c3c057f67ae6589d708d9dc6d5ddd))\n* set the correct default vc image ([#544](https://github.com/kurtosis-tech/ethereum-package/issues/544)) ([953741d](https://github.com/kurtosis-tech/ethereum-package/commit/953741d824a4a76a1194c2643012bf738669c3ad))\n* uniformize keymanager ([#534](https://github.com/kurtosis-tech/ethereum-package/issues/534)) ([a6a2830](https://github.com/kurtosis-tech/ethereum-package/commit/a6a2830e90919999c6c391e9aa832094cf440d35))\n* update prometheus api ([#539](https://github.com/kurtosis-tech/ethereum-package/issues/539)) ([d2b9fb8](https://github.com/kurtosis-tech/ethereum-package/commit/d2b9fb8961eac8a712af36f49ac8a1f918dabb6b))\n* update vc &lt;&gt; cl matrix ([#564](https://github.com/kurtosis-tech/ethereum-package/issues/564)) ([0ffcf74](https://github.com/kurtosis-tech/ethereum-package/commit/0ffcf74cf3a83b0c462bc26d07254160b132b27a))\n* update vc compatibility matrix ([#543](https://github.com/kurtosis-tech/ethereum-package/issues/543)) ([58c4684](https://github.com/kurtosis-tech/ethereum-package/commit/58c4684594711ee58bf117c31d5cf688d476892e))\n* use `minimal-preset` images for dora & assertoor when minimal preset is used ([#532](https://github.com/kurtosis-tech/ethereum-package/issues/532)) ([ad7773e](https://github.com/kurtosis-tech/ethereum-package/commit/ad7773e86f1e1bb1f48b96e5126231fd060822e8))\n\n## [2.1.0](https://github.com/kurtosis-tech/ethereum-package/compare/2.0.0...2.1.0) (2024-03-28)\n\n\n### Features\n\n* add beacon snooper ([#520](https://github.com/kurtosis-tech/ethereum-package/issues/520)) ([7e36191](https://github.com/kurtosis-tech/ethereum-package/commit/7e361913c754ddf37eaf2cf3ad4a93aed8770899))\n* add BN&lt;&gt;CL compatibility matrix to readme ([#519](https://github.com/kurtosis-tech/ethereum-package/issues/519)) ([177beeb](https://github.com/kurtosis-tech/ethereum-package/commit/177beeb9b46f61b3dd3dc3009ff2abf9b576c569))\n* add grandine ([#517](https://github.com/kurtosis-tech/ethereum-package/issues/517)) ([3ac4d2a](https://github.com/kurtosis-tech/ethereum-package/commit/3ac4d2a4fae1c33ff658f0f43657a09522348127))\n* enable preset to be set, mainnet/minimal ([#524](https://github.com/kurtosis-tech/ethereum-package/issues/524)) ([f6e1b13](https://github.com/kurtosis-tech/ethereum-package/commit/f6e1b136ef6b884e540c1289b8acc2b4d359e6ce))\n* make deneb genesis default ([#518](https://github.com/kurtosis-tech/ethereum-package/issues/518)) ([49509b9](https://github.com/kurtosis-tech/ethereum-package/commit/49509b9ecb8b00d361e4119ee053ba86c366619e))\n* make keymanager optional ([#523](https://github.com/kurtosis-tech/ethereum-package/issues/523)) ([969012c](https://github.com/kurtosis-tech/ethereum-package/commit/969012c3b504be1c475bd583675857d0605ed430))\n* update verkle genesis + add besu support to verkle testing  ([#512](https://github.com/kurtosis-tech/ethereum-package/issues/512)) ([0615cd1](https://github.com/kurtosis-tech/ethereum-package/commit/0615cd1b4466d8f63e3adb721d97ee768211114f))\n\n\n### Bug Fixes\n\n* architecture.md ([#514](https://github.com/kurtosis-tech/ethereum-package/issues/514)) ([f0ec4f0](https://github.com/kurtosis-tech/ethereum-package/commit/f0ec4f076837b282a8972bd2211a0522ed67a06b))\n* blobscan network name ([#516](https://github.com/kurtosis-tech/ethereum-package/issues/516)) ([83c2a55](https://github.com/kurtosis-tech/ethereum-package/commit/83c2a5592445c0efc10ab418d87ab2ecd4d10cf4))\n* **blobscan:** update healthcheck endpoint ([#513](https://github.com/kurtosis-tech/ethereum-package/issues/513)) ([8b2fc61](https://github.com/kurtosis-tech/ethereum-package/commit/8b2fc61f77b53642441d3bd0bdeea89b2a2d35eb))\n* separate vc ([#526](https://github.com/kurtosis-tech/ethereum-package/issues/526)) ([baa04e9](https://github.com/kurtosis-tech/ethereum-package/commit/baa04e9118f39b10ed7d867eec164483c6fd807d))\n* Updated Readme with VCs supported by Grandine BN ([#527](https://github.com/kurtosis-tech/ethereum-package/issues/527)) ([9cbe0b3](https://github.com/kurtosis-tech/ethereum-package/commit/9cbe0b368205f70ee274d9c0c57f634f9621e6d7))\n* use correct dora & assertoor images ([#522](https://github.com/kurtosis-tech/ethereum-package/issues/522)) ([2a8d73a](https://github.com/kurtosis-tech/ethereum-package/commit/2a8d73aba35bf26bfcd474036bac32c4f5713e35))\n* use new validator names in assertoor config ([#521](https://github.com/kurtosis-tech/ethereum-package/issues/521)) ([f595eb9](https://github.com/kurtosis-tech/ethereum-package/commit/f595eb9a75e8c2147d530d1a70e6ccb9f3542257))\n\n## [2.0.0](https://github.com/kurtosis-tech/ethereum-package/compare/1.4.0...2.0.0) (2024-03-08)\n\n\n### ⚠ BREAKING CHANGES\n\n* participant_network & rename participant fields. ([#508](https://github.com/kurtosis-tech/ethereum-package/issues/508))\n* add node selectors features ([#491](https://github.com/kurtosis-tech/ethereum-package/issues/491))\n\n### Features\n\n* add keymanager to all validator processes ([#502](https://github.com/kurtosis-tech/ethereum-package/issues/502)) ([836eda4](https://github.com/kurtosis-tech/ethereum-package/commit/836eda4eed3776dd406d354343655c0ff8b9d2b6))\n* add nimbus-eth1 ([#496](https://github.com/kurtosis-tech/ethereum-package/issues/496)) ([d599729](https://github.com/kurtosis-tech/ethereum-package/commit/d599729295aa3274d23e4e8e99b56288cde3fc04))\n* add node selectors features ([#491](https://github.com/kurtosis-tech/ethereum-package/issues/491)) ([316d42f](https://github.com/kurtosis-tech/ethereum-package/commit/316d42fbaeb2d7bc1d580823a6c70b1c2dfe3746))\n* allow more detailed additional test configurations in assertoor_params ([#498](https://github.com/kurtosis-tech/ethereum-package/issues/498)) ([fe2de7e](https://github.com/kurtosis-tech/ethereum-package/commit/fe2de7e5a5e2446ebb0a0b191f5aa6783e132426))\n* enable api in assertoor config ([#495](https://github.com/kurtosis-tech/ethereum-package/issues/495)) ([9ceae9c](https://github.com/kurtosis-tech/ethereum-package/commit/9ceae9c74405db4e1ab6e02de541577d078434ae))\n* enable dencun-genesis ([#500](https://github.com/kurtosis-tech/ethereum-package/issues/500)) ([beb764f](https://github.com/kurtosis-tech/ethereum-package/commit/beb764fb9a18fcb09cb7d3d9ee48e4826595512d))\n* make snapshot url configurable ([#507](https://github.com/kurtosis-tech/ethereum-package/issues/507)) ([6fa0475](https://github.com/kurtosis-tech/ethereum-package/commit/6fa04751cd1277a4870dc45144e15ffa5d637b93))\n* parameterize mev-boost args ([#400](https://github.com/kurtosis-tech/ethereum-package/issues/400)) ([e48483a](https://github.com/kurtosis-tech/ethereum-package/commit/e48483a130ba227dafd0d0fd9ee66c6cecc3bfce))\n* separate validator clients from CL clients ([#497](https://github.com/kurtosis-tech/ethereum-package/issues/497)) ([90da2c3](https://github.com/kurtosis-tech/ethereum-package/commit/90da2c33a77b4a0ac620ae665899963256a1ae0a))\n\n\n### Bug Fixes\n\n* fix end index in validator ranges file ([#509](https://github.com/kurtosis-tech/ethereum-package/issues/509)) ([da55be8](https://github.com/kurtosis-tech/ethereum-package/commit/da55be84861e93ce777076e545abee35ff2d51ce))\n* lh vc flag logic ([#506](https://github.com/kurtosis-tech/ethereum-package/issues/506)) ([bc5e725](https://github.com/kurtosis-tech/ethereum-package/commit/bc5e725edf8c917d409e6de6ce838797ad166173))\n* nimbus-eth1 advertise proper extip ([#501](https://github.com/kurtosis-tech/ethereum-package/issues/501)) ([1d5a779](https://github.com/kurtosis-tech/ethereum-package/commit/1d5a7792c8175d1fc85e424b5ddf60baec551821))\n* README global node selector ([#504](https://github.com/kurtosis-tech/ethereum-package/issues/504)) ([f9343a2](https://github.com/kurtosis-tech/ethereum-package/commit/f9343a2914456196e1209336c426b6ad44958428))\n* use the cl as the default validator image if none are defined ([#503](https://github.com/kurtosis-tech/ethereum-package/issues/503)) ([181dd04](https://github.com/kurtosis-tech/ethereum-package/commit/181dd04c2db17c58cb9370b0d24e12e4c191a13d))\n\n\n### Code Refactoring\n\n* participant_network & rename participant fields. ([#508](https://github.com/kurtosis-tech/ethereum-package/issues/508)) ([fab341b](https://github.com/kurtosis-tech/ethereum-package/commit/fab341b158329b9e8c2b590dc63127dfd1d2495f))\n\n## [1.4.0](https://github.com/kurtosis-tech/ethereum-package/compare/1.3.0...1.4.0) (2024-02-09)\n\n\n### Features\n\n* Add suave-enabled geth support ([#489](https://github.com/kurtosis-tech/ethereum-package/issues/489)) ([631eaf3](https://github.com/kurtosis-tech/ethereum-package/commit/631eaf3e621c90d5b546a1c005d8e31e06263aa4))\n* add support for custom assertoor images & use assertoor image with verkle support for verkle chains ([#483](https://github.com/kurtosis-tech/ethereum-package/issues/483)) ([2d8a143](https://github.com/kurtosis-tech/ethereum-package/commit/2d8a143f753eaa3ec13abe4ebbb57bf82548b3fb))\n* add verkle-gen-devnet-3 ([#487](https://github.com/kurtosis-tech/ethereum-package/issues/487)) ([1e543e8](https://github.com/kurtosis-tech/ethereum-package/commit/1e543e873c06e86a6448f8e88c53fb1bde35338e))\n* blockscout support with sc verification ([#481](https://github.com/kurtosis-tech/ethereum-package/issues/481)) ([b3418cf](https://github.com/kurtosis-tech/ethereum-package/commit/b3418cf1545378d4b412966b9c33f650141aec04))\n* enable custom resource limit per network ([#471](https://github.com/kurtosis-tech/ethereum-package/issues/471)) ([5db6611](https://github.com/kurtosis-tech/ethereum-package/commit/5db6611ab831a92212a21859b42a911cd12bce0c))\n* enable shadowforking ([#475](https://github.com/kurtosis-tech/ethereum-package/issues/475)) ([b788b18](https://github.com/kurtosis-tech/ethereum-package/commit/b788b18eead00622ab960a4853c8e24b09c16a26))\n* improve built-in assertoor tests ([#488](https://github.com/kurtosis-tech/ethereum-package/issues/488)) ([d596699](https://github.com/kurtosis-tech/ethereum-package/commit/d5966991653ad48094cf71d3c01612349a651877))\n* we no longer need 4788 deployer ([#485](https://github.com/kurtosis-tech/ethereum-package/issues/485)) ([abdfc2c](https://github.com/kurtosis-tech/ethereum-package/commit/abdfc2c3e73550069c2fbe0df5202f7f227a00cd))\n\n\n### Bug Fixes\n\n* add more prefund addresses for verkle-gen ([#482](https://github.com/kurtosis-tech/ethereum-package/issues/482)) ([01868fc](https://github.com/kurtosis-tech/ethereum-package/commit/01868fcb604852cf66474fc9de9a53a7b87b7bc3))\n* bump verkle genesis generator ([#486](https://github.com/kurtosis-tech/ethereum-package/issues/486)) ([79dc5e1](https://github.com/kurtosis-tech/ethereum-package/commit/79dc5e19713d3f898f6255394290497d016f32d5))\n* use latest stable image for assertoor ([#484](https://github.com/kurtosis-tech/ethereum-package/issues/484)) ([bbe0b16](https://github.com/kurtosis-tech/ethereum-package/commit/bbe0b16e948fc50f51273e2f0ab91503603e9fc9))\n\n## [1.3.0](https://github.com/kurtosis-tech/ethereum-package/compare/1.2.0...1.3.0) (2024-01-22)\n\n\n### Features\n\n* add assertoor to additional toolings ([#419](https://github.com/kurtosis-tech/ethereum-package/issues/419)) ([76dde3e](https://github.com/kurtosis-tech/ethereum-package/commit/76dde3ed421da0d7f8ba16f46565b07019be76c0))\n* add devnets support ([#384](https://github.com/kurtosis-tech/ethereum-package/issues/384)) ([2bae099](https://github.com/kurtosis-tech/ethereum-package/commit/2bae09931ed1cdcfe499efaae420c981dabcea62))\n* add pitfalls for persistent storage as a warning ([#441](https://github.com/kurtosis-tech/ethereum-package/issues/441)) ([69da8f0](https://github.com/kurtosis-tech/ethereum-package/commit/69da8f04fcfd5ce19365bd89ca73c13cbc40d76a))\n* add support for testnets ([#437](https://github.com/kurtosis-tech/ethereum-package/issues/437)) ([5584cc8](https://github.com/kurtosis-tech/ethereum-package/commit/5584cc84c50ca9845c544810fb8331ec8fcdcbc8))\n* Add Xatu Sentry ([#466](https://github.com/kurtosis-tech/ethereum-package/issues/466)) ([b9523cb](https://github.com/kurtosis-tech/ethereum-package/commit/b9523cb7083be78c96bb88a7ca86d142cb0eec1d))\n* enable checkpoint sync for devnets ([#448](https://github.com/kurtosis-tech/ethereum-package/issues/448)) ([b367cfe](https://github.com/kurtosis-tech/ethereum-package/commit/b367cfe875900bdc8aa70dc8b1d8aebdbcf81593))\n* enable persistence ([#422](https://github.com/kurtosis-tech/ethereum-package/issues/422)) ([8d40056](https://github.com/kurtosis-tech/ethereum-package/commit/8d400566aa54132dccaa7ff129adc12e547907a0))\n* enable syncing ephemery ([#459](https://github.com/kurtosis-tech/ethereum-package/issues/459)) ([f8289cb](https://github.com/kurtosis-tech/ethereum-package/commit/f8289cb49f68dd488635d2313c007ee7c2f4dbf3))\n* enable syncing shadowforks ([#457](https://github.com/kurtosis-tech/ethereum-package/issues/457)) ([313a586](https://github.com/kurtosis-tech/ethereum-package/commit/313a586965efa6739e8d4055f1263a89d48ff499))\n\n\n### Bug Fixes\n\n* add CL genesis delay to final genesis time ([#469](https://github.com/kurtosis-tech/ethereum-package/issues/469)) ([e36027b](https://github.com/kurtosis-tech/ethereum-package/commit/e36027b91de0ae8943012ffd6ba776142d2e2d78))\n* add prysm-multiarch upstream image ([#451](https://github.com/kurtosis-tech/ethereum-package/issues/451)) ([6feba23](https://github.com/kurtosis-tech/ethereum-package/commit/6feba237fbdfae021402ceeec89baa75df6d83d5))\n* added supprot for boot enr file ([#456](https://github.com/kurtosis-tech/ethereum-package/issues/456)) ([fd26e5c](https://github.com/kurtosis-tech/ethereum-package/commit/fd26e5c31609b48e1d6718f72d295a27a7d84a49))\n* bump max mem limit for nimbus on holesky ([#439](https://github.com/kurtosis-tech/ethereum-package/issues/439)) ([fb84787](https://github.com/kurtosis-tech/ethereum-package/commit/fb84787694faa86872828b92529f51e6c9ac7d44))\n* dora template fix ([#452](https://github.com/kurtosis-tech/ethereum-package/issues/452)) ([f9243ea](https://github.com/kurtosis-tech/ethereum-package/commit/f9243ea8cdec8a0145206831c9c043269c80e863))\n* enable ws for geth ([#446](https://github.com/kurtosis-tech/ethereum-package/issues/446)) ([d5bf451](https://github.com/kurtosis-tech/ethereum-package/commit/d5bf45150dc09432bb84b366d2deda8c6036afea))\n* erigon chain should be set to dev ([#447](https://github.com/kurtosis-tech/ethereum-package/issues/447)) ([1f40d84](https://github.com/kurtosis-tech/ethereum-package/commit/1f40d8402666310cad81066852110aa20627471b))\n* erigon command arg ([#454](https://github.com/kurtosis-tech/ethereum-package/issues/454)) ([5ae56a1](https://github.com/kurtosis-tech/ethereum-package/commit/5ae56a17773122827b074963dee40a43a00478ea))\n* fix typo ([#440](https://github.com/kurtosis-tech/ethereum-package/issues/440)) ([933a313](https://github.com/kurtosis-tech/ethereum-package/commit/933a3133bf9b1fe96ea3c537b26c3c8ced0a35e3))\n* guid fix for besu/teku/erigon/nimbus ([#443](https://github.com/kurtosis-tech/ethereum-package/issues/443)) ([2283464](https://github.com/kurtosis-tech/ethereum-package/commit/2283464b614b0ade4aa98fccd842e8e4b23e188a))\n* increase db size for geth ([#453](https://github.com/kurtosis-tech/ethereum-package/issues/453)) ([0c67998](https://github.com/kurtosis-tech/ethereum-package/commit/0c67998567a4ab60dd0355b734076ee47b988326))\n* logging bug ([#462](https://github.com/kurtosis-tech/ethereum-package/issues/462)) ([f6098a1](https://github.com/kurtosis-tech/ethereum-package/commit/f6098a1572923655426f25eab936b7a0b9fbc116))\n* parallel key generation ([#423](https://github.com/kurtosis-tech/ethereum-package/issues/423)) ([060fd8f](https://github.com/kurtosis-tech/ethereum-package/commit/060fd8fb3ed8e12be895a43912787313c1ad4a5f))\n* re-add networkid ([#464](https://github.com/kurtosis-tech/ethereum-package/issues/464)) ([4d96409](https://github.com/kurtosis-tech/ethereum-package/commit/4d96409cdbd1a367fc1e924cb9183eadce4eeae7))\n* typo ([#445](https://github.com/kurtosis-tech/ethereum-package/issues/445)) ([e61c58a](https://github.com/kurtosis-tech/ethereum-package/commit/e61c58a8c2944cbf2699bd75d25a2e63d8e0621c))\n* Update nethermind to expose host on 0.0.0.0 ([#467](https://github.com/kurtosis-tech/ethereum-package/issues/467)) ([0bd29dd](https://github.com/kurtosis-tech/ethereum-package/commit/0bd29dd7d61dae77b7820f79d46e8a52e74267c2))\n* use all enrs for nimbus via bootstrap file ([#450](https://github.com/kurtosis-tech/ethereum-package/issues/450)) ([bb5a0c1](https://github.com/kurtosis-tech/ethereum-package/commit/bb5a0c1b5b051b23b185cfd366a2dfed3f44d903))\n\n## [1.2.0](https://github.com/kurtosis-tech/ethereum-package/compare/1.1.0...1.2.0) (2024-01-03)\n\n\n### Features\n\n* add blobber ([#401](https://github.com/kurtosis-tech/ethereum-package/issues/401)) ([d2755b0](https://github.com/kurtosis-tech/ethereum-package/commit/d2755b011da5199273b9719395132f98c0c9d57d))\n* add files artifact uuid information to cl client context ([#418](https://github.com/kurtosis-tech/ethereum-package/issues/418)) ([806ef47](https://github.com/kurtosis-tech/ethereum-package/commit/806ef47aefc4e22f79b6a96ad941b72ac5d5c099))\n* add graffiti ([#408](https://github.com/kurtosis-tech/ethereum-package/issues/408)) ([21eae3b](https://github.com/kurtosis-tech/ethereum-package/commit/21eae3b58a607c3897943d692bbc62229eb534ca))\n* add nethermind verkle example file ([#379](https://github.com/kurtosis-tech/ethereum-package/issues/379)) ([244d1ee](https://github.com/kurtosis-tech/ethereum-package/commit/244d1ee981d64b10ae73ef302fefb854d1580d40))\n* add preregistered_validator_count network param field ([#426](https://github.com/kurtosis-tech/ethereum-package/issues/426)) ([d598018](https://github.com/kurtosis-tech/ethereum-package/commit/d598018afda5824cf6c365f23426a518ec83fe9a))\n* add prysm latency dashboard ([#397](https://github.com/kurtosis-tech/ethereum-package/issues/397)) ([83b5b4e](https://github.com/kurtosis-tech/ethereum-package/commit/83b5b4e93d3e8579ef66b18f97dca46b83fcb72c))\n* add resource requests/limits to most applications ([#396](https://github.com/kurtosis-tech/ethereum-package/issues/396)) ([c5728d9](https://github.com/kurtosis-tech/ethereum-package/commit/c5728d980f76be66bfb9ba3bbf275dbcaf5c5beb))\n* allow 0 genesis delay ([#383](https://github.com/kurtosis-tech/ethereum-package/issues/383)) ([11c2693](https://github.com/kurtosis-tech/ethereum-package/commit/11c26939c53a6db0d8816254f6b7ac535535e754))\n* enable teku split beacon &lt;&gt; validator setup ([#409](https://github.com/kurtosis-tech/ethereum-package/issues/409)) ([51f76bd](https://github.com/kurtosis-tech/ethereum-package/commit/51f76bd109036def06a5ad55cb72d9ab18a3b869))\n* make eth1 follow distance configurable ([#433](https://github.com/kurtosis-tech/ethereum-package/issues/433)) ([a40f7dc](https://github.com/kurtosis-tech/ethereum-package/commit/a40f7dc83a610d96aa61ded96bbfe689c467748a))\n* split nimbus CL-validator ([#404](https://github.com/kurtosis-tech/ethereum-package/issues/404)) ([cb33648](https://github.com/kurtosis-tech/ethereum-package/commit/cb33648d3df801bffac18a46ff84fec808956586))\n* update ethereum-genesis-generator images ([#385](https://github.com/kurtosis-tech/ethereum-package/issues/385)) ([8959fc8](https://github.com/kurtosis-tech/ethereum-package/commit/8959fc80786c04200aecabcbbd426e47ead24ae4))\n* use prometheus kurtosis package ([#399](https://github.com/kurtosis-tech/ethereum-package/issues/399)) ([c41a989](https://github.com/kurtosis-tech/ethereum-package/commit/c41a989e95f0c5bcb96987ef55fb673330132b6b))\n\n\n### Bug Fixes\n\n* ci was broken as it was using the wrong storage class for k3s ([#420](https://github.com/kurtosis-tech/ethereum-package/issues/420)) ([f957f85](https://github.com/kurtosis-tech/ethereum-package/commit/f957f8518b28c6fc3da0fd62f63d96517f717a9a))\n* enable debug namespace in prysm ([#405](https://github.com/kurtosis-tech/ethereum-package/issues/405)) ([31badc2](https://github.com/kurtosis-tech/ethereum-package/commit/31badc238688fb409fba533fe8a237097c3577f4))\n* ethereum-genesis-generator version for verkle genesis ([#395](https://github.com/kurtosis-tech/ethereum-package/issues/395)) ([d7c9b92](https://github.com/kurtosis-tech/ethereum-package/commit/d7c9b92f09c0c1f602f88cc604e63c0992eda182))\n* fixing too long graffitis ([#410](https://github.com/kurtosis-tech/ethereum-package/issues/410)) ([a18935f](https://github.com/kurtosis-tech/ethereum-package/commit/a18935f52a44efaf00c9fb0fa104433018afb0c3))\n* increase memory for blob spammer to prevent container from getting OOM killed ([#431](https://github.com/kurtosis-tech/ethereum-package/issues/431)) ([4d4fac0](https://github.com/kurtosis-tech/ethereum-package/commit/4d4fac0cc0e6fa58aa314ce301f0cfcc20026bef))\n* mev workflow ([#434](https://github.com/kurtosis-tech/ethereum-package/issues/434)) ([91794e9](https://github.com/kurtosis-tech/ethereum-package/commit/91794e9fe2b7b08d50ee137a6b647479b9190d37))\n* mev-boost naming scheme change ([#428](https://github.com/kurtosis-tech/ethereum-package/issues/428)) ([fce899b](https://github.com/kurtosis-tech/ethereum-package/commit/fce899bec2796a8b54f5a331721839a752e7040c))\n* peering issue between lighthouse-teku on k8s ([#382](https://github.com/kurtosis-tech/ethereum-package/issues/382)) ([97a070b](https://github.com/kurtosis-tech/ethereum-package/commit/97a070b662e153404498dccb5b045f6e2ed510b0))\n* peering issue with prysm and nimbus ([#416](https://github.com/kurtosis-tech/ethereum-package/issues/416)) ([132fc83](https://github.com/kurtosis-tech/ethereum-package/commit/132fc835ff8966ef671e1ecb61fc68765e81a16f))\n* rename package icon for package catalog compatability ([#413](https://github.com/kurtosis-tech/ethereum-package/issues/413)) ([f49185b](https://github.com/kurtosis-tech/ethereum-package/commit/f49185b2a15be84e0ea8dc821ed39622dde104cc))\n* roll out persistence for postgres on ethereum-package ([#421](https://github.com/kurtosis-tech/ethereum-package/issues/421)) ([ed3982b](https://github.com/kurtosis-tech/ethereum-package/commit/ed3982b5630c0bfdeb022f9853373d34e1f270cf))\n* set persistence to false for blobscan ([#398](https://github.com/kurtosis-tech/ethereum-package/issues/398)) ([3c06194](https://github.com/kurtosis-tech/ethereum-package/commit/3c06194ca60b82b37d7a216fd6325100ebe72b0b))\n* tx-spammer extra args ([#394](https://github.com/kurtosis-tech/ethereum-package/issues/394)) ([709b4ad](https://github.com/kurtosis-tech/ethereum-package/commit/709b4adc75e5c6bb7d6977edb43b9e5438f2bc7c))\n* Update README.md remove teku coming soon ([#414](https://github.com/kurtosis-tech/ethereum-package/issues/414)) ([5a1ce2e](https://github.com/kurtosis-tech/ethereum-package/commit/5a1ce2e123353692614688cc4fae304bfe0a51e4))\n* validator counting ([#425](https://github.com/kurtosis-tech/ethereum-package/issues/425)) ([698305a](https://github.com/kurtosis-tech/ethereum-package/commit/698305ad45f6ff4e200abe8a77c43b09120a5ed6))\n\n## [1.1.0](https://github.com/kurtosis-tech/ethereum-package/compare/1.0.0...1.1.0) (2023-11-30)\n\n\n### Features\n\n* Add adminer ([#295](https://github.com/kurtosis-tech/ethereum-package/issues/295)) ([99b5913](https://github.com/kurtosis-tech/ethereum-package/commit/99b5913bfbc2ea25716b593cafbaebc486bf3c88))\n* Add broadcaster ([#355](https://github.com/kurtosis-tech/ethereum-package/issues/355)) ([0f9c3aa](https://github.com/kurtosis-tech/ethereum-package/commit/0f9c3aad1f1360fa896dce75cb1b2c46e9872af1))\n* add custom label configuration option ([#375](https://github.com/kurtosis-tech/ethereum-package/issues/375)) ([82ec85e](https://github.com/kurtosis-tech/ethereum-package/commit/82ec85e84e8c0972217f43962674493195970866))\n* add custom labels ([#340](https://github.com/kurtosis-tech/ethereum-package/issues/340)) ([789ed8e](https://github.com/kurtosis-tech/ethereum-package/commit/789ed8e7f0a1a1512132732540a713dca17bbe56))\n* add dencun example, bump teku mem, update mev-relay postgres name ([#369](https://github.com/kurtosis-tech/ethereum-package/issues/369)) ([1097531](https://github.com/kurtosis-tech/ethereum-package/commit/10975312c4d5c74b9bb80b872f205374997fc33c))\n* Add Ethereum Metrics Exporter Dash ([#338](https://github.com/kurtosis-tech/ethereum-package/issues/338)) ([3ce9a78](https://github.com/kurtosis-tech/ethereum-package/commit/3ce9a780f50c4909b9fe64ccd6580432135e1c37))\n* Add initial support for Blobscan ([#363](https://github.com/kurtosis-tech/ethereum-package/issues/363)) ([837fb97](https://github.com/kurtosis-tech/ethereum-package/commit/837fb970bb65d12bbe31dfec011a7f323d520111))\n* add prometheus custom configuration for participants ([#354](https://github.com/kurtosis-tech/ethereum-package/issues/354)) ([e9bbc7d](https://github.com/kurtosis-tech/ethereum-package/commit/e9bbc7debf9db9c7f30271084b6276fcbe167d93))\n* Allow verkle to be at genesis or post genesis ([60a7529](https://github.com/kurtosis-tech/ethereum-package/commit/60a752932242d795e5c087094ca5e26f6f4029c4))\n* differentiate builder ec by suffixing it with '-builder' ([#347](https://github.com/kurtosis-tech/ethereum-package/issues/347)) ([c558cb2](https://github.com/kurtosis-tech/ethereum-package/commit/c558cb2eab25cc8c3718b1fda6759a0819e6f942))\n\n\n### Bug Fixes\n\n* add java opts for besu ([#346](https://github.com/kurtosis-tech/ethereum-package/issues/346)) ([8aa88e3](https://github.com/kurtosis-tech/ethereum-package/commit/8aa88e34212321b2a148fd26c0e5a0da0b1a5b3f))\n* blobscan lint error ([#374](https://github.com/kurtosis-tech/ethereum-package/issues/374)) ([32f862b](https://github.com/kurtosis-tech/ethereum-package/commit/32f862be000a547fba300be4be3f954835ac707f))\n* builder args incorrectly configured ([#343](https://github.com/kurtosis-tech/ethereum-package/issues/343)) ([66e73fb](https://github.com/kurtosis-tech/ethereum-package/commit/66e73fb9f20d8dcce17beb00bf25dafb1e4ada65))\n* network params setting invalid value for min/max configs ([#353](https://github.com/kurtosis-tech/ethereum-package/issues/353)) ([764b7dc](https://github.com/kurtosis-tech/ethereum-package/commit/764b7dc0577a8e8da9dac3519d18db51720f2b4b))\n* update validator reward address ([#350](https://github.com/kurtosis-tech/ethereum-package/issues/350)) ([57f82c0](https://github.com/kurtosis-tech/ethereum-package/commit/57f82c0432c9a77bfa12f78a14b2e0038228a99c))\n* Use unused accounts for mev flood ([#359](https://github.com/kurtosis-tech/ethereum-package/issues/359)) ([286654c](https://github.com/kurtosis-tech/ethereum-package/commit/286654c769b33c1d63d20bf31c1dd3a71f7a3f0d))\n\n## [1.0.0](https://github.com/kurtosis-tech/ethereum-package/compare/0.6.1...1.0.0) (2023-10-25)\n\n\n### ⚠ BREAKING CHANGES\n\n* merged genesis generation ([#288](https://github.com/kurtosis-tech/ethereum-package/issues/288))\n\n### Features\n\n* add \"disable_peer_scoring\" global flag ([#311](https://github.com/kurtosis-tech/ethereum-package/issues/311)) ([63f7ff3](https://github.com/kurtosis-tech/ethereum-package/commit/63f7ff3c396ab567caf3397822ea7c2d614baeb9)), closes [#304](https://github.com/kurtosis-tech/ethereum-package/issues/304)\n* add mock mev ci ([#310](https://github.com/kurtosis-tech/ethereum-package/issues/310)) ([d4bec9e](https://github.com/kurtosis-tech/ethereum-package/commit/d4bec9e7a723d1cdbbd37d63684b526a4f1f325b))\n* add trusted setup file to teku ([#325](https://github.com/kurtosis-tech/ethereum-package/issues/325)) ([605e155](https://github.com/kurtosis-tech/ethereum-package/commit/605e155ee5e5058cc159739ee673eff4b702bc52))\n* bump json-rpc-snooper ([#329](https://github.com/kurtosis-tech/ethereum-package/issues/329)) ([242a4cd](https://github.com/kurtosis-tech/ethereum-package/commit/242a4cdeded040eb50c9e259aacf9a58eee236ec))\n* json to yaml everything ([#332](https://github.com/kurtosis-tech/ethereum-package/issues/332)) ([c9669ae](https://github.com/kurtosis-tech/ethereum-package/commit/c9669ae83063a5dd9faf478f386582a2cac595ac))\n* merged genesis generation ([#288](https://github.com/kurtosis-tech/ethereum-package/issues/288)) ([743ba44](https://github.com/kurtosis-tech/ethereum-package/commit/743ba44d82e9433e6781e4965ef80bc83e962e25))\n* rework how keys are generated ([#301](https://github.com/kurtosis-tech/ethereum-package/issues/301)) ([59f15ca](https://github.com/kurtosis-tech/ethereum-package/commit/59f15cae142b778a676ee6a3f56d4c8e3a2ed1c0))\n* **tooling:** Add Ethereum Metrics Exporter ([#331](https://github.com/kurtosis-tech/ethereum-package/issues/331)) ([de5eee8](https://github.com/kurtosis-tech/ethereum-package/commit/de5eee82a7757b218a902e0bef36dae42e966b31))\n* use base image instead of pip install ([#322](https://github.com/kurtosis-tech/ethereum-package/issues/322)) ([18da90b](https://github.com/kurtosis-tech/ethereum-package/commit/18da90bd3f8b6471457e613edc1e17ff01d2ae0a))\n\n\n### Bug Fixes\n\n* add readme for mev-builder-cl-image ([#314](https://github.com/kurtosis-tech/ethereum-package/issues/314)) ([c46b6bf](https://github.com/kurtosis-tech/ethereum-package/commit/c46b6bf1e83fa567727675ef0644d7d3eefcb1f2))\n* formatting - missing jwt secret ([#312](https://github.com/kurtosis-tech/ethereum-package/issues/312)) ([728964c](https://github.com/kurtosis-tech/ethereum-package/commit/728964c7034c94dff6b2c4479e7a962d69bafc62))\n* genesis validators root had an extra new line ([#326](https://github.com/kurtosis-tech/ethereum-package/issues/326)) ([4fa4937](https://github.com/kurtosis-tech/ethereum-package/commit/4fa49375c0f0e96aaef011e0afd053c2975c3a69))\n* geth flags for verkle genesis ([#328](https://github.com/kurtosis-tech/ethereum-package/issues/328)) ([e721373](https://github.com/kurtosis-tech/ethereum-package/commit/e721373f93e8113802c47e815f3152af5974dc41))\n* path based storage - disable for older forks ([#336](https://github.com/kurtosis-tech/ethereum-package/issues/336)) ([76e3424](https://github.com/kurtosis-tech/ethereum-package/commit/76e34245dffcd6976d631d40cab813880b9a224a))\n* path based storage disable for elecra ([#316](https://github.com/kurtosis-tech/ethereum-package/issues/316)) ([86fa8ef](https://github.com/kurtosis-tech/ethereum-package/commit/86fa8efccd18236d0cbbfd7565f66883cc774fcc))\n* remove image name for ethereum-metrics-exporter ([#335](https://github.com/kurtosis-tech/ethereum-package/issues/335)) ([4bac042](https://github.com/kurtosis-tech/ethereum-package/commit/4bac04249f61a408f792d4eb65c6c1ea3b844f61))\n* remove path based storage when builder is used ([#327](https://github.com/kurtosis-tech/ethereum-package/issues/327)) ([d3cf3f4](https://github.com/kurtosis-tech/ethereum-package/commit/d3cf3f42ebe68b02cf28ad3d7c69c77e7c934af7))\n* revert the default deneb at epoch 4 ([#323](https://github.com/kurtosis-tech/ethereum-package/issues/323)) ([9342418](https://github.com/kurtosis-tech/ethereum-package/commit/9342418fc643fbf41a95db828ec5fcd3be4913cf))\n* take out the genesis versions as constants ([#324](https://github.com/kurtosis-tech/ethereum-package/issues/324)) ([a8afcef](https://github.com/kurtosis-tech/ethereum-package/commit/a8afcef6a8969ad2062c78f1b2d32e275697ea60))\n* wrong builder metrics flag ([#319](https://github.com/kurtosis-tech/ethereum-package/issues/319)) ([51a4422](https://github.com/kurtosis-tech/ethereum-package/commit/51a44228994e2c0088ffccb3c2cca60376087bff))\n* zero count validators and parallel keystore generation ([#302](https://github.com/kurtosis-tech/ethereum-package/issues/302)) ([18b141e](https://github.com/kurtosis-tech/ethereum-package/commit/18b141edf901b39c7ddc8cc60ba81b5185d4e15e))\n\n## [0.6.1](https://github.com/kurtosis-tech/ethereum-package/compare/0.6.0...0.6.1) (2023-10-17)\n\n\n### Bug Fixes\n\n* `get_transaction_count` does not count pending transactions ([#299](https://github.com/kurtosis-tech/ethereum-package/issues/299)) ([2c64de0](https://github.com/kurtosis-tech/ethereum-package/commit/2c64de058ff0b8b207b6f6908c2daa6c321f12c4))\n* big table spin up logic for k8s ([#298](https://github.com/kurtosis-tech/ethereum-package/issues/298)) ([e01ce16](https://github.com/kurtosis-tech/ethereum-package/commit/e01ce1602addba1eb132ebbe0c03439fdf060f58))\n\n## [0.6.0](https://github.com/kurtosis-tech/ethereum-package/compare/0.5.1...0.6.0) (2023-10-17)\n\n\n### Features\n\n* Add builder metrics to default mev builder ([#277](https://github.com/kurtosis-tech/ethereum-package/issues/277)) ([d0eff2e](https://github.com/kurtosis-tech/ethereum-package/commit/d0eff2e9dd39411e71e1d36f9d0e66041ff33c0a))\n* Add configurable spamming frequency to custom flood ([#283](https://github.com/kurtosis-tech/ethereum-package/issues/283)) ([f1e18ca](https://github.com/kurtosis-tech/ethereum-package/commit/f1e18ca7440ff9494b9a6bf6c20aa97a695d6084))\n* add full beacon chain explorer ([#253](https://github.com/kurtosis-tech/ethereum-package/issues/253)) ([1eddda5](https://github.com/kurtosis-tech/ethereum-package/commit/1eddda5e61ecb86687ca2eae8d691a58cdafbd45))\n* add inputs for additional grafana dashboards ([#279](https://github.com/kurtosis-tech/ethereum-package/issues/279)) ([ad02c43](https://github.com/kurtosis-tech/ethereum-package/commit/ad02c43c661de9151e541852520fd9f8e68fd0d1))\n* added another blob spamming tool (`goomy_blob`) ([#268](https://github.com/kurtosis-tech/ethereum-package/issues/268)) ([3f2c797](https://github.com/kurtosis-tech/ethereum-package/commit/3f2c797900cf1bfbef9b3dcac35b204e3a258b69))\n* Adding 4788 deployment ([#275](https://github.com/kurtosis-tech/ethereum-package/issues/275)) ([1c7de29](https://github.com/kurtosis-tech/ethereum-package/commit/1c7de293e44822aff2f26267285512c22d5f139c))\n* return participants, timestamp of genesis and validator root for consumers ([#262](https://github.com/kurtosis-tech/ethereum-package/issues/262)) ([3f2ea88](https://github.com/kurtosis-tech/ethereum-package/commit/3f2ea88bb4792ececf7f723c72bce704effc016b))\n* update ethereum-genesis-generator ([#260](https://github.com/kurtosis-tech/ethereum-package/issues/260)) ([a5b939c](https://github.com/kurtosis-tech/ethereum-package/commit/a5b939caa171f8cb7ab3979939f114a8b6398db7))\n\n\n### Bug Fixes\n\n* Add disable peer scoring ([#247](https://github.com/kurtosis-tech/ethereum-package/issues/247)) ([c75af3c](https://github.com/kurtosis-tech/ethereum-package/commit/c75af3cf3215d3aac3eb2d11eafdf9f3c7729512))\n* editor config used tabs still ([#274](https://github.com/kurtosis-tech/ethereum-package/issues/274)) ([7bbba4c](https://github.com/kurtosis-tech/ethereum-package/commit/7bbba4c2b77abbc27efcb2a9af352af6cc932f9b))\n* enable trace http-api for reth ([#251](https://github.com/kurtosis-tech/ethereum-package/issues/251)) ([ba47763](https://github.com/kurtosis-tech/ethereum-package/commit/ba4776365fca21c0a3a0e841834d7379443b76be))\n* explicitly set persist to false ([#296](https://github.com/kurtosis-tech/ethereum-package/issues/296)) ([37d8ccd](https://github.com/kurtosis-tech/ethereum-package/commit/37d8ccd86da44bc2e8fd60150c36068d36c2cb8b))\n* fix dora image ([#270](https://github.com/kurtosis-tech/ethereum-package/issues/270)) ([19fe54a](https://github.com/kurtosis-tech/ethereum-package/commit/19fe54a7ee5b9ced651c8f867c5b38b5ea529d8b))\n* fix the tx_fuzzer params ([#278](https://github.com/kurtosis-tech/ethereum-package/issues/278)) ([b0ee145](https://github.com/kurtosis-tech/ethereum-package/commit/b0ee145e94bc1b02a4dde48f198ab97357fd1ce9))\n* get rid of explorer type ([#280](https://github.com/kurtosis-tech/ethereum-package/issues/280)) ([f5595f4](https://github.com/kurtosis-tech/ethereum-package/commit/f5595f4cbb4307a0b14e9bf379a1823c40d7e170))\n* Pass all beacons to the relay ([#226](https://github.com/kurtosis-tech/ethereum-package/issues/226)) ([b4fde3d](https://github.com/kurtosis-tech/ethereum-package/commit/b4fde3d064e498a14410f776a76d23af97fd4f0f))\n* re run custom flood whenever it crashes ([#264](https://github.com/kurtosis-tech/ethereum-package/issues/264)) ([fab3995](https://github.com/kurtosis-tech/ethereum-package/commit/fab39957b28dbd9731cc15ec2fde242d7d71f5e3)), closes [#245](https://github.com/kurtosis-tech/ethereum-package/issues/245)\n* readme deadlink ([#269](https://github.com/kurtosis-tech/ethereum-package/issues/269)) ([f380cc4](https://github.com/kurtosis-tech/ethereum-package/commit/f380cc4c70e6c5a4f7d5fd0a755231eaf232a31b))\n* remove engine from http-api list for reth ([#249](https://github.com/kurtosis-tech/ethereum-package/issues/249)) ([b3114d1](https://github.com/kurtosis-tech/ethereum-package/commit/b3114d130f8a551853aac9774d864e8b7d36775a))\n* return data about pariticpants even if no additional services are launched ([#273](https://github.com/kurtosis-tech/ethereum-package/issues/273)) ([d29f98e](https://github.com/kurtosis-tech/ethereum-package/commit/d29f98e580afeca3a5d6d305f607d6f297606b9b))\n* set MEV image to 0.26.0 and complain if capella is zero with MEV set to full ([#261](https://github.com/kurtosis-tech/ethereum-package/issues/261)) ([9dfc4de](https://github.com/kurtosis-tech/ethereum-package/commit/9dfc4de19045ee2fd5be4eac31c341921d984e3d))\n* use 0.27 as the mev boost image ([839af19](https://github.com/kurtosis-tech/ethereum-package/commit/839af1986480dec245b03e91a927d693526cd1a1))\n* use ethpandaops/erigon as its multiarch ([839af19](https://github.com/kurtosis-tech/ethereum-package/commit/839af1986480dec245b03e91a927d693526cd1a1))\n\n## [0.5.1](https://github.com/kurtosis-tech/ethereum-package/compare/0.5.0...0.5.1) (2023-09-28)\n\n\n### Bug Fixes\n\n* enable all apis for reth ([#241](https://github.com/kurtosis-tech/ethereum-package/issues/241)) ([db92f7b](https://github.com/kurtosis-tech/ethereum-package/commit/db92f7b01be1dd05c65eb88463dee76f2261f42f))\n* rename light-beaconchain-explorer to dora-the-explorer & change db location ([#243](https://github.com/kurtosis-tech/ethereum-package/issues/243)) ([d3a4b49](https://github.com/kurtosis-tech/ethereum-package/commit/d3a4b495873eeb25647a113f3cd39ab42029faf8))\n\n## [0.5.0](https://github.com/kurtosis-tech/ethereum-package/compare/0.4.0...0.5.0) (2023-09-28)\n\n\n### ⚠ BREAKING CHANGES\n\n* rename the package to ethereum-package ([#234](https://github.com/kurtosis-tech/ethereum-package/issues/234))\n\n### Features\n\n* add generic prometheus endpoints ([#209](https://github.com/kurtosis-tech/ethereum-package/issues/209)) ([d04e85f](https://github.com/kurtosis-tech/ethereum-package/commit/d04e85f4ce6b82b989a07087cf20fdd4c984573b))\n\n\n### Bug Fixes\n\n* add an MIT licence ([#246](https://github.com/kurtosis-tech/ethereum-package/issues/246)) ([f632ff1](https://github.com/kurtosis-tech/ethereum-package/commit/f632ff14cacf6aab9aab6ab29ef94b4b87848f90))\n* make nimbus work with mev components ([#244](https://github.com/kurtosis-tech/ethereum-package/issues/244)) ([5c64ed5](https://github.com/kurtosis-tech/ethereum-package/commit/5c64ed5efcc064799d5c6154d3e7e9ca2d6343ef))\n\n\n### Code Refactoring\n\n* rename the package to ethereum-package ([#234](https://github.com/kurtosis-tech/ethereum-package/issues/234)) ([23e4d5e](https://github.com/kurtosis-tech/ethereum-package/commit/23e4d5ecdc24ef9a463cbe4a58ded162f79d0d1f))\n\n## [0.4.0](https://github.com/kurtosis-tech/ethereum-package/compare/0.3.1...0.4.0) (2023-09-27)\n\n\n### ⚠ BREAKING CHANGES\n\n* merge eth-network-package onto ethereum-package ([#228](https://github.com/kurtosis-tech/ethereum-package/issues/228))\n\n### Code Refactoring\n\n* merge eth-network-package onto ethereum-package ([#228](https://github.com/kurtosis-tech/ethereum-package/issues/228)) ([b72dad3](https://github.com/kurtosis-tech/ethereum-package/commit/b72dad35ac0991a6a33e8720aaa5c9455d34752b))\n\n## [0.3.1](https://github.com/kurtosis-tech/ethereum-package/compare/0.3.0...0.3.1) (2023-09-26)\n\n\n### Features\n\n* add blobspammer ([f166d71](https://github.com/kurtosis-tech/ethereum-package/commit/f166d714ac7f708f533ab3006b051da0859017a3))\n* add blobspammer  ([#165](https://github.com/kurtosis-tech/ethereum-package/issues/165)) ([f166d71](https://github.com/kurtosis-tech/ethereum-package/commit/f166d714ac7f708f533ab3006b051da0859017a3))\n* add support for electra ([#176](https://github.com/kurtosis-tech/ethereum-package/issues/176)) ([fbe6c00](https://github.com/kurtosis-tech/ethereum-package/commit/fbe6c004e5a9e47e4e819eddea7d2b424a555634))\n* Add Tx_spamer_params and move MEV to the bottom of main.star ([#208](https://github.com/kurtosis-tech/ethereum-package/issues/208)) ([23628b2](https://github.com/kurtosis-tech/ethereum-package/commit/23628b27a8d571df1c90c5cbe84455c7382e091c))\n* added a reliable flooder ([#186](https://github.com/kurtosis-tech/ethereum-package/issues/186)) ([8146ab7](https://github.com/kurtosis-tech/ethereum-package/commit/8146ab7b7d90817ca93a1ed2569a57aa64903231))\n* all_el_metrics ([#195](https://github.com/kurtosis-tech/ethereum-package/issues/195)) ([3bbcca7](https://github.com/kurtosis-tech/ethereum-package/commit/3bbcca70346d6e1f67bec2023543404df832ffa6))\n* Allow selection of additional services ([#220](https://github.com/kurtosis-tech/ethereum-package/issues/220)) ([57b15fe](https://github.com/kurtosis-tech/ethereum-package/commit/57b15fe49479e0aaada3379782f4e668b3bfdf71))\n* Make args optional ([#190](https://github.com/kurtosis-tech/ethereum-package/issues/190)) ([a3ad030](https://github.com/kurtosis-tech/ethereum-package/commit/a3ad030810b2c0d3be02b52d6d6c4ccb17c1e5c0))\n* pass slots per epoch to mev-boost-relay ([#188](https://github.com/kurtosis-tech/ethereum-package/issues/188)) ([14acb6f](https://github.com/kurtosis-tech/ethereum-package/commit/14acb6f94b9a43508e40ce61cb198f6c59425dc5))\n\n\n### Bug Fixes\n\n* bring back wait for capella fork epoch ([#212](https://github.com/kurtosis-tech/ethereum-package/issues/212)) ([c7cce7e](https://github.com/kurtosis-tech/ethereum-package/commit/c7cce7ea39c4030ded65400a75b75ca7389fe2cc))\n* bug with participant counts that lead to more than needed participants ([#221](https://github.com/kurtosis-tech/ethereum-package/issues/221)) ([7b93f1c](https://github.com/kurtosis-tech/ethereum-package/commit/7b93f1ceb2d4f1311efd5fc6691c1ad95623ab83))\n* dont wait for epoch 1 and launch MEV before tx-fuzz ([#210](https://github.com/kurtosis-tech/ethereum-package/issues/210)) ([8b883af](https://github.com/kurtosis-tech/ethereum-package/commit/8b883aff7811a2f36a36531be1c047d087c0ac93))\n* fail capella fork epoch ([#196](https://github.com/kurtosis-tech/ethereum-package/issues/196)) ([ebff2d0](https://github.com/kurtosis-tech/ethereum-package/commit/ebff2d0b85a3da08725d88a5c4ce284cf28ef79b))\n* fix mismatch between validator_count & metrics gazer ([#223](https://github.com/kurtosis-tech/ethereum-package/issues/223)) ([5dd4f9b](https://github.com/kurtosis-tech/ethereum-package/commit/5dd4f9b352a571775684b30fe6fd530512fa943b))\n* Improve MEV setup to use less containers for non_validator nodes ([#224](https://github.com/kurtosis-tech/ethereum-package/issues/224)) ([bd176f0](https://github.com/kurtosis-tech/ethereum-package/commit/bd176f08941300c98740adc82a0cf0f03694c569))\n* Kevin/postgres package upgrade ([#179](https://github.com/kurtosis-tech/ethereum-package/issues/179)) ([1bcc623](https://github.com/kurtosis-tech/ethereum-package/commit/1bcc623f6e2a260751869b3b519b759bf510a994))\n* Kevin/unpin redis version ([#182](https://github.com/kurtosis-tech/ethereum-package/issues/182)) ([4eb7127](https://github.com/kurtosis-tech/ethereum-package/commit/4eb7127816098a4615f061e0203b7e162d4b3a75))\n* lodestar flag ([#217](https://github.com/kurtosis-tech/ethereum-package/issues/217)) ([5f1e0f2](https://github.com/kurtosis-tech/ethereum-package/commit/5f1e0f2943a006426b638c0699ddd58c47cc57c0))\n* mev should work with the validator count change ([#225](https://github.com/kurtosis-tech/ethereum-package/issues/225)) ([37dccce](https://github.com/kurtosis-tech/ethereum-package/commit/37dccce1c1a1760b1ecac9264985a844f0db46a6))\n* mev-boost creation by making it depend on actual participant count ([#191](https://github.com/kurtosis-tech/ethereum-package/issues/191)) ([7606cff](https://github.com/kurtosis-tech/ethereum-package/commit/7606cffafc054153dc4ad43d925dad7cfa4a9984))\n* Mock builder updates ([#193](https://github.com/kurtosis-tech/ethereum-package/issues/193)) ([6cc3697](https://github.com/kurtosis-tech/ethereum-package/commit/6cc369703f821da788d49c9418e1b4008796ce95))\n* parse input ([#205](https://github.com/kurtosis-tech/ethereum-package/issues/205)) ([a787b38](https://github.com/kurtosis-tech/ethereum-package/commit/a787b38d8c8e61008244818581bf5d9a3103bd33))\n* pass through env var now for builder_signing_tx_key ([#207](https://github.com/kurtosis-tech/ethereum-package/issues/207)) ([a63f2fd](https://github.com/kurtosis-tech/ethereum-package/commit/a63f2fd78613607dd4be195eb002fa9af3c6a894))\n* Pin Redis version in prep for package catalog version upgrade ([#180](https://github.com/kurtosis-tech/ethereum-package/issues/180)) ([09b235a](https://github.com/kurtosis-tech/ethereum-package/commit/09b235a37f62c2fd6f99dd466a9918d7d468831d))\n* remove hardcoding of addresses in MEV flood ([#184](https://github.com/kurtosis-tech/ethereum-package/issues/184)) ([21b0975](https://github.com/kurtosis-tech/ethereum-package/commit/21b0975f20a955354482092f5f04fcb4a85114b0))\n* replace plan.assert with plan.verify ([#202](https://github.com/kurtosis-tech/ethereum-package/issues/202)) ([073135d](https://github.com/kurtosis-tech/ethereum-package/commit/073135ddc8ab5fb912b20bae96ec2ec72c3ac2f4))\n* start boost immediately after relay starts running ([#213](https://github.com/kurtosis-tech/ethereum-package/issues/213)) ([b6ce1e9](https://github.com/kurtosis-tech/ethereum-package/commit/b6ce1e9132ded99c1398353fa4324bbf9fb6e78c))\n* update readme for MEV params ([#189](https://github.com/kurtosis-tech/ethereum-package/issues/189)) ([c1bf13e](https://github.com/kurtosis-tech/ethereum-package/commit/c1bf13ee737f3437d0aca7cf3bfd9753e2f31d43))\n* use 4th private key (index 3) for tx fuzz like before ([#215](https://github.com/kurtosis-tech/ethereum-package/issues/215)) ([1752ed0](https://github.com/kurtosis-tech/ethereum-package/commit/1752ed0a9861c0a2f7fb313dbe44a800e419b6bc))\n* use the third address instead of coinbase for tx-fuzz ([#185](https://github.com/kurtosis-tech/ethereum-package/issues/185)) ([3b2993c](https://github.com/kurtosis-tech/ethereum-package/commit/3b2993c050172dec63c26d9b53c53fc7a77ad079))\n\n## [0.3.0](https://github.com/kurtosis-tech/ethereum-package/compare/0.2.0...0.3.0) (2023-09-03)\n\n\n### ⚠ BREAKING CHANGES\n\n* Uses the `plan` object. Users will have to update their Kurtosis CLI to >= 0.63.0 and restart the engine\n\n### Features\n\n* add beacon-metrics-gazer + beacon-metrics-gazer grafana dashboard ([#114](https://github.com/kurtosis-tech/ethereum-package/issues/114)) ([5540587](https://github.com/kurtosis-tech/ethereum-package/commit/55405874ee50826b65dc2a5664e2b8bf9d7f668b))\n* add deneb support ([#96](https://github.com/kurtosis-tech/ethereum-package/issues/96)) ([07ed500](https://github.com/kurtosis-tech/ethereum-package/commit/07ed500890ab01b6bed04cdacc19b9373e6a4b6a))\n* add ethereumjs to nightly runners ([b86d886](https://github.com/kurtosis-tech/ethereum-package/commit/b86d886197ddad2d0ea78efac7e11109838b5dd9))\n* add ethereumjs to nightly runners ([#154](https://github.com/kurtosis-tech/ethereum-package/issues/154)) ([b86d886](https://github.com/kurtosis-tech/ethereum-package/commit/b86d886197ddad2d0ea78efac7e11109838b5dd9))\n* add forkmon ([#107](https://github.com/kurtosis-tech/ethereum-package/issues/107)) ([2a8ad19](https://github.com/kurtosis-tech/ethereum-package/commit/2a8ad19e8ad9c4202bd6dc9dff28eb3ea2cf08f2))\n* add light-beaconchain-explorer ([83e01a1](https://github.com/kurtosis-tech/ethereum-package/commit/83e01a114a3bad970ebecc2ae10bc863e14cdb3a))\n* add light-beaconchain-explorer ([#125](https://github.com/kurtosis-tech/ethereum-package/issues/125)) ([83e01a1](https://github.com/kurtosis-tech/ethereum-package/commit/83e01a114a3bad970ebecc2ae10bc863e14cdb3a))\n* add multiple endpoint support for lightbeaconchain expolorer ([#151](https://github.com/kurtosis-tech/ethereum-package/issues/151)) ([68572cd](https://github.com/kurtosis-tech/ethereum-package/commit/68572cdddb1e2074892f148b69e603a2ee06edb8))\n* counting by summing each participant ([f9b638b](https://github.com/kurtosis-tech/ethereum-package/commit/f9b638bc1c26be34fd3dd0ad6e4d59ee4ecd66c3))\n* counting by summing each participant ([#112](https://github.com/kurtosis-tech/ethereum-package/issues/112)) ([f9b638b](https://github.com/kurtosis-tech/ethereum-package/commit/f9b638bc1c26be34fd3dd0ad6e4d59ee4ecd66c3))\n* disable login for grafana ([4d7df4b](https://github.com/kurtosis-tech/ethereum-package/commit/4d7df4be895b950119d1e5fabe0e4ae3cc0c822e))\n* disable login for grafana ([#122](https://github.com/kurtosis-tech/ethereum-package/issues/122)) ([4d7df4b](https://github.com/kurtosis-tech/ethereum-package/commit/4d7df4be895b950119d1e5fabe0e4ae3cc0c822e))\n* **formatting:** Add editorconfig, move everything to using tabs (4) ([#106](https://github.com/kurtosis-tech/ethereum-package/issues/106)) ([cb0fc69](https://github.com/kurtosis-tech/ethereum-package/commit/cb0fc695cce7a64386349193ef3cd3ebf692f18d))\n* launch the mock mev builder ([#94](https://github.com/kurtosis-tech/ethereum-package/issues/94)) ([7fcd3e2](https://github.com/kurtosis-tech/ethereum-package/commit/7fcd3e24aa1d1c23afa0c37ba3c939c204720d31))\n* make it possible to have capella on epoch 0 or non 0 ([#108](https://github.com/kurtosis-tech/ethereum-package/issues/108)) ([1133497](https://github.com/kurtosis-tech/ethereum-package/commit/1133497b18c6fa46f2b6483c9b2eea27bc272868))\n* make mev more configurable ([#164](https://github.com/kurtosis-tech/ethereum-package/issues/164)) ([0165ef1](https://github.com/kurtosis-tech/ethereum-package/commit/0165ef1a67a77dfca2030c1b36ed12d00ae48d18))\n* parameterize mev_boost and  mev_builder images ([#171](https://github.com/kurtosis-tech/ethereum-package/issues/171)) ([28adec1](https://github.com/kurtosis-tech/ethereum-package/commit/28adec114779e0b5946705038cb19c859c430242))\n* snooper support ([#121](https://github.com/kurtosis-tech/ethereum-package/issues/121)) ([d2cccf4](https://github.com/kurtosis-tech/ethereum-package/commit/d2cccf4af8873a912cc4389f8db75ce4e11e2e44))\n* support full MEV ([#115](https://github.com/kurtosis-tech/ethereum-package/issues/115)) ([e9e8c41](https://github.com/kurtosis-tech/ethereum-package/commit/e9e8c418c4a7a9ff099b4514430f8235f4ad1331))\n* use eth-network-package to spin up participant network ([#90](https://github.com/kurtosis-tech/ethereum-package/issues/90)) ([91029ac](https://github.com/kurtosis-tech/ethereum-package/commit/91029acfb7867c134baac3aaf758eb06f67fe997))\n\n\n### Bug Fixes\n\n* a bug around participants ([#129](https://github.com/kurtosis-tech/ethereum-package/issues/129)) ([9382767](https://github.com/kurtosis-tech/ethereum-package/commit/9382767f88690817de189a3551c37325389faf98))\n* delay deneb to 500 epoch ([#102](https://github.com/kurtosis-tech/ethereum-package/issues/102)) ([d07270b](https://github.com/kurtosis-tech/ethereum-package/commit/d07270bc9802fe2adc44d70e6e8e9c274958eacb))\n* dont spin up extra el/cl client for mock-mev ([#158](https://github.com/kurtosis-tech/ethereum-package/issues/158)) ([46d67fc](https://github.com/kurtosis-tech/ethereum-package/commit/46d67fc5878a01984623c8f3ac9f667d1fb891f2))\n* fix an arg parsing bug ([#135](https://github.com/kurtosis-tech/ethereum-package/issues/135)) ([f084e7c](https://github.com/kurtosis-tech/ethereum-package/commit/f084e7c72738b7afd71d9a1a05f6fba4c388a5de))\n* fix passed argument parsing ([#85](https://github.com/kurtosis-tech/ethereum-package/issues/85)) ([a5d40e9](https://github.com/kurtosis-tech/ethereum-package/commit/a5d40e9bd178ff7ade06f22818475d01546f861a))\n* fixed teku validator params for MEV ([#149](https://github.com/kurtosis-tech/ethereum-package/issues/149)) ([b0079cf](https://github.com/kurtosis-tech/ethereum-package/commit/b0079cff08b7c5812e97151ba56a0929593516ba))\n* fixing nimbus payload url ([#155](https://github.com/kurtosis-tech/ethereum-package/issues/155)) ([55c1f59](https://github.com/kurtosis-tech/ethereum-package/commit/55c1f59404872c26315844995cbea6a4286b1cb2))\n* geth failing after ethash package removal ([#93](https://github.com/kurtosis-tech/ethereum-package/issues/93)) ([41e3d2c](https://github.com/kurtosis-tech/ethereum-package/commit/41e3d2cd292dd19b805e5c93f3d65ec0ba063104)), closes [#91](https://github.com/kurtosis-tech/ethereum-package/issues/91)\n* make besu a bootnode ([29296cd](https://github.com/kurtosis-tech/ethereum-package/commit/29296cd1c78615743d32f68ca50fb51121c5921c))\n* make besu a bootnode ([#146](https://github.com/kurtosis-tech/ethereum-package/issues/146)) ([29296cd](https://github.com/kurtosis-tech/ethereum-package/commit/29296cd1c78615743d32f68ca50fb51121c5921c))\n* make this work with kurtosis 0.65.0 ([#73](https://github.com/kurtosis-tech/ethereum-package/issues/73)) ([13c72ec](https://github.com/kurtosis-tech/ethereum-package/commit/13c72ec56e4da79c6a9bd6802a0995c6b00d0a0a))\n* mention reth in package readme ([#133](https://github.com/kurtosis-tech/ethereum-package/issues/133)) ([d11a689](https://github.com/kurtosis-tech/ethereum-package/commit/d11a6898b9f7377a5e8c50ccd3859ec5eed0e556))\n* move parallel keystore generation to global config ([0789eed](https://github.com/kurtosis-tech/ethereum-package/commit/0789eedb1f77c418944a2cc7047edd95256d983d))\n* move parallel keystore generation to global config ([#130](https://github.com/kurtosis-tech/ethereum-package/issues/130)) ([0789eed](https://github.com/kurtosis-tech/ethereum-package/commit/0789eedb1f77c418944a2cc7047edd95256d983d))\n* nightly tests that rely on etherejums get the right image ([#159](https://github.com/kurtosis-tech/ethereum-package/issues/159)) ([97b4d33](https://github.com/kurtosis-tech/ethereum-package/commit/97b4d33aa4c236e9615df7f3c62e6221a056385f))\n* Nimbus can't run when slot time is below 12s ([#100](https://github.com/kurtosis-tech/ethereum-package/issues/100)) ([c38bff9](https://github.com/kurtosis-tech/ethereum-package/commit/c38bff9f5d6d49f57c1a66c84828f8bad9c550cc))\n* pass right mev-boost url to teku ([#147](https://github.com/kurtosis-tech/ethereum-package/issues/147)) ([8bb75d9](https://github.com/kurtosis-tech/ethereum-package/commit/8bb75d91b9a45a5a2fc7e64118d5913ffef138f4))\n* pin postgres package ([#174](https://github.com/kurtosis-tech/ethereum-package/issues/174)) ([6b8d9d3](https://github.com/kurtosis-tech/ethereum-package/commit/6b8d9d39fd06d1dc01d4f3cbbc6c20f9f962bb6a))\n* Remove nethermind restriction ([#126](https://github.com/kurtosis-tech/ethereum-package/issues/126)) ([373c6c9](https://github.com/kurtosis-tech/ethereum-package/commit/373c6c9b45ac4fc9bee930bc5430921cd3a16a1f))\n* Switch default images to latest ([#99](https://github.com/kurtosis-tech/ethereum-package/issues/99)) ([4a85c9d](https://github.com/kurtosis-tech/ethereum-package/commit/4a85c9dccb0e5cbd809ed7047b78e7190d466a91))\n* Update enclave name flag ([#87](https://github.com/kurtosis-tech/ethereum-package/issues/87)) ([6531a7a](https://github.com/kurtosis-tech/ethereum-package/commit/6531a7af37faa2d227a2a53739ca7ae0cd4aed9e))\n* update genesis generator to support netherminds new format ([#68](https://github.com/kurtosis-tech/ethereum-package/issues/68)) ([094352d](https://github.com/kurtosis-tech/ethereum-package/commit/094352d6666755da5de6ed3f4b78fd5f37c01f7f))\n* update nightly runner ([#163](https://github.com/kurtosis-tech/ethereum-package/issues/163)) ([4eba65d](https://github.com/kurtosis-tech/ethereum-package/commit/4eba65df4fd29ece8a89ac77066e68d330fc2297))\n* use eth maintained tx-fuzz ([#110](https://github.com/kurtosis-tech/ethereum-package/issues/110)) ([b0903bd](https://github.com/kurtosis-tech/ethereum-package/commit/b0903bdae490ffa30251ddede9edca21105fba48))\n* use flashbots builder ([#162](https://github.com/kurtosis-tech/ethereum-package/issues/162)) ([7a0c2d0](https://github.com/kurtosis-tech/ethereum-package/commit/7a0c2d03dff1dd0ee5c92b5c2f9478f4e56f6920))\n* use mev-boost-relay by flashbots ([#141](https://github.com/kurtosis-tech/ethereum-package/issues/141)) ([fca62fc](https://github.com/kurtosis-tech/ethereum-package/commit/fca62fcee23525cc891eaf2494a2b1cb694f5bf4))\n* use named artifacts ([#69](https://github.com/kurtosis-tech/ethereum-package/issues/69)) ([968f073](https://github.com/kurtosis-tech/ethereum-package/commit/968f0734a0ee834c75e184b758989ce1dc9d58be)), closes [#70](https://github.com/kurtosis-tech/ethereum-package/issues/70)\n* Use plan object ([#65](https://github.com/kurtosis-tech/ethereum-package/issues/65)) ([8e5d185](https://github.com/kurtosis-tech/ethereum-package/commit/8e5d18558f92a9fc71ae9a70f1ca139df406d7b7))\n* use v2 endoint to get the head block ([#153](https://github.com/kurtosis-tech/ethereum-package/issues/153)) ([f084711](https://github.com/kurtosis-tech/ethereum-package/commit/f084711061c777c78ef8f002a4f7e597c27e8eb5))\n* work with latest eth-network-package ([14dc957](https://github.com/kurtosis-tech/ethereum-package/commit/14dc95776e16f8cdf8ac83a03c53abad489cb8f7))\n* work with latest eth-network-package ([#116](https://github.com/kurtosis-tech/ethereum-package/issues/116)) ([14dc957](https://github.com/kurtosis-tech/ethereum-package/commit/14dc95776e16f8cdf8ac83a03c53abad489cb8f7))\n\n## 0.2.0\n\n- Adds config variables for `genesis_delay` and `capella_fork_epoch`\n- Updates genesis generator version\n- Fixes genesis timestamp such that the shanghai fork can happen based on timestamps\n- Update `--enclave-id` flag to `--enclave` in README\n\n### Breaking Change\n\n- Introduced optional application protocol and renamed protocol to transport_protocol\n\n## 0.1.0\n\n### Breaking changes\n\n- Updated `struct` to `PortSpec` for declaring port definitions\n\n### Changes\n\n- Change `exec` syntax\n\n## 0.0.5\n\n### Fixes\n\n- Fix bug with input parsing of participants\n- Fix bug with `get_enode_for_node` being assigned to two parameters\n\n### Changes\n\n- Updated `run(input_args)` to `run(args)`\n- Refactor code to use `wait` and `request` commands\n- Removed `print(output)` at the end as it is now printed by the framework\n- Updates nimbus default docker image\n- Updates `genesis-generator` image to include a fix for nimbus post-merge genesis\n- Use the `args` argument instead of flags\n\n## 0.0.4\n\n### Changes\n\n- Removed 'module' key in the 'kurtosis.yml' file\n\n## 0.0.3\n\n### Changes\n\n- Replaced 'module' with 'package' where relevant\n- Removed protobuf types as they are now unsupported in Kurtosis.\n- Renamed `kurtotis.mod` to `kurtosis.yml`\n\n### Fixes\n\n- Fixed a bug in `run` of `main.star` where we'd refer to `module_io` instead of `package_io`\n\n## 0.0.2\n\n### Features\n\n- Added the docs\n\n### Fixes\n\n- Renamed `num_validators_per_keynode` to `num_validator_keys_per_node`\n- Moved away from `load` infavor of `import_module`\n- Moved away from `store_files_from_service` to `store_service_files`\n- Removed empty `ports` from a few service configs as passing it is now optional\n- Adjusted to the new render templates config\n- Moved away from passing json string to struct/dict for render templates\n\n### Changes\n\n- Move from `main` to `run` in `main.star`\n\n## 0.0.1\n\n### Features\n\n- Changed the .circlei/config.yml to apply to Startosis\n- Added genesis_constants\n- Added a lot of participant_network/pre_launch_data_generator\n- Added a lot of simple objects that just keep data\n- Added monitoring on top of the repo\n- Almost perfect parity with the eth2-merge-kurtosis-module\n\n### Fixes\n\n- Fixes some bugs with the initial implementation of the monitors\n\n## 0.0.0\n\n- Initial commit\n"
  },
  {
    "path": "LICENSE",
    "content": "MIT License\n\nCopyright (c) 2024 ethPandaOps\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n"
  },
  {
    "path": "README.md",
    "content": "# Ethereum Package\n\n![Run of the Ethereum Network Package](run.gif)\n\nThis is a [Kurtosis][kurtosis-repo] package that will spin up a private Ethereum testnet over Docker or Kubernetes with multi-client support, Flashbot's `mev-boost` infrastructure for PBS-related testing/validation, and other useful network tools (transaction spammer, monitoring tools, etc). Kurtosis packages are entirely reproducible and composable, so this will work the same way over Docker or Kubernetes, in the cloud or locally on your machine.\n\nYou now have the ability to spin up a private Ethereum testnet or public devnet/testnet (e.g. Goerli, Holesky, Sepolia, dencun-devnet-12, verkle-gen-devnet-2 etc) with a single command. This package is designed to be used for testing, validation, and development of Ethereum clients, and is not intended for production use. For more details check network_params.network in the [configuration section](./README.md#configuration).\n\nSpecifically, this [package][package-reference] will:\n\n1. Generate Execution Layer (EL) & Consensus Layer (CL) genesis information using [the Ethereum genesis generator](https://github.com/ethpandaops/ethereum-genesis-generator).\n2. Configure & bootstrap a network of Ethereum nodes of *n* size using the genesis data generated above\n3. Spin up a [transaction spammer](https://github.com/MariusVanDerWijden/tx-fuzz) to send fake transactions to the network\n4. Spin up and connect a [testnet verifier](https://github.com/ethereum/merge-testnet-verifier)\n5. Spin up a Grafana and Prometheus instance to observe the network\n6. Spin up a Blobscan instance to analyze blob transactions (EIP-4844)\n\nOptional features (enabled via flags or parameter files at runtime):\n\n- Block until the Beacon nodes finalize an epoch (i.e. finalized_epoch > 0)\n- Spin up & configure parameters for the infrastructure behind PBS (Proposer-Builder Separation) using `mev-boost`, with support for multiple relay implementations:\n  - `flashbots` - Full Flashbots MEV infrastructure\n  - `helix` - High-performance [Helix relay](https://github.com/gattaca-com/helix) with TimescaleDB backend\n  - `mev-rs` - Alternative relay implementation\n  - `commit-boost` - Commit-boost based infrastructure\n  - `mock` - Mock builder for testing\n  - [More details on PBS implementation](./README.md#proposer-builder-separation-pbs-emulation).\n- Spin up & connect the network to a [beacon metrics gazer service](https://github.com/dapplion/beacon-metrics-gazer) to collect network-wide participation metrics.\n- Spin up and connect a [JSON RPC Snooper](https://github.com/ethDreamer/json_rpc_snoop) to the network log responses & requests between the EL engine API and the CL client.\n- Specify extra parameters to be passed in for any of the: CL client Beacon, and CL client validator, and/or EL client containers\n- Specify the required parameters for the nodes to reach an external block building network\n- Generate keystores for each node in parallel\n\n## Quickstart\n\n1. [Install Docker & start the Docker Daemon if you haven't done so already][docker-installation]\n2. [Install the Kurtosis CLI, or upgrade it to the latest version if it's already installed][kurtosis-cli-installation]\n3. Run the package with default configurations from the command line:\n\n   ```bash\n   kurtosis run --enclave my-testnet github.com/ethpandaops/ethereum-package\n   ```\n\n### Run with your own configuration\n\nKurtosis packages are parameterizable, meaning you can customize your network and its behavior to suit your needs by storing parameters in a file that you can pass in at runtime like so:\n\n```bash\nkurtosis run --enclave my-testnet github.com/ethpandaops/ethereum-package --args-file network_params.yaml\n```\n\nWhere `network_params.yaml` contains the parameters for your network in your home directory.\n\n#### Run on Kubernetes\n\nKurtosis packages work the same way over Docker or on Kubernetes. Please visit our [Kubernetes docs](https://docs.kurtosis.com/k8s) to learn how to spin up a private testnet on a Kubernetes cluster.\n\n### Considerations for Running on a Public Testnet with a Cloud Provider\n\nWhen running on a public testnet using a cloud provider's Kubernetes cluster, there are a few important factors to consider:\n\n1. State Growth: The growth of the state might be faster than anticipated. This could potentially lead to issues if the default parameters become insufficient over time. It's important to monitor state growth and adjust parameters as necessary.\n\n2. Persistent Storage Speed: Most cloud providers provision their Kubernetes clusters with relatively slow persistent storage by default. This can cause performance issues, particularly with Execution Layer (EL) clients.\n\n3. Network Syncing: The disk speed provided by cloud providers may not be sufficient to sync with networks that have high demands, such as the mainnet. This could lead to syncing issues and delays.\n\nTo mitigate these issues, you can use the `el_volume_size` and `cl_volume_size` flags to override the default settings locally. This allows you to allocate more storage to the EL and CL clients, which can help accommodate faster state growth and improve syncing performance. However, keep in mind that increasing the volume size may also increase your cloud provider costs. Always monitor your usage and adjust as necessary to balance performance and cost.\n\nFor optimal performance, we recommend using a cloud provider that allows you to provision Kubernetes clusters with fast persistent storage or self hosting your own Kubernetes cluster with fast persistent storage.\n\n### Shadowforking\n\nIn order to enable shadowfork capabilities, you can use the `network_params.network` flag. The expected value is the name of the network you want to shadowfork followed by `-shadowfork`. Please note that `persistent` configuration parameter has to be enabled for shadowforks to work! Current limitation on k8s is it is only working on a single node cluster. For example, to shadowfork the Holesky testnet, you can use the following command:\n\n```yaml\n...\nnetwork_params:\n  network: \"holesky-shadowfork\"\npersistent: true\n...\n```\n\n#### Shadowforking custom verkle networks\n\nIn order to enable shadowfork capabilities for verkle networks, you need to define electra and mention verkle in the network name after shadowfork.\n\n```yaml\n...\nnetwork_params:\n  electra_fork_epoch: 1\n  network: \"holesky-shadowfork-verkle\"\npersistent: true\n...\n```\n\n#### Taints and tolerations\n\nIt is possible to run the package on a Kubernetes cluster with taints and tolerations. This is done by adding the tolerations to the `tolerations` field in the `network_params.yaml` file. For example:\n\n```yaml\nparticipants:\n  - el_type: reth\n    cl_type: teku\nglobal_tolerations:\n  - key: \"node-role.kubernetes.io/master6\"\n    value: \"true\"\n    operator: \"Equal\"\n    effect: \"NoSchedule\"\n```\n\nIt is possible to define toleration globally, per participant or per container. The order of precedence is as follows:\n\n1. Container (`el_tolerations`, `cl_tolerations`, `vc_tolerations`)\n2. Participant (`tolerations`)\n3. Global (`global_tolerations`)\n\nThis feature is only available for Kubernetes. To learn more about taints and tolerations, please visit the [Kubernetes documentation](https://kubernetes.io/docs/concepts/scheduling-eviction/taint-and-toleration/).\n\n#### Tear down\n\nThe testnet will reside in an [enclave][enclave] - an isolated, ephemeral environment. The enclave and its contents (e.g. running containers, files artifacts, etc) will persist until torn down. You can remove an enclave and its contents with:\n\n```bash\nkurtosis enclave rm -f my-testnet\n```\n\n## Management\n\nThe [Kurtosis CLI](https://docs.kurtosis.com/cli) can be used to inspect and interact with the network.\n\nFor example, if you need shell access, simply run:\n\n```bash\nkurtosis service shell my-testnet $SERVICE_NAME\n```\n\nAnd if you need the logs for a service, simply run:\n\n```bash\nkurtosis service logs my-testnet $SERVICE_NAME\n```\n\nCheck out the [full list of Kurtosis CLI commands](https://docs.kurtosis.com/cli)\n\n## Debugging\n\nTo grab the genesis files for the network, simply run:\n\n```bash\nkurtosis files download my-testnet $FILE_NAME $OUTPUT_DIRECTORY\n```\n\nFor example, to retrieve the Execution Layer (EL) genesis data, run:\n\n```bash\nkurtosis files download my-testnet el-genesis-data ~/Downloads\n```\n\n## Basic file sharing\n\nApache is included in the package to allow for basic file sharing. The Apache service is started when additional services are enabled. It will expose the network-configs directory, which might needed if you want to share the network config publicly.\n\n```yaml\nadditional_services:\n  - apache\n```\n\n## Configuration\n\nTo configure the package behaviour, you can modify your `network_params.yaml` file. The full YAML schema that can be passed in is as follows with the defaults provided:\n\n```yaml\n# Specification of the participants in the network\nparticipants:\n  # EL(Execution Layer) Specific flags\n    # The type of EL client that should be started\n    # Valid values are geth, nethermind, erigon, besu, ethereumjs, reth, nimbus-eth1, ethrex, dummy\n  - el_type: geth\n\n    # The Docker image that should be used for the EL client; leave blank to use the default for the client type\n    # Defaults by client:\n    # - geth: ethereum/client-go:latest\n    # - erigon: erigontech/erigon:latest\n    # - nethermind: ethpandaops/nethermind:master\n    # - besu: hyperledger/besu:latest\n    # - reth: ghcr.io/paradigmxyz/reth\n    # - ethereumjs: ethpandaops/ethereumjs:master\n    # - nimbus-eth1: statusim/nimbus-eth1:master\n    # - ethrex: ghcr.io/lambdaclass/ethrex:latest\n    # - dummy: ethpandaops/dummy-el:master\n    el_image: \"\"\n\n    # Path to a local EL binary to inject into the container (Docker only)\n    # When set, the binary will be uploaded and mounted into the container,\n    # replacing the default binary from the Docker image\n    # Useful for rapid debugging with locally compiled binaries\n    # IMPORTANT: el_force_restart must be set to true when using this option\n    # IMPORTANT: The binary file must live inside the ethereum-package directory\n    # Build the client in its own repo, then copy ONLY the binary to ethereum-package\n    # Do not run builds inside ethereum-package or copy build dependencies - only the final binary\n    # IMPORTANT: The binary must be compiled on a Linux system with compatible libraries\n    # matching those in the client's Dockerfile to avoid dependency issues\n    # Example workflow (from reth repo):\n    #   cargo build --release --bin reth && cp target/release/reth ../ethereum-package/binaries/\n    # Then set: el_binary_path: \"./binaries/reth\"\n    el_binary_path: \"\"\n\n    # The log level string that this participant's EL client should log at\n    # If this is emptystring then the global `logLevel` parameter's value will be translated into a string appropriate for the client (e.g. if\n    # global `logLevel` = `info` then Geth would receive `3`, Besu would receive `INFO`, etc.)\n    # If this is not emptystring, then this value will override the global `logLevel` setting to allow for fine-grained control\n    # over a specific participant's logging\n    # Set to \"custom\" (Besu only) to disable global logging settings and leave it up to the client configuration,\n    # for example, when using a custom log4j2.xml file\n    el_log_level: \"\"\n\n    # The storage type for the EL client: \"full\" or \"archive\"\n    # IMPORTANT: Consider updating el_volume_size if you set this\n    # If this is emptystring, each client will use its default behavior:\n    #   - reth, erigon: default to archive (use \"full\" to save space)\n    #   - geth, besu, nethermind: default to full (use \"archive\" to keep historical data)\n    #   - ethereumjs, ethrex, nimbus-eth1, dummy: unused (full only?)\n    # Example: el_storage_type: \"full\" or \"archive\"\n    el_storage_type: \"\"\n\n    # A list of optional extra env_vars the el container should spin up with\n    el_extra_env_vars: {}\n\n    # A list of optional extra labels the el container should spin up with\n    # Example: el_extra_labels: {\"ethereum-package.partition\": \"1\"}\n    el_extra_labels: {}\n\n    # A list of optional extra params that will be passed to the EL client container for modifying its behaviour\n    el_extra_params: []\n\n    # A list of optional extra mount points that will be passed to the EL client container\n    # Key is the mount path (becomes a directory), value MUST reference a key from extra_files\n    # The file will be available at <mount_path>/<extra_files_key>\n    # Example: el_extra_mounts: {\"/config\": \"my_config_file\"}  # Creates /config/my_config_file\n    el_extra_mounts: {}\n\n    # A list of host devices to mount into the EL client container\n    # Useful for hardware device access like TPM, HSM, etc.\n    # Example: el_devices: [\"/dev/tpm0\"]\n    # Defaults to empty list\n    el_devices: []\n\n    # A list of tolerations that will be passed to the EL client container\n    # Only works with Kubernetes\n    # Example: el_tolerations:\n    # - key: \"key\"\n    #   operator: \"Equal\"\n    #   value: \"value\"\n    #   effect: \"NoSchedule\"\n    #   toleration_seconds: 3600\n    # Defaults to empty\n    el_tolerations: []\n\n    # Persistent storage size for the EL client container (in MB)\n    # IMPORTANT: Consider settings this if you are setting el_storage_type\n    # Defaults to 0, which means that the default size for the client will be used\n    # Default values can be found in /src/package_io/constants.star VOLUME_SIZE\n    el_volume_size: 0\n\n    # Resource management for el containers\n    # CPU is milicores\n    # RAM is in MB\n    # Defaults to 0, which results in no resource limits\n    el_min_cpu: 0\n    el_max_cpu: 0\n    el_min_mem: 0\n    el_max_mem: 0\n\n    # Force container recreation on next run (Docker only)\n    # When set to true, the container will be recreated even if the image tag hasn't changed\n    # Useful when rebuilding Docker images with the same tag or recompiling binaries with the same name\n    # Defaults to false\n    el_force_restart: false\n\n  # CL(Consensus Layer) Specific flags\n    # The type of CL client that should be started\n    # Valid values are nimbus, lighthouse, lodestar, teku, prysm, and grandine\n    cl_type: lighthouse\n\n    # The Docker image that should be used for the CL client; leave blank to use the default for the client type\n    # Defaults by client:\n    # - lighthouse: ethpandaops/lighthouse:unstable\n    # - teku: ethpandaops/teku:master\n    # - nimbus: statusim/nimbus-eth2:multiarch-latest\n    # - prysm: ethpandaops/prysm-beacon-chain:develop\n    # - lodestar: chainsafe/lodestar:latest\n    # - grandine: sifrai/grandine:stable\n    cl_image: \"\"\n\n    # Path to a local CL binary to inject into the container (Docker only)\n    # When set, the binary will be uploaded and mounted into the container,\n    # replacing the default binary from the Docker image\n    # Useful for rapid debugging with locally compiled binaries\n    # IMPORTANT: cl_force_restart must be set to true when using this option\n    # IMPORTANT: The binary file must live inside the ethereum-package directory\n    # Build the client in its own repo, then copy ONLY the binary to ethereum-package\n    # Do not run builds inside ethereum-package or copy build dependencies - only the final binary\n    # IMPORTANT: The binary must be compiled on a Linux system with compatible libraries\n    # matching those in the client's Dockerfile to avoid dependency issues\n    # Example workflow (from lighthouse repo):\n    #   cargo build --release --bin lighthouse && cp target/release/lighthouse ../ethereum-package/binaries/\n    # Then set: cl_binary_path: \"./binaries/lighthouse\"\n    cl_binary_path: \"\"\n\n    # The log level string that this participant's CL client should log at\n    # If this is emptystring then the global `logLevel` parameter's value will be translated into a string appropriate for the client (e.g. if\n    # global `logLevel` = `info` then Teku would receive `INFO`, Prysm would receive `info`, etc.)\n    # If this is not emptystring, then this value will override the global `logLevel` setting to allow for fine-grained control\n    # over a specific participant's logging\n    # Set to \"custom\" (Teku only) to disable global logging settings and leave it up to the client configuration,\n    # for example, when using a custom log4j.xml file\n    cl_log_level: \"\"\n\n    # A list of optional extra env_vars the cl container should spin up with\n    cl_extra_env_vars: {}\n\n    # A list of optional extra labels that will be passed to the CL client Beacon container.\n    # Example; cl_extra_labels: {\"ethereum-package.partition\": \"1\"}\n    cl_extra_labels: {}\n\n    # A list of optional extra params that will be passed to the CL client Beacon container for modifying its behaviour\n    # If the client combines the Beacon & validator nodes (e.g. Teku, Nimbus), then this list will be passed to the combined Beacon-validator node\n    cl_extra_params: []\n\n    # A list of optional extra mount points that will be passed to the CL client container\n    # Key is the mount path (becomes a directory), value MUST reference a key from extra_files\n    # The file will be available at <mount_path>/<extra_files_key>\n    # Example: cl_extra_mounts: {\"/config\": \"my_config_file\"}  # Creates /config/my_config_file\n    cl_extra_mounts: {}\n\n    # A list of host devices to mount into the CL client container\n    # Useful for hardware device access like TPM, HSM, etc.\n    # Example: cl_devices: [\"/dev/tpm0\"]\n    # Defaults to empty list\n    cl_devices: []\n\n    # A list of tolerations that will be passed to the CL client container\n    # Only works with Kubernetes\n    # Example: el_tolerations:\n    # - key: \"key\"\n    #   operator: \"Equal\"\n    #   value: \"value\"\n    #   effect: \"NoSchedule\"\n    #   toleration_seconds: 3600\n    # Defaults to empty\n    cl_tolerations: []\n\n    # Persistent storage size for the CL client container (in MB)\n    # Defaults to 0, which means that the default size for the client will be used\n    # Default values can be found in /src/package_io/constants.star VOLUME_SIZE\n    cl_volume_size: 0\n\n    # Resource management for cl containers\n    # CPU is milicores\n    # RAM is in MB\n    # Defaults to 0, which results in no resource limits\n    cl_min_cpu: 0\n    cl_max_cpu: 0\n    cl_min_mem: 0\n    cl_max_mem: 0\n\n    # Force container recreation on next run (Docker only)\n    # When set to true, the container will be recreated even if the image tag hasn't changed\n    # Useful when rebuilding Docker images with the same tag or recompiling binaries with the same name\n    # Defaults to false\n    cl_force_restart: false\n\n    # Whether to act as a supernode for the network\n    # Supernodes will subscribe to all subnet topics\n    # This flag should only be used with peerdas\n    # Defaults to false\n    supernode: false\n\n    # Whether to use a separate validator client attached to the CL client.\n    # Defaults to false for clients that can run both in one process (Teku, Nimbus)\n    use_separate_vc: true\n\n  # VC (Validator Client) Specific flags\n    # The type of validator client that should be used\n    # Valid values are nimbus, lighthouse, lodestar, teku, prysm and vero\n    # ( The prysm validator only works with a prysm CL client )\n    # Defaults to matching the chosen CL client (cl_type)\n    vc_type: \"\"\n\n    # The Docker image that should be used for the separate validator client\n    # Defaults by client:\n    # - lighthouse: sigp/lighthouse:latest\n    # - lodestar: chainsafe/lodestar:latest\n    # - nimbus: statusim/nimbus-validator-client:multiarch-latest\n    # - prysm: ethpandaops/prysm-validator:develop\n    # - teku: ethpandaops/teku:master\n    # - vero: ghcr.io/serenita-org/vero:latest\n    vc_image: \"\"\n\n    # Path to a local VC binary to inject into the container (Docker only)\n    # When set, the binary will be uploaded and mounted into the container,\n    # replacing the default binary from the Docker image\n    # Useful for rapid debugging with locally compiled binaries\n    # IMPORTANT: vc_force_restart must be set to true when using this option\n    # IMPORTANT: The binary file must live inside the ethereum-package directory\n    # Build the client in its own repo, then copy ONLY the binary to ethereum-package\n    # Do not run builds inside ethereum-package or copy build dependencies - only the final binary\n    # IMPORTANT: The binary must be compiled on a Linux system with compatible libraries\n    # matching those in the client's Dockerfile to avoid dependency issues\n    # Example workflow (from lighthouse repo):\n    #   cargo build --release --bin lighthouse && cp target/release/lighthouse ../ethereum-package/binaries/\n    # Then set: vc_binary_path: \"./binaries/lighthouse\"\n    vc_binary_path: \"\"\n\n    # The log level string that this participant's validator client should log at\n    # If this is emptystring then the global `logLevel` parameter's value will be translated into a string appropriate for the client (e.g. if\n    # global `logLevel` = `info` then Teku would receive `INFO`, Prysm would receive `info`, etc.)\n    # If this is not emptystring, then this value will override the global `logLevel` setting to allow for fine-grained control\n    # over a specific participant's logging\n    vc_log_level: \"\"\n\n    # A list of optional extra env_vars the vc container should spin up with\n    vc_extra_env_vars: {}\n\n    # A list of optional extra labels that will be passed to the validator client validator container.\n    # Example; vc_extra_labels: {\"ethereum-package.partition\": \"1\"}\n    vc_extra_labels: {}\n\n    # A list of optional extra params that will be passed to the validator client container for modifying its behaviour\n    # If the client combines the Beacon & validator nodes (e.g. Teku, Nimbus), then this list will also be passed to the combined Beacon-validator node\n    vc_extra_params: []\n\n    # A list of optional extra mount points that will be passed to the validator client container\n    # Key is the mount path (becomes a directory), value MUST reference a key from extra_files\n    # The file will be available at <mount_path>/<extra_files_key>\n    # Example: vc_extra_mounts: {\"/config\": \"my_validator_config\"}  # Creates /config/my_validator_config\n    vc_extra_mounts: {}\n\n    # A list of host devices to mount into the validator client container\n    # Useful for hardware device access like TPM, HSM, etc.\n    # Example: vc_devices: [\"/dev/tpm0\"]\n    # Defaults to empty list\n    vc_devices: []\n\n    # A list of tolerations that will be passed to the validator container\n    # Only works with Kubernetes\n    # Example: el_tolerations:\n    # - key: \"key\"\n    #   operator: \"Equal\"\n    #   value: \"value\"\n    #   effect: \"NoSchedule\"\n    #   toleration_seconds: 3600\n    # Defaults to empty\n    vc_tolerations: []\n\n    # Resource management for vc containers\n    # CPU is milicores\n    # RAM is in MB\n    # Defaults to 0, which results in no resource limits\n    vc_min_cpu: 0\n    vc_max_cpu: 0\n    vc_min_mem: 0\n    vc_max_mem: 0\n\n    # Force container recreation on next run (Docker only)\n    # When set to true, the container will be recreated even if the image tag hasn't changed\n    # Useful when rebuilding Docker images with the same tag or recompiling binaries with the same name\n    # Defaults to false\n    vc_force_restart: false\n\n    # A list of indices of the beacon nodes that the validator client should connect to\n    # Defaults to null\n    vc_beacon_node_indices: null\n\n    # Count of the number of validators you want to run for a given participant\n    # Default to null, which means that the number of validators will be using the\n    # network parameter num_validator_keys_per_node\n    validator_count: null\n\n    # Whether to use a remote signer instead of the vc directly handling keys\n    # Note Lighthouse VC does not support this flag\n    # Defaults to false\n    use_remote_signer: false\n\n  # Remote signer Specific flags\n    # The type of remote signer that should be used\n    # Valid values are web3signer\n    # Defaults to web3signer\n    remote_signer_type: \"web3signer\"\n\n    # The Docker image that should be used for the remote signer\n    # Defaults to \"consensys/web3signer:latest\"\n    remote_signer_image: \"consensys/web3signer:latest\"\n\n    # A list of optional extra env_vars the remote signer container should spin up with\n    remote_signer_extra_env_vars: {}\n\n    # A list of optional extra labels that will be passed to the remote signer container.\n    # Example; remote_signer_extra_labels: {\"ethereum-package.partition\": \"1\"}\n    remote_signer_extra_labels: {}\n\n    # A list of optional extra params that will be passed to the remote signer container for modifying its behaviour\n    remote_signer_extra_params: []\n\n    # A list of tolerations that will be passed to the remote signer container\n    # Only works with Kubernetes\n    # Example: remote_signer_tolerations:\n    # - key: \"key\"\n    #   operator: \"Equal\"\n    #   value: \"value\"\n    #   effect: \"NoSchedule\"\n    #   toleration_seconds: 3600\n    # Defaults to empty\n    remote_signer_tolerations: []\n\n    # Resource management for remote signer containers\n    # CPU is milicores\n    # RAM is in MB\n    # Defaults to 0, which results in no resource limits\n    remote_signer_min_cpu: 0\n    remote_signer_max_cpu: 0\n    remote_signer_min_mem: 0\n    remote_signer_max_mem: 0\n\n  # Participant specific flags\n    # Node selector\n    # Only works with Kubernetes\n    # Example: node_selectors: { \"disktype\": \"ssd\" }\n    # Defaults to empty\n    node_selectors: {}\n\n    # A list of tolerations that will be passed to the EL/CL/validator containers\n    # This is to be used when you don't want to specify the tolerations for each container separately\n    # Only works with Kubernetes\n    # Example: tolerations:\n    # - key: \"key\"\n    #   operator: \"Equal\"\n    #   value: \"value\"\n    #   effect: \"NoSchedule\"\n    #   toleration_seconds: 3600\n    # Defaults to empty\n    tolerations: []\n\n    # Count of nodes to spin up for this participant\n    # Default to 1\n    count: 1\n\n    # Enables Ethereum Metrics Exporter for this participant. Can be set globally.\n    # Defaults null and then set to global ethereum_metrics_exporter_enabled (false)\n    ethereum_metrics_exporter_enabled: null\n\n    # Enables Xatu Sentry for this participant. Can be set globally.\n    # Defaults null and then set to global xatu_sentry_enabled (false)\n    xatu_sentry_enabled: null\n\n    # Prometheus additional configuration for a given participant prometheus target.\n    # Execution, beacon and validator client targets on prometheus will include this\n    # configuration.\n    prometheus_config:\n      # Scrape interval to be used. Default to 15 seconds\n      scrape_interval: 15s\n      # Additional labels to be added. Default to empty\n      labels: {}\n\n    # Blobber can be enabled with the `blobber_enabled` flag per client or globally\n    # Defaults to false\n    blobber_enabled: false\n\n    # Blobber extra params can be passed in to the blobber container\n    # Defaults to empty\n    blobber_extra_params: []\n\n    # Blobber image to be used for the blobber container\n    # Defaults to empty\n    blobber_image: ethpandaops/blobber:latest\n\n    # A set of parameters the node needs to reach an external block building network\n    # If `null` then the builder infrastructure will not be instantiated\n    # Example:\n    #\n    # \"relay_endpoints\": [\n    #  \"https://0xdeadbeefcafa@relay.example.com\",\n    #  \"https://0xdeadbeefcafb@relay.example.com\",\n    #  \"https://0xdeadbeefcafc@relay.example.com\",\n    #  \"https://0xdeadbeefcafd@relay.example.com\"\n    # ]\n    builder_network_params: null\n\n    # Participant flag for keymanager api\n    # This will open up http ports to your validator services!\n    # Defaults null and then set to default global keymanager_enabled (false)\n    keymanager_enabled: null\n\n    # Per-participant override for checkpoint sync. If set, this will override the global checkpoint_sync_enabled flag for this participant.\n    # Defaults to null (uses global checkpoint_sync_enabled setting)\n    checkpoint_sync_enabled: null\n\n    # If set to true, the beacon node will be created and then immediately stopped.\n    # No health checks are performed during creation (ready_conditions are disabled).\n    # The service can be started later using: kurtosis service start <enclave> <service-name>\n    # This is useful for testing or when you want to manually control when the beacon node starts.\n    # Defaults to false\n    skip_start: false\n\n# Participants matrix creates a participant for each combination of EL, CL and VC clients\n# Each EL/CL/VC item can provide the same parameters as a standard participant\nparticipants_matrix: {}\n  # el:\n  #   - el_type: geth\n  #   - el_type: besu\n  # cl:\n  #   - cl_type: prysm\n  #   - cl_type: lighthouse\n  # vc:\n  #   - vc_type: prysm\n  #   - vc_type: lighthouse\n\n\n# Default configuration parameters for the network\nnetwork_params:\n  # Network name, used to enable syncing of alternative networks\n  # Defaults to \"kurtosis\"\n  # You can sync any public network by setting this to the network name (e.g. \"mainnet\", \"sepolia\", \"holesky\", \"hoodi\")\n  # You can sync any devnet by setting this to the network name (e.g. \"dencun-devnet-12\", \"verkle-gen-devnet-2\")\n  network: \"kurtosis\"\n\n  # The network ID of the network.\n  network_id: \"3151908\"\n\n  # The address of the staking contract address on the Eth1 chain\n  deposit_contract_address: \"0x00000000219ab540356cBB839Cbe05303d7705Fa\"\n\n  # Number of seconds per slot on the Beacon chain\n  seconds_per_slot: 12\n\n  # Duration of a slot in milliseconds\n  # Defaults to 12000ms (12 seconds)\n  slot_duration_ms: 12000\n\n  # Gloas fork timing parameters (optimized for faster slots)\n  # Attestation due timing for Gloas fork\n  # Defaults to 2500 basis points (25% of slot duration)\n  attestation_due_bps_gloas: 2500\n\n  # Aggregate due timing for Gloas fork\n  # Defaults to 5000 basis points (50% of slot duration)\n  aggregate_due_bps_gloas: 5000\n\n  # Sync message due timing for Gloas fork\n  # Defaults to 2500 basis points (25% of slot duration)\n  sync_message_due_bps_gloas: 2500\n\n  # Contribution due timing for Gloas fork\n  # Defaults to 5000 basis points (50% of slot duration)\n  contribution_due_bps_gloas: 5000\n\n  # Payload attestation due timing for Gloas fork\n  # Defaults to 7500 basis points (75% of slot duration)\n  payload_attestation_due_bps: 7500\n\n  # Heze timing parameters\n  # View freeze cutoff timing\n  # Defaults to 7500 basis points (75% of slot duration)\n  view_freeze_cutoff_bps: 7500\n\n  # Inclusion list submission due timing\n  # Defaults to 6667 basis points (~67% of slot duration)\n  inclusion_list_submission_due_bps: 6667\n\n  # Proposer inclusion list cutoff timing\n  # Defaults to 9167 basis points (~92% of slot duration)\n  proposer_inclusion_list_cutoff_bps: 9167\n\n  # Maximum request blocks for Deneb fork\n  # Defaults to 128\n  max_request_blocks_deneb: 128\n\n  # The number of validator keys that each CL validator node should get\n  num_validator_keys_per_node: 128\n\n  # This mnemonic will a) be used to create keystores for all the types of validators that we have and b) be used to generate a CL genesis.ssz that has the children\n  # validator keys already preregistered as validators\n  preregistered_validator_keys_mnemonic: \"giant issue aisle success illegal bike spike question tent bar rely arctic volcano long crawl hungry vocal artwork sniff fantasy very lucky have athlete\"\n\n  # The number of pre-registered validators for genesis. If 0 or not specified then the value will be calculated from the participants\n  preregistered_validator_count: 0\n\n  # Additional mnemonics to generate validators from\n  # These validators will be included in genesis but won't have keystores generated\n  # Useful for pre-registering validators with custom withdrawal credentials or states\n  # Default: []\n  additional_mnemonics:\n    - # The mnemonic to derive validator keys from\n      mnemonic: \"estate dog switch misery manage room million bleak wrap distance always insane usage busy chicken limit already duck feature unhappy dial emotion expire please\"\n      # The validator index to start deriving keys from\n      # Defaults to 0\n      start: 0\n      # The number of validators to generate from this mnemonic\n      count: 10\n      # The withdrawal address for these validators\n      # Only used when wd_prefix is 0x01 or 0x02 (execution layer withdrawal credentials)\n      wd_address: 0x000000000000000000000000000000000000dEaD\n      # The withdrawal credentials prefix\n      # 0x00: BLS withdrawal credentials (default)\n      # 0x01: Execution layer withdrawal credentials (uses wd_address)\n      # 0x02: Compounding withdrawal credentials (uses wd_address)\n      wd_prefix: 0x01\n      # The validator balance in gwei\n      # Defaults to 32000000000 (32 ETH)\n      balance: 32000000000\n      # The initial validator status\n      # 0: active (default)\n      # 1: slashed\n      # 2: exited\n      status: 1\n\n  # How long you want the network to wait before starting up\n  genesis_delay: 20\n\n  # Unix timestamp for genesis. If specified (non-zero), this overrides genesis_delay.\n  # When set to 0 (default), the genesis time is automatically calculated based on current time and genesis_delay.\n  # Use this field to set a specific genesis time for the network.\n  # Defaults to 0\n  genesis_time: 0\n\n  # The gas limit of the network set at genesis\n  # Defaults to 60000000\n\n  genesis_gaslimit: 60000000\n\n  # Max churn rate for the network introduced by\n  # EIP-7514 https://eips.ethereum.org/EIPS/eip-7514\n  # Defaults to 8\n  max_per_epoch_activation_churn_limit: 8\n\n  # Churn limit quotient for the network\n  # Defaults to 65536\n  churn_limit_quotient: 65536\n\n  # Byzantine threshold (in percent) used by the confirmation rule\n  # Defaults to 25\n  confirmation_byzantine_threshold: 25\n\n  # Ejection balance\n  # Defaults to 16ETH\n  # 16000000000 gwei\n  ejection_balance: 16000000000\n\n  # ETH1 follow distance\n  # Defaults to 2048\n  eth1_follow_distance: 2048\n\n  # The number of epochs to wait validators to be able to withdraw\n  # Defaults to 256 epochs ~27 hours\n  min_validator_withdrawability_delay: 256\n\n  # The minimum number of epochs for builder withdrawability delay\n  # Defaults to 4096, 8 for minimal preset\n  min_builder_withdrawability_delay: 4096\n\n  # The period of the shard committee\n  # Defaults to 256 epoch ~27 hours\n  shard_committee_period: 256\n\n  # The epoch at which the deneb/electra/fulu forks are set to occur. Note: PeerDAS and Electra clients are currently\n  # working on forks. So set either one of the below forks.\n  # Altair fork epoch\n  # Defaults to 0\n  altair_fork_epoch: 0\n\n  # Bellatrix fork epoch\n  # Defaults to 0\n  bellatrix_fork_epoch: 0\n\n  # Capella fork epoch\n  # Defaults to 0\n  capella_fork_epoch: 0\n\n  # Deneb fork epoch\n  # Defaults to 0\n  deneb_fork_epoch: 0\n\n  # Electra fork epoch\n  # Defaults to 0\n  electra_fork_epoch: 0\n\n  # Fulu fork epoch\n  # Defaults to 0\n  fulu_fork_epoch: 0\n\n  # Gloas fork epoch\n  # Defaults to 18446744073709551615\n  gloas_fork_epoch: 18446744073709551615\n\n  # Network sync base url for syncing public networks from a custom snapshot (mostly useful for shadowforks)\n  # Defaults to \"https://snapshots.ethpandaops.io/\"\n  # If you have a local snapshot, you can set this to the local url:\n  # network_snapshot_url_base = \"http://10.10.101.21:10000/snapshots/\"\n  # The snapshots are taken with https://github.com/ethpandaops/snapshotter\n  network_sync_base_url: https://snapshots.ethpandaops.io/\n\n  # Force network sync with a custom snapshot\n  # This enables quicker EL sync (use with caution)\n  # Defaults to false\n  force_snapshot_sync: false\n\n  # The block height of the shadowfork\n  # This is used to sync the network from a snapshot at a specific block height\n  # Defaults to \"latest\"\n  # Example: shadowfork_block_height: 340000 for hoodi\n  shadowfork_block_height: \"latest\"\n\n  # Number of DataColumn random samples a node queries per slot\n  samples_per_slot: 8\n\n  # Minimum number of subnets an honest node custodies and serves samples from\n  # Defaults to 4\n  custody_requirement: 4\n\n  # Maximum number of blobs per block for Electra fork (default 9)\n  max_blobs_per_block_electra: 9\n  # Target number of blobs per block for Electra fork (default 6)\n  target_blobs_per_block_electra: 6\n  # Base fee update fraction for Electra fork (default 5007716)\n  base_fee_update_fraction_electra: 5007716\n\n  # Heze fork epoch\n  # Defaults to 18446744073709551615\n  heze_fork_epoch: 18446744073709551615\n\n\n  # Preset for the network\n  # Default: \"mainnet\"\n  # Options: \"mainnet\", \"minimal\"\n  # \"minimal\" preset will spin up a network with minimal preset. This is useful for rapid testing and development.\n  # 192 seconds to get to finalized epoch vs 1536 seconds with mainnet defaults\n  # Please note that minimal preset requires alternative client images.\n  # For an example of minimal preset, please refer to [minimal.yaml](.github/tests/minimal.yaml)\n  preset: \"mainnet\"\n\n  # Preloaded contracts for the chain\n  additional_preloaded_contracts: {}\n  # Example:\n  # additional_preloaded_contracts: '{\n  #  \"0x123463a4B065722E99115D6c222f267d9cABb524\":\n  #   {\n  #     balance: \"1ETH\",\n  #     code: \"0x1234\",\n  #     storage: {},\n  #     nonce: 0,\n  #     secretKey: \"0x\",\n  #   }\n  # }'\n\n  # Repository override for devnet networks\n  # Default: ethpandaops\n  devnet_repo: ethpandaops\n\n  # A number of prefunded accounts to be created\n  # Defaults to no prefunded accounts\n  # Example:\n  # prefunded_accounts: '{\"0x25941dC771bB64514Fc8abBce970307Fb9d477e9\": {\"balance\": \"10ETH\"}}'\n  # 10ETH to the account 0x25941dC771bB64514Fc8abBce970307Fb9d477e9\n  # To prefund multiple accounts, separate them with a comma\n  #\n  # prefunded_accounts: '{\"0x25941dC771bB64514Fc8abBce970307Fb9d477e9\": {\"balance\": \"10ETH\"}, \"0x4107be99052d895e3ee461C685b042Aa975ab5c0\": {\"balance\": \"1ETH\"}}'\n  prefunded_accounts: {}\n\n  # Maximum size of gossip messages in bytes\n  # 10 * 2**20 (= 10485760, 10 MiB)\n  # Defaults to 10485760 (10MB)\n  max_payload_size: 10485760\n\n  # Enable Perfect PeerDAS\n  # This flag is meant to be used with 16 nodes where each node gets 8 unique columns\n  # Ensure that you set the number of validator keys per node to less than or equal to 8 so that validator custody is not affected\n  # Defaults to false\n  perfect_peerdas_enabled: false\n\n  # Gas limit for the network\n  # Default to 0\n  # If set to 0, the gas limit will be set to the default gas limit for the clients\n  # Set this value to gas limit in millionths of a gwei\n  # Example: gas_limit: 60000000\n  # This will override the gas limit for each EL client\n  # Do not confuse with genesis_gaslimit which sets the gas limit at the genesis file level\n  gas_limit: 0\n\n\n  # BPO\n  # BPO1-5 epoch (default 0/18446744073709551615)\n  bpo_1_epoch: 0\n  # Maximum number of blobs per block for BPO1-5\n  # If only max is set, target is auto-calculated as 2/3 of max\n  # If only target is set, max is auto-calculated as 3/2 of target\n  bpo_1_max_blobs: 15\n  # Target number of blobs per block for BPO1-5\n  bpo_1_target_blobs: 10\n  # Base fee update fraction for BPO1-5 (default 0)\n  bpo_1_base_fee_update_fraction: 8346193\n\n  bpo_2_epoch: 18446744073709551615\n  bpo_2_max_blobs: 21\n  bpo_2_target_blobs: 14\n  bpo_2_base_fee_update_fraction: 11684671\n\n  bpo_3_epoch: 18446744073709551615\n  bpo_3_max_blobs: 0\n  bpo_3_target_blobs: 0\n  bpo_3_base_fee_update_fraction: 0\n\n  bpo_4_epoch: 18446744073709551615\n  bpo_4_max_blobs: 0\n  bpo_4_target_blobs: 0\n  bpo_4_base_fee_update_fraction: 0\n\n  bpo_5_epoch: 18446744073709551615\n  bpo_5_max_blobs: 0\n  bpo_5_target_blobs: 0\n  bpo_5_base_fee_update_fraction: 0\n\n  # Withdrawal type - available options (0x00, 0x01, 0x02)\n  # Default to \"0x00\"\n  withdrawal_type: \"0x00\"\n\n  # Withdrawal address\n  # Default to \"0x8943545177806ED17B9F23F0a21ee5948eCaa776\" - 0 address of mnemonic\n  withdrawal_address: \"0x8943545177806ED17B9F23F0a21ee5948eCaa776\"\n\n  # Validator balance (available ranges: 32-2048)\n  # Default to 32 ETH\n  validator_balance: 32\n\n  # Minimum number of epochs for data column sidecars requests\n  # Default to 4096\n  min_epochs_for_data_column_sidecars_requests: 4096\n\n  # Number of ePBS builders to register at genesis with 0x03 withdrawal credentials\n  # Requires gloas_fork_epoch to be 0 (GLOAS at genesis)\n  # Default to 0\n  builder_count: 0\n\n  # Balance of each builder in ETH\n  # Default to 100 ETH\n  builder_balance: 100\n\n\n# Global parameters for the network\n\n# By default we do not launch anything\n# - Default: []\nadditional_services:\n  - apache\n  - assertoor\n  - blobscan\n  - blockscout\n  - blutgang\n  - bootnodoor\n  - broadcaster\n  - checkpointz\n  - custom_flood\n  - dora\n  - dugtrio\n  - erpc\n  - zkboost\n  - forkmon\n  - forky\n  - full_beaconchain_explorer\n  - grafana\n  - mempool_bridge\n  - prometheus\n  - rakoon\n  - slashoor\n  - spamoor\n  - tempo\n  - tracoor\n  - tx_fuzz\n\n# Configuration place for blockscout explorer - https://github.com/blockscout/blockscout\nblockscout_params:\n  # blockscout docker image to use\n  # Defaults to ghcr.io/blockscout/blockscout:latest\n  image: \"ghcr.io/blockscout/blockscout:latest\"\n  # blockscout smart contract verifier image to use\n  # Defaults to ghcr.io/blockscout/smart-contract-verifier:latest\n  verif_image: \"ghcr.io/blockscout/smart-contract-verifier:latest\"\n  # Frontend image\n  # Defaults to ghcr.io/blockscout/frontend:latest\n  frontend_image: \"ghcr.io/blockscout/frontend:latest\"\n  # Environment variables\n  env: {}\n\n# Configuration place for dora the explorer - https://github.com/ethpandaops/dora\ndora_params:\n  # Dora docker image to use\n  # Defaults to the latest image\n  image: \"ethpandaops/dora:latest\"\n  # A list of optional extra env_vars the dora container should spin up with\n  env: {}\n\n# Configuration place for checkpointz - https://github.com/ethpandaops/checkpointz\ncheckpointz_params:\n  # Checkpointz docker image to use\n  # Defaults to the latest image\n  image: \"ethpandaops/checkpointz:latest\"\n\n# Define custom file contents to be mounted into containers\n# These files are referenced by name in el_extra_mounts, cl_extra_mounts, and vc_extra_mounts\nextra_files: {}\n  # Example:\n  # my_config_file.yaml: |\n  #   setting1: value1\n  #   setting2: value2\n  # my_script.sh: |\n  #   #!/bin/bash\n  #   echo \"Custom script\"\n\n# Configuration place for transaction spammer - https://github.com/MariusVanDerWijden/tx-fuzz\ntx_fuzz_params:\n  # TX Spammer docker image to use\n  # Defaults to the latest master image\n  image: \"ethpandaops/tx-fuzz:master\"\n  # A list of optional extra params that will be passed to the TX Spammer container for modifying its behaviour\n  tx_fuzz_extra_args: []\n\n# Configuration place for rakoon transaction fuzzer - https://github.com/protocol-security/fuzztools\nrakoon_params:\n  # Rakoon docker image to use\n  image: \"ethpandaops/fuzztools:v1\"\n  # Transaction type to fuzz (eip7702, eip1559, eip2930, legacy)\n  # Note: blob transactions are not supported by design\n  tx_type: \"eip7702\"\n  # Number of concurrent workers\n  workers: 50\n  # Number of transactions per batch\n  batch_size: 100\n  # Seed for reproducible fuzzing (empty string = random)\n  seed: \"\"\n  # Enable fuzzing mode\n  fuzzing: true\n  # Poll interval for gas price queries (empty string = use default)\n  poll_interval: \"\"\n  # A list of optional extra params that will be passed to rakoon\n  extra_args: []\n\n# Configuration place for prometheus\nprometheus_params:\n  storage_tsdb_retention_time: \"1d\"\n  storage_tsdb_retention_size: \"512MB\"\n  # Resource management for prometheus container\n  # CPU is milicores\n  # RAM is in MB\n  min_cpu: 10\n  max_cpu: 1000\n  min_mem: 128\n  max_mem: 2048\n  # Prometheus docker image to use\n  # Defaults to the latest image\n  image: \"prom/prometheus:latest\"\n\n# Configuration place for grafana\ngrafana_params:\n  # A list of locators for grafana dashboards to be loaded be the grafana service\n  additional_dashboards: []\n  # Resource management for grafana container\n  # CPU is milicores\n  # RAM is in MB\n  min_cpu: 10\n  max_cpu: 1000\n  min_mem: 128\n  max_mem: 2048\n  # Grafana docker image to use\n  # Defaults to the latest image\n  image: \"grafana/grafana:latest\"\n\n# Bootnodoor params\nbootnodoor_params:\n  # Bootnodoor docker image to use\n  # Defaults to the latest image\n  image: \"ethpandaops/bootnodoor:latest\"\n  min_cpu: 100\n  max_cpu: 1000\n  min_mem: 128\n  max_mem: 512\n  # A list of optional extra args the bootnodoor container should spin up with\n  extra_args: []\n\n# Configuration place for zkboost - https://github.com/eth-act/zkboost\n# The dashboard is automatically enabled when grafana is in additional_services.\nzkboost_params:\n  # zkboost docker image to use\n  # Defaults to the latest image\n  image: \"ghcr.io/eth-act/zkboost/zkboost:latest\"\n  # List of zkboost instances, each running a separate zkboost container.\n  # Each instance watches one EL participant for new blocks.\n  #   name (required): Kurtosis service name, must be unique across instances\n  #   el_participant_index (required): index of the EL participant to connect to (must not be dummy)\n  # Defaults to a single instance named \"zkboost\" connected to the first EL participant.\n  instances:\n    - name: zkboost\n      el_participant_index: 0\n  # List of zkVM backend configurations.\n  # If empty or not set, the default shown below (a mock reth-zisk zkvm) is\n  # auto-configured. Each entry must have a unique proof_type.\n  #\n  # Common fields for all entries:\n  #   kind (required): the zkVM backend type\n  #     \"mock\"     - in-process mock backend for testing, no real proving\n  #     \"ere\"      - launches a GPU ere-server and connects to it\n  #     \"external\" - connects to an already-deployed prover via HTTP\n  #   proof_type (required): identifies the EL client + zkVM combination\n  #     \"ethrex-risc0\", \"ethrex-sp1\", \"ethrex-zisk\", \"reth-openvm\", \"reth-risc0\", \"reth-sp1\", \"reth-zisk\"\n  #   proof_timeout_secs: timeout for proof generation in seconds (default: 12, must be > 0)\n  #\n  # Mock-specific fields (only for kind: mock):\n  #   mock_proving_time: controls simulated proving duration (default: { kind: constant, ms: 6000 })\n  #     { kind: constant, ms: <ms> }                   - fixed duration\n  #     { kind: random, min_ms: <min>, max_ms: <max> } - uniformly random, min_ms must be <= max_ms\n  #     { kind: linear, ms_per_mgas: <ms> }            - proportional to block per million gas usage\n  #   mock_proof_size: simulated proof size in bytes, must be >= 32 (default: 131072 / 128 KiB)\n  #   mock_failure: whether to simulate proving failures (default: false)\n  #\n  # ere-specific fields (only for kind: ere):\n  #   image: docker image for the ere-server (default: resolved from zkboost's\n  #     pinned ere version in its Cargo.toml)\n  #   elf_url: HTTPS URL of the guest ELF to prove. ere-server fetches it\n  #     itself at startup. (default: resolved from zkboost's pinned ere-guests\n  #     version).\n  #   gpu: GPU configuration (default: no GPU)\n  #     count: number of GPUs to allocate (default 0)\n  #         NOTE: if more than one ere service uses gpu.count, Docker will assign\n  #         the same GPU(s) to all of them. Use gpu.device_ids instead when running\n  #         multiple GPU-enabled ere services.\n  #     device_ids: list of specific GPU device IDs to pin to this service (default [])\n  #         Use this to assign distinct GPUs across multiple ere services\n  #         (e.g. [\"0\"] for the first service and [\"1\"] for the second).\n  #     shm_size: shared memory size in MB (default 0)\n  #     ulimits: ulimit overrides as a map (default {})\n  #     driver: GPU driver to use (default \"nvidia\")\n  #         Accepts a string shorthand or a per-backend dict:\n  #         - string: used directly as the Docker DeviceRequest driver; Kubernetes resource\n  #           name is derived as \"<driver>.com/gpu\"\n  #           e.g. \"nvidia\" → Docker driver \"nvidia\", K8s resource \"nvidia.com/gpu\"\n  #                \"amd\"    → Docker driver \"amd\",    K8s resource \"amd.com/gpu\"\n  #         - dict: explicit per-backend override\n  #           e.g. {docker: \"amd\", kubernetes: \"amd.com/gpu\"}\n  #   env: extra environment variables as a map (default {})\n  #\n  # external-specific fields (only for kind: external):\n  #   endpoint (required): full HTTP URL of the already-deployed prover\n  #\n  # example:\n  # - kind: mock\n  #   proof_type: ethrex-zisk\n  #   mock_proving_time: { kind: constant, ms: 5000 }\n  #   mock_proof_size: 1024\n  # - kind: mock\n  #   proof_type: reth-zisk\n  #   mock_proving_time: { kind: random, min_ms: 2000, max_ms: 8000 }\n  # - kind: mock\n  #   proof_type: reth-sp1\n  #   mock_proving_time: { kind: linear, ms_per_mgas: 150 }\n  # - kind: ere\n  #   proof_type: reth-zisk\n  #   image: \"ghcr.io/eth-act/ere/ere-server-zisk:latest\"\n  #   elf_url: \"https://github.com/eth-act/ere-guests/releases/download/v0.8.0/stateless-validator-reth-zisk.elf\"\n  #   gpu:\n  #     count: 1\n  #     driver: \"nvidia\"\n  # - kind: external\n  #   proof_type: reth-zisk\n  #   endpoint: \"http://my-prover:3000\"\n  zkvms:\n    - kind: mock\n      proof_type: reth-zisk\n      mock_proving_time: { kind: random, min_ms: 2000, max_ms: 8000 }\n      mock_proof_size: 1024\n  # RUST_LOG defaults to \"info,zkboost=debug\" if not set; other vars pass through unchanged.\n  env:\n    RUST_LOG: \"info,zkboost=debug\"\n\n# Configuration place for tempo tracing backend\ntempo_params:\n  # Resource management for tempo container\n  # CPU is milicores\n  # RAM is in MB\n  min_cpu: 10\n  max_cpu: 1000\n  min_mem: 128\n  max_mem: 2048\n  # Tempo docker image to use\n  # Defaults to the latest image\n  image: \"grafana/tempo:latest\"\n\n# Configuration place for the assertoor testing tool - https://github.com/ethpandaops/assertoor\nassertoor_params:\n  # Assertoor docker image to use\n  # Defaults to the latest image\n  image: \"ethpandaops/assertoor:latest\"\n\n  # Check chain stability\n  # This check monitors the chain and succeeds if:\n  # - all clients are synced\n  # - chain is finalizing for min. 2 epochs\n  # - >= 98% correct target votes\n  # - >= 80% correct head votes\n  # - no reorgs with distance > 2 blocks\n  # - no more than 2 reorgs per epoch\n  run_stability_check: false\n\n  # Check block proposals\n  # This check monitors the chain and succeeds if:\n  # - all client pairs have proposed a block\n  run_block_proposal_check: false\n\n  # Run normal transaction test\n  # This test generates random EOA transactions and checks inclusion with/from all client pairs\n  # This test checks for:\n  # - block proposals with transactions from all client pairs\n  # - transaction inclusion when submitting via each client pair\n  # test is done twice, first with legacy (type 0) transactions, then with dynfee (type 2) transactions\n  run_transaction_test: false\n\n  # Run blob transaction test\n  # This test generates blob transactions and checks inclusion with/from all client pairs\n  # This test checks for:\n  # - block proposals with blobs from all client pairs\n  # - blob inclusion when submitting via each client pair\n  run_blob_transaction_test: false\n\n  # Run all-opcodes transaction test\n  # This test generates a transaction that triggers all EVM OPCODES once\n  # This test checks for:\n  # - all-opcodes transaction success\n  run_opcodes_transaction_test: false\n\n  # Run validator lifecycle test (~48h to complete)\n  # This test requires exactly 500 active validator keys.\n  # The test will cause a temporary chain unfinality when running.\n  # This test checks:\n  # - Deposit inclusion with/from all client pairs\n  # - BLS Change inclusion with/from all client pairs\n  # - Voluntary Exit inclusion with/from all client pairs\n  # - Attester Slashing inclusion with/from all client pairs\n  # - Proposer Slashing inclusion with/from all client pairs\n  # all checks are done during finality & unfinality\n  run_lifecycle_test: false\n\n  # Run additional tests from external test definitions\n  # Entries may be simple strings (link to the test file) or dictionaries with more flexibility\n  # eg:\n  #   - https://raw.githubusercontent.com/ethpandaops/assertoor/master/example/tests/block-proposal-check.yaml\n  #   - file: \"https://raw.githubusercontent.com/ethpandaops/assertoor/master/example/tests/block-proposal-check.yaml\"\n  #     config:\n  #       someCustomTestConfig: \"some value\"\n  tests: []\n\n\n# If set, the package will block until a finalized epoch has occurred.\nwait_for_finalization: false\n\n# The global log level that all clients should log at\n# Valid values are \"error\", \"warn\", \"info\", \"debug\", and \"trace\"\n# This value will be overridden by participant-specific values\nglobal_log_level: \"info\"\n\n# Configuration for snooper - dumps all JSON-RPC requests and responses\n# including BeaconAPI, EngineAPI and ExecutionAPI\nsnooper_params:\n  # Enable snooper globally for all participants\n  enabled: false\n  # The image to use for snooper\n  # Defaults to ethpandaops/rpc-snooper:latest\n  image: \"\"\n  # Extra arguments to pass to the snooper binary\n  extra_args: []\n  # Extra environment variables to set on the snooper container\n  extra_env_vars: {}\n\n# Enables Ethereum Metrics Exporter for all participants\n# Defaults to false\nethereum_metrics_exporter_enabled: false\n\n# Parallelizes keystore generation so that each node has keystores being generated in their own container\n# This will result in a large number of containers being spun up than normal. We advise users to only enable this on a sufficiently large machine or in the cloud as it can be resource consuming on a single machine.\nparallel_keystore_generation: false\n\n# Disable peer scoring to prevent nodes impacted by faults from being permanently ejected from the network\n# Default to false\ndisable_peer_scoring: false\n\n# Whether the environment should be persistent; this is WIP and is slowly being rolled out across services\n# Note this requires Kurtosis greater than 0.85.49 to work\n# Note Erigon, Besu, Teku persistence is not currently supported with docker.\n# Defaults to false\npersistent: false\n\n# Docker cache url enables all docker images to be pulled through a custom docker registry\n# Disabled by default\n# Defaults to empty cache url\n# Images pulled from dockerhub will be prefixed with \"/dh/\" by default (docker.io)\n# Images pulled from github registry will be prefixed with \"/gh/\" by default (ghcr.io)\n# Images pulled from google registry will be prefixed with \"/gcr/\" by default (gcr.io)\n# If you want to use a local image in combination with the cache, do not put \"/\" in your local image name\ndocker_cache_params:\n  enabled: false\n  url: \"\"\n  dockerhub_prefix: \"/dh/\"\n  github_prefix: \"/gh/\"\n  google_prefix: \"/gcr/\"\n\n\n# Configuration place for mempool bridge (https://github.com/ethpandaops/mempool-bridge)\nmempool_bridge_params:\n  # The image to use for mempool bridge\n  image: ethpandaops/mempool-bridge:latest\n  # The mode for mempool bridge operation\n  # Valid values are \"p2p\" or \"rpc\"\n  # Default: \"p2p\"\n  mode: \"p2p\"\n  # The source enodes to use for mempool bridge\n  # Example:\n  # P2P mode:\n  # source_enodes:\n  #   - enode://1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef@127.0.0.1:30303\n  #   - enode://1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef@127.0.0.1:30304\n  # RPC mode:\n  # source_enodes:\n  #   - http://127.0.0.1:8545\n  #   - http://127.0.0.1:8546\n  # Default: []\n  source_enodes: []\n\n  # The log level for mempool bridge\n  # Valid values are \"error\", \"warn\", \"info\", \"debug\", and \"trace\"\n  # If empty, will use the global_log_level value\n  # Default: \"\" (uses global_log_level)\n  log_level: \"\"\n\n  # The number of concurrent goroutines to use when sending transactions to targets\n  # Default: 10\n  send_concurrency: 10\n\n  # The interval in seconds for polling the source for new transactions\n  # Default: \"10s\"\n  polling_interval: \"10s\"\n\n  # The retry interval duration for retrying failed operations\n  # Default: \"30s\"\n  retry_interval: \"30s\"\n\n# Supports seven values\n# Default: \"null\" - no mev boost, mev builder, mev flood or relays are spun up\n# \"mock\" - mock-builder & mev-boost are spun up\n# \"flashbots\" - mev-boost, relays, flooder and builder are all spun up, powered by [flashbots](https://github.com/flashbots)\n# \"mev-rs\" - mev-boost, relays and builder are all spun up, powered by [mev-rs](https://github.com/ralexstokes/mev-rs/)\n# \"commit-boost\" - mev-boost, relays and builder are all spun up, powered by [commit-boost](https://github.com/Commit-Boost/commit-boost-client)\n# \"helix\" - helix relay, flashbots builder and mev-boost are spun up, powered by [helix](https://github.com/gattaca-com/helix)\n#            Note: Helix uses TimescaleDB (PostgreSQL with time-series extension) for data storage\n# \"buildoor\" - a self-contained builder+relay service & mev-boost are spun up, powered by [buildoor](https://github.com/ethpandaops/buildoor)\n#              Supports both legacy builder API and ePBS bidding. No separate relay infrastructure or builder participant needed.\n# We have seen instances of multibuilder instances failing to start mev-relay-api with non zero epochs\nmev_type: null\n\n# Parameters if MEV is used\nmev_params:\n  # The image to use for MEV boost relay\n  mev_relay_image: ethpandaops/mev-boost-relay:main\n  # The image to use for the builder\n  mev_builder_image: ethpandaops/reth-rbuilder:develop\n  # The image to use for the CL builder\n  mev_builder_cl_image: sigp/lighthouse:latest\n  # Extra parameters to send to the CL builder\n  mev_builder_cl_extra_params: []\n  # The subsidy to use for the builder (in ETH)\n  mev_builder_subsidy: 0\n  # The image to use for mev-boost\n  mev_boost_image: ethpandaops/mev-boost:develop\n  # Parameters for MEV Boost. This overrides all arguments of the mev-boost container\n  mev_boost_args: []\n  # Extra parameters to send to the API\n  mev_relay_api_extra_args: []\n  # Extra environment variables to send to the API\n  mev_relay_api_extra_env_vars: {}\n  # Extra parameters to send to the housekeeper\n  mev_relay_housekeeper_extra_args: []\n  # Extra environment variables to send to the housekeeper\n  mev_relay_housekeeper_extra_env_vars: {}\n  # Extra parameters to send to the website\n  mev_relay_website_extra_args: []\n  # Extra environment variables to send to the website\n  mev_relay_website_extra_env_vars: {}\n  # Extra parameters to send to the builder\n  mev_builder_extra_args: []\n  # Prometheus additional configuration for the mev builder participant.\n  # Execution, beacon and validator client targets on prometheus will include this configuration.\n  mev_builder_prometheus_config:\n    # Scrape interval to be used. Default to 15 seconds\n    scrape_interval: 15s\n    # Additional labels to be added. Default to empty\n    labels: {}\n  # Image to use for mock mev\n  mock_mev_image: ethpandaops/rustic-builder:main\n  # Whether to launch Adminer for the MEV relay PostgreSQL database\n  launch_adminer: false\n  # When true, launches both flashbots and helix relays\n  # The reth-rbuilder will submit bids to both relays and mev-boost will query both relays for bids\n  # Works with mev_type: flashbots\n  run_multiple_relays: false\n  # The image to use for helix relay (used when run_multiple_relays is true or mev_type is helix)\n  helix_relay_image: ghcr.io/gattaca-com/helix-relay:main\n  # Inline Commit-Boost config template. When set, replaces the default auto-generated\n  # config. Template variables {{ .Timestamp }}, {{ .Network }}, {{ .Port }}, {{ .Relays }}\n  # are rendered at enclave creation. Only used when mev_type is \"commit-boost\".\n  # Example:\n  #   commit_boost_config: |\n  #     chain = { genesis_time_secs = {{ .Timestamp }}, path = \"{{ .Network }}\" }\n  #     [pbs]\n  #     host = \"0.0.0.0\"\n  #     port = {{ .Port }}\n  #     skip_sigverify = true\n  #     {{ range $index, $relay := .Relays }}\n  #     [[relays]]\n  #     id = \"mev_relay_{{$index}}\"\n  #     url = \"{{ $relay }}\"\n  #     {{- end }}\n  #     [logs.stdout]\n  #     level = \"debug\"\n  commit_boost_config: \"\"\n\n# Parameters for the buildoor builder+relay service (used when mev_type is \"buildoor\")\nbuildoor_params:\n  # The image to use for buildoor\n  image: ethpandaops/buildoor:main\n  # Enable the legacy builder API (traditional block building via relay)\n  builder_api: true\n  # Enable ePBS bidding and revealing\n  epbs_builder: true\n  # Extra parameters to pass to the buildoor service\n  extra_args: []\n\n# Enables Xatu Sentry for all participants\n# Defaults to false\nxatu_sentry_enabled: false\n\n# Xatu Sentry params\nxatu_sentry_params:\n  # The image to use for Xatu Sentry\n  xatu_sentry_image: ethpandaops/xatu:latest\n  # GRPC Endpoint of Xatu Server to send events to\n  xatu_server_addr: localhost:8080\n  # Enables TLS to Xatu Server\n  xatu_server_tls: false\n  # Headers to add on to Xatu Server requests\n  xatu_server_headers: {}\n  # Beacon event stream topics to subscribe to\n  beacon_subscriptions:\n    - attestation\n    - single_attestation\n    - block\n    - block_gossip\n    - chain_reorg\n    - finalized_checkpoint\n    - head\n    - voluntary_exit\n    - contribution_and_proof\n    - blob_sidecar\n    - data_column_sidecar\n# Apache params\n# Apache public port to port forward to local machine\n# Default to port None, only set if apache additional service is activated\napache_port: null\n\n# Global tolerations that will be passed to all containers (unless overridden by a more specific toleration)\n# Only works with Kubernetes\n# Example: tolerations:\n# - key: \"key\"\n#   operator: \"Equal\"\n#   value: \"value\"\n#   effect: \"NoSchedule\"\n#   toleration_seconds: 3600\n# Defaults to empty\nglobal_tolerations: []\n\n# Global node selector that will be passed to all containers (unless overridden by a more specific node selector)\n# Only works with Kubernetes\n# Example: global_node_selectors: { \"disktype\": \"ssd\" }\n# Defaults to empty\nglobal_node_selectors: {}\n\n# Global parameters for keymanager api\n# This will open up http ports to your validator services!\n# Defaults to false\nkeymanager_enabled: false\n\n# Global flag to enable checkpoint sync across the network\n# Default to false\ncheckpoint_sync_enabled: false\n\n# Global flag to set checkpoint sync url\ncheckpoint_sync_url: \"\"\n\n# Configuration place for spamoor as transaction spammer\nspamoor_params:\n  # The image to use for spamoor\n  image: ethpandaops/spamoor:latest\n  # Resource management for spamoor\n  # CPU is milicores\n  # RAM is in MB\n  min_cpu: 10\n  max_cpu: 1000\n  min_mem: 20\n  max_mem: 300\n  # A list of spammers to launch on startup\n  # example:\n  # - scenario: eoatx  # The spamoor scenario to use (see https://github.com/ethpandaops/spamoor)\n  #   name: \"Optional name for this example spammer\"\n  #   config:\n  #     throughput: 10  # 10 tx per block\n  # - scenario: erctx\n  #   config:\n  #     throughput: 10  # 10 tx per block\n  spammers: []\n  # A list of optional params that will be passed to the spamoor command for modifying its behaviour\n  extra_args: []\n\n# Configuration place for slashoor - https://github.com/ethpandaops/slashoor\n# Slashoor is a lazy slasher that monitors validators for slashing violations\n# and automatically submits attester slashings to the beacon chain\nslashoor_params:\n  # The image to use for slashoor\n  image: ethpandaops/slashoor:latest\n  # Resource management for slashoor\n  # CPU is milicores\n  # RAM is in MB\n  min_cpu: 100\n  max_cpu: 1000\n  min_mem: 128\n  max_mem: 512\n  # Log level for slashoor (error, warn, info, debug, trace)\n  log_level: info\n  # Timeout for beacon API requests\n  beacon_timeout: 30s\n  # Maximum epochs to keep in memory for slashing detection\n  max_epochs_to_keep: 54000\n  # Number of slots to backfill on startup\n  backfill_slots: 64\n  # Enable the detector service\n  detector_enabled: true\n  # Enable the proposer slashing service\n  proposer_enabled: true\n  # Enable the submitter service\n  submitter_enabled: true\n  # Run in dry-run mode (detect but don't submit slashings)\n  submitter_dry_run: false\n  # Enable dora as a slashing database source\n  dora_enabled: true\n  # Custom dora URL (auto-detected if dora is in additional_services or on public networks)\n  dora_url: \"\"\n  # Scan dora on startup for existing slashings\n  dora_scan_on_startup: true\n  # A list of optional extra args\n  extra_args: []\n\n# Ethereum genesis generator params\nethereum_genesis_generator_params:\n  # The image to use for ethereum genesis generator\n  image: ethpandaops/ethereum-genesis-generator:6.0.5\n  # Pass custom environment variables to the genesis generator (e.g. MY_VAR: my_value)\n  extra_env: {}\n\n# Configuration for public ports and NAT exit IP addresses\nport_publisher:\n  # Global NAT exit IP address for all services (optional)\n  # If set, this will be used for all service groups (overrides individual nat_exit_ip settings)\n  # Set to \"auto\" to automatically detect public IP from ident.me\n  # Defaults to KURTOSIS_IP_ADDR_PLACEHOLDER (uses per-service settings)\n  nat_exit_ip: KURTOSIS_IP_ADDR_PLACEHOLDER\n\n  # Execution Layer public port exposed to your local machine\n  # Disabled by default\n  # Public port start defaults to 32000\n  # You can't run multiple enclaves on the same port settings\n  el:\n    enabled: false\n    public_port_start: 32000\n    # nat_exit_ip: IP address to expose for EL P2P networking (optional)\n    # Only used if global nat_exit_ip is not set\n    # Set to \"auto\" to automatically detect public IP from ident.me\n    # Defaults to KURTOSIS_IP_ADDR_PLACEHOLDER (container IP)\n    nat_exit_ip: KURTOSIS_IP_ADDR_PLACEHOLDER\n\n  # Consensus Layer public port exposed to your local machine\n  # Disabled by default\n  # Public port start defaults to 33000\n  # You can't run multiple enclaves on the same port settings\n  cl:\n    enabled: false\n    public_port_start: 33000\n    # nat_exit_ip: IP address to expose for CL P2P networking (optional)\n    # Only used if global nat_exit_ip is not set\n    # Set to \"auto\" to automatically detect public IP from ident.me\n    # Defaults to KURTOSIS_IP_ADDR_PLACEHOLDER (container IP)\n    nat_exit_ip: KURTOSIS_IP_ADDR_PLACEHOLDER\n\n  # Validator client public port exposed to your local machine\n  # Disabled by default\n  # Public port start defaults to 34000\n  # You can't run multiple enclaves on the same port settings\n  vc:\n    enabled: false\n    public_port_start: 34000\n    # nat_exit_ip: IP address to expose for VC networking (optional)\n    # Only used if global nat_exit_ip is not set\n    # Set to \"auto\" to automatically detect public IP from ident.me\n    # Defaults to KURTOSIS_IP_ADDR_PLACEHOLDER (container IP)\n    nat_exit_ip: KURTOSIS_IP_ADDR_PLACEHOLDER\n\n  # remote signer public port exposed to your local machine\n  # Disabled by default\n  # Public port start defaults to 35000\n  # You can't run multiple enclaves on the same port settings\n  remote_signer:\n    enabled: false\n    public_port_start: 35000\n    # nat_exit_ip: IP address to expose for remote signer networking (optional)\n    # Only used if global nat_exit_ip is not set\n    # Set to \"auto\" to automatically detect public IP from ident.me\n    # Defaults to KURTOSIS_IP_ADDR_PLACEHOLDER (container IP)\n    nat_exit_ip: KURTOSIS_IP_ADDR_PLACEHOLDER\n\n  # Additional services public port exposed to your local machine\n  # Disabled by default\n  # Public port start defaults to 36000\n  # You can't run multiple enclaves on the same port settings\n  additional_services:\n    enabled: false\n    public_port_start: 36000\n    # nat_exit_ip: IP address to expose for additional services (optional)\n    # Only used if global nat_exit_ip is not set\n    # Set to \"auto\" to automatically detect public IP from ident.me\n    # Defaults to KURTOSIS_IP_ADDR_PLACEHOLDER (container IP)\n    nat_exit_ip: KURTOSIS_IP_ADDR_PLACEHOLDER\n\n  # MEV public port exposed to your local machine\n  # Disabled by default\n  # Public port start defaults to 37000\n  # You can't run multiple enclaves on the same port settings\n  mev:\n    enabled: false\n    public_port_start: 37000\n    # nat_exit_ip: IP address to expose for MEV services (optional)\n    # Only used if global nat_exit_ip is not set\n    # Set to \"auto\" to automatically detect public IP from ident.me\n    # Defaults to KURTOSIS_IP_ADDR_PLACEHOLDER (container IP)\n    nat_exit_ip: KURTOSIS_IP_ADDR_PLACEHOLDER\n\n  # Other public port exposed to your local machine (like ethereum metrics exporter, snooper)\n  # Disabled by default\n  # Public port start defaults to 38000\n  # You can't run multiple enclaves on the same port settings\n  other:\n    enabled: false\n    public_port_start: 38000\n    # nat_exit_ip: IP address to expose for other services (optional)\n    # Only used if global nat_exit_ip is not set\n    # Set to \"auto\" to automatically detect public IP from ident.me\n    # Defaults to KURTOSIS_IP_ADDR_PLACEHOLDER (container IP)\n    nat_exit_ip: KURTOSIS_IP_ADDR_PLACEHOLDER\n```\n\n### Example configurations\n\n<details>\n    <summary>Port Publisher Configuration Examples</summary>\n\n**Global NAT Exit IP (Backward Compatible)**\n\n```yaml\nport_publisher:\n  nat_exit_ip: \"auto\"  # All services use auto-detected public IP\n  el:\n    enabled: true\n    public_port_start: 32000\n  cl:\n    enabled: true\n    public_port_start: 33000\n  additional_services:\n    enabled: true\n    public_port_start: 36000\n```\n\n**Per-Service NAT Exit IP (Granular Control)**\n\n```yaml\nport_publisher:\n  nat_exit_ip: KURTOSIS_IP_ADDR_PLACEHOLDER  # Not set globally\n  el:\n    enabled: true\n    public_port_start: 32000\n    nat_exit_ip: \"auto\"  # Only EL uses public IP\n  cl:\n    enabled: true\n    public_port_start: 33000\n    nat_exit_ip: KURTOSIS_IP_ADDR_PLACEHOLDER  # CL uses container IP\n  additional_services:\n    enabled: true\n    public_port_start: 36000\n    nat_exit_ip: \"192.168.1.100\"  # Custom IP for additional services\n```\n\n**Mixed Configuration**\n\n```yaml\nport_publisher:\n  nat_exit_ip: KURTOSIS_IP_ADDR_PLACEHOLDER  # Not set globally\n  el:\n    enabled: true\n    public_port_start: 32000\n    nat_exit_ip: \"auto\"  # Auto-detect for EL\n  cl:\n    enabled: true\n    public_port_start: 33000\n    nat_exit_ip: \"auto\"  # Auto-detect for CL\n  additional_services:\n    enabled: true\n    public_port_start: 36000\n    # Uses default KURTOSIS_IP_ADDR_PLACEHOLDER for additional services\n```\n\n</details>\n\n<details>\n    <summary>Verkle configuration example</summary>\n\n```yaml\nparticipants:\n  - el_type: geth\n    el_image: ethpandaops/geth:<VERKLE_IMAGE>\n    el_extra_params:\n    - \"--override.verkle=<UNIXTIMESTAMP>\"\n    cl_type: lighthouse\n    cl_image: sigp/lighthouse:latest\n  - el_type: geth\n    el_image: ethpandaops/geth:<VERKLE_IMAGE>\n    el_extra_params:\n    - \"--override.verkle=<UNIXTIMESTAMP>\"\n    cl_type: lighthouse\n    cl_image: sigp/lighthouse:latest\n  - el_type: geth\n    el_image: ethpandaops/geth:<VERKLE_IMAGE>\n    el_extra_params:\n    - \"--override.verkle=<UNIXTIMESTAMP>\"\n    cl_type: lighthouse\n    cl_image: sigp/lighthouse:latest\nnetwork_params:\n  deneb_fork_epoch: 0\nwait_for_finalization: false\nglobal_log_level: info\n\n```\n\n</details>\n\n<details>\n    <summary>A 3-node Ethereum network with \"mock\" MEV mode.</summary>\n    Useful for testing mev-boost and the client implementations without adding the complexity of the relay. This can be enabled by a single config command and would deploy the [mock-builder](https://github.com/marioevz/mock-builder), instead of the relay infrastructure.\n\n```yaml\nparticipants:\n  - el_type: geth\n    el_image: ''\n    cl_type: lighthouse\n    cl_image: ''\n    count: 2\n  - el_type: nethermind\n    el_image: ''\n    cl_type: teku\n    cl_image: ''\n    count: 1\n  - el_type: besu\n    el_image: ''\n    cl_type: prysm\n    cl_image: ''\n    count: 2\nmev_type: mock\n```\n\n</details>\n\n<details>\n    <summary>A 5-node Ethereum network with three different CL and EL client combinations and mev-boost infrastructure in \"full\" mode.</summary>\n\n```yaml\nparticipants:\n  - el_type: geth\n    cl_type: lighthouse\n    count: 2\n  - el_type: nethermind\n    cl_type: teku\n  - el_type: besu\n    cl_type: prysm\n    count: 2\nmev_type: flashbots\nnetwork_params:\n  deneb_fork_epoch: 1\n```\n\n</details>\n\n<details>\n    <summary>A 2-node Ethereum network with buildoor (self-contained builder+relay)</summary>\n\n```yaml\nparticipants:\n  - el_type: geth\n    cl_type: lighthouse\n    count: 2\nmev_type: buildoor\nbuildoor_params:\n  builder_api: true\n  epbs_builder: true\nadditional_services:\n  - dora\n  - spamoor\n```\n\n</details>\n\n<details>\n    <summary>A 3-node Ethereum network with Helix relay for MEV-boost infrastructure</summary>\n\n```yaml\nparticipants:\n  - el_type: geth\n    el_image: ethpandaops/geth:master\n    cl_type: lighthouse\n    cl_image: ethpandaops/lighthouse:unstable\n    count: 2\n  - el_type: nethermind\n    el_image: ethpandaops/nethermind:master\n    cl_type: prysm\n    cl_image: ethpandaops/prysm-beacon-chain:develop\n\nmev_type: helix\nmev_params:\n  mev_relay_image: ghcr.io/gattaca-com/helix-relay:main\n  mev_builder_image: ethpandaops/reth-rbuilder:develop\n  mev_boost_image: ethpandaops/mev-boost:develop\n  mev_builder_cl_image: ethpandaops/lighthouse:unstable\n  mev_builder_subsidy: 1\n\nadditional_services:\n  - dora\n  - spamoor\n\nnetwork_params:\n  min_validator_withdrawability_delay: 1\n  shard_committee_period: 1\n```\n\n</details>\n\n<details>\n    <summary>A 2-node geth/lighthouse network with optional services (Grafana, Prometheus, tx_fuzz, EngineAPI snooper)</summary>\n\n```yaml\nparticipants:\n  - el_type: geth\n    cl_type: lighthouse\n    count: 2\nsnooper_params:\n  enabled: true\nadditional_services:\n  - prometheus\n  - grafana\n  - tx_fuzz\nethereum_metrics_exporter_enabled: true\n```\n\n</details>\n\n<details>\n    <summary>Network with rakoon transaction fuzzer</summary>\n\n```yaml\nparticipants:\n  - el_type: geth\n    cl_type: lighthouse\n  - el_type: reth\n    cl_type: teku\nadditional_services:\n  - rakoon\nrakoon_params:\n  tx_type: \"eip7702\"\n  workers: 50\n  batch_size: 100\n```\n\nFor advanced fuzzing with broadcaster:\n\n```yaml\nparticipants:\n  - el_type: geth\n    cl_type: lighthouse\n  - el_type: reth\n    cl_type: teku\nadditional_services:\n  - broadcaster  # Broadcasts to all nodes\n  - rakoon\nrakoon_params:\n  tx_type: \"eip1559\"\n  workers: 100\n  batch_size: 200\n  seed: \"12345\"  # Reproducible fuzzing\n```\n\n</details>\n\n## Extra Files and Mounts\n\nThe `extra_files` feature allows you to define custom file contents in your configuration and mount them into any container (EL, CL, or VC).\n\n### How It Works\n\n1. **Define file contents** in the top-level `extra_files` section\n2. **Mount the files** into containers using `el_extra_mounts`, `cl_extra_mounts`, or `vc_extra_mounts`\n3. **Access the files** inside the container at `<mount_path>/<file_name>`\n\n### Important: Understanding Mount Paths\n\nDue to how Kurtosis handles artifacts, mount paths become **directories**, not files. When you mount a file:\n\n- The mount path you specify becomes a directory\n- Your file is placed inside that directory with its original name from `extra_files`\n\n### Complete Example\n\n```yaml\n# Define your custom files at the top level\nextra_files:\n  validator_config.json: |\n    {\n      \"graffiti\": \"MyValidator\",\n      \"enable_doppelganger\": true,\n      \"suggested_fee_recipient\": \"0x1234...\"\n    }\n\nparticipants:\n  - el_type: geth\n    cl_type: lighthouse\n\n    # Mount files into the consensus layer client\n    cl_extra_mounts:\n      \"/configs\": \"validator_config.json\" # File available at: /configs/validator_config.json\n```\n\n## Beacon Node <> Validator Client compatibility\n\n|               | Lighthouse VC | Prysm VC | Teku VC | Lodestar VC | Nimbus VC\n|---------------|---------------|----------|---------|-------------|-----------|\n| Lighthouse BN | ✅            | ✅       | ✅      | ✅          | ✅\n| Prysm BN      | ✅            | ✅       | ✅      | ✅          | ✅\n| Teku BN       | ✅            | ✅       | ✅      | ✅          | ✅\n| Lodestar BN   | ✅            | ✅       | ✅      | ✅          | ✅\n| Nimbus BN     | ✅            | ✅       | ✅      | ✅          | ✅\n| Grandine BN   | ✅            | ✅       | ✅      | ✅          | ✅\n\n## Custom labels for Docker and Kubernetes\n\nThere are 6 custom labels that can be used to identify the nodes in the network. These labels are used to identify the nodes in the network and can be used to run chaos tests on specific nodes. An example for these labels are as follows:\n\nExecution Layer (EL) nodes:\n\n```sh\n  \"kurtosistech.com.custom/ethereum-package.client\": \"geth\",\n  \"kurtosistech.com.custom/ethereum-package.client-image\": \"ethereum-client-go-latest\",\n  \"kurtosistech.com.custom/ethereum-package.client-language:\": \"go\",\n  \"kurtosistech.com.custom/ethereum-package.client-type\": \"execution\",\n  \"kurtosistech.com.custom/ethereum-package.connected-client\": \"lighthouse\",\n  \"kurtosistech.com.custom/ethereum-package.node-index\": \"1\",\n```\n\nConsensus Layer (CL) nodes - Beacon:\n\n```sh\n  \"kurtosistech.com.custom/ethereum-package.client\": \"lighthouse\",\n  \"kurtosistech.com.custom/ethereum-package.client-image\": \"sigp-lighthouse-latest\",\n  \"kurtosistech.com.custom/ethereum-package.client-language:\": \"rust\",\n  \"kurtosistech.com.custom/ethereum-package.client-type\": \"beacon\",\n  \"kurtosistech.com.custom/ethereum-package.connected-client\": \"geth\",\n  \"kurtosistech.com.custom/ethereum-package.node-index\": \"1\",\n```\n\nConsensus Layer (CL) nodes - Validator:\n\n```sh\n  \"kurtosistech.com.custom/ethereum-package.client\": \"lighthouse\",\n  \"kurtosistech.com.custom/ethereum-package.client-image\": \"sigp-lighthouse-latest\",\n  \"kurtosistech.com.custom/ethereum-package.client-language:\": \"rust\",\n  \"kurtosistech.com.custom/ethereum-package.client-type\": \"validator\",\n  \"kurtosistech.com.custom/ethereum-package.connected-client\": \"geth\",\n  \"kurtosistech.com.custom/ethereum-package.node-index\": \"1\",\n```\n\n- `ethereum-package.client` describes which client is running on the node.\n- `ethereum-package.client-image` describes the image that is used for the client.\n- `ethereum-package.client-type` describes the type of client that is running on the node (`execution`,`beacon` or `validator`).\n- `ethereum-package.connected-client` describes the CL/EL client that is connected to the EL/CL client.\n- `ethereum-package.client-language` describes the implementation language of the running service.\n- `ethereum-package.node-index` describes the index of the node (participant) that the service belongs to.\n\n## Proposer Builder Separation (PBS) emulation\n\nTo spin up the network of Ethereum nodes with an external block building network (using Flashbot's `mev-boost` protocol), simply use:\n\n```bash\nkurtosis run github.com/ethpandaops/ethereum-package '{\"mev_type\": \"flashbots\"}'\n```\n\nStarting your network up with `\"mev_type\": \"flashbots\"` will instantiate and connect the following infrastructure to your network:\n\n1. `Flashbot's block builder & CL validator + beacon` - A modified Geth client that builds blocks. The CL validator and beacon clients are lighthouse clients configured to receive payloads from the relay.\n2. `mev-relay-api` - Services that provide APIs for (a) proposers, (b) block builders, (c) data\n3. `mev-relay-website` - A website to monitor payloads that have been delivered\n4. `mev-relay-housekeeper` - Updates known validators, proposer duties, and more in the background. Only a single instance of this should run.\n5. `mev-boost` - open-source middleware instantiated for each EL/Cl pair in the network, including the builder\n\nThe package also supports other MEV implementations:\n\n- `\"mev_type\": \"helix\"` - Uses the high-performance [Helix relay](https://github.com/gattaca-com/helix) with TimescaleDB backend for data storage\n- `\"mev_type\": \"mev-rs\"` - Alternative relay implementation powered by [mev-rs](https://github.com/ralexstokes/mev-rs/)\n- `\"mev_type\": \"commit-boost\"` - Infrastructure powered by [commit-boost](https://github.com/Commit-Boost/commit-boost-client)\n- `\"mev_type\": \"buildoor\"` - A self-contained builder+relay service powered by [buildoor](https://github.com/ethpandaops/buildoor). Supports both legacy builder API and ePBS bidding without requiring separate relay infrastructure or a dedicated builder participant.\n\nEach implementation provides different features and performance characteristics suitable for various testing and development scenarios.\n\n<details>\n    <summary>Caveats when using \"mev_type\": \"flashbots\"</summary>\n\n- Validators (64 per node by default, so 128 in the example in this guide) will get registered with the relay automatically after the 1st epoch. This registration process is simply a configuration addition to the mev-boost config - which Kurtosis will automatically take care of as part of the set up. This means that the mev-relay infrastructure only becomes aware of the existence of the validators after the 1st epoch.\n- After the 3rd epoch, the mev-relay service will begin to receive execution payloads (eth_sendPayload, which does not contain transaction content) from the mev-builder service (or mock-builder in mock-mev mode).\n- Validators will start to receive validated execution payload headers from the mev-relay service (via mev-boost) after the 4th epoch. The validator selects the most valuable header, signs the payload, and returns the signed header to the relay - effectively proposing the payload of transactions to be included in the soon-to-be-proposed block. Once the relay verifies the block proposer's signature, the relay will respond with the full execution payload body (incl. the transaction contents) for the validator to use when proposing a SignedBeaconBlock to the network.\n\n</details>\n\nThis package also supports a `\"mev_type\": \"mock\"` mode that will only bring up:\n\n1. `mock-builder` - a server that listens for builder API directives and responds with payloads built using an execution client\n1. `mev-boost` - for every EL/CL pair launched\n\nFor more details, including a guide and architecture of the `mev-boost` infrastructure, go [here](https://docs.kurtosis.com/how-to-full-mev-with-ethereum-package/).\n\n## Pre-funded accounts at Genesis\n\nThis package comes with [21 prefunded keys for testing](https://github.com/ethpandaops/ethereum-package/blob/main/src/prelaunch_data_generator/genesis_constants/genesis_constants.star).\n\nHere's a table of where the keys are used\n\n| Account Index | Component Used In   | Private Key Used | Public Key Used | Comment                     |\n|---------------|---------------------|------------------|-----------------|-----------------------------|\n| 0             | Builder             | ✅                |                 | As coinbase                |\n| 0             | mev_custom_flood    |                   | ✅              | As the receiver of balance |\n| 3             | tx_fuzz | ✅                |                 | To spam transactions with  |\n| 8             | assertoor           | ✅                | ✅              | As the funding for tests   |\n| 11            | mev_custom_flood    | ✅                |                 | As the sender of balance   |\n| 12            | l2_contracts        | ✅                |                 | Contract deployer address  |\n| 13            | spamoor             | ✅                |                 | Spams transactions         |\n| 14            | rakoon              | ✅                |                 | Protocol fuzzing           |\n\n## Developing On This Package\n\nFirst, install prerequisites:\n\n1. [Install Kurtosis itself][kurtosis-cli-installation]\n\nThen, run the dev loop:\n\n1. Make your code changes\n1. **Run the linter to format and check your code:**\n\n   ```bash\n   kurtosis lint --format\n   ```\n\n   This ensures your Starlark code follows the project's formatting standards and catches any syntax issues.\n\n1. Rebuild and re-run the package by running the following from the root of the repo:\n\n   ```bash\n   kurtosis run . \"{}\"\n   ```\n\n   NOTE 1: You can change the value of the second positional argument flag to pass in extra configuration to the package per the \"Configuration\" section above!\n   NOTE 2: The second positional argument accepts JSON.\n\nTo get detailed information about the structure of the package, visit [the architecture docs](./docs/architecture.md).\n\nWhen you're happy with your changes:\n\n1. Create a PR\n1. Add one of the maintainers of the repo as a \"Review Request\":\n   - `parithosh` (Ethereum Foundation)\n   - `barnabasbusa` (Ethereum Foundation)\n   - `pk910` (Ethereum Foundation)\n   - `samcm` (Ethereum Foundation)\n   - `h4ck3rk3y` (Kurtosis)\n   - `mieubrisse` (Kurtosis)\n   - `leederek` (Kurtosis)\n1. Once everything works, merge!\n\n## PeerDAS\n\nWe can use a set of pre-generated node keys to achieve a perfect column distribution on a 128-column network with an 8-column custody requirement.\nFor this to work, we need a network of 16 nodes running, so each node would custody 8 unique columns.\n\nHere's a table of the private keys that can be used to create the nodes:\n\n| nodeId | sep256k1 privKey | columns |\n|--------|-------------|---------|\n| 0x9908...4159 | 0x86e8...4c8d | 17, 51, 52, 76, 103, 113, 117, 118 |\n| 0xacd4...84e1 | 0xe156...c0da | 24, 35, 78, 80, 101, 107, 114, 122 |\n| 0x3916...b3d | 0x932b...9dd5 | 16, 25, 57, 66, 69, 70, 77, 115 |\n| 0x95a8...373b | 0x6eca...ae2c | 9, 30, 82, 99, 105, 116, 123, 125 |\n| 0x4a53...c82 | 0x2e2e...df9b | 10, 14, 61, 85, 86, 90, 111, 126 |\n| 0x4722...8ff9 | 0x2ea0...32e9 | 2, 5, 18, 32, 33, 49, 83, 94 |\n| 0x912d...add3 | 0xc070...da04 | 3, 13, 48, 50, 74, 97, 119, 121 |\n| 0x93cd...3477 | 0xd915...e831 | 40, 42, 53, 58, 62, 87, 89, 120 |\n| 0x1e19...dd2a | 0x077c...89be | 41, 43, 47, 54, 56, 63, 92, 98 |\n| 0x8165...f316 | 0x5a3e...a8a6 | 8, 22, 38, 60, 79, 91, 93, 112 |\n| 0xe705...fe55 | 0xa10f...c636 | 6, 29, 44, 68, 75, 81, 109, 110 |\n| 0x1835...f044 | 0xbeb4...f299 | 0, 11, 26, 27, 34, 36, 39, 95 |\n| 0x4fb2...e3ce | 0x735e...4947 | 4, 15, 28, 55, 72, 73, 88, 108 |\n| 0xd1f9...50c9 | 0x75ba...167a | 7, 12, 31, 37, 45, 65, 71, 84 |\n| 0x024a...8dc5 | 0xd93a...e1a7 | 1, 19, 20, 21, 46, 64, 67, 124 |\n| 0x3f2b...0db3 | 0xbcde...0608 | 23, 59, 96, 100, 102, 104, 106, 127 |\n\nPrivate keys can be found in the `static_files/peerdas-node-keys` directory.\n\n## AI Agent Skill (Claude Code & Codex)\n\nThis repository ships with an AI agent skill called `kurtosis-ethereum` that lets AI coding agents spin up and manage Ethereum devnets. The skill is automatically discovered by both [Claude Code](https://docs.anthropic.com/en/docs/claude-code) and [OpenAI Codex](https://developers.openai.com/codex/skills/) when working in this repo.\n\nThe canonical skill lives at `.claude/skills/kurtosis-ethereum/` with a symlink at `.agents/skills/kurtosis-ethereum/` for Codex compatibility. The same `SKILL.md` works for both agents.\n\n### Installation\n\n**Claude Code:**\n\nClone the repo and copy the skill to your personal Claude skills folder:\n\n```bash\ngit clone https://github.com/ethpandaops/ethereum-package.git\ncp -r ethereum-package/.claude/skills/kurtosis-ethereum ~/.claude/skills/\n```\n\nClaude Code auto-discovers skills in `~/.claude/skills/`. Once copied, invoke with `/kurtosis-ethereum`.\n\n**Codex:** The skill is auto-discovered from `.agents/skills/` when working in this repo. No extra installation needed.\n\n### Usage\n\nOnce available, invoke the skill with a natural language prompt:\n\n```\n# Claude Code\n/kurtosis-ethereum spin up a 4-node devnet with geth+lighthouse and reth+prysm with assertoor stability checks\n\n# Codex — the skill is invoked implicitly or via /skills\nspin up a 4-node devnet with geth+lighthouse and reth+prysm with assertoor stability checks\n```\n\nThe skill provides:\n- Configuration generation for multi-client devnets\n- A reference tool (`kurtosis-ref.sh`) for looking up supported clients, parameters, fork epochs, MEV options, and CI test examples\n- Templates for common setups (mixed clients, custom images, observer nodes, MEV infrastructure)\n\n<!------------------------ Only links below here -------------------------------->\n\n[docker-installation]: https://docs.docker.com/get-docker/\n[kurtosis-cli-installation]: https://docs.kurtosis.com/install\n[kurtosis-repo]: https://github.com/kurtosis-tech/kurtosis\n[enclave]: https://docs.kurtosis.com/advanced-concepts/enclaves/\n[package-reference]: https://docs.kurtosis.com/advanced-concepts/packages\n"
  },
  {
    "path": "_typos.toml",
    "content": "[files]\nextend-exclude = [\"static_files/\", \"CHANGELOG.md\"]\n"
  },
  {
    "path": "docs/architecture.md",
    "content": "# Package Architecture\n\nThis repo is a Kurtosis package. To get general information on what a Kurtosis package is and how it works, visit [the Starlark documentation](https://docs.kurtosis.com/starlark-reference).\n\nThe overview of this particular package's operation is as follows:\n\n1. Parse user parameters\n1. Launch a network of Ethereum participants\n   1. Generate execution layer (EL) client config data\n   1. Launch EL clients\n   1. Generate consensus layer (CL) client config data\n   1. Launch CL clients\n1. Launch auxiliary services (Grafana, Forkmon, etc.)\n1. Run Ethereum Merge verification logic\n1. Return information to the user\n\n## Overview\n\nThe package has six main components, in accordance with the above operation:\n\n1. [Main Function][main-function]\n1. [Package I/O][package-io]\n1. [Static Files][static-files]\n1. [Participant Network][participant-network]\n1. Auxiliary Services\n1. [Merge Verification Logic][testnet-verifier]\n\n## [Main][main-function]\n\nThe main function is the package's entrypoint, where parameters are received from the user, lower-level calls are made, and a response is returned.\n\n## [Package I/O][package-io]\n\nThis particular package has many configuration options (see the \"Configuration\" section in the README for the full list of values). These are passed in as a YAML or JSON-serialized string, and arrive to the package's main function via the `input_args` variable. The process of setting defaults, overriding them with the user's desired options, and validating the resulting config object requires some space in the codebase. All this logic happens inside the `package_io` directory, so you'll want to visit this directory if you want to:\n\n- View or change parameters that the package can receive\n- Change the default values of package parameters\n- View or change the validation logic that the package applies to configuration parameters\n- View or change the properties that the package passes back to the user after execution is complete\n\n## [Static Files][static-files]\n\nKurtosis packages can have static files that are made available inside the container during the package's operation. For this package, [the static files included][static-files] are various key files and config templates which get used during participant network operation.\n\n## [Participant Network][participant-network]\n\nThe participant network is the beating heart at the center of the package. The participant network code is responsible for:\n\n1. Generating EL client config data\n1. Starting the EL clients\n1. Generating CL client config data\n1. Starting the CL clients\n\nWe'll explain these phases one by one.\n\n### Generating EL and CL client data\n\nAll EL clients require both a genesis file and a JWT secret. The exact format of the genesis file differs per client, so we first leverage [a Docker image containing tools for generating this genesis data][ethereum-genesis-generator] to create the actual files that the EL clients-to-be will need. This is accomplished by filling in a single genesis generation environment config files found in [`static_files`](../static_files/genesis-generation-config/el-cl/values.env.tmpl).\n\nCL clients, like EL clients also have a genesis and config files that they need. This is created at the same time as the EL genesis files.\n\nThen the validator keys are generated. A tool called [eth2-val-tools](https://github.com/protolambda/eth2-val-tools) is used to generate the keys. The keys are then stored as a file artifact.\n\n### Starting EL clients\n\nNext, we plug the generated genesis data [into EL client \"launchers\"](https://github.com/ethpandaops/ethereum-package/tree/main/src/el) to start a mining network of EL nodes. The launchers come with a `launch` function that consumes EL genesis data and produces information about the running EL client node. Running EL node information is represented by [an `el_context` struct](https://github.com/ethpandaops/ethereum-package/blob/main/src/el/el_context.star). Each EL client type has its own launcher (e.g. [Geth](https://github.com/ethpandaops/ethereum-package/tree/main/src/el/geth), [Besu](https://github.com/ethpandaops/ethereum-package/tree/main/src/el/besu)) because each EL client will require different environment variables and flags to be set when launching the client's container.\n\n### Starting CL clients\n\nOnce CL genesis data and keys have been created, the CL client nodes are started via [the CL client launchers](https://github.com/ethpandaops/ethereum-package/tree/main/src/cl). Just as with EL clients:\n\n- CL client launchers implement come with a `launch` method\n- One CL client launcher exists per client type (e.g. [Nimbus](https://github.com/ethpandaops/ethereum-package/tree/main/src/cl/nimbus), [Lighthouse](https://github.com/ethpandaops/ethereum-package/tree/main/src/cl/lighthouse))\n- Launched CL node information is tracked in [a `cl_context` struct](https://github.com/ethpandaops/ethereum-package/blob/main/src/cl/cl_context.star)\n\nThere are only two major difference between CL client and EL client launchers. First, the `cl_client_launcher.launch` method also consumes an `el_context`, because each CL client is connected in a 1:1 relationship with an EL client. Second, because CL clients have keys, the keystore files are passed in to the `launch` function as well.\n\n## Auxiliary Services\n\nAfter the Ethereum network is up and running, this package starts several auxiliary containers to make it easier to work with the Ethereum network. At time of writing, these are:\n\n- [Forkmon](https://github.com/ethpandaops/ethereum-package/tree/main/src/forkmon), a \"fork monitor\" web UI for visualizing the CL clients' forks\n- [Prometheus](https://github.com/ethpandaops/ethereum-package/tree/main/src/prometheus) for collecting client node metrics\n- [Grafana](https://github.com/ethpandaops/ethereum-package/tree/main/src/grafana) for visualizing client node metrics\n- [An ETH transaction spammer](https://github.com/ethpandaops/ethereum-package/tree/main/src/tx_fuzz), which [has been forked off](https://github.com/kurtosis-tech/tx-fuzz) of [Marius' transaction spammer code](https://github.com/MariusVanDerWijden/tx-fuzz) so that it can run as a container\n\n## [Testnet Verifier][testnet-verifier]\n\nOnce the Ethereum network is up and running, verification logic will be run to ensure that the Merge has happened successfully. This happens via [a testnet-verifying Docker image](https://github.com/ethereum/merge-testnet-verifier) that periodically polls the network to check the state of the merge. If the merge doesn't occur, the testnet-verifying image returns an unsuccessful exit code which in turn signals the Kurtosis package to exit with an error. This merge verification can be disabled in the package's configuration (see the \"Configuration\" section in the README).\n\n<!------------------------ Only links below here -------------------------------->\n\n[enclave-context]: https://docs.kurtosistech.com/kurtosis/core-lib-documentation#enclavecontext\n[main-function]: https://github.com/ethpandaops/ethereum-package/blob/main/main.star#22\n[package-io]: https://github.com/ethpandaops/ethereum-package/tree/main/src/package_io\n[participant-network]: https://github.com/ethpandaops/ethereum-package/tree/main/src/participant_network.star\n[ethereum-genesis-generator]: https://github.com/ethpandaops/ethereum-genesis-generator\n[static-files]: https://github.com/ethpandaops/ethereum-package/tree/main/static_files\n[testnet-verifier]: https://github.com/ethpandaops/ethereum-package/tree/main/src/testnet_verifier\n"
  },
  {
    "path": "examples/README.md",
    "content": "# Examples\n\nPlease find the example configurations in the [../.github/tests](../.github/tests) directory.\n"
  },
  {
    "path": "kurtosis.yml",
    "content": "name: \"github.com/ethpandaops/ethereum-package\"\n"
  },
  {
    "path": "main.star",
    "content": "input_parser = import_module(\"./src/package_io/input_parser.star\")\nconstants = import_module(\"./src/package_io/constants.star\")\nparticipant_network = import_module(\"./src/participant_network.star\")\nshared_utils = import_module(\"./src/shared_utils/shared_utils.star\")\nstatic_files = import_module(\"./src/static_files/static_files.star\")\ngenesis_constants = import_module(\n    \"./src/prelaunch_data_generator/genesis_constants/genesis_constants.star\"\n)\n\nvalidator_ranges = import_module(\n    \"./src/prelaunch_data_generator/validator_keystores/validator_ranges_generator.star\"\n)\n\ntx_fuzz = import_module(\"./src/tx_fuzz/tx_fuzz.star\")\nrakoon = import_module(\"./src/rakoon/rakoon.star\")\nforkmon = import_module(\"./src/forkmon/forkmon_launcher.star\")\n\ndora = import_module(\"./src/dora/dora_launcher.star\")\ncheckpointz = import_module(\"./src/checkpointz/checkpointz_launcher.star\")\ndugtrio = import_module(\"./src/dugtrio/dugtrio_launcher.star\")\nblutgang = import_module(\"./src/blutgang/blutgang_launcher.star\")\nerpc = import_module(\"./src/erpc/erpc_launcher.star\")\nblobscan = import_module(\"./src/blobscan/blobscan_launcher.star\")\nforky = import_module(\"./src/forky/forky_launcher.star\")\ntracoor = import_module(\"./src/tracoor/tracoor_launcher.star\")\napache = import_module(\"./src/apache/apache_launcher.star\")\nnginx = import_module(\"./src/nginx/nginx_launcher.star\")\nfull_beaconchain_explorer = import_module(\n    \"./src/full_beaconchain/full_beaconchain_launcher.star\"\n)\nblockscout = import_module(\"./src/blockscout/blockscout_launcher.star\")\nprometheus = import_module(\"./src/prometheus/prometheus_launcher.star\")\ngrafana = import_module(\"./src/grafana/grafana_launcher.star\")\ntempo = import_module(\"./src/tempo/tempo_launcher.star\")\ncommit_boost_mev_boost = import_module(\n    \"./src/mev/commit-boost/mev_boost/mev_boost_launcher.star\"\n)\nmev_rs_mev_boost = import_module(\"./src/mev/mev-rs/mev_boost/mev_boost_launcher.star\")\nmev_rs_mev_relay = import_module(\"./src/mev/mev-rs/mev_relay/mev_relay_launcher.star\")\nmev_rs_mev_builder = import_module(\n    \"./src/mev/mev-rs/mev_builder/mev_builder_launcher.star\"\n)\nflashbots_mev_rbuilder = import_module(\n    \"./src/mev/flashbots/mev_builder/mev_builder_launcher.star\"\n)\n\nflashbots_mev_boost = import_module(\n    \"./src/mev/flashbots/mev_boost/mev_boost_launcher.star\"\n)\nflashbots_mev_relay = import_module(\n    \"./src/mev/flashbots/mev_relay/mev_relay_launcher.star\"\n)\nhelix_relay = import_module(\"./src/mev/helix/helix_relay_launcher.star\")\nmock_mev = import_module(\"./src/mev/flashbots/mock_mev/mock_mev_launcher.star\")\nbuildoor = import_module(\"./src/mev/buildoor/buildoor_launcher.star\")\nmev_custom_flood = import_module(\n    \"./src/mev/flashbots/mev_custom_flood/mev_custom_flood_launcher.star\"\n)\nbroadcaster = import_module(\"./src/broadcaster/broadcaster.star\")\nmempool_bridge = import_module(\"./src/mempool_bridge/mempool_bridge_launcher.star\")\nassertoor = import_module(\"./src/assertoor/assertoor_launcher.star\")\nget_prefunded_accounts = import_module(\n    \"./src/prefunded_accounts/get_prefunded_accounts.star\"\n)\nspamoor = import_module(\"./src/spamoor/spamoor.star\")\nslashoor = import_module(\"./src/slashoor/slashoor_launcher.star\")\nzkboost = import_module(\"./src/zkboost/zkboost_launcher.star\")\n\nGRAFANA_USER = \"admin\"\nGRAFANA_PASSWORD = \"admin\"\nGRAFANA_DASHBOARD_PATH_URL = \"/d/QdTOwy-nz/eth2-merge-kurtosis-module-dashboard?orgId=1\"\n\nFIRST_NODE_FINALIZATION_FACT = \"cl-boot-finalization-fact\"\nHTTP_PORT_ID_FOR_FACT = \"http\"\n\nMEV_BOOST_SHOULD_CHECK_RELAY = True\nPATH_TO_PARSED_BEACON_STATE = \"/genesis/output/parsedBeaconState.json\"\n\n\ndef run(plan, args={}):\n    \"\"\"Launches an arbitrarily complex ethereum testnet based on the arguments provided\n\n    Args:\n        args: A YAML or JSON argument to configure the network; example https://github.com/ethpandaops/ethereum-package/blob/main/network_params.yaml\n    \"\"\"\n\n    args_with_right_defaults = input_parser.input_parser(plan, args)\n\n    num_participants = len(args_with_right_defaults.participants)\n    network_params = args_with_right_defaults.network_params\n\n    # Detect the backend type early - needed for binary injection validation\n    detected_backend = plan.get_cluster_type()\n\n    # Process extra_files - create artifacts from provided content\n    extra_files_artifacts = {}\n    extra_files = getattr(args_with_right_defaults, \"extra_files\", {})\n    if extra_files:\n        for name, content in extra_files.items():\n            # Use render_templates to create a file with the content\n            # The file inside the artifact will be named after the extra_files key\n            template_data = {name: struct(template=content, data={})}\n            artifact = plan.render_templates(template_data, name + \"_artifact\")\n            extra_files_artifacts[name] = artifact\n\n    # Validate binary injection - only supported with Docker backend\n    for participant in args_with_right_defaults.participants:\n        for bin_path in [\n            participant.el_binary_path,\n            participant.cl_binary_path,\n            participant.vc_binary_path,\n        ]:\n            if bin_path and detected_backend != \"docker\":\n                fail(\n                    \"Binary injection (*_binary_path) is only supported with Docker backend, detected: {0}\".format(\n                        detected_backend\n                    )\n                )\n\n    mev_params = args_with_right_defaults.mev_params\n    parallel_keystore_generation = args_with_right_defaults.parallel_keystore_generation\n    persistent = args_with_right_defaults.persistent\n    xatu_sentry_params = args_with_right_defaults.xatu_sentry_params\n    global_tolerations = args_with_right_defaults.global_tolerations\n    global_node_selectors = args_with_right_defaults.global_node_selectors\n    keymanager_enabled = args_with_right_defaults.keymanager_enabled\n    apache_port = args_with_right_defaults.apache_port\n    nginx_port = args_with_right_defaults.nginx_port\n    docker_cache_params = args_with_right_defaults.docker_cache_params\n\n    for index, participant in enumerate(args_with_right_defaults.participants):\n        if (\n            num_participants == 1\n            and participant.cl_type == constants.CL_TYPE.lighthouse\n        ):\n            if (\n                \"--target-peers=0\" not in participant.cl_extra_params\n                and network_params.network == constants.NETWORK_NAME.kurtosis\n            ):\n                participant.cl_extra_params.append(\"--target-peers=0\")\n\n    prefunded_accounts = genesis_constants.PRE_FUNDED_ACCOUNTS\n    if (\n        network_params.preregistered_validator_keys_mnemonic\n        != constants.DEFAULT_MNEMONIC\n    ):\n        prefunded_accounts = get_prefunded_accounts.get_accounts(\n            plan,\n            network_params.preregistered_validator_keys_mnemonic,\n            21,\n            global_tolerations,\n            global_node_selectors,\n        )\n\n    grafana_datasource_config_template = read_file(\n        static_files.GRAFANA_DATASOURCE_CONFIG_TEMPLATE_FILEPATH\n    )\n    grafana_dashboards_config_template = read_file(\n        static_files.GRAFANA_DASHBOARD_PROVIDERS_CONFIG_TEMPLATE_FILEPATH\n    )\n    tempo_config_template = read_file(static_files.TEMPO_CONFIG_TEMPLATE_FILEPATH)\n    mempool_bridge_config_template = read_file(\n        static_files.MEMPOOL_BRIDGE_CONFIG_TEMPLATE_FILEPATH\n    )\n    prometheus_additional_metrics_jobs = []\n    raw_jwt_secret = read_file(static_files.JWT_PATH_FILEPATH)\n    jwt_file = plan.upload_files(\n        src=static_files.JWT_PATH_FILEPATH,\n        name=\"jwt_file\",\n    )\n    keymanager_file = plan.upload_files(\n        src=static_files.KEYMANAGER_PATH_FILEPATH,\n        name=\"keymanager_file\",\n    )\n\n    if network_params.perfect_peerdas_enabled:\n        plan.print(\"Uploading peerdas node keys\")\n        for index, participant in enumerate(args_with_right_defaults.participants[:16]):\n            if participant.cl_type == constants.CL_TYPE.lodestar:\n                raw_node_key = (\n                    static_files.PEERDAS_NODE_KEY_FILEPATH\n                    + participant.cl_type\n                    + \"/node-key-file-{0}/peer-id.json\".format(index + 1)\n                )\n            elif (\n                participant.cl_type == constants.CL_TYPE.lighthouse\n                or participant.cl_type == constants.CL_TYPE.grandine\n            ):\n                raw_node_key = (\n                    static_files.PEERDAS_NODE_KEY_FILEPATH\n                    + participant.cl_type\n                    + \"/node-key-file-{0}/key\".format(index + 1)\n                )\n            elif participant.cl_type == constants.CL_TYPE.nimbus:\n                raw_node_key = (\n                    static_files.PEERDAS_NODE_KEY_FILEPATH\n                    + participant.cl_type\n                    + \"/node-key-file-{0}.json\".format(index + 1)\n                )\n            else:\n                raw_node_key = (\n                    static_files.PEERDAS_NODE_KEY_FILEPATH\n                    + participant.cl_type\n                    + \"/node-key-file-{0}\".format(index + 1)\n                )\n            node_key_file = plan.upload_files(\n                src=raw_node_key,\n                name=\"node-key-file-{0}\".format(index + 1),\n            )\n    plan.print(\"Read the prometheus, grafana templates\")\n\n    tempo_otlp_grpc_url = None\n    tempo_query_url = None\n    if \"tempo\" in args_with_right_defaults.additional_services:\n        tempo_otlp_grpc_url = \"http://{}:{}\".format(\n            tempo.SERVICE_NAME, tempo.OTLP_GRPC_PORT_NUMBER\n        )\n        tempo_query_url = \"http://{}:{}\".format(\n            tempo.SERVICE_NAME, tempo.HTTP_PORT_NUMBER\n        )\n\n    if args_with_right_defaults.mev_type == constants.MEV_RS_MEV_TYPE:\n        plan.print(\"Generating mev-rs builder config file\")\n        mev_rs_builder_config_file = mev_rs_mev_builder.new_builder_config(\n            plan,\n            constants.MEV_RS_MEV_TYPE,\n            network_params.network,\n            constants.VALIDATING_REWARDS_ACCOUNT,\n            network_params.preregistered_validator_keys_mnemonic,\n            args_with_right_defaults.mev_params.mev_builder_extra_data,\n            global_node_selectors,\n        )\n    elif (\n        args_with_right_defaults.mev_type == constants.FLASHBOTS_MEV_TYPE\n        or args_with_right_defaults.mev_type == constants.COMMIT_BOOST_MEV_TYPE\n        or args_with_right_defaults.mev_type == constants.HELIX_MEV_TYPE\n    ):\n        plan.print(\"Generating flashbots builder config file\")\n        flashbots_builder_config_file = flashbots_mev_rbuilder.new_builder_config(\n            plan,\n            args_with_right_defaults.mev_type,\n            network_params,\n            constants.VALIDATING_REWARDS_ACCOUNT,\n            network_params.preregistered_validator_keys_mnemonic,\n            args_with_right_defaults.mev_params,\n            enumerate(args_with_right_defaults.participants),\n            global_node_selectors,\n        )\n\n    plan.print(\n        \"Launching participant network with {0} participants and the following network params {1}\".format(\n            num_participants, network_params\n        )\n    )\n    (\n        all_participants,\n        final_genesis_timestamp,\n        genesis_validators_root,\n        el_cl_data_files_artifact_uuid,\n        network_id,\n        osaka_time,\n        shadowfork_block_height,\n    ) = participant_network.launch_participant_network(\n        plan,\n        args_with_right_defaults,\n        network_params,\n        jwt_file,\n        keymanager_file,\n        persistent,\n        xatu_sentry_params,\n        global_tolerations,\n        global_node_selectors,\n        keymanager_enabled,\n        parallel_keystore_generation,\n        extra_files_artifacts,\n        tempo_otlp_grpc_url,\n        detected_backend,\n    )\n\n    plan.print(\n        \"NODE JSON RPC URI: '{0}:{1}'\".format(\n            all_participants[0].el_context.dns_name,\n            all_participants[0].el_context.rpc_port_num,\n        )\n    )\n\n    builder_bls_secret_key = None\n    if network_params.builder_count > 0:\n        total_validator_count = 0\n        for participant in args_with_right_defaults.participants:\n            total_validator_count += participant.validator_count\n        builder_key_result = plan.run_sh(\n            name=\"derive-builder-bls-key\",\n            description=\"Deriving builder BLS private key from mnemonic\",\n            run='/app/ethdo account derive --mnemonic=\"{0}\" --path=\"m/12381/3600/{1}/0/0\" --show-private-key | grep \"Private key\" | sed \"s/Private key: 0x//\" | tr -d \"\\n\"'.format(\n                network_params.preregistered_validator_keys_mnemonic,\n                total_validator_count,\n            ),\n            image=\"wealdtech/ethdo:latest\",\n            tolerations=shared_utils.get_tolerations(\n                global_tolerations=global_tolerations\n            ),\n            node_selectors=global_node_selectors,\n        )\n        builder_bls_secret_key = builder_key_result.output\n        plan.print(\n            \"Builder configuration: {0} builder(s) registered at genesis with 0x03 credentials\".format(\n                network_params.builder_count\n            )\n        )\n        plan.print(\"Builder mnemonic: '{0}'\".format(constants.DEFAULT_MNEMONIC))\n        plan.print(\"Builder BLS private key: {0}\".format(builder_bls_secret_key))\n\n    all_el_contexts = []\n    all_cl_contexts = []\n    all_vc_contexts = []\n    all_remote_signer_contexts = []\n    all_ethereum_metrics_exporter_contexts = []\n    all_xatu_sentry_contexts = []\n    for participant in all_participants:\n        all_el_contexts.append(participant.el_context)\n        all_cl_contexts.append(participant.cl_context)\n        all_vc_contexts.append(participant.vc_context)\n        all_remote_signer_contexts.append(participant.remote_signer_context)\n        all_ethereum_metrics_exporter_contexts.append(\n            participant.ethereum_metrics_exporter_context\n        )\n        all_xatu_sentry_contexts.append(participant.xatu_sentry_context)\n\n    # Generate validator ranges\n    validator_ranges_config_template = read_file(\n        static_files.VALIDATOR_RANGES_CONFIG_TEMPLATE_FILEPATH\n    )\n    ranges = validator_ranges.generate_validator_ranges(\n        plan,\n        validator_ranges_config_template,\n        all_participants,\n        args_with_right_defaults.participants,\n    )\n\n    fuzz_target = \"http://{0}:{1}\".format(\n        all_el_contexts[0].ip_addr,\n        all_el_contexts[0].rpc_port_num,\n    )\n\n    # Broadcaster forwards requests, sent to it, to all nodes in parallel\n    if \"broadcaster\" in args_with_right_defaults.additional_services:\n        args_with_right_defaults.additional_services.remove(\"broadcaster\")\n        broadcaster_service = broadcaster.launch_broadcaster(\n            plan,\n            all_el_contexts,\n            global_node_selectors,\n            global_tolerations,\n        )\n        fuzz_target = \"http://{0}:{1}\".format(\n            broadcaster_service.name,\n            broadcaster.PORT,\n        )\n\n    mev_endpoints = []\n    mev_endpoint_names = []\n    # passed external relays get priority\n    # perhaps add mev_type External or remove this\n    if (\n        hasattr(participant, \"builder_network_params\")\n        and participant.builder_network_params != None\n    ):\n        mev_endpoints = participant.builder_network_params.relay_end_points\n        for idx, mev_endpoint in enumerate(mev_endpoints):\n            mev_endpoint_names.append(\"relay-{0}\".format(idx + 1))\n    # otherwise dummy relays spinup if chosen\n    elif (\n        args_with_right_defaults.mev_type\n        and args_with_right_defaults.mev_type == constants.MOCK_MEV_TYPE\n    ):\n        el_uri = \"{0}:{1}\".format(\n            all_el_contexts[0].dns_name,\n            all_el_contexts[0].engine_rpc_port_num,\n        )\n\n        # beacon uri for mock mev needs to use ip address and not dns name\n        beacon_uri_for_mock_mev = \"{0}:{1}\".format(\n            all_cl_contexts[0].ip_address,\n            all_cl_contexts[0].http_port,\n        )\n\n        endpoint = mock_mev.launch_mock_mev(\n            plan,\n            el_uri,\n            beacon_uri_for_mock_mev,\n            jwt_file,\n            args_with_right_defaults.global_log_level,\n            global_node_selectors,\n            global_tolerations,\n            args_with_right_defaults.mev_params,\n        )\n        mev_endpoints.append(endpoint)\n        mev_endpoint_names.append(constants.MOCK_MEV_TYPE)\n    elif (\n        args_with_right_defaults.mev_type\n        and args_with_right_defaults.mev_type == constants.BUILDOOR_MEV_TYPE\n    ):\n        beacon_uri = \"http://{0}:{1}\".format(\n            all_cl_contexts[0].beacon_service_name,\n            all_cl_contexts[0].http_port,\n        )\n        el_rpc_uri = \"http://{0}:{1}\".format(\n            all_el_contexts[0].dns_name,\n            all_el_contexts[0].rpc_port_num,\n        )\n        engine_rpc_uri = \"http://{0}:{1}\".format(\n            all_el_contexts[0].dns_name,\n            all_el_contexts[0].engine_rpc_port_num,\n        )\n        endpoint = buildoor.launch_buildoor(\n            plan,\n            beacon_uri,\n            el_rpc_uri,\n            engine_rpc_uri,\n            jwt_file,\n            prefunded_accounts[0].private_key,\n            args_with_right_defaults.buildoor_params,\n            global_node_selectors,\n            global_tolerations,\n            builder_bls_secret_key,\n        )\n        mev_endpoints.append(endpoint)\n        mev_endpoint_names.append(constants.BUILDOOR_MEV_TYPE)\n    elif args_with_right_defaults.mev_type and (\n        args_with_right_defaults.mev_type == constants.FLASHBOTS_MEV_TYPE\n        or args_with_right_defaults.mev_type == constants.MEV_RS_MEV_TYPE\n        or args_with_right_defaults.mev_type == constants.COMMIT_BOOST_MEV_TYPE\n        or args_with_right_defaults.mev_type == constants.HELIX_MEV_TYPE\n    ):\n        builder_cl_context = all_cl_contexts[-1]\n        blocksim_uri = \"http://{0}:{1}\".format(\n            all_el_contexts[-1].dns_name, all_el_contexts[-1].rpc_port_num\n        )\n        beacon_uri = builder_cl_context.beacon_http_url\n\n        first_cl_client = all_cl_contexts[0]\n        first_client_beacon_name = first_cl_client.beacon_service_name\n\n        # Check if we should run multiple relays (flashbots + helix)\n        if mev_params.run_multiple_relays:\n            plan.print(\"Launching multiple MEV relays (flashbots + helix)\")\n            # Launch flashbots relay first\n            flashbots_endpoint = flashbots_mev_relay.launch_mev_relay(\n                plan,\n                mev_params,\n                network_id,\n                beacon_uri,\n                genesis_validators_root,\n                blocksim_uri,\n                network_params,\n                persistent,\n                args_with_right_defaults.port_publisher,\n                num_participants,\n                global_node_selectors,\n                global_tolerations,\n                builder_cl_context.beacon_service_name,\n            )\n            mev_endpoints.append(flashbots_endpoint)\n            mev_endpoint_names.append(\"flashbots\")\n\n            # Launch helix relay second\n            helix_endpoint = helix_relay.launch_helix_relay(\n                plan,\n                network_params,\n                mev_params,\n                beacon_uri,\n                genesis_validators_root,\n                final_genesis_timestamp,\n                blocksim_uri,\n                persistent,\n                args_with_right_defaults.port_publisher,\n                num_participants + 1,  # Use different index for port allocation\n                global_node_selectors,\n                global_tolerations,\n                el_cl_data_files_artifact_uuid,\n                mev_params.helix_relay_image,  # Use the helix-specific image\n            )\n            mev_endpoints.append(helix_endpoint)\n            mev_endpoint_names.append(\"helix\")\n        elif (\n            args_with_right_defaults.mev_type == constants.FLASHBOTS_MEV_TYPE\n            or args_with_right_defaults.mev_type == constants.COMMIT_BOOST_MEV_TYPE\n        ):\n            endpoint = flashbots_mev_relay.launch_mev_relay(\n                plan,\n                mev_params,\n                network_id,\n                beacon_uri,\n                genesis_validators_root,\n                blocksim_uri,\n                network_params,\n                persistent,\n                args_with_right_defaults.port_publisher,\n                num_participants,\n                global_node_selectors,\n                global_tolerations,\n                builder_cl_context.beacon_service_name,\n            )\n            mev_endpoints.append(endpoint)\n            mev_endpoint_names.append(args_with_right_defaults.mev_type)\n        elif args_with_right_defaults.mev_type == constants.MEV_RS_MEV_TYPE:\n            endpoint, relay_ip_address, relay_port = mev_rs_mev_relay.launch_mev_relay(\n                plan,\n                mev_params,\n                network_params.network,\n                beacon_uri,\n                el_cl_data_files_artifact_uuid,\n                args_with_right_defaults.port_publisher,\n                num_participants,\n                global_node_selectors,\n                global_tolerations,\n            )\n            mev_endpoints.append(endpoint)\n            mev_endpoint_names.append(args_with_right_defaults.mev_type)\n        elif args_with_right_defaults.mev_type == constants.HELIX_MEV_TYPE:\n            endpoint = helix_relay.launch_helix_relay(\n                plan,\n                network_params,\n                mev_params,\n                beacon_uri,\n                genesis_validators_root,\n                final_genesis_timestamp,\n                blocksim_uri,\n                persistent,\n                args_with_right_defaults.port_publisher,\n                num_participants,\n                global_node_selectors,\n                global_tolerations,\n                el_cl_data_files_artifact_uuid,\n            )\n            mev_endpoints.append(endpoint)\n            mev_endpoint_names.append(args_with_right_defaults.mev_type)\n        else:\n            fail(\"Invalid MEV type\")\n\n    # spin up the mev boost contexts if some endpoints for relays have been passed\n    all_mevboost_contexts = []\n    if mev_endpoints:\n        for index, participant in enumerate(all_participants):\n            index_str = shared_utils.zfill_custom(\n                index + 1, len(str(len(all_participants)))\n            )\n            plan.print(\n                \"args_with_right_defaults.participants[index].validator_count {0}\".format(\n                    args_with_right_defaults.participants[index].validator_count\n                )\n            )\n            if args_with_right_defaults.participants[index].validator_count != 0:\n                if (\n                    args_with_right_defaults.mev_type == constants.FLASHBOTS_MEV_TYPE\n                    or args_with_right_defaults.mev_type == constants.MOCK_MEV_TYPE\n                    or args_with_right_defaults.mev_type == constants.HELIX_MEV_TYPE\n                    or args_with_right_defaults.mev_type == constants.BUILDOOR_MEV_TYPE\n                ):\n                    mev_boost_launcher = flashbots_mev_boost.new_mev_boost_launcher(\n                        MEV_BOOST_SHOULD_CHECK_RELAY,\n                        mev_endpoints,\n                    )\n                    mev_boost_service_name = \"{0}-{1}-{2}-{3}\".format(\n                        constants.MEV_BOOST_SERVICE_NAME_PREFIX,\n                        index_str,\n                        participant.cl_type,\n                        participant.el_type,\n                    )\n                    mev_boost_context = flashbots_mev_boost.launch(\n                        plan,\n                        mev_boost_launcher,\n                        mev_boost_service_name,\n                        final_genesis_timestamp,\n                        mev_params.mev_boost_image,\n                        mev_params.mev_boost_args,\n                        args_with_right_defaults.participants[index],\n                        network_params.seconds_per_slot,\n                        args_with_right_defaults.port_publisher,\n                        index,\n                        global_node_selectors,\n                        global_tolerations,\n                    )\n                elif args_with_right_defaults.mev_type == constants.MEV_RS_MEV_TYPE:\n                    plan.print(\"Launching mev-rs mev boost\")\n                    mev_boost_launcher = mev_rs_mev_boost.new_mev_boost_launcher(\n                        MEV_BOOST_SHOULD_CHECK_RELAY,\n                        mev_endpoints,\n                    )\n                    mev_boost_service_name = \"{0}-{1}-{2}-{3}\".format(\n                        constants.MEV_BOOST_SERVICE_NAME_PREFIX,\n                        index_str,\n                        participant.cl_type,\n                        participant.el_type,\n                    )\n                    mev_boost_context = mev_rs_mev_boost.launch(\n                        plan,\n                        mev_boost_launcher,\n                        mev_boost_service_name,\n                        network_params.network,\n                        mev_params,\n                        mev_endpoints,\n                        el_cl_data_files_artifact_uuid,\n                        args_with_right_defaults.port_publisher,\n                        index,\n                        global_node_selectors,\n                        global_tolerations,\n                    )\n                elif (\n                    args_with_right_defaults.mev_type == constants.COMMIT_BOOST_MEV_TYPE\n                ):\n                    plan.print(\"Launching commit-boost PBS service\")\n                    mev_boost_launcher = commit_boost_mev_boost.new_mev_boost_launcher(\n                        MEV_BOOST_SHOULD_CHECK_RELAY,\n                        mev_endpoints,\n                    )\n                    mev_boost_service_name = \"{0}-{1}-{2}-{3}\".format(\n                        constants.COMMIT_BOOST_SERVICE_NAME_PREFIX,\n                        index_str,\n                        participant.cl_type,\n                        participant.el_type,\n                    )\n                    mev_boost_context = commit_boost_mev_boost.launch(\n                        plan,\n                        mev_boost_launcher,\n                        mev_boost_service_name,\n                        network_params.network,\n                        mev_params,\n                        mev_endpoints,\n                        el_cl_data_files_artifact_uuid,\n                        args_with_right_defaults.port_publisher,\n                        index,\n                        global_node_selectors,\n                        global_tolerations,\n                        final_genesis_timestamp,\n                    )\n                else:\n                    fail(\"Invalid MEV type\")\n                all_mevboost_contexts.append(mev_boost_context)\n\n    if len(args_with_right_defaults.additional_services) == 0:\n        output = struct(\n            all_participants=all_participants,\n            pre_funded_accounts=prefunded_accounts,\n            network_params=network_params,\n            network_id=network_id,\n            final_genesis_timestamp=final_genesis_timestamp,\n            genesis_validators_root=genesis_validators_root,\n        )\n\n        return output\n\n    launch_prometheus_grafana = False\n    for index, additional_service in enumerate(\n        args_with_right_defaults.additional_services\n    ):\n        if additional_service == \"tx_fuzz\":\n            plan.print(\"Launching tx-fuzz\")\n            tx_fuzz_params = args_with_right_defaults.tx_fuzz_params\n            tx_fuzz.launch_tx_fuzz(\n                plan,\n                prefunded_accounts,\n                fuzz_target,\n                tx_fuzz_params,\n                global_node_selectors,\n                global_tolerations,\n            )\n            plan.print(\"Successfully launched tx-fuzz\")\n        elif additional_service == \"rakoon\":\n            plan.print(\"Launching rakoon transaction fuzzer\")\n            rakoon_params = args_with_right_defaults.rakoon_params\n            rakoon.launch_rakoon(\n                plan,\n                prefunded_accounts,\n                fuzz_target,\n                rakoon_params,\n                network_params.genesis_delay,\n                global_node_selectors,\n                global_tolerations,\n            )\n            plan.print(\"Successfully launched rakoon\")\n        elif additional_service == \"forkmon\":\n            plan.print(\"Launching el forkmon\")\n            forkmon_config_template = read_file(\n                static_files.FORKMON_CONFIG_TEMPLATE_FILEPATH\n            )\n            forkmon.launch_forkmon(\n                plan,\n                forkmon_config_template,\n                all_el_contexts,\n                global_node_selectors,\n                global_tolerations,\n                args_with_right_defaults.port_publisher,\n                index,\n                args_with_right_defaults.docker_cache_params,\n            )\n            plan.print(\"Successfully launched execution layer forkmon\")\n        elif additional_service == \"blockscout\":\n            plan.print(\"Launching blockscout\")\n            blockscout_sc_verif_url = blockscout.launch_blockscout(\n                plan,\n                all_el_contexts,\n                persistent,\n                global_node_selectors,\n                global_tolerations,\n                args_with_right_defaults.port_publisher,\n                index,\n                args_with_right_defaults.docker_cache_params,\n                args_with_right_defaults.blockscout_params,\n                network_params,\n                shadowfork_block_height,\n            )\n            plan.print(\"Successfully launched blockscout\")\n        elif additional_service == \"dora\":\n            plan.print(\"Launching dora\")\n            dora_config_template = read_file(static_files.DORA_CONFIG_TEMPLATE_FILEPATH)\n            dora_params = args_with_right_defaults.dora_params\n            dora.launch_dora(\n                plan,\n                dora_config_template,\n                all_participants,\n                args_with_right_defaults.participants,\n                network_params,\n                dora_params,\n                global_node_selectors,\n                global_tolerations,\n                mev_endpoints,\n                mev_endpoint_names,\n                args_with_right_defaults.port_publisher,\n                index,\n                args_with_right_defaults.docker_cache_params,\n                el_cl_data_files_artifact_uuid,\n            )\n            plan.print(\"Successfully launched dora\")\n        elif additional_service == \"checkpointz\":\n            plan.print(\"Launching checkpointz\")\n            checkpointz_config_template = read_file(\n                static_files.CHECKPOINTZ_CONFIG_TEMPLATE_FILEPATH\n            )\n            checkpointz_params = args_with_right_defaults.checkpointz_params\n            checkpointz.launch_checkpointz(\n                plan,\n                checkpointz_config_template,\n                all_participants,\n                args_with_right_defaults.participants,\n                network_params,\n                checkpointz_params,\n                global_node_selectors,\n                global_tolerations,\n                args_with_right_defaults.port_publisher,\n                index,\n                args_with_right_defaults.docker_cache_params,\n                el_cl_data_files_artifact_uuid,\n            )\n            plan.print(\"Successfully launched checkpointz\")\n        elif additional_service == \"dugtrio\":\n            plan.print(\"Launching dugtrio\")\n            dugtrio_config_template = read_file(\n                static_files.DUGTRIO_CONFIG_TEMPLATE_FILEPATH\n            )\n            dugtrio.launch_dugtrio(\n                plan,\n                dugtrio_config_template,\n                all_participants,\n                args_with_right_defaults.participants,\n                network_params,\n                global_node_selectors,\n                global_tolerations,\n                args_with_right_defaults.port_publisher,\n                index,\n                args_with_right_defaults.docker_cache_params,\n            )\n            plan.print(\"Successfully launched dugtrio\")\n        elif additional_service == \"blutgang\":\n            plan.print(\"Launching blutgang\")\n            blutgang_config_template = read_file(\n                static_files.BLUTGANG_CONFIG_TEMPLATE_FILEPATH\n            )\n            blutgang.launch_blutgang(\n                plan,\n                blutgang_config_template,\n                all_participants,\n                args_with_right_defaults.participants,\n                network_params,\n                global_node_selectors,\n                global_tolerations,\n                args_with_right_defaults.port_publisher,\n                index,\n                args_with_right_defaults.docker_cache_params,\n            )\n            plan.print(\"Successfully launched blutgang\")\n        elif additional_service == \"erpc\":\n            plan.print(\"Launching erpc\")\n            erpc_config_template = read_file(static_files.ERPC_CONFIG_TEMPLATE_FILEPATH)\n            erpc.launch_erpc(\n                plan,\n                erpc_config_template,\n                all_participants,\n                args_with_right_defaults.participants,\n                network_params,\n                global_node_selectors,\n                global_tolerations,\n                args_with_right_defaults.port_publisher,\n                index,\n                args_with_right_defaults.docker_cache_params,\n            )\n            plan.print(\"Successfully launched erpc\")\n        elif additional_service == \"blobscan\":\n            plan.print(\"Launching blobscan\")\n            blobscan.launch_blobscan(\n                plan,\n                all_cl_contexts,\n                all_el_contexts,\n                network_id,\n                network_params,\n                persistent,\n                global_node_selectors,\n                global_tolerations,\n                args_with_right_defaults.port_publisher,\n                index,\n                args_with_right_defaults.docker_cache_params,\n            )\n            plan.print(\"Successfully launched blobscan\")\n        elif additional_service == \"forky\":\n            plan.print(\"Launching forky\")\n            forky_config_template = read_file(\n                static_files.FORKY_CONFIG_TEMPLATE_FILEPATH\n            )\n            forky.launch_forky(\n                plan,\n                forky_config_template,\n                all_participants,\n                args_with_right_defaults.participants,\n                el_cl_data_files_artifact_uuid,\n                network_params,\n                global_node_selectors,\n                global_tolerations,\n                final_genesis_timestamp,\n                args_with_right_defaults.port_publisher,\n                index,\n                args_with_right_defaults.docker_cache_params,\n            )\n            plan.print(\"Successfully launched forky\")\n        elif additional_service == \"tracoor\":\n            plan.print(\"Launching tracoor\")\n            tracoor_config_template = read_file(\n                static_files.TRACOOR_CONFIG_TEMPLATE_FILEPATH\n            )\n            tracoor.launch_tracoor(\n                plan,\n                tracoor_config_template,\n                all_participants,\n                args_with_right_defaults.participants,\n                el_cl_data_files_artifact_uuid,\n                network_params,\n                global_node_selectors,\n                global_tolerations,\n                final_genesis_timestamp,\n                args_with_right_defaults.port_publisher,\n                index,\n                args_with_right_defaults.docker_cache_params,\n            )\n            plan.print(\"Successfully launched tracoor\")\n        elif additional_service == \"apache\":\n            plan.print(\"Launching apache\")\n            apache.launch_apache(\n                plan,\n                el_cl_data_files_artifact_uuid,\n                apache_port,\n                all_participants,\n                args_with_right_defaults.participants,\n                args_with_right_defaults.port_publisher,\n                index,\n                global_node_selectors,\n                global_tolerations,\n                args_with_right_defaults.docker_cache_params,\n            )\n            plan.print(\"Successfully launched apache\")\n        elif additional_service == \"nginx\":\n            plan.print(\"Launching nginx\")\n            nginx.launch_nginx(\n                plan,\n                el_cl_data_files_artifact_uuid,\n                nginx_port,\n                all_participants,\n                args_with_right_defaults.participants,\n                args_with_right_defaults.port_publisher,\n                index,\n                global_node_selectors,\n                global_tolerations,\n                args_with_right_defaults.docker_cache_params,\n            )\n            plan.print(\"Successfully launched nginx\")\n        elif additional_service == \"full_beaconchain_explorer\":\n            plan.print(\"Launching full-beaconchain-explorer\")\n            full_beaconchain_explorer_config_template = read_file(\n                static_files.FULL_BEACONCHAIN_CONFIG_TEMPLATE_FILEPATH\n            )\n            full_beaconchain_explorer.launch_full_beacon(\n                plan,\n                full_beaconchain_explorer_config_template,\n                el_cl_data_files_artifact_uuid,\n                all_cl_contexts,\n                all_el_contexts,\n                persistent,\n                global_node_selectors,\n                global_tolerations,\n                args_with_right_defaults.port_publisher,\n                index,\n            )\n            plan.print(\"Successfully launched full-beaconchain-explorer\")\n        elif additional_service == \"prometheus\":\n            plan.print(\"Launching prometheus...\")\n            prometheus_private_url = prometheus.launch_prometheus(\n                plan,\n                all_el_contexts,\n                all_cl_contexts,\n                all_vc_contexts,\n                network_params,\n                all_remote_signer_contexts,\n                prometheus_additional_metrics_jobs,\n                all_ethereum_metrics_exporter_contexts,\n                all_xatu_sentry_contexts,\n                global_node_selectors,\n                args_with_right_defaults.prometheus_params,\n                args_with_right_defaults.port_publisher,\n                index,\n            )\n            plan.print(\"Successfully launched prometheus\")\n        elif additional_service == \"grafana\":\n            plan.print(\"Launching grafana...\")\n            grafana.launch_grafana(\n                plan,\n                grafana_datasource_config_template,\n                grafana_dashboards_config_template,\n                prometheus_private_url,\n                global_node_selectors,\n                global_tolerations,\n                args_with_right_defaults.grafana_params,\n                args_with_right_defaults.port_publisher,\n                index,\n                tempo_query_url,\n            )\n            plan.print(\"Successfully launched grafana\")\n        elif additional_service == \"tempo\":\n            plan.print(\"Launching tempo...\")\n            tempo.launch_tempo(\n                plan,\n                tempo_config_template,\n                global_node_selectors,\n                global_tolerations,\n                args_with_right_defaults.tempo_params,\n                args_with_right_defaults.port_publisher,\n                index,\n            )\n            plan.print(\"Successfully launched tempo\")\n        elif additional_service == \"prometheus_grafana\":\n            # Allow prometheus to be launched last so is able to collect metrics from other services\n            launch_prometheus_grafana = True\n            prometheus_grafana_index = index\n        elif additional_service == \"assertoor\":\n            plan.print(\"Launching assertoor\")\n            assertoor_config_template = read_file(\n                static_files.ASSERTOOR_CONFIG_TEMPLATE_FILEPATH\n            )\n            assertoor_params = args_with_right_defaults.assertoor_params\n            assertoor.launch_assertoor(\n                plan,\n                assertoor_config_template,\n                all_participants,\n                args_with_right_defaults.participants,\n                network_params,\n                assertoor_params,\n                args_with_right_defaults.port_publisher,\n                index,\n                global_node_selectors,\n                global_tolerations,\n                args_with_right_defaults.docker_cache_params,\n            )\n            plan.print(\"Successfully launched assertoor\")\n        elif additional_service == \"custom_flood\":\n            mev_custom_flood.spam_in_background(\n                plan,\n                prefunded_accounts[-1].private_key,\n                prefunded_accounts[0].address,\n                fuzz_target,\n                args_with_right_defaults.custom_flood_params,\n                global_node_selectors,\n                global_tolerations,\n                args_with_right_defaults.docker_cache_params,\n            )\n        elif additional_service == \"mempool_bridge\":\n            plan.print(\"Launching mempool-bridge\")\n            mempool_bridge.launch_mempool_bridge(\n                plan,\n                mempool_bridge_config_template,\n                all_el_contexts,\n                args_with_right_defaults.mempool_bridge_params,\n                args_with_right_defaults.network_params,\n                global_node_selectors,\n                global_tolerations,\n                args_with_right_defaults.port_publisher,\n                index,\n                args_with_right_defaults.docker_cache_params,\n                args_with_right_defaults.global_log_level,\n            )\n            plan.print(\"Successfully launched mempool-bridge\")\n        elif additional_service == \"spamoor\":\n            plan.print(\"Launching spamoor\")\n            spamoor_config_template = read_file(\n                static_files.SPAMOOR_CONFIG_TEMPLATE_FILEPATH\n            )\n            spamoor_hosts_template = read_file(\n                static_files.SPAMOOR_HOSTS_TEMPLATE_FILEPATH\n            )\n            spamoor.launch_spamoor(\n                plan,\n                spamoor_config_template,\n                spamoor_hosts_template,\n                prefunded_accounts,\n                all_participants,\n                args_with_right_defaults.participants,\n                args_with_right_defaults.spamoor_params,\n                global_node_selectors,\n                global_tolerations,\n                args_with_right_defaults.network_params,\n                args_with_right_defaults.port_publisher,\n                index,\n                osaka_time,\n            )\n            plan.print(\"Successfully launched spamoor\")\n        elif additional_service == \"slashoor\":\n            plan.print(\"Launching slashoor\")\n            slashoor_config_template = read_file(\n                static_files.SLASHOOR_CONFIG_TEMPLATE_FILEPATH\n            )\n            slashoor.launch_slashoor(\n                plan,\n                slashoor_config_template,\n                all_participants,\n                args_with_right_defaults.participants,\n                args_with_right_defaults.slashoor_params,\n                global_node_selectors,\n                global_tolerations,\n                network_params,\n                args_with_right_defaults.additional_services,\n            )\n            plan.print(\"Successfully launched slashoor\")\n        elif additional_service == \"zkboost\":\n            plan.print(\"Launching zkboost\")\n            zkboost_config_template = read_file(\n                static_files.ZKBOOST_CONFIG_TEMPLATE_FILEPATH\n            )\n            zkboost_metrics_jobs = zkboost.launch_zkboost(\n                plan,\n                zkboost_config_template,\n                all_participants,\n                args_with_right_defaults.zkboost_params,\n                global_node_selectors,\n                global_tolerations,\n                args_with_right_defaults.port_publisher,\n                index,\n                args_with_right_defaults.docker_cache_params,\n                tempo_otlp_grpc_url,\n            )\n            prometheus_additional_metrics_jobs.extend(zkboost_metrics_jobs)\n            plan.print(\"Successfully launched zkboost\")\n        else:\n            fail(\"Invalid additional service %s\" % (additional_service))\n    if launch_prometheus_grafana:\n        plan.print(\"Launching prometheus...\")\n        prometheus_private_url = prometheus.launch_prometheus(\n            plan,\n            all_el_contexts,\n            all_cl_contexts,\n            all_vc_contexts,\n            network_params,\n            all_remote_signer_contexts,\n            prometheus_additional_metrics_jobs,\n            all_ethereum_metrics_exporter_contexts,\n            all_xatu_sentry_contexts,\n            global_node_selectors,\n            args_with_right_defaults.prometheus_params,\n            args_with_right_defaults.port_publisher,\n            prometheus_grafana_index,\n        )\n        plan.print(\"Launching grafana...\")\n        grafana.launch_grafana(\n            plan,\n            grafana_datasource_config_template,\n            grafana_dashboards_config_template,\n            prometheus_private_url,\n            global_node_selectors,\n            global_tolerations,\n            args_with_right_defaults.grafana_params,\n            args_with_right_defaults.port_publisher,\n            prometheus_grafana_index,\n            tempo_query_url,\n        )\n        plan.print(\"Successfully launched grafana\")\n\n    if args_with_right_defaults.wait_for_finalization:\n        plan.print(\"Waiting for the first finalized epoch\")\n        first_cl_client = all_cl_contexts[0]\n        first_client_beacon_name = first_cl_client.beacon_service_name\n        epoch_recipe = GetHttpRequestRecipe(\n            endpoint=\"/eth/v1/beacon/states/head/finality_checkpoints\",\n            port_id=HTTP_PORT_ID_FOR_FACT,\n            extract={\"finalized_epoch\": \".data.finalized.epoch\"},\n        )\n        plan.wait(\n            recipe=epoch_recipe,\n            field=\"extract.finalized_epoch\",\n            assertion=\"!=\",\n            target_value=\"0\",\n            timeout=\"40m\",\n            service_name=first_client_beacon_name,\n        )\n        plan.print(\"First finalized epoch occurred successfully\")\n\n    grafana_info = struct(\n        dashboard_path=GRAFANA_DASHBOARD_PATH_URL,\n        user=GRAFANA_USER,\n        password=GRAFANA_PASSWORD,\n    )\n\n    output = struct(\n        grafana_info=grafana_info,\n        blockscout_sc_verif_url=None\n        if (\"blockscout\" in args_with_right_defaults.additional_services) == False\n        else blockscout_sc_verif_url,\n        all_participants=all_participants,\n        pre_funded_accounts=prefunded_accounts,\n        network_params=network_params,\n        network_id=network_id,\n        final_genesis_timestamp=final_genesis_timestamp,\n        genesis_validators_root=genesis_validators_root,\n    )\n\n    return output\n"
  },
  {
    "path": "network_params.yaml",
    "content": "participants:\n# EL\n  - el_type: geth\n    el_image: ethereum/client-go:latest\n    el_binary_path: \"\"\n    el_log_level: \"\"\n    el_extra_env_vars: {}\n    el_extra_labels: {}\n    el_extra_params: []\n    el_extra_mounts: {}\n    el_devices: []\n    el_tolerations: []\n    el_volume_size: 0\n    el_min_cpu: 0\n    el_max_cpu: 0\n    el_min_mem: 0\n    el_max_mem: 0\n# CL\n    cl_type: lighthouse\n    cl_image: sigp/lighthouse:latest\n    cl_binary_path: \"\"\n    cl_log_level: \"\"\n    cl_extra_env_vars: {}\n    cl_extra_labels: {}\n    cl_extra_params: []\n    cl_extra_mounts: {}\n    cl_devices: []\n    cl_tolerations: []\n    cl_volume_size: 0\n    cl_min_cpu: 0\n    cl_max_cpu: 0\n    cl_min_mem: 0\n    cl_max_mem: 0\n    supernode: false\n    use_separate_vc: true\n# Validator\n    vc_type: lighthouse\n    vc_image: sigp/lighthouse:latest\n    vc_binary_path: \"\"\n    vc_log_level: \"\"\n    vc_extra_env_vars: {}\n    vc_extra_labels: {}\n    vc_extra_params: []\n    vc_extra_mounts: {}\n    vc_devices: []\n    vc_tolerations: []\n    vc_min_cpu: 0\n    vc_max_cpu: 0\n    vc_min_mem: 0\n    vc_max_mem: 0\n    validator_count: null\n    use_remote_signer: false\n# Remote signer\n    remote_signer_type: web3signer\n    remote_signer_image: consensys/web3signer:latest\n    remote_signer_extra_env_vars: {}\n    remote_signer_extra_labels: {}\n    remote_signer_extra_params: []\n    remote_signer_tolerations: []\n    remote_signer_min_cpu: 0\n    remote_signer_max_cpu: 0\n    remote_signer_min_mem: 0\n    remote_signer_max_mem: 0\n# participant specific\n    node_selectors: {}\n    tolerations: []\n    count: 1\n    snooper_enabled: false\n    ethereum_metrics_exporter_enabled: false\n    xatu_sentry_enabled: false\n    prometheus_config:\n      scrape_interval: 15s\n      labels: {}\n    blobber_enabled: false\n    blobber_extra_params: []\n    builder_network_params: null\n    keymanager_enabled: false\nnetwork_params:\n  network: kurtosis\n  network_id: \"3151908\"\n  deposit_contract_address: \"0x00000000219ab540356cBB839Cbe05303d7705Fa\"\n  seconds_per_slot: 12\n  slot_duration_ms: 12000\n  num_validator_keys_per_node: 128\n  preregistered_validator_keys_mnemonic:\n    \"giant issue aisle success illegal bike spike\n    question tent bar rely arctic volcano long crawl hungry vocal artwork sniff fantasy\n    very lucky have athlete\"\n  preregistered_validator_count: 0\n  additional_mnemonics: []\n  genesis_delay: 20\n  genesis_time: 0\n  genesis_gaslimit: 60000000\n  max_per_epoch_activation_churn_limit: 8\n  churn_limit_quotient: 65536\n  confirmation_byzantine_threshold: 25\n  ejection_balance: 16000000000\n  eth1_follow_distance: 2048\n  min_validator_withdrawability_delay: 256\n  shard_committee_period: 256\n  attestation_due_bps_gloas: 2500\n  aggregate_due_bps_gloas: 5000\n  sync_message_due_bps_gloas: 2500\n  contribution_due_bps_gloas: 5000\n  payload_attestation_due_bps: 7500\n  view_freeze_cutoff_bps: 7500\n  inclusion_list_submission_due_bps: 6667\n  proposer_inclusion_list_cutoff_bps: 9167\n  deneb_fork_epoch: 0\n  electra_fork_epoch: 0\n  fulu_fork_epoch: 0\n  gloas_fork_epoch: 18446744073709551615\n  network_sync_base_url: https://snapshots.ethpandaops.io/\n  force_snapshot_sync: false\n  samples_per_slot: 8\n  custody_requirement: 4\n  max_blobs_per_block_electra: 9\n  max_request_blocks_deneb: 128\n  target_blobs_per_block_electra: 6\n  base_fee_update_fraction_electra: 5007716\n  additional_preloaded_contracts: {}\n  devnet_repo: ethpandaops\n  prefunded_accounts: {}\n  bpo_1_epoch: 0\n  bpo_1_max_blobs: 15\n  bpo_1_target_blobs: 10\n  bpo_1_base_fee_update_fraction: 8346193\n  bpo_2_epoch: 18446744073709551615\n  bpo_2_max_blobs: 21\n  bpo_2_target_blobs: 14\n  bpo_2_base_fee_update_fraction: 11684671\n  bpo_3_epoch: 18446744073709551615\n  bpo_3_max_blobs: 0\n  bpo_3_target_blobs: 0\n  bpo_3_base_fee_update_fraction: 0\n  bpo_4_epoch: 18446744073709551615\n  bpo_4_max_blobs: 0\n  bpo_4_target_blobs: 0\n  bpo_4_base_fee_update_fraction: 0\n  bpo_5_epoch: 18446744073709551615\n  bpo_5_max_blobs: 0\n  bpo_5_target_blobs: 0\n  bpo_5_base_fee_update_fraction: 0\n  withdrawal_type: \"0x00\"\n  withdrawal_address: \"0x8943545177806ED17B9F23F0a21ee5948eCaa776\"\n  validator_balance: 32\n  min_epochs_for_data_column_sidecars_requests: 4096\n  builder_count: 0\n  builder_balance: 100\n\nadditional_services: []\ndora_params:\n  image: \"ethpandaops/dora:latest\"\ntx_fuzz_params:\n  tx_fuzz_extra_args: []\nspamoor_params:\n  min_cpu: 100\n  max_cpu: 1000\n  min_mem: 20\n  max_mem: 300\n  extra_args: []\nprometheus_params:\n  storage_tsdb_retention_time: \"1d\"\n  storage_tsdb_retention_size: \"512MB\"\n  min_cpu: 10\n  max_cpu: 1000\n  min_mem: 128\n  max_mem: 2048\ngrafana_params:\n  additional_dashboards: []\n  min_cpu: 10\n  max_cpu: 1000\n  min_mem: 128\n  max_mem: 2048\nassertoor_params:\n  image: \"ethpandaops/assertoor:latest\"\n  run_stability_check: false\n  run_block_proposal_check: false\n  run_transaction_test: false\n  run_blob_transaction_test: false\n  run_opcodes_transaction_test: false\n  run_lifecycle_test: false\n  tests: []\ncheckpointz_params:\n  image: \"ethpandaops/checkpointz:latest\"\nwait_for_finalization: false\nglobal_log_level: info\nsnooper_params:\n  enabled: false\n  image: \"\"\n  extra_args: []\n  extra_env_vars: {}\nethereum_metrics_exporter_enabled: false\nparallel_keystore_generation: false\ndisable_peer_scoring: false\npersistent: false\n# Supports: null, mock, flashbots, mev-rs, commit-boost, helix, buildoor\nmev_type: null\nmev_params:\n  mev_relay_image: ethpandaops/mev-boost-relay:main\n  mev_builder_image: ethpandaops/reth-rbuilder:develop\n  mev_builder_cl_image: sigp/lighthouse:latest\n  mev_builder_cl_extra_params: []\n  mev_boost_image: ethpandaops/mev-boost:develop\n  mev_boost_args: [\"mev-boost\", \"--relay-check\"]\n  mev_relay_api_extra_args: []\n  mev_relay_api_extra_env_vars: {}\n  mev_relay_housekeeper_extra_args: []\n  mev_relay_housekeeper_extra_env_vars: {}\n  mev_relay_website_extra_args: []\n  mev_relay_website_extra_env_vars: {}\n  mev_builder_extra_args: []\n  mev_builder_prometheus_config:\n    scrape_interval: 15s\n    labels: {}\n  run_multiple_relays: false\n  helix_relay_image: ghcr.io/gattaca-com/helix-relay:main\n  commit_boost_config: \"\"\n  custom_flood_params:\n    interval_between_transactions: 1\nbuildoor_params:\n  image: ethpandaops/buildoor:main\n  builder_api: true\n  epbs_builder: true\n  extra_args: []\nbootnodoor_params:\n  image: ethpandaops/bootnodoor:latest\n  min_cpu: 100\n  max_cpu: 1000\n  min_mem: 128\n  max_mem: 512\n  extra_args: []\nxatu_sentry_enabled: false\nxatu_sentry_params:\n  xatu_sentry_image: ethpandaops/xatu-sentry\n  xatu_server_addr: localhost:8000\n  xatu_server_tls: false\n  xatu_server_headers: {}\n  beacon_subscriptions:\n    - attestation\n    - single_attestation\n    - block\n    - block_gossip\n    - chain_reorg\n    - finalized_checkpoint\n    - head\n    - voluntary_exit\n    - contribution_and_proof\n    - blob_sidecar\n    - data_column_sidecar\napache_port: 40000\nnginx_port: 50000\nglobal_tolerations: []\nglobal_node_selectors: {}\nkeymanager_enabled: false\ncheckpoint_sync_enabled: false\ncheckpoint_sync_url: \"\"\nethereum_genesis_generator_params:\n  image: ethpandaops/ethereum-genesis-generator:6.0.5\n  extra_env: {}\nport_publisher:\n  nat_exit_ip: KURTOSIS_IP_ADDR_PLACEHOLDER\n  el:\n    enabled: false\n    public_port_start: 32000\n  cl:\n    enabled: false\n    public_port_start: 33000\n  vc:\n    enabled: false\n    public_port_start: 34000\n  remote_signer:\n    enabled: false\n    public_port_start: 35000\n  additional_services:\n    enabled: false\n    public_port_start: 36000\n  mev:\n    enabled: false\n    public_port_start: 37000\n  other:\n    enabled: false\n    public_port_start: 38000\n\n# Define custom file contents to be mounted into containers\n# Files defined here can be referenced in el_extra_mounts, cl_extra_mounts, and vc_extra_mounts\n# Example:\n# extra_files:\n#   my_config.json: |\n#     {\"setting\": \"value\"}\n#   my_script.sh: |\n#     #!/bin/bash\n#     echo \"Hello\"\nextra_files: {}\n"
  },
  {
    "path": "release-please-config.json",
    "content": "{\n  \"$schema\": \"https://raw.githubusercontent.com/googleapis/release-please/main/schemas/config.json\",\n  \"release-type\": \"simple\",\n  \"include-v-in-tag\": false,\n  \"include-component-in-tag\": false,\n  \"bump-minor-pre-major\": true,\n  \"bump-patch-for-minor-pre-major\": true,\n  \"packages\": {\n    \".\": {\n      \"package-name\": \"ethereum-package\"\n    }\n  }\n}\n"
  },
  {
    "path": "rename.sh",
    "content": "#!/bin/bash\n\n# Helper function to perform replacements\nperform_replacements() {\n    local input_file=\"$1\"\n    shift\n    local replacements=(\"$@\")\n\n    for ((i = 0; i < ${#replacements[@]}; i+=2)); do\n        original=\"${replacements[$i]}\"\n        replacement=\"${replacements[$i+1]}\"\n        sed -i -- \"s/$original/$replacement/g\" \"$input_file\"\n    done\n}\n\n# Check if an input file is provided\nif [ $# -eq 0 ]; then\n    echo \"Usage: $0 <input_file>\"\n    exit 1\nfi\n\n# Define the input YAML file\ninput_file=\"$1\"\n\n# Define the replacement pairs as a list\nreplacements=(\n    el_client_type\n    el_type\n    el_client_image\n    el_image\n    el_client_log_level\n    el_log_level\n    el_client_volume_size\n    el_volume_size\n    cl_client_type\n    cl_type\n    cl_client_image\n    cl_image\n    cl_client_volume_size\n    cl_volume_size\n    cl_client_log_level\n    cl_log_level\n    beacon_extra_params\n    cl_extra_params\n    beacon_extra_labels\n    cl_extra_labels\n    bn_min_cpu\n    cl_min_cpu\n    bn_max_cpu\n    cl_max_cpu\n    bn_min_mem\n    cl_min_mem\n    bn_max_mem\n    cl_max_mem\n    use_separate_validator_client\n    use_separate_vc\n    validator_client_type\n    vc_type\n    validator_tolerations\n    vc_tolerations\n    validator_client_image\n    vc_image\n    validator_extra_params\n    vc_extra_params\n    validator_extra_labels\n    vc_extra_labels\n    v_min_cpu\n    vc_min_cpu\n    v_max_cpu\n    vc_max_cpu\n    v_min_mem\n    vc_min_mem\n    v_max_mem\n    vc_max_mem\n    global_client_log_level\n    global_log_level\n    full\n    flashbots\n)\n\n# Perform replacements\nperform_replacements \"$input_file\" \"${replacements[@]}\"\n\necho \"Replacements completed.\"\n"
  },
  {
    "path": "src/apache/apache_launcher.star",
    "content": "shared_utils = import_module(\"../shared_utils/shared_utils.star\")\nstatic_files = import_module(\"../static_files/static_files.star\")\nconstants = import_module(\"../package_io/constants.star\")\ninput_parser = import_module(\"../package_io/input_parser.star\")\nSERVICE_NAME = \"apache\"\nHTTP_PORT_ID = \"http\"\nHTTP_PORT_NUMBER = 80\nAPACHE_CONFIG_FILENAME = \"index.html\"\nAPACHE_ENR_FILENAME = \"boot_enr.yaml\"\nAPACHE_ENODE_FILENAME = \"bootnode.txt\"\nAPACHE_ENR_LIST_FILENAME = \"bootstrap_nodes.txt\"\n\nAPACHE_CONFIG_MOUNT_DIRPATH_ON_SERVICE = \"/usr/local/apache2/htdocs/\"\n\nIMAGE_NAME = \"library/httpd:latest\"\n# The min/max CPU/memory that assertoor can use\nMIN_CPU = 100\nMAX_CPU = 300\nMIN_MEMORY = 128\nMAX_MEMORY = 256\n\nUSED_PORTS = {\n    HTTP_PORT_ID: shared_utils.new_port_spec(\n        HTTP_PORT_NUMBER,\n        shared_utils.TCP_PROTOCOL,\n        shared_utils.HTTP_APPLICATION_PROTOCOL,\n    )\n}\n\n\ndef launch_apache(\n    plan,\n    el_cl_genesis_data,\n    apache_port,\n    participant_contexts,\n    participant_configs,\n    port_publisher,\n    index,\n    global_node_selectors,\n    global_tolerations,\n    docker_cache_params,\n):\n    config_files_artifact_name = plan.upload_files(\n        src=static_files.APACHE_CONFIG_FILEPATH, name=\"apache-config\"\n    )\n\n    tolerations = shared_utils.get_tolerations(global_tolerations=global_tolerations)\n\n    public_ports = shared_utils.get_additional_service_standard_public_port(\n        port_publisher,\n        constants.HTTP_PORT_ID,\n        index,\n        0,\n    )\n\n    all_cl_client_info = []\n    all_el_client_info = []\n    for index, participant in enumerate(participant_contexts):\n        _, cl_client, el_client, _ = shared_utils.get_client_names(\n            participant, index, participant_contexts, participant_configs\n        )\n        all_cl_client_info.append(new_cl_client_info(cl_client.enr))\n        all_el_client_info.append(new_el_client_info(el_client.enode))\n\n    template_data = new_config_template_data(\n        all_cl_client_info,\n        all_el_client_info,\n    )\n\n    enr_template_and_data = shared_utils.new_template_and_data(\n        read_file(static_files.APACHE_ENR_FILEPATH),\n        template_data,\n    )\n\n    enr_list_template_and_data = shared_utils.new_template_and_data(\n        read_file(static_files.APACHE_ENR_LIST_FILEPATH),\n        template_data,\n    )\n\n    enode_template_and_data = shared_utils.new_template_and_data(\n        read_file(static_files.APACHE_ENODE_FILEPATH),\n        template_data,\n    )\n\n    template_and_data_by_rel_dest_filepath = {}\n    template_and_data_by_rel_dest_filepath[APACHE_ENR_FILENAME] = enr_template_and_data\n    template_and_data_by_rel_dest_filepath[\n        APACHE_ENR_LIST_FILENAME\n    ] = enr_list_template_and_data\n    template_and_data_by_rel_dest_filepath[\n        APACHE_ENODE_FILENAME\n    ] = enode_template_and_data\n\n    bootstrap_info_files_artifact_name = plan.render_templates(\n        template_and_data_by_rel_dest_filepath, \"bootstrap-info\"\n    )\n\n    if apache_port != None:\n        public_ports = {\n            HTTP_PORT_ID: shared_utils.new_port_spec(\n                apache_port, shared_utils.TCP_PROTOCOL\n            )\n        }\n\n    config = get_config(\n        config_files_artifact_name,\n        el_cl_genesis_data,\n        public_ports,\n        bootstrap_info_files_artifact_name,\n        global_node_selectors,\n        tolerations,\n        docker_cache_params,\n    )\n\n    plan.add_service(SERVICE_NAME, config)\n\n\ndef get_config(\n    config_files_artifact_name,\n    el_cl_genesis_data,\n    public_ports,\n    bootstrap_info_files_artifact_name,\n    node_selectors,\n    tolerations,\n    docker_cache_params,\n):\n    files = {\n        constants.GENESIS_DATA_MOUNTPOINT_ON_CLIENTS: el_cl_genesis_data,\n        constants.GENESIS_DATA_MOUNTPOINT_ON_CLIENTS\n        + \"/boot\": bootstrap_info_files_artifact_name,\n        APACHE_CONFIG_MOUNT_DIRPATH_ON_SERVICE: config_files_artifact_name,\n    }\n\n    cmd = [\n        \"echo\",\n        \"AddType application/octet-stream .tar\",\n        \">>\",\n        \"/usr/local/apache2/conf/httpd.conf\",\n        \"&&\",\n        \"mv\",\n        \"/network-configs/boot/\" + APACHE_ENR_FILENAME,\n        \"/network-configs/\" + APACHE_ENR_FILENAME,\n        \"&&\",\n        \"mv\",\n        \"/network-configs/boot/\" + APACHE_ENODE_FILENAME,\n        \"/network-configs/\" + APACHE_ENODE_FILENAME,\n        \"&&\",\n        \"mv\",\n        \"/network-configs/boot/\" + APACHE_ENR_LIST_FILENAME,\n        \"/network-configs/\" + APACHE_ENR_LIST_FILENAME,\n        \"&&\",\n        \"cp -R /network-configs /usr/local/apache2/htdocs/\",\n        \"&&\",\n        \"tar\",\n        \"-czvf\",\n        \"/usr/local/apache2/htdocs/network-config.tar\",\n        \"-C\",\n        \"/network-configs/\",\n        \".\",\n        \"&&\",\n        \"httpd-foreground\",\n    ]\n\n    cmd_str = \" \".join(cmd)\n\n    return ServiceConfig(\n        image=shared_utils.docker_cache_image_calc(\n            docker_cache_params,\n            IMAGE_NAME,\n        ),\n        ports=USED_PORTS,\n        public_ports=public_ports,\n        cmd=[cmd_str],\n        entrypoint=[\"sh\", \"-c\"],\n        files=files,\n        min_cpu=MIN_CPU,\n        max_cpu=MAX_CPU,\n        min_memory=MIN_MEMORY,\n        max_memory=MAX_MEMORY,\n        node_selectors=node_selectors,\n        tolerations=tolerations,\n    )\n\n\ndef new_config_template_data(cl_client, el_client):\n    return {\n        \"CLClient\": cl_client,\n        \"ELClient\": el_client,\n    }\n\n\ndef new_cl_client_info(enr):\n    return {\n        \"Enr\": enr,\n    }\n\n\ndef new_el_client_info(enode):\n    return {\n        \"Enode\": enode,\n    }\n"
  },
  {
    "path": "src/assertoor/assertoor_launcher.star",
    "content": "shared_utils = import_module(\"../shared_utils/shared_utils.star\")\nstatic_files = import_module(\"../static_files/static_files.star\")\nconstants = import_module(\"../package_io/constants.star\")\ninput_parser = import_module(\"../package_io/input_parser.star\")\nSERVICE_NAME = \"assertoor\"\n\nHTTP_PORT_ID = \"http\"\nHTTP_PORT_NUMBER = 8080\n\nASSERTOOR_CONFIG_FILENAME = \"assertoor-config.yaml\"\n\nASSERTOOR_CONFIG_MOUNT_DIRPATH_ON_SERVICE = \"/config\"\nASSERTOOR_TESTS_MOUNT_DIRPATH_ON_SERVICE = \"/tests\"\n\nVALIDATOR_RANGES_MOUNT_DIRPATH_ON_SERVICE = \"/validator-ranges\"\nVALIDATOR_RANGES_ARTIFACT_NAME = \"validator-ranges\"\n\n# The min/max CPU/memory that assertoor can use\nMIN_CPU = 100\nMAX_CPU = 1000\nMIN_MEMORY = 128\nMAX_MEMORY = 8192\n\nUSED_PORTS = {\n    HTTP_PORT_ID: shared_utils.new_port_spec(\n        HTTP_PORT_NUMBER,\n        shared_utils.TCP_PROTOCOL,\n        shared_utils.HTTP_APPLICATION_PROTOCOL,\n    )\n}\n\n\ndef launch_assertoor(\n    plan,\n    config_template,\n    participant_contexts,\n    participant_configs,\n    network_params,\n    assertoor_params,\n    port_publisher,\n    index,\n    global_node_selectors,\n    global_tolerations,\n    docker_cache_params,\n):\n    all_client_info = []\n    clients_with_validators = []\n    clients_with_el_snooper = []\n    clients_with_cl_snooper = []\n\n    public_ports = shared_utils.get_additional_service_standard_public_port(\n        port_publisher,\n        constants.HTTP_PORT_ID,\n        index,\n        0,\n    )\n\n    tolerations = shared_utils.get_tolerations(global_tolerations=global_tolerations)\n\n    for index, participant in enumerate(participant_contexts):\n        (\n            full_name,\n            cl_client,\n            el_client,\n            participant_config,\n        ) = shared_utils.get_client_names(\n            participant, index, participant_contexts, participant_configs\n        )\n\n        client_info = new_client_info(\n            cl_client.beacon_http_url,\n            el_client.dns_name,\n            el_client.rpc_port_num,\n            participant.snooper_el_engine_context,\n            participant.snooper_beacon_context,\n            full_name,\n        )\n\n        all_client_info.append(client_info)\n\n        if participant_config.validator_count != 0:\n            clients_with_validators.append(client_info)\n        if participant.snooper_el_engine_context != None:\n            clients_with_el_snooper.append(client_info)\n        if participant.snooper_beacon_context != None:\n            clients_with_cl_snooper.append(client_info)\n\n    template_data = new_config_template_data(\n        HTTP_PORT_NUMBER,\n        all_client_info,\n        clients_with_validators,\n        clients_with_el_snooper,\n        clients_with_cl_snooper,\n        assertoor_params,\n    )\n\n    template_and_data = shared_utils.new_template_and_data(\n        config_template, template_data\n    )\n    template_and_data_by_rel_dest_filepath = {}\n    template_and_data_by_rel_dest_filepath[\n        ASSERTOOR_CONFIG_FILENAME\n    ] = template_and_data\n\n    config_files_artifact_name = plan.render_templates(\n        template_and_data_by_rel_dest_filepath, \"assertoor-config\"\n    )\n\n    tests_config_artifacts_name = plan.upload_files(\n        static_files.ASSERTOOR_TESTS_CONFIG_DIRPATH, name=\"assertoor-tests\"\n    )\n\n    config = get_config(\n        config_files_artifact_name,\n        tests_config_artifacts_name,\n        network_params,\n        assertoor_params,\n        public_ports,\n        global_node_selectors,\n        tolerations,\n        docker_cache_params,\n    )\n\n    plan.add_service(SERVICE_NAME, config)\n\n\ndef get_config(\n    config_files_artifact_name,\n    tests_config_artifacts_name,\n    network_params,\n    assertoor_params,\n    public_ports,\n    node_selectors,\n    tolerations,\n    docker_cache_params,\n):\n    config_file_path = shared_utils.path_join(\n        ASSERTOOR_CONFIG_MOUNT_DIRPATH_ON_SERVICE,\n        ASSERTOOR_CONFIG_FILENAME,\n    )\n\n    IMAGE_NAME = assertoor_params.image\n\n    return ServiceConfig(\n        image=IMAGE_NAME,\n        ports=USED_PORTS,\n        public_ports=public_ports,\n        files={\n            ASSERTOOR_CONFIG_MOUNT_DIRPATH_ON_SERVICE: config_files_artifact_name,\n            ASSERTOOR_TESTS_MOUNT_DIRPATH_ON_SERVICE: tests_config_artifacts_name,\n            VALIDATOR_RANGES_MOUNT_DIRPATH_ON_SERVICE: VALIDATOR_RANGES_ARTIFACT_NAME,\n        },\n        cmd=[\"--config\", config_file_path],\n        min_cpu=MIN_CPU,\n        max_cpu=MAX_CPU,\n        min_memory=MIN_MEMORY,\n        max_memory=MAX_MEMORY,\n        node_selectors=node_selectors,\n        tolerations=tolerations,\n    )\n\n\ndef new_config_template_data(\n    listen_port_num,\n    all_client_info,\n    clients_with_validators,\n    clients_with_el_snooper,\n    clients_with_cl_snooper,\n    assertoor_params,\n):\n    additional_tests = []\n    for index, testcfg in enumerate(assertoor_params.tests):\n        if type(testcfg) == \"dict\":\n            additional_tests.append(json.encode(testcfg))\n        else:\n            additional_tests.append(\n                json.encode(\n                    {\n                        \"file\": testcfg,\n                    }\n                )\n            )\n\n    return {\n        \"ListenPortNum\": listen_port_num,\n        \"ClientInfo\": all_client_info,\n        \"ValidatorClientInfo\": clients_with_validators,\n        \"ElSnooperClientInfo\": clients_with_el_snooper,\n        \"ClSnooperClientInfo\": clients_with_cl_snooper,\n        \"RunStabilityCheck\": assertoor_params.run_stability_check,\n        \"RunBlockProposalCheck\": assertoor_params.run_block_proposal_check,\n        \"RunLifecycleTest\": assertoor_params.run_lifecycle_test,\n        \"RunTransactionTest\": assertoor_params.run_transaction_test,\n        \"RunBlobTransactionTest\": assertoor_params.run_blob_transaction_test,\n        \"RunOpcodesTransactionTest\": assertoor_params.run_opcodes_transaction_test,\n        \"AdditionalTests\": additional_tests,\n    }\n\n\ndef new_client_info(\n    beacon_http_url,\n    el_ip_addr,\n    el_port_num,\n    el_snooper_context,\n    cl_snooper_context,\n    full_name,\n):\n    el_snooper_enabled = False\n    el_snooper_url = \"\"\n    cl_snooper_enabled = False\n    cl_snooper_url = \"\"\n\n    if el_snooper_context != None:\n        el_snooper_enabled = True\n        el_snooper_url = \"http://{0}:{1}\".format(\n            el_snooper_context.dns_name,\n            el_snooper_context.engine_rpc_port_num,\n        )\n    if cl_snooper_context != None:\n        cl_snooper_enabled = True\n        cl_snooper_url = \"http://{0}:{1}\".format(\n            cl_snooper_context.dns_name,\n            cl_snooper_context.beacon_rpc_port_num,\n        )\n\n    return {\n        \"CL_HTTP_URL\": beacon_http_url,\n        \"ELIPAddr\": el_ip_addr,\n        \"ELPortNum\": el_port_num,\n        \"ELSnooperEnabled\": el_snooper_enabled,\n        \"ELSnooperUrl\": el_snooper_url,\n        \"CLSnooperEnabled\": cl_snooper_enabled,\n        \"CLSnooperUrl\": cl_snooper_url,\n        \"Name\": full_name,\n    }\n"
  },
  {
    "path": "src/blobber/blobber_context.star",
    "content": "def new_blobber_context(dns_name, port_num):\n    return struct(\n        dns_name=dns_name,\n        port_num=port_num,\n    )\n"
  },
  {
    "path": "src/blobber/blobber_launcher.star",
    "content": "shared_utils = import_module(\"../shared_utils/shared_utils.star\")\ninput_parser = import_module(\"../package_io/input_parser.star\")\nconstants = import_module(\"../package_io/constants.star\")\ncl_context = import_module(\"../cl/cl_context.star\")\n\nblobber_context = import_module(\"../blobber/blobber_context.star\")\n\nBLOBBER_BEACON_PORT_NUM = 9000\nBLOBBER_BEACON_PORT_TCP_ID = \"discovery-tcp\"\nBLOBBER_BEACON_PORT_UDP_ID = \"discovery-udp\"\nBLOBBER_VALIDATOR_PROXY_PORT_NUM = 5000\nBLOBBER_VALIDATOR_PROXY_PORT_ID = \"http\"\n\nDEFAULT_BLOBBER_IMAGE = \"ethpandaops/blobber:1.1.0\"\n\nVALIDATOR_KEYS_MOUNTPOINT_ON_CLIENTS = \"/validator-keys\"\n\nBLOBBER_USED_PORTS = {\n    BLOBBER_VALIDATOR_PROXY_PORT_ID: shared_utils.new_port_spec(\n        BLOBBER_VALIDATOR_PROXY_PORT_NUM, shared_utils.TCP_PROTOCOL, wait=\"5s\"\n    ),\n    BLOBBER_BEACON_PORT_TCP_ID: shared_utils.new_port_spec(\n        BLOBBER_BEACON_PORT_NUM, shared_utils.TCP_PROTOCOL, wait=None\n    ),\n    BLOBBER_BEACON_PORT_UDP_ID: shared_utils.new_port_spec(\n        BLOBBER_BEACON_PORT_NUM, shared_utils.UDP_PROTOCOL, wait=None\n    ),\n}\n\n# The min/max CPU/memory that blobbers can use\nMIN_CPU = 10\nMAX_CPU = 500\nMIN_MEMORY = 10\nMAX_MEMORY = 300\n\n\ndef launch(\n    plan,\n    service_name,\n    node_keystore_files,\n    beacon_http_url,\n    participant,\n    node_selectors,\n    global_tolerations,\n):\n    tolerations = shared_utils.get_tolerations(global_tolerations=global_tolerations)\n\n    blobber_service_name = \"{0}\".format(service_name)\n\n    blobber_config = get_config(\n        service_name,\n        node_keystore_files,\n        beacon_http_url,\n        participant,\n        node_selectors,\n        tolerations,\n    )\n\n    blobber_service = plan.add_service(blobber_service_name, blobber_config)\n    return blobber_context.new_blobber_context(\n        blobber_service.name,\n        blobber_service.ports[BLOBBER_VALIDATOR_PROXY_PORT_ID].number,\n    )\n\n\ndef get_config(\n    service_name,\n    node_keystore_files,\n    beacon_http_url,\n    participant,\n    node_selectors,\n    tolerations,\n):\n    validator_root_dirpath = shared_utils.path_join(\n        VALIDATOR_KEYS_MOUNTPOINT_ON_CLIENTS,\n        node_keystore_files.raw_root_dirpath,\n    )\n    cmd = [\n        \"--beacon-port-start={0}\".format(BLOBBER_BEACON_PORT_NUM),\n        \"--cl={0}\".format(beacon_http_url),\n        \"--validator-key-folder={0}\".format(validator_root_dirpath),\n        \"--enable-unsafe-mode\",\n        \"--external-ip={0}\".format(constants.PRIVATE_IP_ADDRESS_PLACEHOLDER),\n        \"--validator-proxy-port-start={0}\".format(BLOBBER_VALIDATOR_PROXY_PORT_NUM),\n    ]\n\n    if len(participant.blobber_extra_params) > 0:\n        cmd.extend([param for param in participant.blobber_extra_params])\n\n    return ServiceConfig(\n        image=participant.blobber_image,\n        ports=BLOBBER_USED_PORTS,\n        files={\n            VALIDATOR_KEYS_MOUNTPOINT_ON_CLIENTS: node_keystore_files.files_artifact_uuid\n        },\n        cmd=cmd,\n        private_ip_address_placeholder=constants.PRIVATE_IP_ADDRESS_PLACEHOLDER,\n        min_cpu=MIN_CPU,\n        max_cpu=MAX_CPU,\n        min_memory=MIN_MEMORY,\n        max_memory=MAX_MEMORY,\n        node_selectors=node_selectors,\n        tolerations=tolerations,\n    )\n"
  },
  {
    "path": "src/blobscan/blobscan_launcher.star",
    "content": "shared_utils = import_module(\"../shared_utils/shared_utils.star\")\npostgres = import_module(\"github.com/kurtosis-tech/postgres-package/main.star\")\nredis = import_module(\"github.com/kurtosis-tech/redis-package/main.star\")\nconstants = import_module(\"../package_io/constants.star\")\ninput_parser = import_module(\"../package_io/input_parser.star\")\n\nWEB_SERVICE_NAME = \"blobscan-web\"\nAPI_SERVICE_NAME = \"blobscan-api\"\nINDEXER_SERVICE_NAME = \"blobscan-indexer\"\nSECRET_KEY = \"supersecure\"\nWEB_HTTP_PORT_NUMBER = 3000\nAPI_HTTP_PORT_NUMBER = 3001\n\n\ndef get_blobscan_api_host(blobscan_config, port_publisher):\n    if port_publisher.additional_services_enabled:\n        return port_publisher.additional_services_nat_exit_ip\n    return blobscan_config.ip_address\n\n\ndef get_blobscan_api_port(blobscan_config, port_publisher):\n    if port_publisher.additional_services_enabled:\n        public_ports = shared_utils.get_public_ports_for_component(\n            \"additional_services\", port_publisher, 0\n        )\n        return public_ports[1]  # Second port for the API (first is web)\n    return blobscan_config.ports[constants.HTTP_PORT_ID].number\n\n\nWEB_PORTS = {\n    constants.HTTP_PORT_ID: shared_utils.new_port_spec(\n        WEB_HTTP_PORT_NUMBER,\n        shared_utils.TCP_PROTOCOL,\n        shared_utils.HTTP_APPLICATION_PROTOCOL,\n    )\n}\n\nAPI_PORTS = {\n    constants.HTTP_PORT_ID: shared_utils.new_port_spec(\n        API_HTTP_PORT_NUMBER,\n        shared_utils.TCP_PROTOCOL,\n        shared_utils.HTTP_APPLICATION_PROTOCOL,\n    )\n}\n\nENTRYPOINT_ARGS = [\"/bin/sh\", \"-c\"]\n\n# The min/max CPU/memory that blobscan-indexer can use\nINDEX_MIN_CPU = 10\nINDEX_MAX_CPU = 1000\nINDEX_MIN_MEMORY = 32\nINDEX_MAX_MEMORY = 1024\n\n# The min/max CPU/memory that blobscan-api can use\nAPI_MIN_CPU = 100\nAPI_MAX_CPU = 1000\nAPI_MIN_MEMORY = 1024\nAPI_MAX_MEMORY = 2048\n\n# The min/max CPU/memory that blobscan-web can use\nWEB_MIN_CPU = 100\nWEB_MAX_CPU = 1000\nWEB_MIN_MEMORY = 512\nWEB_MAX_MEMORY = 2048\n\n# The min/max CPU/memory that postgres can use\nPOSTGRES_MIN_CPU = 10\nPOSTGRES_MAX_CPU = 1000\nPOSTGRES_MIN_MEMORY = 32\nPOSTGRES_MAX_MEMORY = 1024\n\n# The min/max CPU/memory that redis can use\nREDIS_MIN_CPU = 10\nREDIS_MAX_CPU = 1000\nREDIS_MIN_MEMORY = 32\nREDIS_MAX_MEMORY = 1024\n\n\ndef launch_blobscan(\n    plan,\n    cl_contexts,\n    el_contexts,\n    network_id,\n    network_params,\n    persistent,\n    global_node_selectors,\n    global_tolerations,\n    port_publisher,\n    additional_service_index,\n    docker_cache_params,\n):\n    node_selectors = global_node_selectors\n    tolerations = shared_utils.get_tolerations(global_tolerations=global_tolerations)\n    beacon_node_rpc_uri = \"{0}\".format(cl_contexts[0].beacon_http_url)\n    execution_node_rpc_uri = \"{0}\".format(el_contexts[0].rpc_http_url)\n\n    postgres_output = postgres.run(\n        plan,\n        service_name=\"blobscan-postgres\",\n        min_cpu=POSTGRES_MIN_CPU,\n        max_cpu=POSTGRES_MAX_CPU,\n        min_memory=POSTGRES_MIN_MEMORY,\n        max_memory=POSTGRES_MAX_MEMORY,\n        persistent=persistent,\n        node_selectors=node_selectors,\n        image=shared_utils.docker_cache_image_calc(\n            docker_cache_params, \"library/postgres:alpine\"\n        ),\n        tolerations=tolerations,\n    )\n\n    redis_output = redis.run(\n        plan,\n        service_name=\"blobscan-redis\",\n        min_cpu=REDIS_MIN_CPU,\n        max_cpu=REDIS_MAX_CPU,\n        min_memory=REDIS_MIN_MEMORY,\n        max_memory=REDIS_MAX_MEMORY,\n        persistent=persistent,\n        node_selectors=node_selectors,\n        image=shared_utils.docker_cache_image_calc(\n            docker_cache_params, \"library/redis:alpine\"\n        ),\n        tolerations=tolerations,\n    )\n\n    api_config = get_api_config(\n        network_id,\n        postgres_output.url,\n        network_params.network,\n        redis_output.url,\n        node_selectors,\n        tolerations,\n        port_publisher,\n        additional_service_index,\n        docker_cache_params,\n    )\n    blobscan_config = plan.add_service(API_SERVICE_NAME, api_config)\n\n    blobscan_api_url = \"http://{0}:{1}\".format(\n        get_blobscan_api_host(blobscan_config, port_publisher),\n        get_blobscan_api_port(blobscan_config, port_publisher),\n    )\n\n    web_config = get_web_config(\n        postgres_output.url,\n        network_params.network,\n        beacon_node_rpc_uri,\n        execution_node_rpc_uri,\n        node_selectors,\n        tolerations,\n        port_publisher,\n        additional_service_index,\n        docker_cache_params,\n    )\n    plan.add_service(WEB_SERVICE_NAME, web_config)\n\n    indexer_config = get_indexer_config(\n        beacon_node_rpc_uri,\n        blobscan_api_url,\n        execution_node_rpc_uri,\n        network_params.network,\n        node_selectors,\n        tolerations,\n        docker_cache_params,\n    )\n    plan.add_service(INDEXER_SERVICE_NAME, indexer_config)\n\n\ndef get_api_config(\n    network_id,\n    postgres_url,\n    network_name,\n    redis_url,\n    node_selectors,\n    tolerations,\n    port_publisher,\n    additional_service_index,\n    docker_cache_params,\n):\n    IMAGE_NAME = \"blossomlabs/blobscan-api:latest\"\n\n    public_ports = shared_utils.get_additional_service_standard_public_port(\n        port_publisher,\n        constants.HTTP_PORT_ID,\n        additional_service_index,\n        0,\n    )\n\n    return ServiceConfig(\n        image=shared_utils.docker_cache_image_calc(\n            docker_cache_params,\n            IMAGE_NAME,\n        ),\n        ports=API_PORTS,\n        public_ports=public_ports,\n        env_vars={\n            \"CHAIN_ID\": network_id,\n            \"DATABASE_URL\": postgres_url,\n            \"DIRECT_URL\": postgres_url,\n            \"REDIS_URI\": redis_url,\n            \"SECRET_KEY\": SECRET_KEY,\n            \"BLOBSCAN_API_PORT\": str(API_HTTP_PORT_NUMBER),\n            \"POSTGRES_STORAGE_ENABLED\": \"true\",\n            \"NETWORK_NAME\": network_name\n            if network_name in constants.PUBLIC_NETWORKS\n            else \"devnet\",\n        },\n        ready_conditions=ReadyCondition(\n            recipe=GetHttpRequestRecipe(\n                port_id=\"http\",\n                endpoint=\"/healthcheck\",\n            ),\n            field=\"code\",\n            assertion=\"==\",\n            target_value=200,\n            interval=\"5s\",\n            timeout=\"120s\",\n        ),\n        min_cpu=API_MIN_CPU,\n        max_cpu=API_MAX_CPU,\n        min_memory=API_MIN_MEMORY,\n        max_memory=API_MAX_MEMORY,\n        node_selectors=node_selectors,\n        tolerations=tolerations,\n    )\n\n\ndef get_web_config(\n    postgres_url,\n    network_name,\n    beacon_node_rpc,\n    execution_node_rpc,\n    node_selectors,\n    tolerations,\n    port_publisher,\n    additional_service_index,\n    docker_cache_params,\n):\n    # TODO: https://github.com/kurtosis-tech/kurtosis/issues/1861\n    # Configure NEXT_PUBLIC_BEACON_BASE_URL and NEXT_PUBLIC_EXPLORER_BASE env vars\n    # once retrieving external URLs from services are supported in Kurtosis.\n    IMAGE_NAME = \"blossomlabs/blobscan-web:latest\"\n\n    public_ports = shared_utils.get_additional_service_standard_public_port(\n        port_publisher,\n        constants.HTTP_PORT_ID,\n        additional_service_index,\n        1,\n    )\n\n    return ServiceConfig(\n        image=shared_utils.docker_cache_image_calc(\n            docker_cache_params,\n            IMAGE_NAME,\n        ),\n        ports=WEB_PORTS,\n        public_ports=public_ports,\n        env_vars={\n            \"DATABASE_URL\": postgres_url,\n            \"DIRECT_URL\": postgres_url,\n            \"NEXT_PUBLIC_NETWORK_NAME\": network_name\n            if network_name in constants.PUBLIC_NETWORKS\n            else \"devnet\",\n            \"SECRET_KEY\": SECRET_KEY,\n            \"POSTGRES_STORAGE_ENABLED\": \"true\",\n        },\n        min_cpu=WEB_MIN_CPU,\n        max_cpu=WEB_MAX_CPU,\n        min_memory=WEB_MIN_MEMORY,\n        max_memory=WEB_MAX_MEMORY,\n        node_selectors=node_selectors,\n        tolerations=tolerations,\n    )\n\n\ndef get_indexer_config(\n    beacon_node_rpc,\n    blobscan_api_url,\n    execution_node_rpc,\n    network_name,\n    node_selectors,\n    tolerations,\n    docker_cache_params,\n):\n    IMAGE_NAME = \"blossomlabs/blobscan-indexer:master\"\n\n    return ServiceConfig(\n        image=shared_utils.docker_cache_image_calc(\n            docker_cache_params,\n            IMAGE_NAME,\n        ),\n        env_vars={\n            \"BEACON_NODE_ENDPOINT\": beacon_node_rpc,\n            \"BLOBSCAN_API_ENDPOINT\": blobscan_api_url,\n            \"EXECUTION_NODE_ENDPOINT\": execution_node_rpc,\n            \"NETWORK_NAME\": network_name\n            if network_name in constants.PUBLIC_NETWORKS\n            else \"devnet\",\n            \"SECRET_KEY\": SECRET_KEY,\n        },\n        entrypoint=ENTRYPOINT_ARGS,\n        cmd=[\" && \".join([\"sleep 90\", \"/app/blob-indexer\"])],\n        min_cpu=INDEX_MIN_CPU,\n        max_cpu=INDEX_MAX_CPU,\n        min_memory=INDEX_MIN_MEMORY,\n        max_memory=INDEX_MAX_MEMORY,\n        node_selectors=node_selectors,\n        tolerations=tolerations,\n    )\n"
  },
  {
    "path": "src/blockscout/blockscout_launcher.star",
    "content": "shared_utils = import_module(\"../shared_utils/shared_utils.star\")\nconstants = import_module(\"../package_io/constants.star\")\npostgres = import_module(\"github.com/kurtosis-tech/postgres-package/main.star\")\ninput_parser = import_module(\"../package_io/input_parser.star\")\n\nPOSTGRES_IMAGE = \"library/postgres:alpine\"\n\nSERVICE_NAME_BLOCKSCOUT = \"blockscout\"\nSERVICE_NAME_FRONTEND = \"blockscout-frontend\"\nHTTP_PORT_NUMBER = 4000\nHTTP_PORT_NUMBER_VERIF = 8050\nHTTP_PORT_NUMBER_FRONTEND = 3000\n\n\ndef get_api_host(blockscout_service, port_publisher):\n    if port_publisher.additional_services_enabled:\n        return port_publisher.additional_services_nat_exit_ip\n    return blockscout_service.name\n\n\ndef get_api_port(blockscout_service, port_publisher):\n    if port_publisher.additional_services_enabled:\n        public_ports = shared_utils.get_public_ports_for_component(\n            \"additional_services\", port_publisher, 0\n        )\n        return public_ports[0]  # First port for the API\n    return blockscout_service.ports[\"http\"].number\n\n\nBLOCKSCOUT_MIN_CPU = 100\nBLOCKSCOUT_MAX_CPU = 1000\nBLOCKSCOUT_MIN_MEMORY = 1024\nBLOCKSCOUT_MAX_MEMORY = 2048\n\nBLOCKSCOUT_VERIF_MIN_CPU = 10\nBLOCKSCOUT_VERIF_MAX_CPU = 1000\nBLOCKSCOUT_VERIF_MIN_MEMORY = 10\nBLOCKSCOUT_VERIF_MAX_MEMORY = 1024\n\nUSED_PORTS = {\n    constants.HTTP_PORT_ID: shared_utils.new_port_spec(\n        HTTP_PORT_NUMBER,\n        shared_utils.TCP_PROTOCOL,\n        shared_utils.HTTP_APPLICATION_PROTOCOL,\n    )\n}\n\nVERIF_USED_PORTS = {\n    constants.HTTP_PORT_ID: shared_utils.new_port_spec(\n        HTTP_PORT_NUMBER_VERIF,\n        shared_utils.TCP_PROTOCOL,\n        shared_utils.HTTP_APPLICATION_PROTOCOL,\n    )\n}\n\nFRONTEND_USED_PORTS = {\n    constants.HTTP_PORT_ID: shared_utils.new_port_spec(\n        HTTP_PORT_NUMBER_FRONTEND,\n        shared_utils.TCP_PROTOCOL,\n        shared_utils.HTTP_APPLICATION_PROTOCOL,\n    )\n}\n\n\ndef launch_blockscout(\n    plan,\n    el_contexts,\n    persistent,\n    global_node_selectors,\n    global_tolerations,\n    port_publisher,\n    additional_service_index,\n    docker_cache_params,\n    blockscout_params,\n    network_params,\n    shadowfork_block_height=\"\",\n):\n    tolerations = shared_utils.get_tolerations(global_tolerations=global_tolerations)\n    postgres_output = postgres.run(\n        plan,\n        service_name=\"{}-postgres\".format(SERVICE_NAME_BLOCKSCOUT),\n        database=\"blockscout\",\n        extra_configs=[\"max_connections=1000\"],\n        persistent=persistent,\n        node_selectors=global_node_selectors,\n        image=shared_utils.docker_cache_image_calc(docker_cache_params, POSTGRES_IMAGE),\n        tolerations=tolerations,\n    )\n\n    el_context = el_contexts[0]\n    el_client_rpc_url = \"http://{}:{}/\".format(\n        el_context.dns_name, el_context.rpc_port_num\n    )\n    el_client_name = el_context.client_name\n\n    config_verif = get_config_verif(\n        global_node_selectors,\n        tolerations,\n        port_publisher,\n        additional_service_index,\n        docker_cache_params,\n        blockscout_params,\n    )\n    verif_service_name = \"{}-verif\".format(SERVICE_NAME_BLOCKSCOUT)\n    verif_service = plan.add_service(verif_service_name, config_verif)\n    verif_url = \"http://{}:{}/\".format(\n        verif_service.hostname, verif_service.ports[\"http\"].number\n    )\n\n    config_backend = get_config_backend(\n        postgres_output,\n        el_client_rpc_url,\n        verif_url,\n        el_client_name,\n        global_node_selectors,\n        tolerations,\n        port_publisher,\n        additional_service_index,\n        docker_cache_params,\n        blockscout_params,\n        shadowfork_block_height,\n    )\n    blockscout_service = plan.add_service(SERVICE_NAME_BLOCKSCOUT, config_backend)\n    plan.print(blockscout_service)\n\n    blockscout_url = \"http://{}:{}\".format(\n        blockscout_service.hostname, blockscout_service.ports[\"http\"].number\n    )\n\n    config_frontend = get_config_frontend(\n        plan,\n        el_client_rpc_url,\n        docker_cache_params,\n        blockscout_params,\n        network_params,\n        global_node_selectors,\n        tolerations,\n        blockscout_service,\n        port_publisher,\n    )\n    plan.add_service(SERVICE_NAME_FRONTEND, config_frontend)\n    return blockscout_url\n\n\ndef get_config_verif(\n    node_selectors,\n    tolerations,\n    port_publisher,\n    additional_service_index,\n    docker_cache_params,\n    blockscout_params,\n):\n    public_ports = shared_utils.get_additional_service_standard_public_port(\n        port_publisher,\n        constants.HTTP_PORT_ID,\n        additional_service_index,\n        0,\n    )\n\n    env_vars = {\n        \"SMART_CONTRACT_VERIFIER__SERVER__HTTP__ADDR\": \"0.0.0.0:{}\".format(\n            HTTP_PORT_NUMBER_VERIF\n        )\n    }\n    env_vars.update(blockscout_params.env)\n\n    return ServiceConfig(\n        image=shared_utils.docker_cache_image_calc(\n            docker_cache_params,\n            blockscout_params.verif_image,\n        ),\n        ports=VERIF_USED_PORTS,\n        public_ports=public_ports,\n        env_vars=env_vars,\n        min_cpu=BLOCKSCOUT_VERIF_MIN_CPU,\n        max_cpu=BLOCKSCOUT_VERIF_MAX_CPU,\n        min_memory=BLOCKSCOUT_VERIF_MIN_MEMORY,\n        max_memory=BLOCKSCOUT_VERIF_MAX_MEMORY,\n        node_selectors=node_selectors,\n        tolerations=tolerations,\n    )\n\n\ndef get_config_backend(\n    postgres_output,\n    el_client_rpc_url,\n    verif_url,\n    el_client_name,\n    node_selectors,\n    tolerations,\n    port_publisher,\n    additional_service_index,\n    docker_cache_params,\n    blockscout_params,\n    shadowfork_block_height=\"\",\n):\n    database_url = \"{protocol}://{user}:{password}@{hostname}:{port}/{database}\".format(\n        protocol=\"postgresql\",\n        user=postgres_output.user,\n        password=postgres_output.password,\n        hostname=postgres_output.service.hostname,\n        port=postgres_output.port.number,\n        database=postgres_output.database,\n    )\n\n    public_ports = shared_utils.get_additional_service_standard_public_port(\n        port_publisher,\n        constants.HTTP_PORT_ID,\n        additional_service_index,\n        1,\n    )\n\n    env_vars = {\n        \"ETHEREUM_JSONRPC_VARIANT\": \"erigon\"\n        if el_client_name == \"erigon\" or el_client_name == \"reth\"\n        else el_client_name,\n        \"ETHEREUM_JSONRPC_HTTP_URL\": el_client_rpc_url,\n        \"ETHEREUM_JSONRPC_TRACE_URL\": el_client_rpc_url,\n        \"DATABASE_URL\": database_url,\n        \"COIN\": \"ETH\",\n        \"MICROSERVICE_SC_VERIFIER_ENABLED\": \"true\",\n        \"MICROSERVICE_SC_VERIFIER_URL\": verif_url,\n        \"MICROSERVICE_SC_VERIFIER_TYPE\": \"sc_verifier\",\n        \"INDEXER_DISABLE_PENDING_TRANSACTIONS_FETCHER\": \"true\",\n        \"ECTO_USE_SSL\": \"false\",\n        \"NETWORK\": \"Kurtosis\",\n        \"SUBNETWORK\": \"Kurtosis\",\n        \"PORT\": \"{}\".format(HTTP_PORT_NUMBER),\n        \"SECRET_KEY_BASE\": \"56NtB48ear7+wMSf0IQuWDAAazhpb31qyc7GiyspBP2vh7t5zlCsF5QDv76chXeN\",\n    }\n\n    if shadowfork_block_height != \"\":\n        env_vars[\"INDEXER_START_BLOCK\"] = shadowfork_block_height\n        env_vars[\"TRACE_FIRST_BLOCK\"] = shadowfork_block_height\n\n    env_vars.update(blockscout_params.env)\n\n    return ServiceConfig(\n        image=shared_utils.docker_cache_image_calc(\n            docker_cache_params,\n            blockscout_params.image,\n        ),\n        ports=USED_PORTS,\n        public_ports=public_ports,\n        cmd=[\n            \"/bin/sh\",\n            \"-c\",\n            'bin/blockscout eval \"Elixir.Explorer.ReleaseTasks.create_and_migrate()\" && bin/blockscout start',\n        ],\n        env_vars=env_vars,\n        min_cpu=BLOCKSCOUT_MIN_CPU,\n        max_cpu=BLOCKSCOUT_MAX_CPU,\n        min_memory=BLOCKSCOUT_MIN_MEMORY,\n        max_memory=BLOCKSCOUT_MAX_MEMORY,\n        node_selectors=node_selectors,\n        tolerations=tolerations,\n    )\n\n\ndef get_config_frontend(\n    plan,\n    el_client_rpc_url,\n    docker_cache_params,\n    blockscout_params,\n    network_params,\n    node_selectors,\n    tolerations,\n    blockscout_service,\n    port_publisher,\n):\n    env_vars = {\n        \"HOSTNAME\": \"0.0.0.0\",\n        \"NEXT_PUBLIC_API_PROTOCOL\": \"http\",\n        \"NEXT_PUBLIC_API_WEBSOCKET_PROTOCOL\": \"ws\",\n        \"NEXT_PUBLIC_NETWORK_NAME\": \"Kurtosis\",\n        \"NEXT_PUBLIC_NETWORK_ID\": network_params.network_id,\n        \"NEXT_PUBLIC_NETWORK_RPC_URL\": el_client_rpc_url,\n        \"NEXT_PUBLIC_API_HOST\": get_api_host(blockscout_service, port_publisher)\n        + \":\"\n        + str(get_api_port(blockscout_service, port_publisher)),\n        \"NEXT_PUBLIC_AD_BANNER_PROVIDER\": \"none\",\n        \"NEXT_PUBLIC_AD_TEXT_PROVIDER\": \"none\",\n        \"NEXT_PUBLIC_IS_TESTNET\": \"true\",\n        \"NEXT_PUBLIC_GAS_TRACKER_ENABLED\": \"true\",\n        \"NEXT_PUBLIC_HAS_BEACON_CHAIN\": \"true\",\n        \"NEXT_PUBLIC_NETWORK_VERIFICATION_TYPE\": \"validation\",\n        \"NEXT_PUBLIC_NETWORK_ICON\": \"https://ethpandaops.io/logo.png\",\n        # \"NEXT_PUBLIC_APP_HOST\": \"0.0.0.0\",\n        \"NEXT_PUBLIC_APP_PROTOCOL\": \"http\",\n        \"NEXT_PUBLIC_APP_HOST\": \"127.0.0.1\",\n        \"NEXT_PUBLIC_APP_PORT\": str(HTTP_PORT_NUMBER_FRONTEND),\n        \"NEXT_PUBLIC_USE_NEXT_JS_PROXY\": \"true\",\n        \"PORT\": str(HTTP_PORT_NUMBER_FRONTEND),\n    }\n    env_vars.update(blockscout_params.env)\n\n    return ServiceConfig(\n        image=shared_utils.docker_cache_image_calc(\n            docker_cache_params,\n            blockscout_params.frontend_image,\n        ),\n        ports=FRONTEND_USED_PORTS,\n        public_ports=FRONTEND_USED_PORTS,\n        env_vars=env_vars,\n        min_cpu=BLOCKSCOUT_MIN_CPU,\n        max_cpu=BLOCKSCOUT_MAX_CPU,\n        min_memory=BLOCKSCOUT_MIN_MEMORY,\n        max_memory=BLOCKSCOUT_MAX_MEMORY,\n        node_selectors=node_selectors,\n        tolerations=tolerations,\n    )\n"
  },
  {
    "path": "src/blutgang/blutgang_launcher.star",
    "content": "shared_utils = import_module(\"../shared_utils/shared_utils.star\")\nconstants = import_module(\"../package_io/constants.star\")\ninput_parser = import_module(\"../package_io/input_parser.star\")\nSERVICE_NAME = \"blutgang\"\n\nHTTP_PORT_NUMBER = 3000\nADMIN_PORT_NUMBER = 5715\n\nBLUTGANG_CONFIG_FILENAME = \"config.toml\"\n\nBLUTGANG_CONFIG_MOUNT_DIRPATH_ON_SERVICE = \"/config\"\n\nIMAGE_NAME = \"makemake1337/blutgang:latest\"\n# IMAGE_NAME = \"busybox:latest\"\n\n# The min/max CPU/memory that blutgang can use\nMIN_CPU = 100\nMAX_CPU = 1000\nMIN_MEMORY = 128\nMAX_MEMORY = 2048\n\nUSED_PORTS = {\n    constants.HTTP_PORT_ID: shared_utils.new_port_spec(\n        HTTP_PORT_NUMBER,\n        shared_utils.TCP_PROTOCOL,\n        shared_utils.HTTP_APPLICATION_PROTOCOL,\n    ),\n    constants.ADMIN_PORT_ID: shared_utils.new_port_spec(\n        ADMIN_PORT_NUMBER,\n        shared_utils.TCP_PROTOCOL,\n        shared_utils.HTTP_APPLICATION_PROTOCOL,\n    ),\n}\n\n\ndef launch_blutgang(\n    plan,\n    config_template,\n    participant_contexts,\n    participant_configs,\n    network_params,\n    global_node_selectors,\n    global_tolerations,\n    port_publisher,\n    additional_service_index,\n    docker_cache_params,\n):\n    tolerations = shared_utils.get_tolerations(global_tolerations=global_tolerations)\n\n    all_el_client_info = []\n    for index, participant in enumerate(participant_contexts):\n        full_name, _, el_client, _ = shared_utils.get_client_names(\n            participant, index, participant_contexts, participant_configs\n        )\n        all_el_client_info.append(\n            new_el_client_info(\n                el_client.dns_name,\n                el_client.rpc_port_num,\n                el_client.ws_port_num,\n                full_name,\n            )\n        )\n\n    template_data = new_config_template_data(\n        network_params.network, HTTP_PORT_NUMBER, all_el_client_info\n    )\n\n    template_and_data = shared_utils.new_template_and_data(\n        config_template, template_data\n    )\n    template_and_data_by_rel_dest_filepath = {}\n    template_and_data_by_rel_dest_filepath[BLUTGANG_CONFIG_FILENAME] = template_and_data\n\n    config_files_artifact_name = plan.render_templates(\n        template_and_data_by_rel_dest_filepath, \"blutgang-config\"\n    )\n\n    config = get_config(\n        config_files_artifact_name,\n        network_params,\n        global_node_selectors,\n        tolerations,\n        port_publisher,\n        additional_service_index,\n        docker_cache_params,\n    )\n\n    plan.add_service(SERVICE_NAME, config)\n\n\ndef get_config(\n    config_files_artifact_name,\n    network_params,\n    node_selectors,\n    tolerations,\n    port_publisher,\n    additional_service_index,\n    docker_cache_params,\n):\n    config_file_path = shared_utils.path_join(\n        BLUTGANG_CONFIG_MOUNT_DIRPATH_ON_SERVICE,\n        BLUTGANG_CONFIG_FILENAME,\n    )\n\n    public_ports = {}\n    if port_publisher.additional_services_enabled:\n        public_ports_for_component = shared_utils.get_public_ports_for_component(\n            \"additional_services\", port_publisher, additional_service_index\n        )\n        public_port_assignments = {\n            constants.HTTP_PORT_ID: public_ports_for_component[0],\n            constants.ADMIN_PORT_ID: public_ports_for_component[1],\n        }\n        public_ports = shared_utils.get_port_specs(public_port_assignments)\n\n    return ServiceConfig(\n        image=shared_utils.docker_cache_image_calc(\n            docker_cache_params,\n            IMAGE_NAME,\n        ),\n        ports=USED_PORTS,\n        public_ports=public_ports,\n        files={\n            BLUTGANG_CONFIG_MOUNT_DIRPATH_ON_SERVICE: config_files_artifact_name,\n        },\n        cmd=[\"/app/blutgang\", \"-c\", config_file_path],\n        min_cpu=MIN_CPU,\n        max_cpu=MAX_CPU,\n        min_memory=MIN_MEMORY,\n        max_memory=MAX_MEMORY,\n        node_selectors=node_selectors,\n        tolerations=tolerations,\n        ready_conditions=ReadyCondition(\n            recipe=GetHttpRequestRecipe(\n                port_id=\"admin\",\n                endpoint=\"/ready\",\n            ),\n            field=\"code\",\n            assertion=\"==\",\n            target_value=200,\n        ),\n    )\n\n\ndef new_config_template_data(network, listen_port_num, el_client_info):\n    return {\n        \"Network\": network,\n        \"ListenPortNum\": listen_port_num,\n        \"ELClientInfo\": el_client_info,\n    }\n\n\ndef new_el_client_info(ip_addr, rpc_port_num, ws_port_num, full_name):\n    return {\n        \"IP_Addr\": ip_addr,\n        \"RPC_PortNum\": rpc_port_num,\n        \"WS_PortNum\": ws_port_num,\n        \"FullName\": full_name,\n    }\n"
  },
  {
    "path": "src/bootnodoor/bootnodoor_launcher.star",
    "content": "shared_utils = import_module(\"../shared_utils/shared_utils.star\")\nconstants = import_module(\"../package_io/constants.star\")\n\nSERVICE_NAME = \"bootnodoor\"\nHTTP_PORT_NUMBER = 8080\nDISCOVERY_PORT_NUMBER = 9000\n\nUSED_PORTS = {\n    constants.HTTP_PORT_ID: shared_utils.new_port_spec(\n        HTTP_PORT_NUMBER,\n        shared_utils.TCP_PROTOCOL,\n        shared_utils.HTTP_APPLICATION_PROTOCOL,\n    ),\n    constants.UDP_DISCOVERY_PORT_ID: shared_utils.new_port_spec(\n        DISCOVERY_PORT_NUMBER,\n        shared_utils.UDP_PROTOCOL,\n    ),\n}\n\n\ndef launch_bootnodoor(\n    plan,\n    bootnodoor_params,\n    el_cl_genesis_data,\n    network_params,\n    global_node_selectors,\n    global_tolerations,\n    docker_cache_params,\n):\n    tolerations = shared_utils.get_tolerations(global_tolerations=global_tolerations)\n\n    # Generate a random 32-byte (64 hex char) private key\n    private_key = generate_random_private_key(plan)\n\n    # Get the genesis validators root from the genesis data\n    genesis_validators_root = el_cl_genesis_data.genesis_validators_root\n\n    # Get the EL genesis hash\n    el_genesis_hash = get_el_genesis_hash(plan, network_params, el_cl_genesis_data)\n\n    # Fetch external bootnodes for non-kurtosis networks\n    # For kurtosis/shadowfork: bootnodoor is the primary bootnode, no external bootnodes needed\n    # For ephemery/devnets: read bootstrap_nodes.txt from genesis data\n    external_bootnodes = None\n    if network_params.network == constants.NETWORK_NAME.ephemery or (\n        network_params.network not in constants.PUBLIC_NETWORKS\n        and network_params.network != constants.NETWORK_NAME.kurtosis\n        and constants.NETWORK_NAME.shadowfork not in network_params.network\n    ):\n        plan.print(\n            \"Fetching external bootnodes for network: {0}\".format(\n                network_params.network\n            )\n        )\n        external_bootnodes = shared_utils.get_devnet_enrs_list(\n            plan, el_cl_genesis_data.files_artifact_uuid\n        )\n\n    config = get_config(\n        bootnodoor_params,\n        el_cl_genesis_data,\n        private_key,\n        genesis_validators_root,\n        el_genesis_hash,\n        external_bootnodes,\n        global_node_selectors,\n        tolerations,\n        docker_cache_params,\n    )\n\n    plan.add_service(SERVICE_NAME, config)\n\n    # Request ENR from the running bootnodoor service\n    # The /enr endpoint returns a plain string (not JSON)\n    enr_recipe = GetHttpRequestRecipe(\n        endpoint=\"/enr\",\n        port_id=constants.HTTP_PORT_ID,\n    )\n\n    response = plan.request(\n        recipe=enr_recipe,\n        service_name=SERVICE_NAME,\n    )\n\n    bootnodoor_enr = response[\"body\"]\n\n    # Request ENODE from the running bootnodoor service for EL bootnode\n    enode_recipe = GetHttpRequestRecipe(\n        endpoint=\"/enode\",\n        port_id=constants.HTTP_PORT_ID,\n    )\n\n    enode_response = plan.request(\n        recipe=enode_recipe,\n        service_name=SERVICE_NAME,\n    )\n\n    bootnodoor_enode = enode_response[\"body\"]\n\n    return bootnodoor_enr, bootnodoor_enode\n\n\ndef get_config(\n    bootnodoor_params,\n    el_cl_genesis_data,\n    private_key,\n    genesis_validators_root,\n    el_genesis_hash,\n    external_bootnodes,\n    node_selectors,\n    tolerations,\n    docker_cache_params,\n):\n    cmd = [\n        \"--cl-config\",\n        \"{0}/config.yaml\".format(constants.GENESIS_DATA_MOUNTPOINT_ON_CLIENTS),\n        \"--genesis-validators-root\",\n        genesis_validators_root,\n        \"--el-config\",\n        \"{0}/genesis.json\".format(constants.GENESIS_DATA_MOUNTPOINT_ON_CLIENTS),\n        \"--el-genesis-hash\",\n        el_genesis_hash,\n        \"--private-key\",\n        private_key,\n        \"--bind-addr\",\n        \"0.0.0.0\",\n        \"--web-ui\",\n        \"--nodedb\",\n        \"/nodes.db\",\n    ]\n\n    # Add external bootnodes for non-kurtosis networks (ephemery, devnets)\n    if external_bootnodes != None:\n        cmd.append(\"--bootnodes\")\n        cmd.append(external_bootnodes)\n\n    # Add any extra args from the params\n    if len(bootnodoor_params.extra_args) > 0:\n        cmd.extend(bootnodoor_params.extra_args)\n\n    return ServiceConfig(\n        image=shared_utils.docker_cache_image_calc(\n            docker_cache_params,\n            bootnodoor_params.image,\n        ),\n        ports=USED_PORTS,\n        files={\n            constants.GENESIS_DATA_MOUNTPOINT_ON_CLIENTS: el_cl_genesis_data.files_artifact_uuid,\n        },\n        cmd=cmd,\n        min_cpu=bootnodoor_params.min_cpu,\n        max_cpu=bootnodoor_params.max_cpu,\n        min_memory=bootnodoor_params.min_mem,\n        max_memory=bootnodoor_params.max_mem,\n        node_selectors=node_selectors,\n        tolerations=tolerations,\n    )\n\n\ndef get_el_genesis_hash(plan, network_params, el_cl_genesis_data):\n    # For mainnet and sepolia, use static genesis hashes\n    if network_params.network == \"mainnet\":\n        return \"0xd4e56740f876aef8c010b86a40d5f56745a118d0906a34e69aec8c0db1cb8fa3\"\n    elif network_params.network == \"sepolia\":\n        return \"0x25a5cc106eea7138acab33231d7160d69cb777ee0c2c553fcddf5138993e6dd9\"\n\n    # For other networks, extract from deposit_contract_block_hash.txt\n    result = plan.run_sh(\n        name=\"read-el-genesis-hash\",\n        description=\"Reading EL genesis hash from deposit_contract_block_hash.txt\",\n        run=\"cat /network-configs/deposit_contract_block_hash.txt\",\n        files={\n            \"/network-configs\": el_cl_genesis_data.files_artifact_uuid,\n        },\n        wait=None,\n    )\n    return result.output\n\n\ndef generate_random_private_key(plan):\n    # Generate a random 32-byte (64 hex char) private key using /dev/urandom\n    result = plan.run_sh(\n        name=\"generate-bootnodoor-private-key\",\n        description=\"Generating random private key for bootnodoor\",\n        run=\"head -c 32 /dev/urandom | od -An -tx1 | tr -d ' \\\\n'\",\n        wait=None,\n    )\n    return result.output\n"
  },
  {
    "path": "src/broadcaster/broadcaster.star",
    "content": "input_parser = import_module(\"../package_io/input_parser.star\")\nshared_utils = import_module(\"../shared_utils/shared_utils.star\")\n\nIMAGE_NAME = \"nethermind/broadcaster:latest\"\nSERVICE_NAME = \"broadcaster\"\nPORT = 8545\n\n# The min/max CPU/memory that broadcaster can use\nMIN_CPU = 100\nMAX_CPU = 1000\nMIN_MEMORY = 128\nMAX_MEMORY = 2048\n\n\ndef launch_broadcaster(\n    plan, all_el_contexts, global_node_selectors, global_tolerations\n):\n    tolerations = shared_utils.get_tolerations(global_tolerations=global_tolerations)\n    config = get_config(all_el_contexts, global_node_selectors, tolerations)\n    return plan.add_service(SERVICE_NAME, config)\n\n\ndef get_config(\n    all_el_contexts,\n    node_selectors,\n    tolerations,\n):\n    return ServiceConfig(\n        image=IMAGE_NAME,\n        cmd=[\n            \"http://{0}:{1}\".format(context.dns_name, context.rpc_port_num)\n            for context in all_el_contexts\n        ],\n        min_cpu=MIN_CPU,\n        max_cpu=MAX_CPU,\n        min_memory=MIN_MEMORY,\n        max_memory=MAX_MEMORY,\n        node_selectors=node_selectors,\n        tolerations=tolerations,\n    )\n"
  },
  {
    "path": "src/checkpointz/checkpointz_launcher.star",
    "content": "shared_utils = import_module(\"../shared_utils/shared_utils.star\")\nconstants = import_module(\"../package_io/constants.star\")\n\nSERVICE_NAME = \"checkpointz\"\n\nHTTP_PORT_NUMBER = 5555\nMETRICS_PORT_NUMBER = 9090\n\nCHECKPOINTZ_CONFIG_FILENAME = \"checkpointz-config.yaml\"\n\nCHECKPOINTZ_CONFIG_MOUNT_DIRPATH_ON_SERVICE = \"/config\"\n\nMIN_CPU = 100\nMAX_CPU = 1000\nMIN_MEMORY = 128\nMAX_MEMORY = 1024\n\nUSED_PORTS = {\n    constants.HTTP_PORT_ID: shared_utils.new_port_spec(\n        HTTP_PORT_NUMBER,\n        shared_utils.TCP_PROTOCOL,\n        shared_utils.HTTP_APPLICATION_PROTOCOL,\n    ),\n    constants.METRICS_PORT_ID: shared_utils.new_port_spec(\n        METRICS_PORT_NUMBER,\n        shared_utils.TCP_PROTOCOL,\n        shared_utils.HTTP_APPLICATION_PROTOCOL,\n    ),\n}\n\n\ndef launch_checkpointz(\n    plan,\n    config_template,\n    participant_contexts,\n    participant_configs,\n    network_params,\n    checkpointz_params,\n    global_node_selectors,\n    global_tolerations,\n    port_publisher,\n    additional_service_index,\n    docker_cache_params,\n    el_cl_data_files_artifact_uuid,\n):\n    tolerations = shared_utils.get_tolerations(global_tolerations=global_tolerations)\n\n    all_cl_client_info = []\n    for index, participant in enumerate(participant_contexts):\n        full_name, cl_client, _, _ = shared_utils.get_client_names(\n            participant, index, participant_contexts, participant_configs\n        )\n        all_cl_client_info.append(\n            new_cl_client_info(\n                cl_client.beacon_http_url,\n                full_name,\n            )\n        )\n\n    template_data = new_config_template_data(\n        network_params.network,\n        all_cl_client_info,\n    )\n\n    template_and_data = shared_utils.new_template_and_data(\n        config_template, template_data\n    )\n    template_and_data_by_rel_dest_filepath = {}\n    template_and_data_by_rel_dest_filepath[\n        CHECKPOINTZ_CONFIG_FILENAME\n    ] = template_and_data\n\n    config_files_artifact_name = plan.render_templates(\n        template_and_data_by_rel_dest_filepath, \"checkpointz-config\"\n    )\n    config = get_config(\n        config_files_artifact_name,\n        network_params,\n        checkpointz_params,\n        global_node_selectors,\n        tolerations,\n        port_publisher,\n        additional_service_index,\n        docker_cache_params,\n        el_cl_data_files_artifact_uuid,\n    )\n\n    plan.add_service(SERVICE_NAME, config)\n\n\ndef get_config(\n    config_files_artifact_name,\n    network_params,\n    checkpointz_params,\n    node_selectors,\n    tolerations,\n    port_publisher,\n    additional_service_index,\n    docker_cache_params,\n    el_cl_data_files_artifact_uuid,\n):\n    config_file_path = shared_utils.path_join(\n        CHECKPOINTZ_CONFIG_MOUNT_DIRPATH_ON_SERVICE,\n        CHECKPOINTZ_CONFIG_FILENAME,\n    )\n\n    public_ports = shared_utils.get_additional_service_standard_public_port(\n        port_publisher,\n        constants.HTTP_PORT_ID,\n        additional_service_index,\n        0,\n    )\n\n    IMAGE_NAME = checkpointz_params.image\n    default_checkpointz_image = (\n        docker_cache_params.url\n        + (docker_cache_params.dockerhub_prefix if docker_cache_params.enabled else \"\")\n        + constants.DEFAULT_CHECKPOINTZ_IMAGE\n    )\n    if checkpointz_params.image == default_checkpointz_image:\n        if network_params.gloas_fork_epoch < constants.FAR_FUTURE_EPOCH:\n            IMAGE_NAME = (\n                docker_cache_params.url\n                + (\n                    docker_cache_params.dockerhub_prefix\n                    if docker_cache_params.enabled\n                    else \"\"\n                )\n                + \"ethpandaops/checkpointz:gloas-latest\"\n            )\n\n    return ServiceConfig(\n        image=IMAGE_NAME,\n        ports=USED_PORTS,\n        public_ports=public_ports,\n        files={\n            CHECKPOINTZ_CONFIG_MOUNT_DIRPATH_ON_SERVICE: config_files_artifact_name,\n            constants.GENESIS_DATA_MOUNTPOINT_ON_CLIENTS: el_cl_data_files_artifact_uuid,\n        },\n        cmd=[\"--config\", config_file_path],\n        min_cpu=MIN_CPU,\n        max_cpu=MAX_CPU,\n        min_memory=MIN_MEMORY,\n        max_memory=MAX_MEMORY,\n        node_selectors=node_selectors,\n        tolerations=tolerations,\n    )\n\n\ndef new_config_template_data(network, cl_client_info):\n    return {\n        \"Network\": network,\n        \"CLClientInfo\": cl_client_info,\n    }\n\n\ndef new_cl_client_info(beacon_http_url, full_name):\n    return {\n        \"Beacon_HTTP_URL\": beacon_http_url,\n        \"FullName\": full_name,\n    }\n"
  },
  {
    "path": "src/cl/caplin/caplin_launcher.star",
    "content": "shared_utils = import_module(\"../../shared_utils/shared_utils.star\")\ninput_parser = import_module(\"../../package_io/input_parser.star\")\ncl_context = import_module(\"../../cl/cl_context.star\")\ncl_node_ready_conditions = import_module(\"../../cl/cl_node_ready_conditions.star\")\ncl_shared = import_module(\"../cl_shared.star\")\nnode_metrics = import_module(\"../../node_metrics_info.star\")\nconstants = import_module(\"../../package_io/constants.star\")\n\nBEACON_DATA_DIRPATH_ON_BEACON_SERVICE_CONTAINER = \"/data/caplin/caplin-beacon-data\"\n\nBEACON_P2P_PORT_NUM = 4001\nBEACON_HTTP_PORT_NUM = 5555\nBEACON_METRICS_PORT_NUM = 6060\n\nMETRICS_PATH = \"/debug/metrics/prometheus\"\n\nVERBOSITY_LEVELS = {\n    constants.GLOBAL_LOG_LEVEL.error: \"1\",\n    constants.GLOBAL_LOG_LEVEL.warn: \"2\",\n    constants.GLOBAL_LOG_LEVEL.info: \"3\",\n    constants.GLOBAL_LOG_LEVEL.debug: \"4\",\n    constants.GLOBAL_LOG_LEVEL.trace: \"5\",\n}\n\n\ndef launch(\n    plan,\n    launcher,\n    beacon_service_name,\n    participant,\n    global_log_level,\n    bootnode_contexts,\n    el_context,\n    full_name,\n    node_keystore_files,\n    snooper_el_engine_context,\n    persistent,\n    tolerations,\n    node_selectors,\n    checkpoint_sync_enabled,\n    checkpoint_sync_url,\n    port_publisher,\n    participant_index,\n    network_params,\n    extra_files_artifacts,\n    backend,\n    tempo_otlp_grpc_url=None,\n    bootnode_enr_override=None,\n    cl_binary_artifact=None,\n):\n    beacon_config = get_beacon_config(\n        plan,\n        launcher,\n        beacon_service_name,\n        participant,\n        global_log_level,\n        bootnode_contexts,\n        el_context,\n        full_name,\n        node_keystore_files,\n        snooper_el_engine_context,\n        persistent,\n        tolerations,\n        node_selectors,\n        checkpoint_sync_enabled,\n        checkpoint_sync_url,\n        port_publisher,\n        participant_index,\n        network_params,\n        extra_files_artifacts,\n        backend,\n        tempo_otlp_grpc_url,\n        bootnode_enr_override,\n        cl_binary_artifact,\n    )\n\n    beacon_service = plan.add_service(\n        beacon_service_name, beacon_config, force_update=participant.cl_force_restart\n    )\n\n    cl_context_obj = get_cl_context(\n        plan,\n        beacon_service_name,\n        beacon_service,\n        participant,\n        snooper_el_engine_context,\n        node_keystore_files,\n        node_selectors,\n    )\n\n    return cl_context_obj\n\n\ndef get_beacon_config(\n    plan,\n    launcher,\n    beacon_service_name,\n    participant,\n    global_log_level,\n    bootnode_contexts,\n    el_context,\n    full_name,\n    node_keystore_files,\n    snooper_el_engine_context,\n    persistent,\n    tolerations,\n    node_selectors,\n    checkpoint_sync_enabled,\n    checkpoint_sync_url,\n    port_publisher,\n    participant_index,\n    network_params,\n    extra_files_artifacts,\n    backend,\n    tempo_otlp_grpc_url,\n    bootnode_enr_override=None,\n    cl_binary_artifact=None,\n):\n    log_level = input_parser.get_client_log_level_or_default(\n        participant.cl_log_level, global_log_level, VERBOSITY_LEVELS\n    )\n\n    if participant.snooper_enabled:\n        engine_host = \"http://{0}\".format(snooper_el_engine_context.ip_addr)\n        engine_port = snooper_el_engine_context.engine_rpc_port_num\n    else:\n        engine_host = \"http://{0}\".format(el_context.dns_name)\n        engine_port = el_context.engine_rpc_port_num\n\n    public_ports = {}\n    public_ports_for_component = None\n    if port_publisher.cl_enabled:\n        public_ports_for_component = shared_utils.get_public_ports_for_component(\n            \"cl\",\n            port_publisher,\n            participant_index,\n        )\n        public_ports = cl_shared.get_general_cl_public_port_specs(\n            public_ports_for_component\n        )\n\n    p2p_port = (\n        public_ports_for_component[0]\n        if public_ports_for_component\n        else BEACON_P2P_PORT_NUM\n    )\n\n    used_port_assignments = {\n        constants.TCP_DISCOVERY_PORT_ID: p2p_port,\n        constants.UDP_DISCOVERY_PORT_ID: p2p_port,\n        constants.HTTP_PORT_ID: BEACON_HTTP_PORT_NUM,\n        constants.METRICS_PORT_ID: BEACON_METRICS_PORT_NUM,\n    }\n\n    used_ports = shared_utils.get_port_specs(used_port_assignments)\n\n    cmd = [\n        \"caplin\",\n        \"--datadir=\" + BEACON_DATA_DIRPATH_ON_BEACON_SERVICE_CONTAINER,\n        \"--verbosity=\" + log_level,\n        \"--engine.api\",\n        \"--engine.api.host=\" + engine_host,\n        \"--engine.api.port={0}\".format(engine_port),\n        \"--engine.api.jwtsecret=\" + constants.JWT_MOUNT_PATH_ON_CONTAINER,\n        \"--beacon.api=beacon,builder,config,debug,events,node,validator,lighthouse\",\n        \"--beacon.api.addr=0.0.0.0\",\n        \"--beacon.api.port={0}\".format(BEACON_HTTP_PORT_NUM),\n        \"--sentinel.tcp.port={0}\".format(p2p_port),\n        \"--discovery.port={0}\".format(p2p_port),\n        \"--discovery.addr=0.0.0.0\",\n        \"--pprof\",\n        \"--pprof.addr=0.0.0.0\",\n        \"--pprof.port={0}\".format(BEACON_METRICS_PORT_NUM),\n    ]\n\n    if checkpoint_sync_enabled and checkpoint_sync_url:\n        cmd.append(\"--caplin.checkpoint-sync-url=\" + checkpoint_sync_url)\n\n    if network_params.network not in constants.PUBLIC_NETWORKS:\n        cmd.append(\n            \"--custom-config=\"\n            + constants.GENESIS_CONFIG_MOUNT_PATH_ON_CONTAINER\n            + \"/config.yaml\"\n        )\n        cmd.append(\n            \"--custom-genesis-state=\"\n            + constants.GENESIS_CONFIG_MOUNT_PATH_ON_CONTAINER\n            + \"/genesis.ssz\"\n        )\n        if (\n            network_params.network == constants.NETWORK_NAME.kurtosis\n            or constants.NETWORK_NAME.shadowfork in network_params.network\n        ):\n            bootnode_arg = bootnode_enr_override\n            if bootnode_arg == None and bootnode_contexts != None:\n                bootnodes = []\n                for ctx in bootnode_contexts[: constants.MAX_ENR_ENTRIES]:\n                    if ctx.enr:\n                        bootnodes.append(ctx.enr)\n                    elif ctx.multiaddr:\n                        bootnodes.append(ctx.multiaddr)\n                if bootnodes:\n                    cmd.append(\"--sentinel.bootnodes=\" + \",\".join(bootnodes))\n    else:\n        cmd.append(\"--chain=\" + network_params.network)\n\n    if len(participant.cl_extra_params) > 0:\n        cmd.extend([param for param in participant.cl_extra_params])\n\n    files = {\n        constants.GENESIS_DATA_MOUNTPOINT_ON_CLIENTS: launcher.el_cl_genesis_data.files_artifact_uuid,\n        constants.JWT_MOUNTPOINT_ON_CLIENTS: launcher.jwt_file,\n    }\n\n    if persistent:\n        volume_size_key = (\n            \"devnets\" if \"devnet\" in network_params.network else network_params.network\n        )\n        files[BEACON_DATA_DIRPATH_ON_BEACON_SERVICE_CONTAINER] = Directory(\n            persistent_key=\"data-{0}\".format(beacon_service_name),\n            size=int(participant.cl_volume_size)\n            if int(participant.cl_volume_size) > 0\n            else constants.VOLUME_SIZE[volume_size_key][\n                constants.CL_TYPE.lighthouse + \"_volume_size\"\n            ],\n        )\n\n    processed_mounts = shared_utils.process_extra_mounts(\n        plan, participant.cl_extra_mounts, extra_files_artifacts\n    )\n    for mount_path, artifact in processed_mounts.items():\n        files[mount_path] = artifact\n\n    if cl_binary_artifact != None:\n        files[\"/opt/bin\"] = cl_binary_artifact.artifact\n\n    env_vars = participant.cl_extra_env_vars\n\n    cmd_str = \" \".join(cmd)\n    if cl_binary_artifact != None:\n        cmd_str = (\n            \"cp /opt/bin/{0} /usr/local/bin/caplin && exec \".format(\n                cl_binary_artifact.filename\n            )\n            + cmd_str\n        )\n    else:\n        cmd_str = \"exec \" + cmd_str\n\n    config_args = {\n        \"image\": participant.cl_image,\n        \"ports\": used_ports,\n        \"public_ports\": public_ports,\n        \"user\": User(uid=0, gid=0),\n        \"entrypoint\": [\"sh\", \"-c\"],\n        \"cmd\": [cmd_str],\n        \"files\": files,\n        \"env_vars\": env_vars,\n        \"private_ip_address_placeholder\": constants.PRIVATE_IP_ADDRESS_PLACEHOLDER,\n        \"labels\": shared_utils.label_maker(\n            client=constants.CL_TYPE.caplin,\n            client_type=constants.CLIENT_TYPES.cl,\n            image=participant.cl_image[-constants.MAX_LABEL_LENGTH :],\n            connected_client=el_context.client_name,\n            extra_labels=participant.cl_extra_labels\n            | {constants.NODE_INDEX_LABEL_KEY: str(participant_index + 1)},\n            supernode=participant.supernode,\n        ),\n        \"tolerations\": tolerations,\n        \"node_selectors\": node_selectors,\n    }\n\n    if not participant.skip_start:\n        config_args[\"ready_conditions\"] = cl_node_ready_conditions.get_ready_conditions(\n            constants.HTTP_PORT_ID\n        )\n\n    if int(participant.cl_min_cpu) > 0:\n        config_args[\"min_cpu\"] = int(participant.cl_min_cpu)\n    if int(participant.cl_max_cpu) > 0:\n        config_args[\"max_cpu\"] = int(participant.cl_max_cpu)\n    if int(participant.cl_min_mem) > 0:\n        config_args[\"min_memory\"] = int(participant.cl_min_mem)\n    if int(participant.cl_max_mem) > 0:\n        config_args[\"max_memory\"] = int(participant.cl_max_mem)\n    return ServiceConfig(**config_args)\n\n\ndef get_cl_context(\n    plan,\n    service_name,\n    service,\n    participant,\n    snooper_el_engine_context,\n    node_keystore_files,\n    node_selectors,\n):\n    beacon_http_port = service.ports[constants.HTTP_PORT_ID]\n    beacon_http_url = \"http://{0}:{1}\".format(service.name, beacon_http_port.number)\n\n    if participant.skip_start:\n        beacon_node_enr = \"\"\n        beacon_multiaddr = \"\"\n        beacon_peer_id = \"\"\n    else:\n        beacon_node_identity_recipe = GetHttpRequestRecipe(\n            endpoint=\"/eth/v1/node/identity\",\n            port_id=constants.HTTP_PORT_ID,\n            extract={\n                \"enr\": \".data.enr\",\n                \"multiaddr\": \".data.p2p_addresses[0]\",\n                \"peer_id\": \".data.peer_id\",\n            },\n        )\n        response = plan.request(\n            recipe=beacon_node_identity_recipe, service_name=service_name\n        )\n        beacon_node_enr = response[\"extract.enr\"]\n        beacon_multiaddr = response[\"extract.multiaddr\"]\n        beacon_peer_id = response[\"extract.peer_id\"]\n\n    beacon_metrics_port = service.ports[constants.METRICS_PORT_ID]\n    beacon_metrics_url = \"{0}:{1}\".format(\n        service.ip_address, beacon_metrics_port.number\n    )\n    nodes_metrics_info = [\n        node_metrics.new_node_metrics_info(\n            service_name, METRICS_PATH, beacon_metrics_url\n        ),\n    ]\n    return cl_context.new_cl_context(\n        client_name=\"caplin\",\n        enr=beacon_node_enr,\n        ip_addr=service.name,\n        ip_address=service.ip_address,\n        http_port=beacon_http_port.number,\n        beacon_http_url=beacon_http_url,\n        cl_nodes_metrics_info=nodes_metrics_info,\n        beacon_service_name=service_name,\n        multiaddr=beacon_multiaddr,\n        peer_id=beacon_peer_id,\n        snooper_enabled=participant.snooper_enabled,\n        snooper_el_engine_context=snooper_el_engine_context,\n        validator_keystore_files_artifact_uuid=node_keystore_files.files_artifact_uuid\n        if node_keystore_files\n        else \"\",\n        supernode=participant.supernode,\n    )\n\n\ndef new_caplin_launcher(el_cl_genesis_data, jwt_file):\n    return struct(\n        el_cl_genesis_data=el_cl_genesis_data,\n        jwt_file=jwt_file,\n    )\n\n\ndef get_blobber_config(\n    plan,\n    participant,\n    beacon_service_name,\n    beacon_http_url,\n    node_keystore_files,\n    node_selectors,\n):\n    return None\n"
  },
  {
    "path": "src/cl/cl_context.star",
    "content": "def new_cl_context(\n    client_name,\n    enr,\n    ip_addr,\n    http_port,\n    beacon_http_url,\n    ip_address=\"\",\n    cl_nodes_metrics_info=None,\n    beacon_service_name=\"\",\n    beacon_grpc_url=\"\",\n    multiaddr=\"\",\n    peer_id=\"\",\n    snooper_enabled=False,\n    snooper_el_engine_context=None,\n    validator_keystore_files_artifact_uuid=\"\",\n    supernode=False,\n):\n    return struct(\n        client_name=client_name,\n        enr=enr,\n        ip_addr=ip_addr,\n        ip_address=ip_address,\n        http_port=http_port,\n        beacon_http_url=beacon_http_url,\n        cl_nodes_metrics_info=cl_nodes_metrics_info,\n        beacon_service_name=beacon_service_name,\n        beacon_grpc_url=beacon_grpc_url,\n        multiaddr=multiaddr,\n        peer_id=peer_id,\n        snooper_enabled=snooper_enabled,\n        snooper_el_engine_context=snooper_el_engine_context,\n        validator_keystore_files_artifact_uuid=validator_keystore_files_artifact_uuid,\n        supernode=supernode,\n    )\n"
  },
  {
    "path": "src/cl/cl_launcher.star",
    "content": "node_metrics = import_module(\"../node_metrics_info.star\")\ncl_context_l = import_module(\"./cl_context.star\")\nlighthouse = import_module(\"./lighthouse/lighthouse_launcher.star\")\nlodestar = import_module(\"./lodestar/lodestar_launcher.star\")\nnimbus = import_module(\"./nimbus/nimbus_launcher.star\")\nprysm = import_module(\"./prysm/prysm_launcher.star\")\nteku = import_module(\"./teku/teku_launcher.star\")\ngrandine = import_module(\"./grandine/grandine_launcher.star\")\nconsensoor = import_module(\"./consensoor/consensoor_launcher.star\")\ncaplin = import_module(\"./caplin/caplin_launcher.star\")\n\nconstants = import_module(\"../package_io/constants.star\")\ninput_parser = import_module(\"../package_io/input_parser.star\")\nshared_utils = import_module(\"../shared_utils/shared_utils.star\")\n\nsnooper_el_launcher = import_module(\"../snooper/snooper_el_launcher.star\")\n\ncl_context_BOOTNODE = None\n\n\ndef launch(\n    plan,\n    network_params,\n    el_cl_data,\n    jwt_file,\n    keymanager_file,\n    args_with_right_defaults,\n    all_el_contexts,\n    global_node_selectors,\n    global_tolerations,\n    persistent,\n    tempo_otlp_grpc_url,\n    num_participants,\n    validator_data,\n    prysm_password_relative_filepath,\n    prysm_password_artifact_uuid,\n    global_other_index,\n    extra_files_artifacts,\n    backend,\n    bootnodoor_enr=None,\n    binary_artifacts={},\n):\n    plan.print(\"Launching CL network\")\n\n    cl_launchers = {\n        constants.CL_TYPE.lighthouse: {\n            \"launcher\": lighthouse.new_lighthouse_launcher(el_cl_data, jwt_file),\n            \"launch_method\": lighthouse.launch,\n            \"get_beacon_config\": lighthouse.get_beacon_config,\n            \"get_cl_context\": lighthouse.get_cl_context,\n            \"get_blobber_config\": lighthouse.get_blobber_config,\n        },\n        constants.CL_TYPE.lodestar: {\n            \"launcher\": lodestar.new_lodestar_launcher(el_cl_data, jwt_file),\n            \"launch_method\": lodestar.launch,\n            \"get_beacon_config\": lodestar.get_beacon_config,\n            \"get_cl_context\": lodestar.get_cl_context,\n            \"get_blobber_config\": lodestar.get_blobber_config,\n        },\n        constants.CL_TYPE.nimbus: {\n            \"launcher\": nimbus.new_nimbus_launcher(\n                el_cl_data,\n                jwt_file,\n                keymanager_file,\n            ),\n            \"launch_method\": nimbus.launch,\n            \"get_beacon_config\": nimbus.get_beacon_config,\n            \"get_cl_context\": nimbus.get_cl_context,\n            \"get_blobber_config\": nimbus.get_blobber_config,\n        },\n        constants.CL_TYPE.prysm: {\n            \"launcher\": prysm.new_prysm_launcher(\n                el_cl_data,\n                jwt_file,\n            ),\n            \"launch_method\": prysm.launch,\n            \"get_beacon_config\": prysm.get_beacon_config,\n            \"get_cl_context\": prysm.get_cl_context,\n            \"get_blobber_config\": prysm.get_blobber_config,\n        },\n        constants.CL_TYPE.teku: {\n            \"launcher\": teku.new_teku_launcher(\n                el_cl_data,\n                jwt_file,\n                keymanager_file,\n            ),\n            \"launch_method\": teku.launch,\n            \"get_beacon_config\": teku.get_beacon_config,\n            \"get_cl_context\": teku.get_cl_context,\n            \"get_blobber_config\": teku.get_blobber_config,\n        },\n        constants.CL_TYPE.grandine: {\n            \"launcher\": grandine.new_grandine_launcher(\n                el_cl_data,\n                jwt_file,\n            ),\n            \"launch_method\": grandine.launch,\n            \"get_beacon_config\": grandine.get_beacon_config,\n            \"get_cl_context\": grandine.get_cl_context,\n            \"get_blobber_config\": grandine.get_blobber_config,\n        },\n        constants.CL_TYPE.consensoor: {\n            \"launcher\": consensoor.new_consensoor_launcher(\n                el_cl_data,\n                jwt_file,\n            ),\n            \"launch_method\": consensoor.launch,\n            \"get_beacon_config\": consensoor.get_beacon_config,\n            \"get_cl_context\": consensoor.get_cl_context,\n            \"get_blobber_config\": consensoor.get_blobber_config,\n        },\n        constants.CL_TYPE.caplin: {\n            \"launcher\": caplin.new_caplin_launcher(\n                el_cl_data,\n                jwt_file,\n            ),\n            \"launch_method\": caplin.launch,\n            \"get_beacon_config\": caplin.get_beacon_config,\n            \"get_cl_context\": caplin.get_cl_context,\n            \"get_blobber_config\": caplin.get_blobber_config,\n        },\n    }\n\n    all_snooper_el_engine_contexts = []\n    all_cl_contexts = []\n    blobber_configs_with_contexts = []\n\n    # Generic bootnode ENR override - can be set from bootnodoor or any other bootnode service\n    bootnode_enr_override = bootnodoor_enr\n    if bootnode_enr_override != None:\n        plan.print(\n            \"Using bootnode ENR override for all CL clients: {0}\".format(\n                bootnode_enr_override\n            )\n        )\n\n    preregistered_validator_keys_for_nodes = (\n        validator_data.per_node_keystores\n        if network_params.network == constants.NETWORK_NAME.kurtosis\n        or constants.NETWORK_NAME.shadowfork in network_params.network\n        else None\n    )\n    network_name = shared_utils.get_network_name(network_params.network)\n\n    cl_service_configs = {}\n    cl_participant_info = {}\n    for index, participant in enumerate(args_with_right_defaults.participants):\n        cl_type = participant.cl_type\n        el_type = participant.el_type\n        node_selectors = input_parser.get_client_node_selectors(\n            participant.node_selectors,\n            global_node_selectors,\n        )\n\n        tolerations = shared_utils.get_tolerations(\n            specific_container_tolerations=participant.cl_tolerations,\n            participant_tolerations=participant.tolerations,\n            global_tolerations=global_tolerations,\n        )\n\n        if cl_type not in cl_launchers:\n            fail(\n                \"Unsupported launcher '{0}', need one of '{1}'\".format(\n                    cl_type, \",\".join(cl_launchers.keys())\n                )\n            )\n\n        (\n            cl_launcher,\n            launch_method,\n            get_beacon_config,\n            get_cl_context,\n            get_blobber_config,\n        ) = (\n            cl_launchers[cl_type][\"launcher\"],\n            cl_launchers[cl_type][\"launch_method\"],\n            cl_launchers[cl_type][\"get_beacon_config\"],\n            cl_launchers[cl_type][\"get_cl_context\"],\n            cl_launchers[cl_type][\"get_blobber_config\"],\n        )\n\n        index_str = shared_utils.zfill_custom(\n            index + 1, len(str(len(args_with_right_defaults.participants)))\n        )\n\n        cl_service_name = \"cl-{0}-{1}-{2}\".format(index_str, cl_type, el_type)\n        new_cl_node_validator_keystores = None\n        if participant.validator_count != 0:\n            new_cl_node_validator_keystores = preregistered_validator_keys_for_nodes[\n                index\n            ]\n\n        el_context = all_el_contexts[index]\n\n        cl_context = None\n        snooper_el_engine_context = None\n        if participant.snooper_enabled:\n            snooper_service_name = \"snooper-engine-{0}-{1}-{2}\".format(\n                index_str, cl_type, el_type\n            )\n            snooper_el_engine_context = snooper_el_launcher.launch_snooper(\n                plan,\n                snooper_service_name,\n                el_context,\n                node_selectors,\n                global_tolerations,\n                args_with_right_defaults.port_publisher,\n                global_other_index,\n                args_with_right_defaults.docker_cache_params,\n                args_with_right_defaults.snooper_params,\n            )\n            global_other_index += 1\n            plan.print(\n                \"Successfully added {0} snooper participants\".format(\n                    snooper_el_engine_context\n                )\n            )\n        checkpoint_sync_url = args_with_right_defaults.checkpoint_sync_url\n        # Use participant-level checkpoint_sync_enabled if set, otherwise use global\n        checkpoint_sync_enabled = args_with_right_defaults.checkpoint_sync_enabled\n        if participant.checkpoint_sync_enabled != None:\n            checkpoint_sync_enabled = participant.checkpoint_sync_enabled\n        if checkpoint_sync_enabled:\n            if args_with_right_defaults.checkpoint_sync_url == \"\":\n                if network_params.network == constants.NETWORK_NAME.kurtosis:\n                    if \"checkpointz\" in args_with_right_defaults.additional_services:\n                        checkpoint_sync_url = \"http://checkpointz:5555\"\n                    else:\n                        fail(\n                            \"Checkpoint sync URL is required if you enabled checkpoint_sync for kurtosis network. Please enable checkpointz additional service.\"\n                        )\n                elif (\n                    network_params.network in constants.PUBLIC_NETWORKS\n                    or network_params.network == constants.NETWORK_NAME.ephemery\n                ):\n                    checkpoint_sync_url = constants.CHECKPOINT_SYNC_URL[\n                        network_params.network\n                    ]\n                elif \"devnet\" in network_params.network:\n                    checkpoint_sync_url = (\n                        \"https://checkpoint-sync.{0}.ethpandaops.io/\".format(\n                            network_params.network\n                        )\n                    )\n                else:\n                    fail(\n                        \"Checkpoint sync URL is required if you enabled checkpoint_sync for custom networks. Please provide a valid URL.\"\n                    )\n\n        all_snooper_el_engine_contexts.append(snooper_el_engine_context)\n        full_name = \"{0}-{1}-{2}\".format(index_str, el_type, cl_type)\n\n        cl_binary_artifact = binary_artifacts.get(index, {}).get(\"cl\", None)\n\n        if index == 0:\n            cl_context = launch_method(\n                plan,\n                cl_launcher,\n                cl_service_name,\n                participant,\n                args_with_right_defaults.global_log_level,\n                cl_context_BOOTNODE,\n                el_context,\n                full_name,\n                new_cl_node_validator_keystores,\n                snooper_el_engine_context,\n                persistent,\n                tolerations,\n                node_selectors,\n                checkpoint_sync_enabled,\n                checkpoint_sync_url,\n                args_with_right_defaults.port_publisher,\n                index,\n                network_params,\n                extra_files_artifacts,\n                backend,\n                tempo_otlp_grpc_url,\n                bootnode_enr_override,\n                cl_binary_artifact,\n            )\n\n            blobber_config = get_blobber_config(\n                plan,\n                participant,\n                cl_service_name,\n                cl_context.beacon_http_url,\n                new_cl_node_validator_keystores,\n                node_selectors,\n            )\n            if blobber_config != None:\n                blobber_configs_with_contexts.append(\n                    struct(\n                        cl_context=cl_context,\n                        blobber_config=blobber_config,\n                        participant=participant,\n                    )\n                )\n\n            # Add participant cl additional prometheus labels\n            for metrics_info in cl_context.cl_nodes_metrics_info:\n                if metrics_info != None:\n                    metrics_info[\"config\"] = participant.prometheus_config\n\n            all_cl_contexts.append(cl_context)\n        else:\n            boot_cl_client_ctx = all_cl_contexts\n\n            cl_service_configs[cl_service_name] = get_beacon_config(\n                plan,\n                cl_launcher,\n                cl_service_name,\n                participant,\n                args_with_right_defaults.global_log_level,\n                boot_cl_client_ctx,\n                el_context,\n                full_name,\n                new_cl_node_validator_keystores,\n                snooper_el_engine_context,\n                persistent,\n                tolerations,\n                node_selectors,\n                checkpoint_sync_enabled,\n                checkpoint_sync_url,\n                args_with_right_defaults.port_publisher,\n                index,\n                network_params,\n                extra_files_artifacts,\n                backend,\n                tempo_otlp_grpc_url,\n                bootnode_enr_override,\n                cl_binary_artifact,\n            )\n\n            cl_participant_info[cl_service_name] = {\n                \"snooper_el_engine_context\": snooper_el_engine_context,\n                \"new_cl_node_validator_keystores\": new_cl_node_validator_keystores,\n                \"participant\": participant,\n                \"node_selectors\": node_selectors,\n                \"get_cl_context\": get_cl_context,\n                \"get_blobber_config\": get_blobber_config,\n                \"participant_index\": index,\n                \"cl_type\": cl_type,\n            }\n\n    # add rest of cl's in parallel to speed package execution\n    cl_services = shared_utils.add_services_with_force_restart(\n        plan, cl_service_configs, cl_participant_info, \"cl_force_restart\"\n    )\n\n    # Create CL contexts ordered by participant index\n    cl_contexts_temp = {}\n    blobber_configs_temp = {}\n    for beacon_service_name, beacon_service in cl_services.items():\n        info = cl_participant_info[beacon_service_name]\n        get_cl_context = info[\"get_cl_context\"]\n        get_blobber_config = info[\"get_blobber_config\"]\n        participant = info[\"participant\"]\n        participant_index = info[\"participant_index\"]\n\n        cl_context = get_cl_context(\n            plan,\n            beacon_service_name,\n            beacon_service,\n            participant,\n            info[\"snooper_el_engine_context\"],\n            info[\"new_cl_node_validator_keystores\"],\n            info[\"node_selectors\"],\n        )\n\n        blobber_config = get_blobber_config(\n            plan,\n            participant,\n            beacon_service_name,\n            cl_context.beacon_http_url,\n            info[\"new_cl_node_validator_keystores\"],\n            info[\"node_selectors\"],\n        )\n        if blobber_config != None:\n            blobber_configs_temp[participant_index] = struct(\n                cl_context=cl_context,\n                blobber_config=blobber_config,\n                participant=participant,\n            )\n\n        # Add participant cl additional prometheus labels\n        for metrics_info in cl_context.cl_nodes_metrics_info:\n            if metrics_info != None:\n                metrics_info[\"config\"] = participant.prometheus_config\n\n        cl_contexts_temp[participant_index] = cl_context\n\n    # Add remaining CL contexts in participant order (skipping index 0 which was added earlier)\n    for i in range(1, len(args_with_right_defaults.participants)):\n        if i in cl_contexts_temp:\n            all_cl_contexts.append(cl_contexts_temp[i])\n            if i in blobber_configs_temp:\n                blobber_configs_with_contexts.append(blobber_configs_temp[i])\n\n    return (\n        all_cl_contexts,\n        all_snooper_el_engine_contexts,\n        preregistered_validator_keys_for_nodes,\n        global_other_index,\n        blobber_configs_with_contexts,\n    )\n"
  },
  {
    "path": "src/cl/cl_node_ready_conditions.star",
    "content": "def get_ready_conditions(port_id):\n    recipe = GetHttpRequestRecipe(endpoint=\"/eth/v1/node/health\", port_id=port_id)\n\n    ready_conditions = ReadyCondition(\n        recipe=recipe,\n        field=\"code\",\n        assertion=\"IN\",\n        target_value=[200, 206],\n        timeout=\"30m\",\n    )\n\n    return ready_conditions\n"
  },
  {
    "path": "src/cl/cl_shared.star",
    "content": "shared_utils = import_module(\"../shared_utils/shared_utils.star\")\nconstants = import_module(\"../package_io/constants.star\")\n\n\ndef get_general_cl_public_port_specs(public_ports_for_component):\n    public_port_assignments = {\n        constants.TCP_DISCOVERY_PORT_ID: public_ports_for_component[0],\n        constants.UDP_DISCOVERY_PORT_ID: public_ports_for_component[0],\n        constants.HTTP_PORT_ID: public_ports_for_component[1],\n        constants.METRICS_PORT_ID: public_ports_for_component[2],\n    }\n    public_ports = shared_utils.get_port_specs(public_port_assignments)\n    return public_ports\n"
  },
  {
    "path": "src/cl/consensoor/consensoor_launcher.star",
    "content": "shared_utils = import_module(\"../../shared_utils/shared_utils.star\")\ninput_parser = import_module(\"../../package_io/input_parser.star\")\ncl_context = import_module(\"../../cl/cl_context.star\")\ncl_node_ready_conditions = import_module(\"../../cl/cl_node_ready_conditions.star\")\ncl_shared = import_module(\"../cl_shared.star\")\nnode_metrics = import_module(\"../../node_metrics_info.star\")\nconstants = import_module(\"../../package_io/constants.star\")\n\nBEACON_DATA_DIRPATH_ON_BEACON_SERVICE_CONTAINER = \"/data/consensoor\"\n\nBEACON_DISCOVERY_PORT_NUM = 9000\nBEACON_HTTP_PORT_NUM = 5052\nBEACON_METRICS_PORT_NUM = 8008\n\nMETRICS_PATH = \"/metrics\"\n\nVERBOSITY_LEVELS = {\n    constants.GLOBAL_LOG_LEVEL.error: \"ERROR\",\n    constants.GLOBAL_LOG_LEVEL.warn: \"WARNING\",\n    constants.GLOBAL_LOG_LEVEL.info: \"INFO\",\n    constants.GLOBAL_LOG_LEVEL.debug: \"DEBUG\",\n    constants.GLOBAL_LOG_LEVEL.trace: \"DEBUG\",\n}\n\n\ndef launch(\n    plan,\n    launcher,\n    beacon_service_name,\n    participant,\n    global_log_level,\n    bootnode_contexts,\n    el_context,\n    full_name,\n    node_keystore_files,\n    snooper_el_engine_context,\n    persistent,\n    tolerations,\n    node_selectors,\n    checkpoint_sync_enabled,\n    checkpoint_sync_url,\n    port_publisher,\n    participant_index,\n    network_params,\n    extra_files_artifacts,\n    backend,\n    tempo_otlp_grpc_url=None,\n    bootnode_enr_override=None,\n    cl_binary_artifact=None,\n):\n    beacon_config = get_beacon_config(\n        plan,\n        launcher,\n        beacon_service_name,\n        participant,\n        global_log_level,\n        bootnode_contexts,\n        el_context,\n        full_name,\n        node_keystore_files,\n        snooper_el_engine_context,\n        persistent,\n        tolerations,\n        node_selectors,\n        checkpoint_sync_enabled,\n        checkpoint_sync_url,\n        port_publisher,\n        participant_index,\n        network_params,\n        extra_files_artifacts,\n        backend,\n        tempo_otlp_grpc_url,\n        bootnode_enr_override,\n        cl_binary_artifact,\n    )\n\n    beacon_service = plan.add_service(\n        beacon_service_name, beacon_config, force_update=participant.cl_force_restart\n    )\n\n    cl_context_obj = get_cl_context(\n        plan,\n        beacon_service_name,\n        beacon_service,\n        participant,\n        snooper_el_engine_context,\n        node_keystore_files,\n        node_selectors,\n    )\n\n    return cl_context_obj\n\n\ndef get_beacon_config(\n    plan,\n    launcher,\n    beacon_service_name,\n    participant,\n    global_log_level,\n    bootnode_contexts,\n    el_context,\n    full_name,\n    node_keystore_files,\n    snooper_el_engine_context,\n    persistent,\n    tolerations,\n    node_selectors,\n    checkpoint_sync_enabled,\n    checkpoint_sync_url,\n    port_publisher,\n    participant_index,\n    network_params,\n    extra_files_artifacts,\n    backend,\n    tempo_otlp_grpc_url,\n    bootnode_enr_override=None,\n    cl_binary_artifact=None,\n):\n    log_level = input_parser.get_client_log_level_or_default(\n        participant.cl_log_level, global_log_level, VERBOSITY_LEVELS\n    )\n\n    if participant.snooper_enabled:\n        EXECUTION_ENGINE_ENDPOINT = \"http://{0}:{1}\".format(\n            snooper_el_engine_context.ip_addr,\n            snooper_el_engine_context.engine_rpc_port_num,\n        )\n    else:\n        EXECUTION_ENGINE_ENDPOINT = \"http://{0}:{1}\".format(\n            el_context.dns_name,\n            el_context.engine_rpc_port_num,\n        )\n\n    public_ports = {}\n    public_ports_for_component = None\n    if port_publisher.cl_enabled:\n        public_ports_for_component = shared_utils.get_public_ports_for_component(\n            \"cl\",\n            port_publisher,\n            participant_index,\n        )\n        public_ports = {\n            constants.TCP_DISCOVERY_PORT_ID: shared_utils.new_port_spec(\n                public_ports_for_component[0],\n                shared_utils.TCP_PROTOCOL,\n            ),\n            constants.UDP_DISCOVERY_PORT_ID: shared_utils.new_port_spec(\n                public_ports_for_component[0],\n                shared_utils.UDP_PROTOCOL,\n            ),\n            constants.HTTP_PORT_ID: shared_utils.new_port_spec(\n                public_ports_for_component[1],\n                shared_utils.TCP_PROTOCOL,\n                shared_utils.HTTP_APPLICATION_PROTOCOL,\n            ),\n            constants.METRICS_PORT_ID: shared_utils.new_port_spec(\n                public_ports_for_component[2],\n                shared_utils.TCP_PROTOCOL,\n                shared_utils.HTTP_APPLICATION_PROTOCOL,\n            ),\n        }\n\n    discovery_port = (\n        public_ports_for_component[0]\n        if public_ports_for_component\n        else BEACON_DISCOVERY_PORT_NUM\n    )\n\n    used_port_assignments = {\n        constants.TCP_DISCOVERY_PORT_ID: discovery_port,\n        constants.UDP_DISCOVERY_PORT_ID: discovery_port,\n        constants.HTTP_PORT_ID: BEACON_HTTP_PORT_NUM,\n        constants.METRICS_PORT_ID: BEACON_METRICS_PORT_NUM,\n    }\n\n    used_ports = shared_utils.get_port_specs(used_port_assignments)\n\n    cmd = [\n        \"consensoor\",\n        \"run\",\n        \"--log-level=\" + log_level,\n        \"--data-dir=\" + BEACON_DATA_DIRPATH_ON_BEACON_SERVICE_CONTAINER,\n        \"--engine-api-url=\" + EXECUTION_ENGINE_ENDPOINT,\n        \"--jwt-secret=\" + constants.JWT_MOUNT_PATH_ON_CONTAINER,\n        \"--genesis-state=\"\n        + constants.GENESIS_CONFIG_MOUNT_PATH_ON_CONTAINER\n        + \"/genesis.ssz\",\n        \"--network-config=\"\n        + constants.GENESIS_CONFIG_MOUNT_PATH_ON_CONTAINER\n        + \"/config.yaml\",\n        \"--preset=\" + network_params.preset,\n        \"--p2p-port={0}\".format(discovery_port),\n        \"--p2p-host=0.0.0.0\",\n        \"--beacon-api-port={0}\".format(BEACON_HTTP_PORT_NUM),\n        \"--metrics-port={0}\".format(BEACON_METRICS_PORT_NUM),\n        \"--fee-recipient=\" + constants.VALIDATING_REWARDS_ACCOUNT,\n        \"--graffiti=consensoor\",\n    ]\n\n    if checkpoint_sync_enabled and checkpoint_sync_url:\n        cmd.append(\"--checkpoint-sync-url=\" + checkpoint_sync_url)\n\n    if node_keystore_files != None:\n        validator_keys_dirpath = shared_utils.path_join(\n            constants.VALIDATOR_KEYS_DIRPATH_ON_SERVICE_CONTAINER,\n            shared_utils.path_base(node_keystore_files.teku_keys_relative_dirpath),\n        )\n        validator_secrets_dirpath = shared_utils.path_join(\n            constants.VALIDATOR_KEYS_DIRPATH_ON_SERVICE_CONTAINER,\n            shared_utils.path_base(node_keystore_files.teku_secrets_relative_dirpath),\n        )\n        cmd.append(\n            \"--validator-keys={0}:{1}\".format(\n                validator_keys_dirpath,\n                validator_secrets_dirpath,\n            )\n        )\n\n    bootnode_arg = bootnode_enr_override\n    if network_params.network not in constants.PUBLIC_NETWORKS:\n        if (\n            network_params.network == constants.NETWORK_NAME.kurtosis\n            or constants.NETWORK_NAME.shadowfork in network_params.network\n        ):\n            if bootnode_arg == None and bootnode_contexts != None:\n                for ctx in bootnode_contexts[: constants.MAX_ENR_ENTRIES]:\n                    if ctx.enr:\n                        cmd.append(\"--bootnodes=\" + ctx.enr)\n                    elif ctx.multiaddr:\n                        cmd.append(\"--bootnodes=\" + ctx.multiaddr)\n\n    if participant.supernode:\n        cmd.append(\"--supernode\")\n\n    if len(participant.cl_extra_params) > 0:\n        cmd.extend([param for param in participant.cl_extra_params])\n\n    files = {\n        constants.GENESIS_DATA_MOUNTPOINT_ON_CLIENTS: launcher.el_cl_genesis_data.files_artifact_uuid,\n        constants.JWT_MOUNTPOINT_ON_CLIENTS: launcher.jwt_file,\n    }\n\n    if node_keystore_files != None:\n        files[\n            constants.VALIDATOR_KEYS_DIRPATH_ON_SERVICE_CONTAINER\n        ] = node_keystore_files.files_artifact_uuid\n\n    if persistent:\n        volume_size_key = (\n            \"devnets\" if \"devnet\" in network_params.network else network_params.network\n        )\n        files[BEACON_DATA_DIRPATH_ON_BEACON_SERVICE_CONTAINER] = Directory(\n            persistent_key=\"data-{0}\".format(beacon_service_name),\n            size=int(participant.cl_volume_size)\n            if int(participant.cl_volume_size) > 0\n            else constants.VOLUME_SIZE[volume_size_key][\n                constants.CL_TYPE.lighthouse + \"_volume_size\"\n            ],\n        )\n\n    processed_mounts = shared_utils.process_extra_mounts(\n        plan, participant.cl_extra_mounts, extra_files_artifacts\n    )\n    for mount_path, artifact in processed_mounts.items():\n        files[mount_path] = artifact\n\n    env_vars = participant.cl_extra_env_vars\n\n    cmd_str = \" \".join(cmd)\n    cmd_str = \"exec \" + cmd_str\n\n    config_args = {\n        \"image\": participant.cl_image,\n        \"ports\": used_ports,\n        \"public_ports\": public_ports,\n        \"entrypoint\": [\"sh\", \"-c\"],\n        \"cmd\": [cmd_str],\n        \"files\": files,\n        \"env_vars\": env_vars,\n        \"private_ip_address_placeholder\": constants.PRIVATE_IP_ADDRESS_PLACEHOLDER,\n        \"labels\": shared_utils.label_maker(\n            client=constants.CL_TYPE.consensoor,\n            client_type=constants.CLIENT_TYPES.cl,\n            image=participant.cl_image[-constants.MAX_LABEL_LENGTH :],\n            connected_client=el_context.client_name,\n            extra_labels=participant.cl_extra_labels\n            | {constants.NODE_INDEX_LABEL_KEY: str(participant_index + 1)},\n            supernode=participant.supernode,\n        ),\n        \"tolerations\": tolerations,\n        \"node_selectors\": node_selectors,\n    }\n\n    if not participant.skip_start:\n        config_args[\"ready_conditions\"] = cl_node_ready_conditions.get_ready_conditions(\n            constants.HTTP_PORT_ID\n        )\n\n    if int(participant.cl_min_cpu) > 0:\n        config_args[\"min_cpu\"] = int(participant.cl_min_cpu)\n    if int(participant.cl_max_cpu) > 0:\n        config_args[\"max_cpu\"] = int(participant.cl_max_cpu)\n    if int(participant.cl_min_mem) > 0:\n        config_args[\"min_memory\"] = int(participant.cl_min_mem)\n    if int(participant.cl_max_mem) > 0:\n        config_args[\"max_memory\"] = int(participant.cl_max_mem)\n    return ServiceConfig(**config_args)\n\n\ndef get_cl_context(\n    plan,\n    service_name,\n    service,\n    participant,\n    snooper_el_engine_context,\n    node_keystore_files,\n    node_selectors,\n):\n    beacon_http_port = service.ports[constants.HTTP_PORT_ID]\n    beacon_http_url = \"http://{0}:{1}\".format(service.name, beacon_http_port.number)\n\n    if participant.skip_start:\n        beacon_node_enr = \"\"\n        beacon_multiaddr = \"\"\n        beacon_peer_id = \"\"\n    else:\n        beacon_node_identity_recipe = GetHttpRequestRecipe(\n            endpoint=\"/eth/v1/node/identity\",\n            port_id=constants.HTTP_PORT_ID,\n            extract={\n                \"enr\": \".data.enr\",\n                \"multiaddr\": \".data.p2p_addresses[0]\",\n                \"peer_id\": \".data.peer_id\",\n            },\n        )\n        response = plan.request(\n            recipe=beacon_node_identity_recipe, service_name=service_name\n        )\n        beacon_node_enr = response[\"extract.enr\"]\n        beacon_multiaddr = response[\"extract.multiaddr\"]\n        beacon_peer_id = response[\"extract.peer_id\"]\n\n    beacon_metrics_port = service.ports[constants.METRICS_PORT_ID]\n    beacon_metrics_url = \"{0}:{1}\".format(\n        service.ip_address, beacon_metrics_port.number\n    )\n    nodes_metrics_info = [\n        node_metrics.new_node_metrics_info(\n            service_name, METRICS_PATH, beacon_metrics_url\n        ),\n    ]\n    return cl_context.new_cl_context(\n        client_name=\"consensoor\",\n        enr=beacon_node_enr,\n        ip_addr=service.name,\n        ip_address=service.ip_address,\n        http_port=beacon_http_port.number,\n        beacon_http_url=beacon_http_url,\n        cl_nodes_metrics_info=nodes_metrics_info,\n        beacon_service_name=service_name,\n        multiaddr=beacon_multiaddr,\n        peer_id=beacon_peer_id,\n        snooper_enabled=participant.snooper_enabled,\n        snooper_el_engine_context=snooper_el_engine_context,\n        validator_keystore_files_artifact_uuid=node_keystore_files.files_artifact_uuid\n        if node_keystore_files\n        else \"\",\n        supernode=participant.supernode,\n    )\n\n\ndef new_consensoor_launcher(el_cl_genesis_data, jwt_file):\n    return struct(\n        el_cl_genesis_data=el_cl_genesis_data,\n        jwt_file=jwt_file,\n    )\n\n\ndef get_blobber_config(\n    plan,\n    participant,\n    beacon_service_name,\n    beacon_http_url,\n    node_keystore_files,\n    node_selectors,\n):\n    return None\n"
  },
  {
    "path": "src/cl/grandine/grandine_launcher.star",
    "content": "shared_utils = import_module(\"../../shared_utils/shared_utils.star\")\ninput_parser = import_module(\"../../package_io/input_parser.star\")\ncl_context = import_module(\"../../cl/cl_context.star\")\ncl_node_ready_conditions = import_module(\"../../cl/cl_node_ready_conditions.star\")\ncl_shared = import_module(\"../cl_shared.star\")\nnode_metrics = import_module(\"../../node_metrics_info.star\")\nconstants = import_module(\"../../package_io/constants.star\")\nvc_shared = import_module(\"../../vc/shared.star\")\n\nGRANDINE_ENTRYPOINT_COMMAND = \"grandine\"\n\n#  ---------------------------------- Beacon client -------------------------------------\n# The Docker container runs as the \"grandine\" user so we can't write to root\nBEACON_DATA_DIRPATH_ON_SERVICE_CONTAINER = \"/data/grandine/grandine-beacon-data\"\nNODE_KEY_MOUNTPOINT_ON_CLIENTS = (\n    BEACON_DATA_DIRPATH_ON_SERVICE_CONTAINER + \"/testnet/network\"\n)\n\n# Port nums\nBEACON_DISCOVERY_PORT_NUM = 9000\nBEACON_HTTP_PORT_NUM = 4000\nBEACON_METRICS_PORT_NUM = 8008\nBEACON_QUIC_PORT_NUM = 9001\nBEACON_METRICS_PATH = \"/metrics\"\n\nMIN_PEERS = 1\n\nENTRYPOINT_ARGS = [\"sh\", \"-c\"]\n\nVERBOSITY_LEVELS = {\n    constants.GLOBAL_LOG_LEVEL.error: \"ERROR\",\n    constants.GLOBAL_LOG_LEVEL.warn: \"WARN\",\n    constants.GLOBAL_LOG_LEVEL.info: \"INFO\",\n    constants.GLOBAL_LOG_LEVEL.debug: \"DEBUG\",\n    constants.GLOBAL_LOG_LEVEL.trace: \"TRACE\",\n}\n\n\ndef launch(\n    plan,\n    launcher,\n    beacon_service_name,\n    participant,\n    global_log_level,\n    bootnode_contexts,\n    el_context,\n    full_name,\n    node_keystore_files,\n    snooper_el_engine_context,\n    persistent,\n    tolerations,\n    node_selectors,\n    checkpoint_sync_enabled,\n    checkpoint_sync_url,\n    port_publisher,\n    participant_index,\n    network_params,\n    extra_files_artifacts,\n    backend,\n    tempo_otlp_grpc_url=None,\n    bootnode_enr_override=None,\n    cl_binary_artifact=None,\n):\n    config = get_beacon_config(\n        plan,\n        launcher,\n        beacon_service_name,\n        participant,\n        global_log_level,\n        bootnode_contexts,\n        el_context,\n        full_name,\n        node_keystore_files,\n        snooper_el_engine_context,\n        persistent,\n        tolerations,\n        node_selectors,\n        checkpoint_sync_enabled,\n        checkpoint_sync_url,\n        port_publisher,\n        participant_index,\n        network_params,\n        extra_files_artifacts,\n        backend,\n        tempo_otlp_grpc_url,\n        bootnode_enr_override,\n        cl_binary_artifact,\n    )\n\n    beacon_service = plan.add_service(beacon_service_name, config)\n\n    cl_context_obj = get_cl_context(\n        plan,\n        beacon_service_name,\n        beacon_service,\n        participant,\n        snooper_el_engine_context,\n        node_keystore_files,\n        node_selectors,\n    )\n\n    return cl_context_obj\n\n\ndef get_beacon_config(\n    plan,\n    launcher,\n    beacon_service_name,\n    participant,\n    global_log_level,\n    bootnode_contexts,\n    el_context,\n    full_name,\n    node_keystore_files,\n    snooper_el_engine_context,\n    persistent,\n    tolerations,\n    node_selectors,\n    checkpoint_sync_enabled,\n    checkpoint_sync_url,\n    port_publisher,\n    participant_index,\n    network_params,\n    extra_files_artifacts,\n    backend,\n    tempo_otlp_grpc_url,\n    bootnode_enr_override=None,\n    cl_binary_artifact=None,\n):\n    log_level = input_parser.get_client_log_level_or_default(\n        participant.cl_log_level, global_log_level, VERBOSITY_LEVELS\n    )\n\n    validator_keys_dirpath = \"\"\n    validator_secrets_dirpath = \"\"\n    if node_keystore_files:\n        validator_keys_dirpath = shared_utils.path_join(\n            constants.VALIDATOR_KEYS_DIRPATH_ON_SERVICE_CONTAINER,\n            node_keystore_files.teku_keys_relative_dirpath,\n        )\n        validator_secrets_dirpath = shared_utils.path_join(\n            constants.VALIDATOR_KEYS_DIRPATH_ON_SERVICE_CONTAINER,\n            node_keystore_files.teku_secrets_relative_dirpath,\n        )\n    # If snooper is enabled use the snooper engine context, otherwise use the execution client context\n    if participant.snooper_enabled:\n        EXECUTION_ENGINE_ENDPOINT = \"http://{0}:{1}\".format(\n            snooper_el_engine_context.ip_addr,\n            snooper_el_engine_context.engine_rpc_port_num,\n        )\n    else:\n        EXECUTION_ENGINE_ENDPOINT = \"http://{0}:{1}\".format(\n            el_context.dns_name,\n            el_context.engine_rpc_port_num,\n        )\n\n    public_ports = {}\n    validator_public_port_assignment = {}\n    public_ports_for_component = None\n    if port_publisher.cl_enabled:\n        public_ports_for_component = shared_utils.get_public_ports_for_component(\n            \"cl\", port_publisher, participant_index\n        )\n        validator_public_port_assignment = {\n            constants.VALIDATOR_HTTP_PORT_ID: public_ports_for_component[3]\n        }\n        public_ports = cl_shared.get_general_cl_public_port_specs(\n            public_ports_for_component\n        )\n        public_ports.update(\n            shared_utils.get_port_specs(\n                {constants.QUIC_DISCOVERY_PORT_ID: public_ports_for_component[4]}\n            )\n        )\n\n    discovery_port_tcp = (\n        public_ports_for_component[0]\n        if public_ports_for_component\n        else BEACON_DISCOVERY_PORT_NUM\n    )\n    discovery_port_udp = (\n        public_ports_for_component[0]\n        if public_ports_for_component\n        else BEACON_DISCOVERY_PORT_NUM\n    )\n    discovery_port_quic = (\n        public_ports_for_component[4]\n        if public_ports_for_component\n        else BEACON_QUIC_PORT_NUM\n    )\n\n    used_port_assignments = {\n        constants.TCP_DISCOVERY_PORT_ID: discovery_port_tcp,\n        constants.UDP_DISCOVERY_PORT_ID: discovery_port_udp,\n        constants.QUIC_DISCOVERY_PORT_ID: discovery_port_quic,\n        constants.HTTP_PORT_ID: BEACON_HTTP_PORT_NUM,\n        constants.METRICS_PORT_ID: BEACON_METRICS_PORT_NUM,\n    }\n    # Disable port checks if skip_start is enabled\n    if participant.skip_start:\n        used_ports = shared_utils.get_port_specs(used_port_assignments, wait=None)\n    else:\n        used_ports = shared_utils.get_port_specs(used_port_assignments)\n\n    cmd = [\n        GRANDINE_ENTRYPOINT_COMMAND,\n        \"--network={0}\".format(\n            network_params.network\n            if network_params.network in constants.PUBLIC_NETWORKS\n            else \"custom\"\n        ),\n        \"--data-dir=\" + BEACON_DATA_DIRPATH_ON_SERVICE_CONTAINER,\n        \"--http-address=0.0.0.0\",\n        \"--http-port={0}\".format(BEACON_HTTP_PORT_NUM),\n        \"--libp2p-port={0}\".format(discovery_port_tcp),\n        \"--discovery-port={0}\".format(discovery_port_tcp),\n        \"--jwt-secret=\" + constants.JWT_MOUNT_PATH_ON_CONTAINER,\n        \"--eth1-rpc-urls=\" + EXECUTION_ENGINE_ENDPOINT,\n        # ENR\n        \"--disable-enr-auto-update\",\n        \"--enr-address={0}\".format(\n            \"${K8S_POD_IP}\"\n            if backend == \"kubernetes\"\n            else port_publisher.cl_nat_exit_ip\n        ),\n        \"--enr-udp-port={0}\".format(discovery_port_udp),\n        \"--enr-tcp-port={0}\".format(discovery_port_tcp),\n        # QUIC\n        \"--quic-port={0}\".format(discovery_port_quic),\n        \"--enr-quic-port={0}\".format(discovery_port_quic),\n        # Metrics\n        \"--metrics\",\n        \"--metrics-address=0.0.0.0\",\n        \"--metrics-port={0}\".format(BEACON_METRICS_PORT_NUM),\n        \"--features=DisableFinalizedRootCheck\",  # enables peering with prysm\n        \"--enable-private-discovery\",\n    ]\n    validator_default_cmd = [\n        \"--keystore-dir=\" + validator_keys_dirpath,\n        \"--keystore-password-file=\" + validator_secrets_dirpath,\n        \"--suggested-fee-recipient=\" + constants.VALIDATING_REWARDS_ACCOUNT,\n    ]\n\n    keymanager_api_cmd = [\n        \"--enable-validator-api\",\n        \"--validator-api-address=0.0.0.0\",\n        \"--validator-api-port={0}\".format(vc_shared.VALIDATOR_HTTP_PORT_NUM),\n        \"--validator-api-allowed-origins=*\",\n        # \"--validator-api-bearer-file=\" + constants.KEYMANAGER_MOUNT_PATH_ON_CONTAINER, Not yet supported\n    ]\n\n    supernode_cmd = [\n        \"--subscribe-all-data-column-subnets\",\n    ]\n\n    if network_params.gas_limit > 0:\n        cmd.append(\"--default-gas-limit={0}\".format(network_params.gas_limit))\n\n    if participant.supernode:\n        cmd.extend(supernode_cmd)\n\n    if checkpoint_sync_enabled:\n        cmd.append(\"--checkpoint-sync-url=\" + checkpoint_sync_url)\n\n    bootnode_arg = bootnode_enr_override\n\n    if network_params.network not in constants.PUBLIC_NETWORKS:\n        cmd.append(\n            \"--configuration-directory=\"\n            + constants.GENESIS_CONFIG_MOUNT_PATH_ON_CONTAINER\n        )\n        if (\n            network_params.network == constants.NETWORK_NAME.kurtosis\n            or constants.NETWORK_NAME.shadowfork in network_params.network\n        ):\n            if bootnode_contexts != None and bootnode_arg == None:\n                bootnode_arg = \",\".join(\n                    [ctx.enr for ctx in bootnode_contexts[: constants.MAX_ENR_ENTRIES]]\n                )\n        elif network_params.network == constants.NETWORK_NAME.ephemery:\n            if bootnode_arg == None:\n                bootnode_arg = shared_utils.get_devnet_enrs_list(\n                    plan, launcher.el_cl_genesis_data.files_artifact_uuid\n                )\n        elif constants.NETWORK_NAME.shadowfork in network_params.network:\n            if bootnode_arg == None:\n                bootnode_arg = shared_utils.get_devnet_enrs_list(\n                    plan, launcher.el_cl_genesis_data.files_artifact_uuid\n                )\n        else:  # Devnets\n            if bootnode_arg == None:\n                bootnode_arg = shared_utils.get_devnet_enrs_list(\n                    plan, launcher.el_cl_genesis_data.files_artifact_uuid\n                )\n\n    if bootnode_arg != None:\n        cmd.append(\"--boot-nodes=\" + bootnode_arg)\n\n    if len(participant.cl_extra_params) > 0:\n        # we do the list comprehension as the default participant.extra_params is a proto repeated string\n        cmd.extend([param for param in participant.cl_extra_params])\n\n    files = {\n        constants.GENESIS_DATA_MOUNTPOINT_ON_CLIENTS: launcher.el_cl_genesis_data.files_artifact_uuid,\n        constants.JWT_MOUNTPOINT_ON_CLIENTS: launcher.jwt_file,\n    }\n\n    if node_keystore_files != None and not participant.use_separate_vc:\n        cmd.extend(validator_default_cmd)\n        files[\n            constants.VALIDATOR_KEYS_DIRPATH_ON_SERVICE_CONTAINER\n        ] = node_keystore_files.files_artifact_uuid\n\n        if participant.keymanager_enabled:\n            cmd.extend(keymanager_api_cmd)\n            used_ports.update(vc_shared.VALIDATOR_KEYMANAGER_USED_PORTS)\n            public_ports.update(\n                shared_utils.get_port_specs(validator_public_port_assignment)\n            )\n    if network_params.perfect_peerdas_enabled and participant_index < 16:\n        files[NODE_KEY_MOUNTPOINT_ON_CLIENTS] = \"node-key-file-{0}\".format(\n            participant_index + 1\n        )\n    if persistent:\n        volume_size_key = (\n            \"devnets\" if \"devnet\" in network_params.network else network_params.network\n        )\n        files[BEACON_DATA_DIRPATH_ON_SERVICE_CONTAINER] = Directory(\n            persistent_key=\"data-{0}\".format(beacon_service_name),\n            size=int(participant.cl_volume_size)\n            if int(participant.cl_volume_size) > 0\n            else constants.VOLUME_SIZE[volume_size_key][\n                constants.CL_TYPE.grandine + \"_volume_size\"\n            ],\n        )\n\n    # Add extra mounts - automatically handle file uploads\n    processed_mounts = shared_utils.process_extra_mounts(\n        plan, participant.cl_extra_mounts, extra_files_artifacts\n    )\n    for mount_path, artifact in processed_mounts.items():\n        files[mount_path] = artifact\n\n    # Binary injection - mount custom binary directory if provided\n    if cl_binary_artifact != None:\n        files[\"/opt/bin\"] = cl_binary_artifact.artifact\n\n    # Build the command string, copying injected binary if provided\n    cmd_str = \" \".join(cmd)\n    if cl_binary_artifact != None:\n        cmd_str = (\n            \"cp /opt/bin/{0} /usr/local/bin/grandine && exec \".format(\n                cl_binary_artifact.filename\n            )\n            + cmd_str\n        )\n    else:\n        cmd_str = \"exec \" + cmd_str\n\n    config_args = {\n        \"image\": participant.cl_image,\n        \"ports\": used_ports,\n        \"public_ports\": public_ports,\n        \"publish_udp\": port_publisher.cl_enabled,\n        \"entrypoint\": [\"sh\", \"-c\"],\n        \"cmd\": [cmd_str],\n        \"files\": files,\n        \"env_vars\": participant.cl_extra_env_vars,\n        \"private_ip_address_placeholder\": constants.PRIVATE_IP_ADDRESS_PLACEHOLDER,\n        \"labels\": shared_utils.label_maker(\n            client=constants.CL_TYPE.grandine,\n            client_type=constants.CLIENT_TYPES.cl,\n            image=participant.cl_image[-constants.MAX_LABEL_LENGTH :],\n            connected_client=el_context.client_name,\n            extra_labels=participant.cl_extra_labels\n            | {constants.NODE_INDEX_LABEL_KEY: str(participant_index + 1)},\n            supernode=participant.supernode,\n        ),\n        \"tolerations\": tolerations,\n        \"node_selectors\": node_selectors,\n        \"user\": User(uid=0, gid=0),\n    }\n\n    if len(participant.cl_devices) > 0:\n        config_args[\"devices\"] = participant.cl_devices\n    # Only add ready_conditions if not skipping start\n    if not participant.skip_start:\n        config_args[\"ready_conditions\"] = cl_node_ready_conditions.get_ready_conditions(\n            constants.HTTP_PORT_ID\n        )\n\n    if int(participant.cl_min_cpu) > 0:\n        config_args[\"min_cpu\"] = int(participant.cl_min_cpu)\n    if int(participant.cl_max_cpu) > 0:\n        config_args[\"max_cpu\"] = int(participant.cl_max_cpu)\n    if int(participant.cl_min_mem) > 0:\n        config_args[\"min_memory\"] = int(participant.cl_min_mem)\n    if int(participant.cl_max_mem) > 0:\n        config_args[\"max_memory\"] = int(participant.cl_max_mem)\n    return ServiceConfig(**config_args)\n\n\ndef get_cl_context(\n    plan,\n    service_name,\n    service,\n    participant,\n    snooper_el_engine_context,\n    node_keystore_files,\n    node_selectors,\n):\n    beacon_http_port = service.ports[constants.HTTP_PORT_ID]\n    beacon_http_url = \"http://{0}:{1}\".format(service.name, beacon_http_port.number)\n\n    beacon_metrics_port = service.ports[constants.METRICS_PORT_ID]\n    beacon_metrics_url = \"{0}:{1}\".format(service.name, beacon_metrics_port.number)\n\n    # Skip HTTP requests if skip_start is enabled (service won't be running)\n    if participant.skip_start:\n        beacon_node_enr = \"\"\n        beacon_multiaddr = \"\"\n        beacon_peer_id = \"\"\n    else:\n        beacon_node_identity_recipe = GetHttpRequestRecipe(\n            endpoint=\"/eth/v1/node/identity\",\n            port_id=constants.HTTP_PORT_ID,\n            extract={\n                \"enr\": \".data.enr\",\n                \"multiaddr\": \".data.p2p_addresses[0]\",\n                \"peer_id\": \".data.peer_id\",\n            },\n        )\n        response = plan.request(\n            recipe=beacon_node_identity_recipe, service_name=service_name\n        )\n        beacon_node_enr = response[\"extract.enr\"]\n        beacon_multiaddr = response[\"extract.multiaddr\"]\n        beacon_peer_id = response[\"extract.peer_id\"]\n\n    beacon_node_metrics_info = node_metrics.new_node_metrics_info(\n        service_name, BEACON_METRICS_PATH, beacon_metrics_url\n    )\n    nodes_metrics_info = [beacon_node_metrics_info]\n    return cl_context.new_cl_context(\n        client_name=\"grandine\",\n        enr=beacon_node_enr,\n        ip_addr=service.name,\n        http_port=beacon_http_port.number,\n        beacon_http_url=beacon_http_url,\n        cl_nodes_metrics_info=nodes_metrics_info,\n        beacon_service_name=service_name,\n        multiaddr=beacon_multiaddr,\n        peer_id=beacon_peer_id,\n        snooper_enabled=participant.snooper_enabled,\n        snooper_el_engine_context=snooper_el_engine_context,\n        validator_keystore_files_artifact_uuid=node_keystore_files.files_artifact_uuid\n        if node_keystore_files\n        else \"\",\n        supernode=participant.supernode,\n    )\n\n\ndef new_grandine_launcher(\n    el_cl_genesis_data,\n    jwt_file,\n):\n    return struct(\n        el_cl_genesis_data=el_cl_genesis_data,\n        jwt_file=jwt_file,\n    )\n\n\ndef get_blobber_config(\n    plan,\n    participant,\n    beacon_service_name,\n    beacon_http_url,\n    node_keystore_files,\n    node_selectors,\n):\n    # Grandine doesn't support blobbers, return None for blobber config\n    return None\n"
  },
  {
    "path": "src/cl/lighthouse/lighthouse_launcher.star",
    "content": "shared_utils = import_module(\"../../shared_utils/shared_utils.star\")\ninput_parser = import_module(\"../../package_io/input_parser.star\")\ncl_context = import_module(\"../../cl/cl_context.star\")\ncl_node_ready_conditions = import_module(\"../../cl/cl_node_ready_conditions.star\")\ncl_shared = import_module(\"../cl_shared.star\")\nnode_metrics = import_module(\"../../node_metrics_info.star\")\nconstants = import_module(\"../../package_io/constants.star\")\n\nblobber_launcher = import_module(\"../../blobber/blobber_launcher.star\")\n\nLIGHTHOUSE_ENTRYPOINT_COMMAND = \"lighthouse\"\n\nRUST_BACKTRACE_ENVVAR_NAME = \"RUST_BACKTRACE\"\nRUST_FULL_BACKTRACE_KEYWORD = \"full\"\n\n#  ---------------------------------- Beacon client -------------------------------------\nBEACON_DATA_DIRPATH_ON_BEACON_SERVICE_CONTAINER = \"/data/lighthouse/beacon-data\"\nNODE_KEY_MOUNTPOINT_ON_CLIENTS = (\n    BEACON_DATA_DIRPATH_ON_BEACON_SERVICE_CONTAINER + \"/beacon/network\"\n)\n# Port nums\nBEACON_DISCOVERY_PORT_NUM = 9000\nBEACON_HTTP_PORT_NUM = 4000\nBEACON_METRICS_PORT_NUM = 5054\nBEACON_QUIC_PORT_NUM = 9001\n# The min/max CPU/memory that the beacon node can use\nBEACON_MIN_CPU = 50\nBEACON_MIN_MEMORY = 256\n\nMETRICS_PATH = \"/metrics\"\n\nVERBOSITY_LEVELS = {\n    constants.GLOBAL_LOG_LEVEL.error: \"error\",\n    constants.GLOBAL_LOG_LEVEL.warn: \"warn\",\n    constants.GLOBAL_LOG_LEVEL.info: \"info\",\n    constants.GLOBAL_LOG_LEVEL.debug: \"debug\",\n    constants.GLOBAL_LOG_LEVEL.trace: \"trace\",\n}\n\n\ndef launch(\n    plan,\n    launcher,\n    beacon_service_name,\n    participant,\n    global_log_level,\n    bootnode_contexts,\n    el_context,\n    full_name,\n    node_keystore_files,\n    snooper_el_engine_context,\n    persistent,\n    tolerations,\n    node_selectors,\n    checkpoint_sync_enabled,\n    checkpoint_sync_url,\n    port_publisher,\n    participant_index,\n    network_params,\n    extra_files_artifacts,\n    backend,\n    tempo_otlp_grpc_url=None,\n    bootnode_enr_override=None,\n    cl_binary_artifact=None,\n):\n    beacon_config = get_beacon_config(\n        plan,\n        launcher,\n        beacon_service_name,\n        participant,\n        global_log_level,\n        bootnode_contexts,\n        el_context,\n        full_name,\n        node_keystore_files,\n        snooper_el_engine_context,\n        persistent,\n        tolerations,\n        node_selectors,\n        checkpoint_sync_enabled,\n        checkpoint_sync_url,\n        port_publisher,\n        participant_index,\n        network_params,\n        extra_files_artifacts,\n        backend,\n        tempo_otlp_grpc_url,\n        bootnode_enr_override,\n        cl_binary_artifact,\n    )\n\n    beacon_service = plan.add_service(\n        beacon_service_name, beacon_config, force_update=participant.cl_force_restart\n    )\n\n    cl_context_obj = get_cl_context(\n        plan,\n        beacon_service_name,\n        beacon_service,\n        participant,\n        snooper_el_engine_context,\n        node_keystore_files,\n        node_selectors,\n    )\n\n    return cl_context_obj\n\n\ndef get_beacon_config(\n    plan,\n    launcher,\n    beacon_service_name,\n    participant,\n    global_log_level,\n    bootnode_contexts,\n    el_context,\n    full_name,\n    node_keystore_files,\n    snooper_el_engine_context,\n    persistent,\n    tolerations,\n    node_selectors,\n    checkpoint_sync_enabled,\n    checkpoint_sync_url,\n    port_publisher,\n    participant_index,\n    network_params,\n    extra_files_artifacts,\n    backend,\n    tempo_otlp_grpc_url,\n    bootnode_enr_override=None,\n    cl_binary_artifact=None,\n):\n    log_level = input_parser.get_client_log_level_or_default(\n        participant.cl_log_level, global_log_level, VERBOSITY_LEVELS\n    )\n\n    # If snooper is enabled use the snooper engine context, otherwise use the execution client context\n    if participant.snooper_enabled:\n        EXECUTION_ENGINE_ENDPOINT = \"http://{0}:{1}\".format(\n            snooper_el_engine_context.ip_addr,\n            snooper_el_engine_context.engine_rpc_port_num,\n        )\n    else:\n        EXECUTION_ENGINE_ENDPOINT = \"http://{0}:{1}\".format(\n            el_context.dns_name,\n            el_context.engine_rpc_port_num,\n        )\n\n    public_ports = {}\n    public_ports_for_component = None\n    if port_publisher.cl_enabled:\n        public_ports_for_component = shared_utils.get_public_ports_for_component(\n            \"cl\",\n            port_publisher,\n            participant_index,\n        )\n        public_ports = cl_shared.get_general_cl_public_port_specs(\n            public_ports_for_component\n        )\n        public_ports.update(\n            shared_utils.get_port_specs(\n                {constants.QUIC_DISCOVERY_PORT_ID: public_ports_for_component[3]}\n            )\n        )\n\n    discovery_port_tcp = (\n        public_ports_for_component[0]\n        if public_ports_for_component\n        else BEACON_DISCOVERY_PORT_NUM\n    )\n    discovery_port_udp = (\n        public_ports_for_component[0]\n        if public_ports_for_component\n        else BEACON_DISCOVERY_PORT_NUM\n    )\n    discovery_port_quic = (\n        public_ports_for_component[3]\n        if public_ports_for_component\n        else BEACON_QUIC_PORT_NUM\n    )\n\n    used_port_assignments = {\n        constants.TCP_DISCOVERY_PORT_ID: discovery_port_tcp,\n        constants.UDP_DISCOVERY_PORT_ID: discovery_port_udp,\n        constants.QUIC_DISCOVERY_PORT_ID: discovery_port_quic,\n        constants.HTTP_PORT_ID: BEACON_HTTP_PORT_NUM,\n        constants.METRICS_PORT_ID: BEACON_METRICS_PORT_NUM,\n    }\n    # Disable port checks if skip_start is enabled\n    if participant.skip_start:\n        used_ports = shared_utils.get_port_specs(used_port_assignments, wait=None)\n    else:\n        used_ports = shared_utils.get_port_specs(used_port_assignments)\n\n    cmd = [\n        LIGHTHOUSE_ENTRYPOINT_COMMAND,\n        \"beacon_node\",\n        \"--debug-level=\" + log_level,\n        \"--datadir=\" + BEACON_DATA_DIRPATH_ON_BEACON_SERVICE_CONTAINER,\n        \"--listen-address=0.0.0.0\",\n        \"--port={0}\".format(\n            discovery_port_tcp\n        ),  # NOTE: Remove for connecting to external net!\n        \"--http\",\n        \"--http-address=0.0.0.0\",\n        \"--http-port={0}\".format(BEACON_HTTP_PORT_NUM),\n        # NOTE: This comes from:\n        #   https://github.com/sigp/lighthouse/blob/7c88f582d955537f7ffff9b2c879dcf5bf80ce13/scripts/local_testnet/beacon_node.sh\n        # and the option says it's \"useful for testing in smaller networks\" (unclear what happens in larger networks)\n        \"--disable-packet-filter\",\n        \"--execution-endpoints=\" + EXECUTION_ENGINE_ENDPOINT,\n        \"--jwt-secrets=\" + constants.JWT_MOUNT_PATH_ON_CONTAINER,\n        \"--suggested-fee-recipient=\" + constants.VALIDATING_REWARDS_ACCOUNT,\n        # ENR\n        \"--disable-enr-auto-update\",\n        \"--enr-address={0}\".format(\n            \"${K8S_POD_IP}\"\n            if backend == \"kubernetes\"\n            else port_publisher.cl_nat_exit_ip\n        ),\n        \"--enr-tcp-port={0}\".format(discovery_port_tcp),\n        \"--enr-udp-port={0}\".format(discovery_port_udp),\n        # QUIC\n        \"--enr-quic-port={0}\".format(discovery_port_quic),\n        \"--quic-port={0}\".format(discovery_port_quic),\n        # Metrics\n        \"--metrics\",\n        \"--metrics-address=0.0.0.0\",\n        \"--metrics-allow-origin=*\",\n        \"--metrics-port={0}\".format(BEACON_METRICS_PORT_NUM),\n        \"--enable-private-discovery\",\n    ]\n\n    supernode_cmd = [\n        \"--supernode\",\n    ]\n\n    if participant.supernode:\n        cmd.extend(supernode_cmd)\n\n    if checkpoint_sync_enabled:\n        cmd.append(\"--checkpoint-sync-url=\" + checkpoint_sync_url)\n    else:\n        cmd.append(\"--allow-insecure-genesis-sync\")\n\n    bootnode_arg = bootnode_enr_override\n\n    if network_params.network not in constants.PUBLIC_NETWORKS:\n        cmd.append(\"--testnet-dir=\" + constants.GENESIS_CONFIG_MOUNT_PATH_ON_CONTAINER)\n        if (\n            network_params.network == constants.NETWORK_NAME.kurtosis\n            or constants.NETWORK_NAME.shadowfork in network_params.network\n        ):\n            if bootnode_arg == None and bootnode_contexts != None:\n                bootnode_arg = \",\".join(\n                    [ctx.enr for ctx in bootnode_contexts[: constants.MAX_ENR_ENTRIES]]\n                )\n        elif network_params.network == constants.NETWORK_NAME.ephemery:\n            if bootnode_arg == None:\n                bootnode_arg = shared_utils.get_devnet_enrs_list(\n                    plan, launcher.el_cl_genesis_data.files_artifact_uuid\n                )\n        elif bootnode_arg == None:  # Devnets\n            bootnode_arg = shared_utils.get_devnet_enrs_list(\n                plan, launcher.el_cl_genesis_data.files_artifact_uuid\n            )\n    else:  # Public networks\n        cmd.append(\"--network=\" + network_params.network)\n\n    # Add bootnode argument if set\n    if bootnode_arg != None:\n        cmd.append(\"--boot-nodes=\" + bootnode_arg)\n\n    # Add tempo telemetry integration if tempo is enabled\n    if tempo_otlp_grpc_url != None:\n        cmd.append(\"--telemetry-collector-url={}\".format(tempo_otlp_grpc_url))\n        cmd.append(\"--telemetry-service-name={}\".format(beacon_service_name))\n\n    if len(participant.cl_extra_params) > 0:\n        # this is a repeated<proto type>, we convert it into Starlark\n        cmd.extend([param for param in participant.cl_extra_params])\n\n    recipe = GetHttpRequestRecipe(\n        endpoint=\"/eth/v1/node/identity\", port_id=constants.HTTP_PORT_ID\n    )\n    files = {\n        constants.GENESIS_DATA_MOUNTPOINT_ON_CLIENTS: launcher.el_cl_genesis_data.files_artifact_uuid,\n        constants.JWT_MOUNTPOINT_ON_CLIENTS: launcher.jwt_file,\n    }\n\n    if network_params.perfect_peerdas_enabled and participant_index < 16:\n        files[NODE_KEY_MOUNTPOINT_ON_CLIENTS] = \"node-key-file-{0}\".format(\n            participant_index + 1\n        )\n\n    if persistent:\n        volume_size_key = (\n            \"devnets\" if \"devnet\" in network_params.network else network_params.network\n        )\n        files[BEACON_DATA_DIRPATH_ON_BEACON_SERVICE_CONTAINER] = Directory(\n            persistent_key=\"data-{0}\".format(beacon_service_name),\n            size=int(participant.cl_volume_size)\n            if int(participant.cl_volume_size) > 0\n            else constants.VOLUME_SIZE[volume_size_key][\n                constants.CL_TYPE.lighthouse + \"_volume_size\"\n            ],\n        )\n\n    # Add extra mounts - automatically handle file uploads\n    processed_mounts = shared_utils.process_extra_mounts(\n        plan, participant.cl_extra_mounts, extra_files_artifacts\n    )\n    for mount_path, artifact in processed_mounts.items():\n        files[mount_path] = artifact\n\n    # Binary injection - mount custom binary directory if provided\n    # The artifact is a directory, so we mount it and reference the binary inside\n    if cl_binary_artifact != None:\n        files[\"/opt/bin\"] = cl_binary_artifact.artifact\n\n    env_vars = {RUST_BACKTRACE_ENVVAR_NAME: RUST_FULL_BACKTRACE_KEYWORD}\n    env_vars.update(participant.cl_extra_env_vars)\n\n    # Build the command string, copying injected binary if provided\n    cmd_str = \" \".join(cmd)\n    if cl_binary_artifact != None:\n        cmd_str = (\n            \"cp /opt/bin/{0} /usr/local/bin/lighthouse && exec \".format(\n                cl_binary_artifact.filename\n            )\n            + cmd_str\n        )\n    else:\n        cmd_str = \"exec \" + cmd_str\n\n    config_args = {\n        \"image\": participant.cl_image,\n        \"ports\": used_ports,\n        \"public_ports\": public_ports,\n        \"publish_udp\": port_publisher.cl_enabled,\n        \"entrypoint\": [\"sh\", \"-c\"],\n        \"cmd\": [cmd_str],\n        \"files\": files,\n        \"env_vars\": env_vars,\n        \"private_ip_address_placeholder\": constants.PRIVATE_IP_ADDRESS_PLACEHOLDER,\n        \"labels\": shared_utils.label_maker(\n            client=constants.CL_TYPE.lighthouse,\n            client_type=constants.CLIENT_TYPES.cl,\n            image=participant.cl_image[-constants.MAX_LABEL_LENGTH :],\n            connected_client=el_context.client_name,\n            extra_labels=participant.cl_extra_labels\n            | {constants.NODE_INDEX_LABEL_KEY: str(participant_index + 1)},\n            supernode=participant.supernode,\n        ),\n        \"tolerations\": tolerations,\n        \"node_selectors\": node_selectors,\n    }\n\n    if len(participant.cl_devices) > 0:\n        config_args[\"devices\"] = participant.cl_devices\n    # Only add ready_conditions if not skipping start\n    if not participant.skip_start:\n        config_args[\"ready_conditions\"] = cl_node_ready_conditions.get_ready_conditions(\n            constants.HTTP_PORT_ID\n        )\n\n    if int(participant.cl_min_cpu) > 0:\n        config_args[\"min_cpu\"] = int(participant.cl_min_cpu)\n    if int(participant.cl_max_cpu) > 0:\n        config_args[\"max_cpu\"] = int(participant.cl_max_cpu)\n    if int(participant.cl_min_mem) > 0:\n        config_args[\"min_memory\"] = int(participant.cl_min_mem)\n    if int(participant.cl_max_mem) > 0:\n        config_args[\"max_memory\"] = int(participant.cl_max_mem)\n    return ServiceConfig(**config_args)\n\n\ndef get_cl_context(\n    plan,\n    service_name,\n    service,\n    participant,\n    snooper_el_engine_context,\n    node_keystore_files,\n    node_selectors,\n):\n    beacon_http_port = service.ports[constants.HTTP_PORT_ID]\n    beacon_http_url = \"http://{0}:{1}\".format(service.name, beacon_http_port.number)\n\n    # Skip HTTP requests if skip_start is enabled (service won't be running)\n    if participant.skip_start:\n        beacon_node_enr = \"\"\n        beacon_multiaddr = \"\"\n        beacon_peer_id = \"\"\n    else:\n        # TODO(old) add validator availability using the validator API: https://ethereum.github.io/beacon-APIs/?urls.primaryName=v1#/ValidatorRequiredApi | from eth2-merge-kurtosis-module\n        beacon_node_identity_recipe = GetHttpRequestRecipe(\n            endpoint=\"/eth/v1/node/identity\",\n            port_id=constants.HTTP_PORT_ID,\n            extract={\n                \"enr\": \".data.enr\",\n                \"multiaddr\": \".data.p2p_addresses[0]\",\n                \"peer_id\": \".data.peer_id\",\n            },\n        )\n        response = plan.request(\n            recipe=beacon_node_identity_recipe, service_name=service_name\n        )\n        beacon_node_enr = response[\"extract.enr\"]\n        beacon_multiaddr = response[\"extract.multiaddr\"]\n        beacon_peer_id = response[\"extract.peer_id\"]\n\n    beacon_metrics_port = service.ports[constants.METRICS_PORT_ID]\n    beacon_metrics_url = \"{0}:{1}\".format(service.name, beacon_metrics_port.number)\n    beacon_node_metrics_info = node_metrics.new_node_metrics_info(\n        service_name, METRICS_PATH, beacon_metrics_url\n    )\n    nodes_metrics_info = [beacon_node_metrics_info]\n    return cl_context.new_cl_context(\n        client_name=\"lighthouse\",\n        enr=beacon_node_enr,\n        ip_addr=service.name,\n        ip_address=service.ip_address,\n        http_port=beacon_http_port.number,\n        beacon_http_url=beacon_http_url,\n        cl_nodes_metrics_info=nodes_metrics_info,\n        beacon_service_name=service_name,\n        multiaddr=beacon_multiaddr,\n        peer_id=beacon_peer_id,\n        snooper_enabled=participant.snooper_enabled,\n        snooper_el_engine_context=snooper_el_engine_context,\n        validator_keystore_files_artifact_uuid=node_keystore_files.files_artifact_uuid\n        if node_keystore_files\n        else \"\",\n        supernode=participant.supernode,\n    )\n\n\ndef new_lighthouse_launcher(el_cl_genesis_data, jwt_file):\n    return struct(\n        el_cl_genesis_data=el_cl_genesis_data,\n        jwt_file=jwt_file,\n    )\n\n\ndef get_blobber_config(\n    plan,\n    participant,\n    beacon_service_name,\n    beacon_http_url,\n    node_keystore_files,\n    node_selectors,\n):\n    blobber_config = None\n    if participant.blobber_enabled:\n        blobber_config = struct(\n            service_name=\"{0}-{1}\".format(\"blobber\", beacon_service_name),\n            beacon_http_url=beacon_http_url,\n            node_keystore_files=node_keystore_files,\n            node_selectors=node_selectors,\n        )\n    return blobber_config\n"
  },
  {
    "path": "src/cl/lodestar/lodestar_launcher.star",
    "content": "shared_utils = import_module(\"../../shared_utils/shared_utils.star\")\ninput_parser = import_module(\"../../package_io/input_parser.star\")\ncl_context = import_module(\"../../cl/cl_context.star\")\ncl_node_ready_conditions = import_module(\"../../cl/cl_node_ready_conditions.star\")\ncl_shared = import_module(\"../cl_shared.star\")\nnode_metrics = import_module(\"../../node_metrics_info.star\")\nblobber_launcher = import_module(\"../../blobber/blobber_launcher.star\")\nconstants = import_module(\"../../package_io/constants.star\")\n\nLODESTAR_ENTRYPOINT_COMMAND = \"node ./packages/cli/bin/lodestar\"\n\n#  ---------------------------------- Beacon client -------------------------------------\nBEACON_DATA_DIRPATH_ON_SERVICE_CONTAINER = \"/data/lodestar/beacon-data\"\n# Port nums\nBEACON_DISCOVERY_PORT_NUM = 9000\nBEACON_HTTP_PORT_NUM = 4000\nBEACON_METRICS_PORT_NUM = 8008\n\nMETRICS_PATH = \"/metrics\"\n\nVERBOSITY_LEVELS = {\n    constants.GLOBAL_LOG_LEVEL.error: \"error\",\n    constants.GLOBAL_LOG_LEVEL.warn: \"warn\",\n    constants.GLOBAL_LOG_LEVEL.info: \"info\",\n    constants.GLOBAL_LOG_LEVEL.debug: \"debug\",\n    constants.GLOBAL_LOG_LEVEL.trace: \"trace\",\n}\n\n\ndef launch(\n    plan,\n    launcher,\n    beacon_service_name,\n    participant,\n    global_log_level,\n    bootnode_contexts,\n    el_context,\n    full_name,\n    node_keystore_files,\n    snooper_el_engine_context,\n    persistent,\n    tolerations,\n    node_selectors,\n    checkpoint_sync_enabled,\n    checkpoint_sync_url,\n    port_publisher,\n    participant_index,\n    network_params,\n    extra_files_artifacts,\n    backend,\n    tempo_otlp_grpc_url=None,\n    bootnode_enr_override=None,\n    cl_binary_artifact=None,\n):\n    # Launch Beacon node\n    beacon_config = get_beacon_config(\n        plan,\n        launcher,\n        beacon_service_name,\n        participant,\n        global_log_level,\n        bootnode_contexts,\n        el_context,\n        full_name,\n        node_keystore_files,\n        snooper_el_engine_context,\n        persistent,\n        tolerations,\n        node_selectors,\n        checkpoint_sync_enabled,\n        checkpoint_sync_url,\n        port_publisher,\n        participant_index,\n        network_params,\n        extra_files_artifacts,\n        backend,\n        tempo_otlp_grpc_url,\n        bootnode_enr_override,\n        cl_binary_artifact,\n    )\n\n    beacon_service = plan.add_service(beacon_service_name, beacon_config)\n\n    cl_context_obj = get_cl_context(\n        plan,\n        beacon_service_name,\n        beacon_service,\n        participant,\n        snooper_el_engine_context,\n        node_keystore_files,\n        node_selectors,\n    )\n\n    return cl_context_obj\n\n\ndef get_beacon_config(\n    plan,\n    launcher,\n    beacon_service_name,\n    participant,\n    global_log_level,\n    bootnode_contexts,\n    el_context,\n    full_name,\n    node_keystore_files,\n    snooper_el_engine_context,\n    persistent,\n    tolerations,\n    node_selectors,\n    checkpoint_sync_enabled,\n    checkpoint_sync_url,\n    port_publisher,\n    participant_index,\n    network_params,\n    extra_files_artifacts,\n    backend,\n    tempo_otlp_grpc_url,\n    bootnode_enr_override=None,\n    cl_binary_artifact=None,\n):\n    log_level = input_parser.get_client_log_level_or_default(\n        participant.cl_log_level, global_log_level, VERBOSITY_LEVELS\n    )\n\n    el_client_rpc_url_str = \"http://{0}:{1}\".format(\n        el_context.dns_name,\n        el_context.rpc_port_num,\n    )\n\n    # If snooper is enabled use the snooper engine context, otherwise use the execution client context\n    if participant.snooper_enabled:\n        EXECUTION_ENGINE_ENDPOINT = \"http://{0}:{1}\".format(\n            snooper_el_engine_context.ip_addr,\n            snooper_el_engine_context.engine_rpc_port_num,\n        )\n    else:\n        EXECUTION_ENGINE_ENDPOINT = \"http://{0}:{1}\".format(\n            el_context.dns_name,\n            el_context.engine_rpc_port_num,\n        )\n\n    public_ports = {}\n    public_ports_for_component = None\n    if port_publisher.cl_enabled:\n        public_ports_for_component = shared_utils.get_public_ports_for_component(\n            \"cl\", port_publisher, participant_index\n        )\n        public_ports = cl_shared.get_general_cl_public_port_specs(\n            public_ports_for_component\n        )\n\n    discovery_port_tcp = (\n        public_ports_for_component[0]\n        if public_ports_for_component\n        else BEACON_DISCOVERY_PORT_NUM\n    )\n    discovery_port_udp = (\n        public_ports_for_component[0]\n        if public_ports_for_component\n        else BEACON_DISCOVERY_PORT_NUM\n    )\n\n    used_port_assignments = {\n        constants.TCP_DISCOVERY_PORT_ID: discovery_port_tcp,\n        constants.UDP_DISCOVERY_PORT_ID: discovery_port_udp,\n        constants.HTTP_PORT_ID: BEACON_HTTP_PORT_NUM,\n        constants.METRICS_PORT_ID: BEACON_METRICS_PORT_NUM,\n    }\n    # Disable port checks if skip_start is enabled\n    if participant.skip_start:\n        used_ports = shared_utils.get_port_specs(used_port_assignments, wait=None)\n    else:\n        used_ports = shared_utils.get_port_specs(used_port_assignments)\n\n    cmd = [\n        LODESTAR_ENTRYPOINT_COMMAND,\n        \"beacon\",\n        \"--logLevel=\" + log_level,\n        \"--port={0}\".format(discovery_port_tcp),\n        \"--discoveryPort={0}\".format(discovery_port_tcp),\n        \"--dataDir=\" + BEACON_DATA_DIRPATH_ON_SERVICE_CONTAINER,\n        \"--chain.persistInvalidSszObjects=true\",\n        \"--eth1.depositContractDeployBlock=0\",\n        \"--network.connectToDiscv5Bootnodes=true\",\n        \"--discv5=true\",\n        \"--eth1=true\",\n        \"--eth1.providerUrls=\" + el_client_rpc_url_str,\n        \"--execution.urls=\" + EXECUTION_ENGINE_ENDPOINT,\n        \"--rest=true\",\n        \"--rest.address=0.0.0.0\",\n        \"--rest.namespace=*\",\n        \"--rest.port={0}\".format(BEACON_HTTP_PORT_NUM),\n        \"--nat=true\",\n        \"--jwt-secret=\" + constants.JWT_MOUNT_PATH_ON_CONTAINER,\n        # ENR\n        \"--enr.ip={0}\".format(\n            \"${K8S_POD_IP}\"\n            if backend == \"kubernetes\"\n            else port_publisher.cl_nat_exit_ip\n        ),\n        \"--enr.tcp={0}\".format(discovery_port_tcp),\n        \"--enr.udp={0}\".format(discovery_port_udp),\n        # QUIC\n        # coming soon\n        # Metrics\n        \"--metrics\",\n        \"--metrics.address=0.0.0.0\",\n        \"--metrics.port={0}\".format(BEACON_METRICS_PORT_NUM),\n    ]\n\n    supernode_cmd = [\n        \"--supernode\",\n    ]\n\n    if participant.supernode:\n        cmd.extend(supernode_cmd)\n\n    if checkpoint_sync_enabled:\n        cmd.append(\"--checkpointSyncUrl=\" + checkpoint_sync_url)\n\n    bootnode_arg = bootnode_enr_override\n\n    if network_params.network not in constants.PUBLIC_NETWORKS:\n        cmd.append(\n            \"--paramsFile=\"\n            + constants.GENESIS_CONFIG_MOUNT_PATH_ON_CONTAINER\n            + \"/config.yaml\"\n        )\n        cmd.append(\n            \"--genesisStateFile=\"\n            + constants.GENESIS_CONFIG_MOUNT_PATH_ON_CONTAINER\n            + \"/genesis.ssz\"\n        )\n        if (\n            network_params.network == constants.NETWORK_NAME.kurtosis\n            or constants.NETWORK_NAME.shadowfork in network_params.network\n        ):\n            if bootnode_contexts != None and bootnode_arg == None:\n                bootnode_arg = \",\".join(\n                    [ctx.enr for ctx in bootnode_contexts[: constants.MAX_ENR_ENTRIES]]\n                )\n        elif network_params.network == constants.NETWORK_NAME.ephemery:\n            if bootnode_arg == None:\n                bootnode_arg = shared_utils.get_devnet_enrs_list(\n                    plan, launcher.el_cl_genesis_data.files_artifact_uuid\n                )\n        else:  # Devnets\n            if bootnode_arg == None:\n                bootnode_arg = shared_utils.get_devnet_enrs_list(\n                    plan, launcher.el_cl_genesis_data.files_artifact_uuid\n                )\n    else:  # Public testnet\n        cmd.append(\"--network=\" + network_params.network)\n\n    if bootnode_arg != None:\n        cmd.append(\"--bootnodes=\" + bootnode_arg)\n\n    if len(participant.cl_extra_params) > 0:\n        # this is a repeated<proto type>, we convert it into Starlark\n        cmd.extend([param for param in participant.cl_extra_params])\n    files = {\n        constants.GENESIS_DATA_MOUNTPOINT_ON_CLIENTS: launcher.el_cl_genesis_data.files_artifact_uuid,\n        constants.JWT_MOUNTPOINT_ON_CLIENTS: launcher.jwt_file,\n    }\n\n    if network_params.perfect_peerdas_enabled and participant_index < 16:\n        files[BEACON_DATA_DIRPATH_ON_SERVICE_CONTAINER] = \"node-key-file-{0}\".format(\n            participant_index + 1\n        )\n\n    if persistent:\n        volume_size_key = (\n            \"devnets\" if \"devnet\" in network_params.network else network_params.network\n        )\n        files[BEACON_DATA_DIRPATH_ON_SERVICE_CONTAINER] = Directory(\n            persistent_key=\"data-{0}\".format(beacon_service_name),\n            size=int(participant.cl_volume_size)\n            if int(participant.cl_volume_size) > 0\n            else constants.VOLUME_SIZE[volume_size_key][\n                constants.CL_TYPE.lodestar + \"_volume_size\"\n            ],\n        )\n\n    # Add extra mounts - automatically handle file uploads\n    processed_mounts = shared_utils.process_extra_mounts(\n        plan, participant.cl_extra_mounts, extra_files_artifacts\n    )\n    for mount_path, artifact in processed_mounts.items():\n        files[mount_path] = artifact\n\n    # Binary injection - mount custom binary directory if provided\n    if cl_binary_artifact != None:\n        files[\"/opt/bin\"] = cl_binary_artifact.artifact\n\n    env_vars = participant.cl_extra_env_vars\n\n    if network_params.preset == \"minimal\":\n        env_vars[\"LODESTAR_PRESET\"] = \"minimal\"\n\n    # Build the command string, copying injected binary if provided\n    cmd_str = \" \".join(cmd)\n    if cl_binary_artifact != None:\n        cmd_str = (\n            \"cp /opt/bin/{0} /usr/app/packages/cli/bin/lodestar && exec \".format(\n                cl_binary_artifact.filename\n            )\n            + cmd_str\n        )\n    else:\n        cmd_str = \"exec \" + cmd_str\n\n    config_args = {\n        \"image\": participant.cl_image,\n        \"ports\": used_ports,\n        \"public_ports\": public_ports,\n        \"publish_udp\": port_publisher.cl_enabled,\n        \"entrypoint\": [\"sh\", \"-c\"],\n        \"cmd\": [cmd_str],\n        \"files\": files,\n        \"env_vars\": env_vars,\n        \"private_ip_address_placeholder\": constants.PRIVATE_IP_ADDRESS_PLACEHOLDER,\n        \"labels\": shared_utils.label_maker(\n            client=constants.CL_TYPE.lodestar,\n            client_type=constants.CLIENT_TYPES.cl,\n            image=participant.cl_image[-constants.MAX_LABEL_LENGTH :],\n            connected_client=el_context.client_name,\n            extra_labels=participant.cl_extra_labels\n            | {constants.NODE_INDEX_LABEL_KEY: str(participant_index + 1)},\n            supernode=participant.supernode,\n        ),\n        \"tolerations\": tolerations,\n        \"node_selectors\": node_selectors,\n    }\n\n    if len(participant.cl_devices) > 0:\n        config_args[\"devices\"] = participant.cl_devices\n    # Only add ready_conditions if not skipping start\n    if not participant.skip_start:\n        config_args[\"ready_conditions\"] = cl_node_ready_conditions.get_ready_conditions(\n            constants.HTTP_PORT_ID\n        )\n\n    if int(participant.cl_min_cpu) > 0:\n        config_args[\"min_cpu\"] = int(participant.cl_min_cpu)\n    if int(participant.cl_max_cpu) > 0:\n        config_args[\"max_cpu\"] = int(participant.cl_max_cpu)\n    if int(participant.cl_min_mem) > 0:\n        config_args[\"min_memory\"] = int(participant.cl_min_mem)\n    if int(participant.cl_max_mem) > 0:\n        config_args[\"max_memory\"] = int(participant.cl_max_mem)\n    return ServiceConfig(**config_args)\n\n\ndef get_cl_context(\n    plan,\n    service_name,\n    service,\n    participant,\n    snooper_el_engine_context,\n    node_keystore_files,\n    node_selectors,\n):\n    beacon_http_port = service.ports[constants.HTTP_PORT_ID]\n\n    beacon_http_url = \"http://{0}:{1}\".format(service.name, beacon_http_port.number)\n\n    # Skip HTTP requests if skip_start is enabled (service won't be running)\n    if participant.skip_start:\n        beacon_node_enr = \"\"\n        beacon_multiaddr = \"\"\n        beacon_peer_id = \"\"\n    else:\n        # TODO(old) add validator availability using the validator API: https://ethereum.github.io/beacon-APIs/?urls.primaryName=v1#/ValidatorRequiredApi | from eth2-merge-kurtosis-module\n        beacon_node_identity_recipe = GetHttpRequestRecipe(\n            endpoint=\"/eth/v1/node/identity\",\n            port_id=constants.HTTP_PORT_ID,\n            extract={\n                \"enr\": \".data.enr\",\n                \"multiaddr\": \".data.p2p_addresses[-1]\",\n                \"peer_id\": \".data.peer_id\",\n            },\n        )\n        response = plan.request(\n            recipe=beacon_node_identity_recipe, service_name=service_name\n        )\n        beacon_node_enr = response[\"extract.enr\"]\n        beacon_multiaddr = response[\"extract.multiaddr\"]\n        beacon_peer_id = response[\"extract.peer_id\"]\n\n    beacon_metrics_port = service.ports[constants.METRICS_PORT_ID]\n    beacon_metrics_url = \"{0}:{1}\".format(service.name, beacon_metrics_port.number)\n\n    beacon_node_metrics_info = node_metrics.new_node_metrics_info(\n        service_name, METRICS_PATH, beacon_metrics_url\n    )\n    nodes_metrics_info = [beacon_node_metrics_info]\n\n    return cl_context.new_cl_context(\n        client_name=\"lodestar\",\n        enr=beacon_node_enr,\n        ip_addr=service.name,\n        http_port=beacon_http_port.number,\n        beacon_http_url=beacon_http_url,\n        cl_nodes_metrics_info=nodes_metrics_info,\n        beacon_service_name=service_name,\n        multiaddr=beacon_multiaddr,\n        peer_id=beacon_peer_id,\n        snooper_enabled=participant.snooper_enabled,\n        snooper_el_engine_context=snooper_el_engine_context,\n        validator_keystore_files_artifact_uuid=node_keystore_files.files_artifact_uuid\n        if node_keystore_files\n        else \"\",\n        supernode=participant.supernode,\n    )\n\n\ndef new_lodestar_launcher(el_cl_genesis_data, jwt_file):\n    return struct(\n        el_cl_genesis_data=el_cl_genesis_data,\n        jwt_file=jwt_file,\n    )\n\n\ndef get_blobber_config(\n    plan,\n    participant,\n    beacon_service_name,\n    beacon_http_url,\n    node_keystore_files,\n    node_selectors,\n):\n    blobber_config = None\n    if participant.blobber_enabled:\n        blobber_config = struct(\n            service_name=\"{0}-{1}\".format(\"blobber\", beacon_service_name),\n            beacon_http_url=beacon_http_url,\n            node_keystore_files=node_keystore_files,\n            node_selectors=node_selectors,\n        )\n    return blobber_config\n"
  },
  {
    "path": "src/cl/nimbus/nimbus_launcher.star",
    "content": "#  ---------------------------------- Library Imports ----------------------------------\nshared_utils = import_module(\"../../shared_utils/shared_utils.star\")\ninput_parser = import_module(\"../../package_io/input_parser.star\")\ncl_context = import_module(\"../../cl/cl_context.star\")\ncl_node_ready_conditions = import_module(\"../../cl/cl_node_ready_conditions.star\")\ncl_shared = import_module(\"../cl_shared.star\")\nnode_metrics = import_module(\"../../node_metrics_info.star\")\nconstants = import_module(\"../../package_io/constants.star\")\nvc_shared = import_module(\"../../vc/shared.star\")\n#  ---------------------------------- Beacon client -------------------------------------\n# Nimbus requires that its data directory already exists (because it expects you to bind-mount it), so we\n#  have to to create it\nBEACON_DATA_DIRPATH_ON_SERVICE_CONTAINER = \"/data/nimbus/beacon-data\"\n\n# Port nums\nBEACON_DISCOVERY_PORT_NUM = 9000\nBEACON_HTTP_PORT_NUM = 4000\nBEACON_METRICS_PORT_NUM = 8008\n\n# The min/max CPU/memory that the beacon node can use\nBEACON_MIN_CPU = 50\nBEACON_MIN_MEMORY = 256\n\nDEFAULT_BEACON_IMAGE_ENTRYPOINT = [\"nimbus_beacon_node\"]\nBEACON_NODE_ENTRYPOINT = \"/home/user/nimbus-eth2/build/nimbus_beacon_node\"\nBEACON_METRICS_PATH = \"/metrics\"\n\nVALIDATOR_KEYS_MOUNTPOINT_ON_CLIENTS = \"/data/nimbus/validator-keys\"\n# ---------------------------------- Genesis Files ----------------------------------\n\n# Nimbus needs write access to the validator keys/secrets directories, and b/c the module container runs as root\n#  while the Nimbus container does not, we can't just point the Nimbus binary to the paths in the shared dir because\n#  it won't be able to open them. To get around this, we copy the validator keys/secrets to a path inside the Nimbus\n#  container that is owned by the container's user\n\n# ---------------------------------- Metrics ----------------------------------\n\nVERBOSITY_LEVELS = {\n    constants.GLOBAL_LOG_LEVEL.error: \"ERROR\",\n    constants.GLOBAL_LOG_LEVEL.warn: \"WARN\",\n    constants.GLOBAL_LOG_LEVEL.info: \"INFO\",\n    constants.GLOBAL_LOG_LEVEL.debug: \"DEBUG\",\n    constants.GLOBAL_LOG_LEVEL.trace: \"TRACE\",\n}\n\nENTRYPOINT_ARGS = [\"sh\", \"-c\"]\n\n\ndef launch(\n    plan,\n    launcher,\n    beacon_service_name,\n    participant,\n    global_log_level,\n    bootnode_contexts,\n    el_context,\n    full_name,\n    node_keystore_files,\n    snooper_el_engine_context,\n    persistent,\n    tolerations,\n    node_selectors,\n    checkpoint_sync_enabled,\n    checkpoint_sync_url,\n    port_publisher,\n    participant_index,\n    network_params,\n    extra_files_artifacts,\n    backend,\n    tempo_otlp_grpc_url=None,\n    bootnode_enr_override=None,\n    cl_binary_artifact=None,\n):\n    beacon_config = get_beacon_config(\n        plan,\n        launcher,\n        beacon_service_name,\n        participant,\n        global_log_level,\n        bootnode_contexts,\n        el_context,\n        full_name,\n        node_keystore_files,\n        snooper_el_engine_context,\n        persistent,\n        tolerations,\n        node_selectors,\n        checkpoint_sync_enabled,\n        checkpoint_sync_url,\n        port_publisher,\n        participant_index,\n        network_params,\n        extra_files_artifacts,\n        backend,\n        tempo_otlp_grpc_url,\n        bootnode_enr_override,\n        cl_binary_artifact,\n    )\n\n    beacon_service = plan.add_service(beacon_service_name, beacon_config)\n\n    cl_context_obj = get_cl_context(\n        plan,\n        beacon_service_name,\n        beacon_service,\n        participant,\n        snooper_el_engine_context,\n        node_keystore_files,\n        node_selectors,\n    )\n\n    return cl_context_obj\n\n\ndef get_beacon_config(\n    plan,\n    launcher,\n    beacon_service_name,\n    participant,\n    global_log_level,\n    bootnode_contexts,\n    el_context,\n    full_name,\n    node_keystore_files,\n    snooper_el_engine_context,\n    persistent,\n    tolerations,\n    node_selectors,\n    checkpoint_sync_enabled,\n    checkpoint_sync_url,\n    port_publisher,\n    participant_index,\n    network_params,\n    extra_files_artifacts,\n    backend,\n    tempo_otlp_grpc_url,\n    bootnode_enr_override=None,\n    cl_binary_artifact=None,\n):\n    log_level = input_parser.get_client_log_level_or_default(\n        participant.cl_log_level, global_log_level, VERBOSITY_LEVELS\n    )\n\n    validator_keys_dirpath = \"\"\n    validator_secrets_dirpath = \"\"\n    if node_keystore_files != None:\n        validator_keys_dirpath = shared_utils.path_join(\n            VALIDATOR_KEYS_MOUNTPOINT_ON_CLIENTS,\n            node_keystore_files.nimbus_keys_relative_dirpath,\n        )\n        validator_secrets_dirpath = shared_utils.path_join(\n            VALIDATOR_KEYS_MOUNTPOINT_ON_CLIENTS,\n            node_keystore_files.raw_secrets_relative_dirpath,\n        )\n    # If snooper is enabled use the snooper engine context, otherwise use the execution client context\n    if participant.snooper_enabled:\n        EXECUTION_ENGINE_ENDPOINT = \"http://{0}:{1}\".format(\n            snooper_el_engine_context.ip_addr,\n            snooper_el_engine_context.engine_rpc_port_num,\n        )\n    else:\n        EXECUTION_ENGINE_ENDPOINT = \"http://{0}:{1}\".format(\n            el_context.dns_name,\n            el_context.engine_rpc_port_num,\n        )\n\n    public_ports = {}\n    validator_public_port_assignment = {}\n    public_ports_for_component = None\n    if port_publisher.cl_enabled:\n        public_ports_for_component = shared_utils.get_public_ports_for_component(\n            \"cl\", port_publisher, participant_index\n        )\n        validator_public_port_assignment = {\n            constants.VALIDATOR_HTTP_PORT_ID: public_ports_for_component[3]\n        }\n        public_ports = cl_shared.get_general_cl_public_port_specs(\n            public_ports_for_component\n        )\n\n    discovery_port_tcp = (\n        public_ports_for_component[0]\n        if public_ports_for_component\n        else BEACON_DISCOVERY_PORT_NUM\n    )\n    discovery_port_udp = (\n        public_ports_for_component[0]\n        if public_ports_for_component\n        else BEACON_DISCOVERY_PORT_NUM\n    )\n\n    used_port_assignments = {\n        constants.TCP_DISCOVERY_PORT_ID: discovery_port_tcp,\n        constants.UDP_DISCOVERY_PORT_ID: discovery_port_udp,\n        constants.HTTP_PORT_ID: BEACON_HTTP_PORT_NUM,\n        constants.METRICS_PORT_ID: BEACON_METRICS_PORT_NUM,\n    }\n    # Disable port checks if skip_start is enabled\n    if participant.skip_start:\n        used_ports = shared_utils.get_port_specs(used_port_assignments, wait=None)\n    else:\n        used_ports = shared_utils.get_port_specs(used_port_assignments)\n\n    nimbus_checkpoint_sync_subtask_str = \"{0} trustedNodeSync --data-dir={1} --trusted-node-url={2} --network={3} --backfill=false\".format(\n        BEACON_NODE_ENTRYPOINT,\n        BEACON_DATA_DIRPATH_ON_SERVICE_CONTAINER,\n        checkpoint_sync_url,\n        network_params.network\n        if network_params.network in constants.PUBLIC_NETWORKS\n        else constants.GENESIS_CONFIG_MOUNT_PATH_ON_CONTAINER,\n    )\n\n    cmd = [\n        \"exec\",\n        \"{0}\".format(BEACON_NODE_ENTRYPOINT),\n        \"--non-interactive=true\",\n        \"--log-level=\" + log_level,\n        \"--udp-port={0}\".format(discovery_port_udp),\n        \"--tcp-port={0}\".format(discovery_port_tcp),\n        \"--network={0}\".format(\n            network_params.network\n            if network_params.network in constants.PUBLIC_NETWORKS\n            else constants.GENESIS_CONFIG_MOUNT_PATH_ON_CONTAINER\n        ),\n        \"--data-dir=\" + BEACON_DATA_DIRPATH_ON_SERVICE_CONTAINER,\n        \"--web3-url=\" + EXECUTION_ENGINE_ENDPOINT,\n        \"--nat=extip:{0}\".format(\n            \"${K8S_POD_IP}\"\n            if backend == \"kubernetes\"\n            else port_publisher.cl_nat_exit_ip\n        ),\n        \"--enr-auto-update=false\",\n        \"--history={0}\".format(\"archive\" if constants.ARCHIVE_MODE else \"prune\"),\n        \"--rest\",\n        \"--rest-address=0.0.0.0\",\n        \"--rest-allow-origin=*\",\n        \"--rest-port={0}\".format(BEACON_HTTP_PORT_NUM),\n        # There's a bug where if we don't set this flag, the Nimbus nodes won't work:\n        # https://discord.com/channels/641364059387854899/674288681737256970/922890280120750170\n        # https://github.com/status-im/nimbus-eth2/issues/2451\n        \"--doppelganger-detection=false\",\n        # Nimbus can handle a max of 256 threads, if the host has more then nimbus crashes. Setting it to 4 so it doesn't crash on build servers\n        \"--num-threads=4\",\n        \"--jwt-secret=\" + constants.JWT_MOUNT_PATH_ON_CONTAINER,\n        # Metrics\n        \"--metrics\",\n        \"--metrics-address=0.0.0.0\",\n        \"--metrics-port={0}\".format(BEACON_METRICS_PORT_NUM),\n    ]\n\n    validator_default_cmd = [\n        \"--validators-dir=\" + validator_keys_dirpath,\n        \"--secrets-dir=\" + validator_secrets_dirpath,\n        \"--suggested-fee-recipient=\" + constants.VALIDATING_REWARDS_ACCOUNT,\n    ]\n\n    keymanager_api_cmd = [\n        \"--keymanager\",\n        \"--keymanager-port={0}\".format(vc_shared.VALIDATOR_HTTP_PORT_NUM),\n        \"--keymanager-address=0.0.0.0\",\n        \"--keymanager-allow-origin=*\",\n        \"--keymanager-token-file=\" + constants.KEYMANAGER_MOUNT_PATH_ON_CONTAINER,\n    ]\n\n    supernode_cmd = [\n        \"--peerdas-supernode=true\",\n    ]\n\n    if network_params.perfect_peerdas_enabled and participant_index < 16:\n        cmd.append(\n            \"--netkey-file=\"\n            + constants.NODE_KEY_MOUNTPOINT_ON_CLIENTS\n            + \"/node-key-file-{0}.json\".format(participant_index + 1)\n        )\n        cmd.append(\"--insecure-netkey-password=true\")\n\n    if participant.supernode:\n        cmd.extend(supernode_cmd)\n\n    if bootnode_enr_override != None:\n        cmd.append(\"--bootstrap-node=\" + bootnode_enr_override)\n    elif network_params.network not in constants.PUBLIC_NETWORKS:\n        cmd.append(\n            \"--bootstrap-file=\"\n            + constants.GENESIS_CONFIG_MOUNT_PATH_ON_CONTAINER\n            + \"/bootstrap_nodes.txt\"\n        )\n        if (\n            network_params.network == constants.NETWORK_NAME.kurtosis\n            or constants.NETWORK_NAME.shadowfork in network_params.network\n        ):\n            if bootnode_contexts == None:\n                cmd.append(\"--subscribe-all-subnets\")\n            else:\n                for ctx in bootnode_contexts[: constants.MAX_ENR_ENTRIES]:\n                    cmd.append(\"--bootstrap-node=\" + ctx.enr)\n\n    if len(participant.cl_extra_params) > 0:\n        cmd.extend([param for param in participant.cl_extra_params])\n\n    files = {\n        constants.GENESIS_DATA_MOUNTPOINT_ON_CLIENTS: launcher.el_cl_genesis_data.files_artifact_uuid,\n        constants.JWT_MOUNTPOINT_ON_CLIENTS: launcher.jwt_file,\n    }\n\n    if node_keystore_files != None and not participant.use_separate_vc:\n        cmd.extend(validator_default_cmd)\n        files[\n            VALIDATOR_KEYS_MOUNTPOINT_ON_CLIENTS\n        ] = node_keystore_files.files_artifact_uuid\n        files[constants.KEYMANAGER_MOUNT_PATH_ON_CLIENTS] = launcher.keymanager_file\n\n        if participant.keymanager_enabled:\n            cmd.extend(keymanager_api_cmd)\n            used_ports.update(vc_shared.VALIDATOR_KEYMANAGER_USED_PORTS)\n            public_ports.update(\n                shared_utils.get_port_specs(validator_public_port_assignment)\n            )\n\n        if network_params.gas_limit > 0:\n            cmd.append(\"--suggested-gas-limit={0}\".format(network_params.gas_limit))\n\n    if network_params.perfect_peerdas_enabled and participant_index < 16:\n        files[constants.NODE_KEY_MOUNTPOINT_ON_CLIENTS] = Directory(\n            artifact_names=[\"node-key-file-{0}\".format(participant_index + 1)]\n        )\n\n    if persistent:\n        volume_size_key = (\n            \"devnets\" if \"devnet\" in network_params.network else network_params.network\n        )\n        files[BEACON_DATA_DIRPATH_ON_SERVICE_CONTAINER] = Directory(\n            persistent_key=\"data-{0}\".format(beacon_service_name),\n            size=int(participant.cl_volume_size)\n            if int(participant.cl_volume_size) > 0\n            else constants.VOLUME_SIZE[volume_size_key][\n                constants.CL_TYPE.nimbus + \"_volume_size\"\n            ],\n        )\n\n    # Add extra mounts - automatically handle file uploads\n    processed_mounts = shared_utils.process_extra_mounts(\n        plan, participant.cl_extra_mounts, extra_files_artifacts\n    )\n    for mount_path, artifact in processed_mounts.items():\n        files[mount_path] = artifact\n\n    # Binary injection - mount custom binary directory if provided\n    if cl_binary_artifact != None:\n        files[\"/opt/bin\"] = cl_binary_artifact.artifact\n\n    cmd_str = \" \".join(cmd)\n    # Add binary copy prefix if injected\n    if cl_binary_artifact != None:\n        cmd_str = (\n            \"cp /opt/bin/{0} /home/user/nimbus-eth2/build/nimbus_beacon_node && \".format(\n                cl_binary_artifact.filename\n            )\n            + cmd_str\n        )\n    if checkpoint_sync_enabled:\n        command_str = \" && \".join([nimbus_checkpoint_sync_subtask_str, cmd_str])\n    else:\n        command_str = cmd_str\n\n    config_args = {\n        \"image\": participant.cl_image,\n        \"ports\": used_ports,\n        \"public_ports\": public_ports,\n        \"publish_udp\": port_publisher.cl_enabled,\n        \"entrypoint\": [\"sh\", \"-c\"],\n        \"cmd\": [command_str],\n        \"files\": files,\n        \"env_vars\": participant.cl_extra_env_vars,\n        \"private_ip_address_placeholder\": constants.PRIVATE_IP_ADDRESS_PLACEHOLDER,\n        \"labels\": shared_utils.label_maker(\n            client=constants.CL_TYPE.nimbus,\n            client_type=constants.CLIENT_TYPES.cl,\n            image=participant.cl_image[-constants.MAX_LABEL_LENGTH :],\n            connected_client=el_context.client_name,\n            extra_labels=participant.cl_extra_labels\n            | {constants.NODE_INDEX_LABEL_KEY: str(participant_index + 1)},\n            supernode=participant.supernode,\n        ),\n        \"tolerations\": tolerations,\n        \"node_selectors\": node_selectors,\n        \"user\": User(uid=0, gid=0),\n    }\n\n    if len(participant.cl_devices) > 0:\n        config_args[\"devices\"] = participant.cl_devices\n    # Only add ready_conditions if not skipping start\n    if not participant.skip_start:\n        config_args[\"ready_conditions\"] = cl_node_ready_conditions.get_ready_conditions(\n            constants.HTTP_PORT_ID\n        )\n\n    if int(participant.cl_min_cpu) > 0:\n        config_args[\"min_cpu\"] = int(participant.cl_min_cpu)\n    if int(participant.cl_max_cpu) > 0:\n        config_args[\"max_cpu\"] = int(participant.cl_max_cpu)\n    if int(participant.cl_min_mem) > 0:\n        config_args[\"min_memory\"] = int(participant.cl_min_mem)\n    if int(participant.cl_max_mem) > 0:\n        config_args[\"max_memory\"] = int(participant.cl_max_mem)\n    return ServiceConfig(**config_args)\n\n\ndef get_cl_context(\n    plan,\n    service_name,\n    service,\n    participant,\n    snooper_el_engine_context,\n    node_keystore_files,\n    node_selectors,\n):\n    beacon_http_port = service.ports[constants.HTTP_PORT_ID]\n    beacon_metrics_port = service.ports[constants.METRICS_PORT_ID]\n    beacon_http_url = \"http://{0}:{1}\".format(service.name, beacon_http_port.number)\n    beacon_metrics_url = \"{0}:{1}\".format(service.name, beacon_metrics_port.number)\n\n    # Skip HTTP requests if skip_start is enabled (service won't be running)\n    if participant.skip_start:\n        beacon_node_enr = \"\"\n        beacon_multiaddr = \"\"\n        beacon_peer_id = \"\"\n    else:\n        beacon_node_identity_recipe = GetHttpRequestRecipe(\n            endpoint=\"/eth/v1/node/identity\",\n            port_id=constants.HTTP_PORT_ID,\n            extract={\n                \"enr\": \".data.enr\",\n                \"multiaddr\": \".data.p2p_addresses[0]\",\n                \"peer_id\": \".data.peer_id\",\n            },\n        )\n        response = plan.request(\n            recipe=beacon_node_identity_recipe, service_name=service_name\n        )\n        beacon_node_enr = response[\"extract.enr\"]\n        beacon_multiaddr = response[\"extract.multiaddr\"]\n        beacon_peer_id = response[\"extract.peer_id\"]\n\n    nimbus_node_metrics_info = node_metrics.new_node_metrics_info(\n        service_name, BEACON_METRICS_PATH, beacon_metrics_url\n    )\n    nodes_metrics_info = [nimbus_node_metrics_info]\n\n    return cl_context.new_cl_context(\n        client_name=\"nimbus\",\n        enr=beacon_node_enr,\n        ip_addr=service.name,\n        http_port=beacon_http_port.number,\n        beacon_http_url=beacon_http_url,\n        cl_nodes_metrics_info=nodes_metrics_info,\n        beacon_service_name=service_name,\n        multiaddr=beacon_multiaddr,\n        peer_id=beacon_peer_id,\n        snooper_enabled=participant.snooper_enabled,\n        snooper_el_engine_context=snooper_el_engine_context,\n        validator_keystore_files_artifact_uuid=node_keystore_files.files_artifact_uuid\n        if node_keystore_files\n        else \"\",\n        supernode=participant.supernode,\n    )\n\n\ndef new_nimbus_launcher(el_cl_genesis_data, jwt_file, keymanager_file):\n    return struct(\n        el_cl_genesis_data=el_cl_genesis_data,\n        jwt_file=jwt_file,\n        keymanager_file=keymanager_file,\n    )\n\n\ndef get_blobber_config(\n    plan,\n    participant,\n    beacon_service_name,\n    beacon_http_url,\n    node_keystore_files,\n    node_selectors,\n):\n    # Nimbus doesn't support blobbers, return None for blobber config\n    return None\n"
  },
  {
    "path": "src/cl/prysm/prysm_launcher.star",
    "content": "shared_utils = import_module(\"../../shared_utils/shared_utils.star\")\ninput_parser = import_module(\"../../package_io/input_parser.star\")\ncl_context = import_module(\"../../cl/cl_context.star\")\ncl_node_ready_conditions = import_module(\"../../cl/cl_node_ready_conditions.star\")\ncl_shared = import_module(\"../cl_shared.star\")\nnode_metrics = import_module(\"../../node_metrics_info.star\")\nconstants = import_module(\"../../package_io/constants.star\")\n\nPRYSM_ENTRYPOINT_COMMAND = \"/beacon-chain\"\n\n#  ---------------------------------- Beacon client -------------------------------------\nBEACON_DATA_DIRPATH_ON_SERVICE_CONTAINER = \"/data/prysm/beacon-data/\"\n\n# Port nums\nDISCOVERY_TCP_PORT_NUM = 13000\nDISCOVERY_UDP_PORT_NUM = 12000\nDISCOVERY_QUIC_PORT_NUM = 13000\nBEACON_HTTP_PORT_NUM = 3500\nRPC_PORT_NUM = 4000\nBEACON_MONITORING_PORT_NUM = 8080\nPROFILING_PORT_NUM = 6060\n\nMETRICS_PATH = \"/metrics\"\n\nVERBOSITY_LEVELS = {\n    constants.GLOBAL_LOG_LEVEL.error: \"error\",\n    constants.GLOBAL_LOG_LEVEL.warn: \"warn\",\n    constants.GLOBAL_LOG_LEVEL.info: \"info\",\n    constants.GLOBAL_LOG_LEVEL.debug: \"debug\",\n    constants.GLOBAL_LOG_LEVEL.trace: \"trace\",\n}\n\n\ndef launch(\n    plan,\n    launcher,\n    beacon_service_name,\n    participant,\n    global_log_level,\n    bootnode_contexts,\n    el_context,\n    full_name,\n    node_keystore_files,\n    snooper_el_engine_context,\n    persistent,\n    tolerations,\n    node_selectors,\n    checkpoint_sync_enabled,\n    checkpoint_sync_url,\n    port_publisher,\n    participant_index,\n    network_params,\n    extra_files_artifacts,\n    backend,\n    tempo_otlp_grpc_url=None,\n    bootnode_enr_override=None,\n    cl_binary_artifact=None,\n):\n    beacon_config = get_beacon_config(\n        plan,\n        launcher,\n        beacon_service_name,\n        participant,\n        global_log_level,\n        bootnode_contexts,\n        el_context,\n        full_name,\n        node_keystore_files,\n        snooper_el_engine_context,\n        persistent,\n        tolerations,\n        node_selectors,\n        checkpoint_sync_enabled,\n        checkpoint_sync_url,\n        port_publisher,\n        participant_index,\n        network_params,\n        extra_files_artifacts,\n        backend,\n        tempo_otlp_grpc_url,\n        bootnode_enr_override,\n        cl_binary_artifact,\n    )\n\n    beacon_service = plan.add_service(beacon_service_name, beacon_config)\n\n    cl_context_obj = get_cl_context(\n        plan,\n        beacon_service_name,\n        beacon_service,\n        participant,\n        snooper_el_engine_context,\n        node_keystore_files,\n        node_selectors,\n    )\n\n    return cl_context_obj\n\n\ndef get_beacon_config(\n    plan,\n    launcher,\n    beacon_service_name,\n    participant,\n    global_log_level,\n    bootnode_contexts,\n    el_context,\n    full_name,\n    node_keystore_files,\n    snooper_el_engine_context,\n    persistent,\n    tolerations,\n    node_selectors,\n    checkpoint_sync_enabled,\n    checkpoint_sync_url,\n    port_publisher,\n    participant_index,\n    network_params,\n    extra_files_artifacts,\n    backend,\n    tempo_otlp_grpc_url,\n    bootnode_enr_override=None,\n    cl_binary_artifact=None,\n):\n    log_level = input_parser.get_client_log_level_or_default(\n        participant.cl_log_level, global_log_level, VERBOSITY_LEVELS\n    )\n\n    # If snooper is enabled use the snooper engine context, otherwise use the execution client context\n    if participant.snooper_enabled:\n        EXECUTION_ENGINE_ENDPOINT = \"http://{0}:{1}\".format(\n            snooper_el_engine_context.ip_addr,\n            snooper_el_engine_context.engine_rpc_port_num,\n        )\n    else:\n        EXECUTION_ENGINE_ENDPOINT = \"http://{0}:{1}\".format(\n            el_context.dns_name,\n            el_context.engine_rpc_port_num,\n        )\n\n    public_ports = {}\n    public_ports_for_component = None\n    if port_publisher.cl_enabled:\n        public_ports_for_component = shared_utils.get_public_ports_for_component(\n            \"cl\", port_publisher, participant_index\n        )\n        public_ports = cl_shared.get_general_cl_public_port_specs(\n            public_ports_for_component\n        )\n\n        public_ports.update(\n            shared_utils.get_port_specs(\n                {constants.QUIC_DISCOVERY_PORT_ID: public_ports_for_component[0]}\n            )\n        )\n        public_ports.update(\n            shared_utils.get_port_specs(\n                {constants.UDP_DISCOVERY_PORT_ID: public_ports_for_component[1]}\n            )\n        )\n        public_ports.update(\n            shared_utils.get_port_specs(\n                {constants.RPC_PORT_ID: public_ports_for_component[5]}\n            )\n        )\n        public_ports.update(\n            shared_utils.get_port_specs(\n                {constants.PROFILING_PORT_ID: public_ports_for_component[6]}\n            )\n        )\n\n    discovery_port_tcp = (\n        public_ports_for_component[0]\n        if public_ports_for_component\n        else DISCOVERY_TCP_PORT_NUM\n    )\n    discovery_port_udp = (\n        public_ports_for_component[1]\n        if public_ports_for_component\n        else DISCOVERY_UDP_PORT_NUM\n    )\n    discovery_port_quic = (\n        public_ports_for_component[0]\n        if public_ports_for_component\n        else DISCOVERY_QUIC_PORT_NUM\n    )  # use the same port for quic and tcp\n\n    used_port_assignments = {\n        constants.TCP_DISCOVERY_PORT_ID: discovery_port_tcp,\n        constants.UDP_DISCOVERY_PORT_ID: discovery_port_udp,\n        constants.HTTP_PORT_ID: BEACON_HTTP_PORT_NUM,\n        constants.METRICS_PORT_ID: BEACON_MONITORING_PORT_NUM,\n        constants.QUIC_DISCOVERY_PORT_ID: discovery_port_quic,\n        constants.RPC_PORT_ID: RPC_PORT_NUM,\n        constants.PROFILING_PORT_ID: PROFILING_PORT_NUM,\n    }\n    # Disable port checks if skip_start is enabled\n    if participant.skip_start:\n        used_ports = shared_utils.get_port_specs(used_port_assignments, wait=None)\n    else:\n        used_ports = shared_utils.get_port_specs(used_port_assignments)\n\n    cmd = [\n        PRYSM_ENTRYPOINT_COMMAND,\n        \"--accept-terms-of-use=true\",  # it's mandatory in order to run the node\n        \"--datadir=\" + BEACON_DATA_DIRPATH_ON_SERVICE_CONTAINER,\n        \"--execution-endpoint=\" + EXECUTION_ENGINE_ENDPOINT,\n        \"--rpc-host=0.0.0.0\",\n        \"--rpc-port={0}\".format(RPC_PORT_NUM),\n        \"--http-host=0.0.0.0\",\n        \"--http-cors-domain=*\",\n        \"--http-port={0}\".format(BEACON_HTTP_PORT_NUM),\n        \"--p2p-host-ip={0}\".format(\n            \"${K8S_POD_IP}\"\n            if backend == \"kubernetes\"\n            else port_publisher.cl_nat_exit_ip\n        ),\n        \"--p2p-tcp-port={0}\".format(discovery_port_tcp),\n        \"--p2p-udp-port={0}\".format(discovery_port_udp),\n        \"--p2p-quic-port={0}\".format(discovery_port_quic),\n        \"--min-sync-peers={0}\".format(constants.MIN_PEERS),\n        \"--verbosity=\" + log_level,\n        \"--slots-per-archive-point={0}\".format(32 if constants.ARCHIVE_MODE else 8192),\n        \"--suggested-fee-recipient=\" + constants.VALIDATING_REWARDS_ACCOUNT,\n        \"--jwt-secret=\" + constants.JWT_MOUNT_PATH_ON_CONTAINER,\n        # vvvvvvvvv METRICS CONFIG vvvvvvvvvvvvvvvvvvvvv\n        \"--disable-monitoring=false\",\n        \"--monitoring-host=0.0.0.0\",\n        \"--monitoring-port={0}\".format(BEACON_MONITORING_PORT_NUM),\n        # vvvvvvvvv PROFILING CONFIG vvvvvvvvvvvvvvvvvvvvv\n        \"--pprof\",\n        \"--pprofaddr=0.0.0.0\",\n        \"--pprofport={0}\".format(PROFILING_PORT_NUM),\n    ]\n\n    supernode_cmd = [\n        \"--subscribe-all-data-subnets=true\",\n    ]\n\n    if network_params.perfect_peerdas_enabled and participant_index < 16:\n        cmd.append(\n            \"--p2p-priv-key=\"\n            + constants.NODE_KEY_MOUNTPOINT_ON_CLIENTS\n            + \"/node-key-file-{0}\".format(participant_index + 1)\n        )\n\n    if participant.supernode:\n        cmd.extend(supernode_cmd)\n\n    if checkpoint_sync_enabled:\n        cmd.append(\"--checkpoint-sync-url=\" + checkpoint_sync_url)\n        cmd.append(\"--genesis-beacon-api-url=\" + checkpoint_sync_url)\n\n    if network_params.preset == \"minimal\":\n        cmd.append(\"--minimal-config=true\")\n\n    if bootnode_enr_override != None:\n        cmd.append(\"--bootstrap-node=\" + bootnode_enr_override)\n\n    if network_params.network not in constants.PUBLIC_NETWORKS:\n        cmd.append(\"--p2p-static-id=true\")\n        cmd.append(\n            \"--chain-config-file=\"\n            + constants.GENESIS_CONFIG_MOUNT_PATH_ON_CONTAINER\n            + \"/config.yaml\"\n        )\n        cmd.append(\n            \"--genesis-state=\"\n            + constants.GENESIS_CONFIG_MOUNT_PATH_ON_CONTAINER\n            + \"/genesis.ssz\",\n        )\n        cmd.append(\"--contract-deployment-block=0\")\n        if (\n            network_params.network == constants.NETWORK_NAME.kurtosis\n            or constants.NETWORK_NAME.shadowfork in network_params.network\n        ):\n            if bootnode_enr_override == None and bootnode_contexts != None:\n                for ctx in bootnode_contexts[: constants.MAX_ENR_ENTRIES]:\n                    cmd.append(\"--bootstrap-node=\" + ctx.enr)\n        elif network_params.network == constants.NETWORK_NAME.ephemery:\n            cmd.append(\n                \"--genesis-beacon-api-url=\"\n                + constants.CHECKPOINT_SYNC_URL[network_params.network]\n            )\n            if bootnode_enr_override == None:\n                cmd.append(\n                    \"--bootstrap-node=\"\n                    + constants.GENESIS_CONFIG_MOUNT_PATH_ON_CONTAINER\n                    + \"/bootstrap_nodes.yaml\"\n                )\n        else:  # Devnets\n            if bootnode_enr_override == None:\n                cmd.append(\n                    \"--bootstrap-node=\"\n                    + constants.GENESIS_CONFIG_MOUNT_PATH_ON_CONTAINER\n                    + \"/bootstrap_nodes.yaml\"\n                )\n    else:  # Public network\n        cmd.append(\"--{}\".format(network_params.network))\n\n    if len(participant.cl_extra_params) > 0:\n        # we do the for loop as otherwise its a proto repeated array\n        cmd.extend([param for param in participant.cl_extra_params])\n\n    files = {\n        constants.GENESIS_DATA_MOUNTPOINT_ON_CLIENTS: launcher.el_cl_genesis_data.files_artifact_uuid,\n        constants.JWT_MOUNTPOINT_ON_CLIENTS: launcher.jwt_file,\n    }\n    if network_params.perfect_peerdas_enabled and participant_index < 16:\n        files[constants.NODE_KEY_MOUNTPOINT_ON_CLIENTS] = Directory(\n            artifact_names=[\"node-key-file-{0}\".format(participant_index + 1)]\n        )\n    if persistent:\n        volume_size_key = (\n            \"devnets\" if \"devnet\" in network_params.network else network_params.network\n        )\n        files[BEACON_DATA_DIRPATH_ON_SERVICE_CONTAINER] = Directory(\n            persistent_key=\"data-{0}\".format(beacon_service_name),\n            size=int(participant.cl_volume_size)\n            if int(participant.cl_volume_size) > 0\n            else constants.VOLUME_SIZE[volume_size_key][\n                constants.CL_TYPE.prysm + \"_volume_size\"\n            ],\n        )\n\n    # Add extra mounts - automatically handle file uploads\n    processed_mounts = shared_utils.process_extra_mounts(\n        plan, participant.cl_extra_mounts, extra_files_artifacts\n    )\n    for mount_path, artifact in processed_mounts.items():\n        files[mount_path] = artifact\n\n    # Binary injection - mount custom binary directory if provided\n    if cl_binary_artifact != None:\n        files[\"/opt/bin\"] = cl_binary_artifact.artifact\n\n    # Build the command string, copying injected binary if provided\n    cmd_str = \" \".join(cmd)\n    if cl_binary_artifact != None:\n        cmd_str = (\n            \"cp /opt/bin/{0} /beacon-chain && exec \".format(cl_binary_artifact.filename)\n            + cmd_str\n        )\n    else:\n        cmd_str = \"exec \" + cmd_str\n\n    config_args = {\n        \"image\": participant.cl_image,\n        \"ports\": used_ports,\n        \"public_ports\": public_ports,\n        \"publish_udp\": port_publisher.cl_enabled,\n        \"entrypoint\": [\"sh\", \"-c\"],\n        \"cmd\": [cmd_str],\n        \"files\": files,\n        \"env_vars\": participant.cl_extra_env_vars,\n        \"private_ip_address_placeholder\": constants.PRIVATE_IP_ADDRESS_PLACEHOLDER,\n        \"labels\": shared_utils.label_maker(\n            client=constants.CL_TYPE.prysm,\n            client_type=constants.CLIENT_TYPES.cl,\n            image=participant.cl_image[-constants.MAX_LABEL_LENGTH :],\n            connected_client=el_context.client_name,\n            extra_labels=participant.cl_extra_labels\n            | {constants.NODE_INDEX_LABEL_KEY: str(participant_index + 1)},\n            supernode=participant.supernode,\n        ),\n        \"tolerations\": tolerations,\n        \"node_selectors\": node_selectors,\n        \"tty_enabled\": True,\n    }\n\n    if len(participant.cl_devices) > 0:\n        config_args[\"devices\"] = participant.cl_devices\n    # Only add ready_conditions if not skipping start (port checks are already disabled via wait=\"disable\")\n    if not participant.skip_start:\n        config_args[\"ready_conditions\"] = cl_node_ready_conditions.get_ready_conditions(\n            constants.HTTP_PORT_ID\n        )\n\n    if int(participant.cl_min_cpu) > 0:\n        config_args[\"min_cpu\"] = int(participant.cl_min_cpu)\n    if int(participant.cl_max_cpu) > 0:\n        config_args[\"max_cpu\"] = int(participant.cl_max_cpu)\n    if int(participant.cl_min_mem) > 0:\n        config_args[\"min_memory\"] = int(participant.cl_min_mem)\n    if int(participant.cl_max_mem) > 0:\n        config_args[\"max_memory\"] = int(participant.cl_max_mem)\n    return ServiceConfig(**config_args)\n\n\ndef get_cl_context(\n    plan,\n    service_name,\n    service,\n    participant,\n    snooper_el_engine_context,\n    node_keystore_files,\n    node_selectors,\n):\n    beacon_http_port = service.ports[constants.HTTP_PORT_ID]\n\n    beacon_http_url = \"http://{0}:{1}\".format(service.name, BEACON_HTTP_PORT_NUM)\n    beacon_grpc_url = \"{0}:{1}\".format(service.name, RPC_PORT_NUM)\n\n    # Skip HTTP requests if skip_start is enabled (service won't be running)\n    if participant.skip_start:\n        beacon_node_enr = \"\"\n        beacon_multiaddr = \"\"\n        beacon_peer_id = \"\"\n    else:\n        # TODO(old) add validator availability using the validator API: https://ethereum.github.io/beacon-APIs/?urls.primaryName=v1#/ValidatorRequiredApi | from eth2-merge-kurtosis-module\n        beacon_node_identity_recipe = GetHttpRequestRecipe(\n            endpoint=\"/eth/v1/node/identity\",\n            port_id=constants.HTTP_PORT_ID,\n            extract={\n                \"enr\": \".data.enr\",\n                \"multiaddr\": \".data.p2p_addresses[0]\",\n                \"peer_id\": \".data.peer_id\",\n            },\n            headers={\"Accept-Encoding\": \"identity\"},\n        )\n        response = plan.request(\n            recipe=beacon_node_identity_recipe, service_name=service_name\n        )\n        beacon_node_enr = response[\"extract.enr\"]\n        beacon_multiaddr = response[\"extract.multiaddr\"]\n        beacon_peer_id = response[\"extract.peer_id\"]\n\n    beacon_metrics_port = service.ports[constants.METRICS_PORT_ID]\n    beacon_metrics_url = \"{0}:{1}\".format(service.name, beacon_metrics_port.number)\n    beacon_node_metrics_info = node_metrics.new_node_metrics_info(\n        service_name, METRICS_PATH, beacon_metrics_url\n    )\n    nodes_metrics_info = [beacon_node_metrics_info]\n\n    return cl_context.new_cl_context(\n        client_name=\"prysm\",\n        enr=beacon_node_enr,\n        ip_addr=service.name,\n        http_port=beacon_http_port.number,\n        beacon_http_url=beacon_http_url,\n        cl_nodes_metrics_info=nodes_metrics_info,\n        beacon_service_name=service_name,\n        beacon_grpc_url=beacon_grpc_url,\n        multiaddr=beacon_multiaddr,\n        peer_id=beacon_peer_id,\n        snooper_enabled=participant.snooper_enabled,\n        snooper_el_engine_context=snooper_el_engine_context,\n        validator_keystore_files_artifact_uuid=node_keystore_files.files_artifact_uuid\n        if node_keystore_files\n        else \"\",\n        supernode=participant.supernode,\n    )\n\n\ndef new_prysm_launcher(\n    el_cl_genesis_data,\n    jwt_file,\n):\n    return struct(\n        el_cl_genesis_data=el_cl_genesis_data,\n        jwt_file=jwt_file,\n    )\n\n\ndef get_blobber_config(\n    plan,\n    participant,\n    beacon_service_name,\n    beacon_http_url,\n    node_keystore_files,\n    node_selectors,\n):\n    blobber_config = None\n    if participant.blobber_enabled:\n        blobber_config = struct(\n            service_name=\"{0}-{1}\".format(\"blobber\", beacon_service_name),\n            beacon_http_url=beacon_http_url,\n            node_keystore_files=node_keystore_files,\n            node_selectors=node_selectors,\n        )\n    return blobber_config\n"
  },
  {
    "path": "src/cl/teku/teku_launcher.star",
    "content": "shared_utils = import_module(\"../../shared_utils/shared_utils.star\")\ninput_parser = import_module(\"../../package_io/input_parser.star\")\ncl_context = import_module(\"../../cl/cl_context.star\")\ncl_node_ready_conditions = import_module(\"../../cl/cl_node_ready_conditions.star\")\ncl_shared = import_module(\"../cl_shared.star\")\nnode_metrics = import_module(\"../../node_metrics_info.star\")\nconstants = import_module(\"../../package_io/constants.star\")\nvc_shared = import_module(\"../../vc/shared.star\")\n\nTEKU_ENTRYPOINT_COMMAND = \"/opt/teku/bin/teku\"\n\n# The Docker container runs as the \"teku\" user so we can't write to root\nBEACON_DATA_DIRPATH_ON_SERVICE_CONTAINER = \"/data/teku/teku-beacon-data\"\n\n# Port nums\nBEACON_DISCOVERY_PORT_NUM = 9000\nBEACON_HTTP_PORT_NUM = 4000\nBEACON_METRICS_PORT_NUM = 8008\n\nBEACON_METRICS_PATH = \"/metrics\"\n\nMIN_PEERS = 1\n\nENTRYPOINT_ARGS = [\"sh\", \"-c\"]\n\nVERBOSITY_LEVELS = {\n    constants.GLOBAL_LOG_LEVEL.error: \"ERROR\",\n    constants.GLOBAL_LOG_LEVEL.warn: \"WARN\",\n    constants.GLOBAL_LOG_LEVEL.info: \"INFO\",\n    constants.GLOBAL_LOG_LEVEL.debug: \"DEBUG\",\n    constants.GLOBAL_LOG_LEVEL.trace: \"TRACE\",\n    constants.GLOBAL_LOG_LEVEL.custom: \"CUSTOM\",\n}\n\n\ndef launch(\n    plan,\n    launcher,\n    beacon_service_name,\n    participant,\n    global_log_level,\n    bootnode_contexts,\n    el_context,\n    full_name,\n    node_keystore_files,\n    snooper_el_engine_context,\n    persistent,\n    tolerations,\n    node_selectors,\n    checkpoint_sync_enabled,\n    checkpoint_sync_url,\n    port_publisher,\n    participant_index,\n    network_params,\n    extra_files_artifacts,\n    backend,\n    tempo_otlp_grpc_url=None,\n    bootnode_enr_override=None,\n    cl_binary_artifact=None,\n):\n    config = get_beacon_config(\n        plan,\n        launcher,\n        beacon_service_name,\n        participant,\n        global_log_level,\n        bootnode_contexts,\n        el_context,\n        full_name,\n        node_keystore_files,\n        snooper_el_engine_context,\n        persistent,\n        tolerations,\n        node_selectors,\n        checkpoint_sync_enabled,\n        checkpoint_sync_url,\n        port_publisher,\n        participant_index,\n        network_params,\n        extra_files_artifacts,\n        backend,\n        tempo_otlp_grpc_url,\n        bootnode_enr_override,\n        cl_binary_artifact,\n    )\n\n    beacon_service = plan.add_service(beacon_service_name, config)\n\n    cl_context_obj = get_cl_context(\n        plan,\n        beacon_service_name,\n        beacon_service,\n        participant,\n        snooper_el_engine_context,\n        node_keystore_files,\n        node_selectors,\n    )\n\n    return cl_context_obj\n\n\ndef get_beacon_config(\n    plan,\n    launcher,\n    beacon_service_name,\n    participant,\n    global_log_level,\n    bootnode_contexts,\n    el_context,\n    full_name,\n    node_keystore_files,\n    snooper_el_engine_context,\n    persistent,\n    tolerations,\n    node_selectors,\n    checkpoint_sync_enabled,\n    checkpoint_sync_url,\n    port_publisher,\n    participant_index,\n    network_params,\n    extra_files_artifacts,\n    backend,\n    tempo_otlp_grpc_url,\n    bootnode_enr_override=None,\n    cl_binary_artifact=None,\n):\n    log_level = input_parser.get_client_log_level_or_default(\n        participant.cl_log_level, global_log_level, VERBOSITY_LEVELS\n    )\n    validator_keys_dirpath = \"\"\n    validator_secrets_dirpath = \"\"\n    if node_keystore_files:\n        validator_keys_dirpath = shared_utils.path_join(\n            constants.VALIDATOR_KEYS_DIRPATH_ON_SERVICE_CONTAINER,\n            node_keystore_files.teku_keys_relative_dirpath,\n        )\n        validator_secrets_dirpath = shared_utils.path_join(\n            constants.VALIDATOR_KEYS_DIRPATH_ON_SERVICE_CONTAINER,\n            node_keystore_files.teku_secrets_relative_dirpath,\n        )\n    # If snooper is enabled use the snooper engine context, otherwise use the execution client context\n    if participant.snooper_enabled:\n        EXECUTION_ENGINE_ENDPOINT = \"http://{0}:{1}\".format(\n            snooper_el_engine_context.ip_addr,\n            snooper_el_engine_context.engine_rpc_port_num,\n        )\n    else:\n        EXECUTION_ENGINE_ENDPOINT = \"http://{0}:{1}\".format(\n            el_context.dns_name,\n            el_context.engine_rpc_port_num,\n        )\n\n    public_ports = {}\n    public_ports_for_component = None\n    validator_public_port_assignment = {}\n    if port_publisher.cl_enabled:\n        public_ports_for_component = shared_utils.get_public_ports_for_component(\n            \"cl\", port_publisher, participant_index\n        )\n        validator_public_port_assignment = {\n            constants.VALIDATOR_HTTP_PORT_ID: public_ports_for_component[3]\n        }\n        public_ports = cl_shared.get_general_cl_public_port_specs(\n            public_ports_for_component\n        )\n\n    discovery_port_tcp = (\n        public_ports_for_component[0]\n        if public_ports_for_component\n        else BEACON_DISCOVERY_PORT_NUM\n    )\n    discovery_port_udp = (\n        public_ports_for_component[0]\n        if public_ports_for_component\n        else BEACON_DISCOVERY_PORT_NUM\n    )\n\n    used_port_assignments = {\n        constants.TCP_DISCOVERY_PORT_ID: discovery_port_tcp,\n        constants.UDP_DISCOVERY_PORT_ID: discovery_port_udp,\n        constants.HTTP_PORT_ID: BEACON_HTTP_PORT_NUM,\n        constants.METRICS_PORT_ID: BEACON_METRICS_PORT_NUM,\n    }\n    # Disable port checks if skip_start is enabled\n    if participant.skip_start:\n        used_ports = shared_utils.get_port_specs(used_port_assignments, wait=None)\n    else:\n        used_ports = shared_utils.get_port_specs(used_port_assignments)\n\n    cmd = [\n        TEKU_ENTRYPOINT_COMMAND,\n        \"--network={0}\".format(\n            network_params.network\n            if network_params.network in constants.PUBLIC_NETWORKS\n            else constants.GENESIS_CONFIG_MOUNT_PATH_ON_CONTAINER + \"/config.yaml\"\n        ),\n        \"--data-path=\" + BEACON_DATA_DIRPATH_ON_SERVICE_CONTAINER,\n        \"--data-storage-mode={0}\".format(\n            \"ARCHIVE\" if constants.ARCHIVE_MODE else \"PRUNE\"\n        ),\n        \"--p2p-enabled=true\",\n        \"--p2p-peer-lower-bound={0}\".format(MIN_PEERS),\n        \"--p2p-advertised-ip={0}\".format(\n            \"${K8S_POD_IP}\"\n            if backend == \"kubernetes\"\n            else port_publisher.cl_nat_exit_ip\n        ),\n        \"--p2p-discovery-site-local-addresses-enabled=true\",\n        \"--p2p-port={0}\".format(discovery_port_tcp),\n        \"--rest-api-enabled=true\",\n        \"--rest-api-docs-enabled=true\",\n        \"--rest-api-interface=0.0.0.0\",\n        \"--rest-api-port={0}\".format(BEACON_HTTP_PORT_NUM),\n        \"--rest-api-host-allowlist=*\",\n        \"--data-storage-non-canonical-blocks-enabled=true\",\n        \"--ee-jwt-secret-file=\" + constants.JWT_MOUNT_PATH_ON_CONTAINER,\n        \"--ee-endpoint=\" + EXECUTION_ENGINE_ENDPOINT,\n        # vvvvvvvvvvvvvvvvvvv METRICS CONFIG vvvvvvvvvvvvvvvvvvvvv\n        \"--metrics-enabled\",\n        \"--metrics-interface=0.0.0.0\",\n        \"--metrics-host-allowlist=*\",\n        \"--metrics-categories=BEACON,PROCESS,LIBP2P,JVM,NETWORK,PROCESS\",\n        \"--metrics-port={0}\".format(BEACON_METRICS_PORT_NUM),\n        # ^^^^^^^^^^^^^^^^^^^ METRICS CONFIG ^^^^^^^^^^^^^^^^^^^^^\n    ]\n\n    if log_level == \"CUSTOM\":\n        cmd.append(\"--log-destination=CUSTOM\")\n    else:\n        cmd.append(\"--logging=\" + log_level)\n        cmd.append(\"--log-destination=CONSOLE\")\n\n    validator_default_cmd = [\n        \"--validator-keys={0}:{1}\".format(\n            validator_keys_dirpath,\n            validator_secrets_dirpath,\n        ),\n        \"--validators-proposer-default-fee-recipient=\"\n        + constants.VALIDATING_REWARDS_ACCOUNT,\n    ]\n\n    keymanager_api_cmd = [\n        \"--validator-api-enabled=true\",\n        \"--validator-api-host-allowlist=*\",\n        \"--validator-api-port={0}\".format(vc_shared.VALIDATOR_HTTP_PORT_NUM),\n        \"--validator-api-interface=0.0.0.0\",\n        \"--validator-api-bearer-file=\" + constants.KEYMANAGER_MOUNT_PATH_ON_CONTAINER,\n        \"--Xvalidator-api-ssl-enabled=false\",\n        \"--Xvalidator-api-unsafe-hosts-enabled=true\",\n    ]\n\n    supernode_cmd = [\n        \"--p2p-subscribe-all-custody-subnets-enabled=true\",\n    ]\n\n    if network_params.perfect_peerdas_enabled and participant_index < 16:\n        cmd.append(\n            \"--Xp2p-private-key-file-secp256k1=\"\n            + constants.NODE_KEY_MOUNTPOINT_ON_CLIENTS\n            + \"/node-key-file-{0}\".format(participant_index + 1)\n        )\n\n    if participant.supernode:\n        cmd.extend(supernode_cmd)\n\n    if checkpoint_sync_enabled:\n        cmd.append(\"--checkpoint-sync-url=\" + checkpoint_sync_url)\n    else:\n        cmd.append(\"--ignore-weak-subjectivity-period-enabled=true\")\n\n    bootnode_arg = bootnode_enr_override\n\n    if network_params.network not in constants.PUBLIC_NETWORKS:\n        cmd.append(\n            \"--genesis-state=\"\n            + constants.GENESIS_CONFIG_MOUNT_PATH_ON_CONTAINER\n            + \"/genesis.ssz\"\n        )\n        if (\n            network_params.network == constants.NETWORK_NAME.kurtosis\n            or constants.NETWORK_NAME.shadowfork in network_params.network\n        ):\n            if bootnode_contexts != None and bootnode_arg == None:\n                bootnode_arg = \",\".join(\n                    [ctx.enr for ctx in bootnode_contexts[: constants.MAX_ENR_ENTRIES]]\n                )\n        elif network_params.network == constants.NETWORK_NAME.ephemery:\n            if bootnode_arg == None:\n                bootnode_arg = shared_utils.get_devnet_enrs_list(\n                    plan, launcher.el_cl_genesis_data.files_artifact_uuid\n                )\n        elif constants.NETWORK_NAME.shadowfork in network_params.network:\n            if bootnode_arg == None:\n                bootnode_arg = shared_utils.get_devnet_enrs_list(\n                    plan, launcher.el_cl_genesis_data.files_artifact_uuid\n                )\n        else:  # Devnets\n            if bootnode_arg == None:\n                bootnode_arg = shared_utils.get_devnet_enrs_list(\n                    plan, launcher.el_cl_genesis_data.files_artifact_uuid\n                )\n\n    if bootnode_arg != None:\n        cmd.append(\"--p2p-discovery-bootnodes=\" + bootnode_arg)\n\n    if len(participant.cl_extra_params) > 0:\n        # we do the list comprehension as the default extra_params is a proto repeated string\n        cmd.extend([param for param in participant.cl_extra_params])\n\n    files = {\n        constants.GENESIS_DATA_MOUNTPOINT_ON_CLIENTS: launcher.el_cl_genesis_data.files_artifact_uuid,\n        constants.JWT_MOUNTPOINT_ON_CLIENTS: launcher.jwt_file,\n    }\n\n    if network_params.perfect_peerdas_enabled and participant_index < 16:\n        files[constants.NODE_KEY_MOUNTPOINT_ON_CLIENTS] = Directory(\n            artifact_names=[\"node-key-file-{0}\".format(participant_index + 1)]\n        )\n\n    if node_keystore_files != None and not participant.use_separate_vc:\n        cmd.extend(validator_default_cmd)\n        files[\n            constants.VALIDATOR_KEYS_DIRPATH_ON_SERVICE_CONTAINER\n        ] = node_keystore_files.files_artifact_uuid\n\n        if participant.keymanager_enabled:\n            files[constants.KEYMANAGER_MOUNT_PATH_ON_CLIENTS] = launcher.keymanager_file\n            cmd.extend(keymanager_api_cmd)\n            used_ports.update(vc_shared.VALIDATOR_KEYMANAGER_USED_PORTS)\n            public_ports.update(\n                shared_utils.get_port_specs(validator_public_port_assignment)\n            )\n\n        if network_params.gas_limit > 0:\n            cmd.append(\n                \"--validators-builder-registration-default-gas-limit={0}\".format(\n                    network_params.gas_limit\n                )\n            )\n\n    if persistent:\n        volume_size_key = (\n            \"devnets\" if \"devnet\" in network_params.network else network_params.network\n        )\n        files[BEACON_DATA_DIRPATH_ON_SERVICE_CONTAINER] = Directory(\n            persistent_key=\"data-{0}\".format(beacon_service_name),\n            size=int(participant.cl_volume_size)\n            if int(participant.cl_volume_size) > 0\n            else constants.VOLUME_SIZE[volume_size_key][\n                constants.CL_TYPE.teku + \"_volume_size\"\n            ],\n        )\n\n    # Add extra mounts - automatically handle file uploads\n    processed_mounts = shared_utils.process_extra_mounts(\n        plan, participant.cl_extra_mounts, extra_files_artifacts\n    )\n    for mount_path, artifact in processed_mounts.items():\n        files[mount_path] = artifact\n\n    # Binary injection - mount custom binary directory if provided\n    if cl_binary_artifact != None:\n        files[\"/opt/bin\"] = cl_binary_artifact.artifact\n\n    # Build the command string, copying injected binary if provided\n    cmd_str = \" \".join(cmd)\n    if cl_binary_artifact != None:\n        cmd_str = (\n            \"cp /opt/bin/{0} /opt/teku/bin/teku && exec \".format(\n                cl_binary_artifact.filename\n            )\n            + cmd_str\n        )\n    else:\n        cmd_str = \"exec \" + cmd_str\n\n    config_args = {\n        \"image\": participant.cl_image,\n        \"ports\": used_ports,\n        \"public_ports\": public_ports,\n        \"publish_udp\": port_publisher.cl_enabled,\n        \"entrypoint\": [\"sh\", \"-c\"],\n        \"cmd\": [cmd_str],\n        \"files\": files,\n        \"env_vars\": participant.cl_extra_env_vars,\n        \"private_ip_address_placeholder\": constants.PRIVATE_IP_ADDRESS_PLACEHOLDER,\n        \"labels\": shared_utils.label_maker(\n            client=constants.CL_TYPE.teku,\n            client_type=constants.CLIENT_TYPES.cl,\n            image=participant.cl_image[-constants.MAX_LABEL_LENGTH :],\n            connected_client=el_context.client_name,\n            extra_labels=participant.cl_extra_labels\n            | {constants.NODE_INDEX_LABEL_KEY: str(participant_index + 1)},\n            supernode=participant.supernode,\n        ),\n        \"tolerations\": tolerations,\n        \"node_selectors\": node_selectors,\n        \"user\": User(uid=0, gid=0),\n    }\n\n    if len(participant.cl_devices) > 0:\n        config_args[\"devices\"] = participant.cl_devices\n    # Only add ready_conditions if not skipping start\n    if not participant.skip_start:\n        config_args[\"ready_conditions\"] = cl_node_ready_conditions.get_ready_conditions(\n            constants.HTTP_PORT_ID\n        )\n\n    if int(participant.cl_min_cpu) > 0:\n        config_args[\"min_cpu\"] = int(participant.cl_min_cpu)\n    if int(participant.cl_max_cpu) > 0:\n        config_args[\"max_cpu\"] = int(participant.cl_max_cpu)\n    if int(participant.cl_min_mem) > 0:\n        config_args[\"min_memory\"] = int(participant.cl_min_mem)\n    if int(participant.cl_max_mem) > 0:\n        config_args[\"max_memory\"] = int(participant.cl_max_mem)\n    return ServiceConfig(**config_args)\n\n\ndef get_cl_context(\n    plan,\n    service_name,\n    service,\n    participant,\n    snooper_el_engine_context,\n    node_keystore_files,\n    node_selectors,\n):\n    beacon_http_port = service.ports[constants.HTTP_PORT_ID]\n    beacon_http_url = \"http://{0}:{1}\".format(service.name, beacon_http_port.number)\n\n    beacon_metrics_port = service.ports[constants.METRICS_PORT_ID]\n    beacon_metrics_url = \"{0}:{1}\".format(service.name, beacon_metrics_port.number)\n\n    # Skip HTTP requests if skip_start is enabled (service won't be running)\n    if participant.skip_start:\n        beacon_node_enr = \"\"\n        beacon_multiaddr = \"\"\n        beacon_peer_id = \"\"\n    else:\n        beacon_node_identity_recipe = GetHttpRequestRecipe(\n            endpoint=\"/eth/v1/node/identity\",\n            port_id=constants.HTTP_PORT_ID,\n            extract={\n                \"enr\": \".data.enr\",\n                \"multiaddr\": \".data.p2p_addresses[0]\",\n                \"peer_id\": \".data.peer_id\",\n            },\n        )\n        response = plan.request(\n            recipe=beacon_node_identity_recipe, service_name=service_name\n        )\n        beacon_node_enr = response[\"extract.enr\"]\n        beacon_multiaddr = response[\"extract.multiaddr\"]\n        beacon_peer_id = response[\"extract.peer_id\"]\n\n    beacon_node_metrics_info = node_metrics.new_node_metrics_info(\n        service_name, BEACON_METRICS_PATH, beacon_metrics_url\n    )\n    nodes_metrics_info = [beacon_node_metrics_info]\n\n    return cl_context.new_cl_context(\n        client_name=\"teku\",\n        enr=beacon_node_enr,\n        ip_addr=service.name,\n        http_port=beacon_http_port.number,\n        beacon_http_url=beacon_http_url,\n        cl_nodes_metrics_info=nodes_metrics_info,\n        beacon_service_name=service_name,\n        multiaddr=beacon_multiaddr,\n        peer_id=beacon_peer_id,\n        snooper_enabled=participant.snooper_enabled,\n        snooper_el_engine_context=snooper_el_engine_context,\n        validator_keystore_files_artifact_uuid=node_keystore_files.files_artifact_uuid\n        if node_keystore_files\n        else \"\",\n        supernode=participant.supernode,\n    )\n\n\ndef new_teku_launcher(el_cl_genesis_data, jwt_file, keymanager_file):\n    return struct(\n        el_cl_genesis_data=el_cl_genesis_data,\n        jwt_file=jwt_file,\n        keymanager_file=keymanager_file,\n    )\n\n\ndef get_blobber_config(\n    plan,\n    participant,\n    beacon_service_name,\n    beacon_http_url,\n    node_keystore_files,\n    node_selectors,\n):\n    # Teku doesn't support blobbers, return None for blobber config\n    return None\n"
  },
  {
    "path": "src/dora/dora_launcher.star",
    "content": "shared_utils = import_module(\"../shared_utils/shared_utils.star\")\nconstants = import_module(\"../package_io/constants.star\")\ninput_parser = import_module(\"../package_io/input_parser.star\")\nSERVICE_NAME = \"dora\"\n\nHTTP_PORT_NUMBER = 8080\n\nDORA_CONFIG_FILENAME = \"dora-config.yaml\"\n\nDORA_CONFIG_MOUNT_DIRPATH_ON_SERVICE = \"/config\"\n\nVALIDATOR_RANGES_MOUNT_DIRPATH_ON_SERVICE = \"/validator-ranges\"\nVALIDATOR_RANGES_ARTIFACT_NAME = \"validator-ranges\"\n\n# The min/max CPU/memory that dora can use\nMIN_CPU = 100\nMAX_CPU = 1000\nMIN_MEMORY = 128\nMAX_MEMORY = 2048\n\nUSED_PORTS = {\n    constants.HTTP_PORT_ID: shared_utils.new_port_spec(\n        HTTP_PORT_NUMBER,\n        shared_utils.TCP_PROTOCOL,\n        shared_utils.HTTP_APPLICATION_PROTOCOL,\n    )\n}\n\n\ndef launch_dora(\n    plan,\n    config_template,\n    participant_contexts,\n    participant_configs,\n    network_params,\n    dora_params,\n    global_node_selectors,\n    global_tolerations,\n    mev_endpoints,\n    mev_endpoint_names,\n    port_publisher,\n    additional_service_index,\n    docker_cache_params,\n    el_cl_data_files_artifact_uuid,\n):\n    tolerations = shared_utils.get_tolerations(global_tolerations=global_tolerations)\n\n    all_cl_client_info = []\n    all_el_client_info = []\n    for index, participant in enumerate(participant_contexts):\n        full_name, cl_client, el_client, _ = shared_utils.get_client_names(\n            participant, index, participant_contexts, participant_configs\n        )\n        all_cl_client_info.append(\n            new_cl_client_info(\n                cl_client.beacon_http_url,\n                full_name,\n            )\n        )\n\n        # Skip dummy EL clients - they don't have real execution endpoints\n        el_type = participant_configs[index].el_type\n        if el_type == \"dummy\":\n            continue\n\n        snooper_el_engine_context = participant_contexts[\n            index\n        ].snooper_el_engine_context\n        execution_snooper_url = \"\"\n        if snooper_el_engine_context:\n            execution_snooper_url = \"http://{0}:{1}\".format(\n                snooper_el_engine_context.ip_addr,\n                snooper_el_engine_context.engine_rpc_port_num,\n            )\n\n        all_el_client_info.append(\n            new_el_client_info(\n                \"http://{0}:{1}\".format(\n                    el_client.dns_name,\n                    el_client.rpc_port_num,\n                ),\n                execution_snooper_url,\n                full_name,\n            )\n        )\n\n    mev_endpoint_info = []\n    for index, endpoint in enumerate(mev_endpoints):\n        mev_endpoint_info.append(\n            {\n                \"Index\": index,\n                \"Name\": mev_endpoint_names[index],\n                \"Url\": endpoint,\n            }\n        )\n\n    template_data = new_config_template_data(\n        network_params.network,\n        HTTP_PORT_NUMBER,\n        all_cl_client_info,\n        all_el_client_info,\n        mev_endpoint_info,\n    )\n\n    template_and_data = shared_utils.new_template_and_data(\n        config_template, template_data\n    )\n    template_and_data_by_rel_dest_filepath = {}\n    template_and_data_by_rel_dest_filepath[DORA_CONFIG_FILENAME] = template_and_data\n\n    config_files_artifact_name = plan.render_templates(\n        template_and_data_by_rel_dest_filepath, \"dora-config\"\n    )\n    config = get_config(\n        config_files_artifact_name,\n        network_params,\n        dora_params,\n        global_node_selectors,\n        tolerations,\n        port_publisher,\n        additional_service_index,\n        docker_cache_params,\n        el_cl_data_files_artifact_uuid,\n    )\n\n    plan.add_service(SERVICE_NAME, config)\n\n\ndef get_config(\n    config_files_artifact_name,\n    network_params,\n    dora_params,\n    node_selectors,\n    tolerations,\n    port_publisher,\n    additional_service_index,\n    docker_cache_params,\n    el_cl_data_files_artifact_uuid,\n):\n    config_file_path = shared_utils.path_join(\n        DORA_CONFIG_MOUNT_DIRPATH_ON_SERVICE,\n        DORA_CONFIG_FILENAME,\n    )\n\n    public_ports = shared_utils.get_additional_service_standard_public_port(\n        port_publisher,\n        constants.HTTP_PORT_ID,\n        additional_service_index,\n        0,\n    )\n\n    IMAGE_NAME = dora_params.image\n    env_vars = dora_params.env\n\n    return ServiceConfig(\n        image=IMAGE_NAME,\n        ports=USED_PORTS,\n        public_ports=public_ports,\n        files={\n            DORA_CONFIG_MOUNT_DIRPATH_ON_SERVICE: config_files_artifact_name,\n            VALIDATOR_RANGES_MOUNT_DIRPATH_ON_SERVICE: VALIDATOR_RANGES_ARTIFACT_NAME,\n            constants.GENESIS_DATA_MOUNTPOINT_ON_CLIENTS: el_cl_data_files_artifact_uuid,\n        },\n        cmd=[\"-config\", config_file_path],\n        env_vars=env_vars,\n        min_cpu=MIN_CPU,\n        max_cpu=MAX_CPU,\n        min_memory=MIN_MEMORY,\n        max_memory=MAX_MEMORY,\n        node_selectors=node_selectors,\n        tolerations=tolerations,\n    )\n\n\ndef new_config_template_data(\n    network, listen_port_num, cl_client_info, el_client_info, mev_endpoint_info\n):\n    public_rpc = \"\"\n    if len(el_client_info) > 0:\n        public_rpc = el_client_info[0][\"Execution_HTTP_URL\"]\n\n    return {\n        \"Network\": network,\n        \"PublicRPC\": public_rpc,\n        \"ListenPortNum\": listen_port_num,\n        \"CLClientInfo\": cl_client_info,\n        \"ELClientInfo\": el_client_info,\n        \"MEVRelayInfo\": mev_endpoint_info,\n        \"PublicNetwork\": True if network in constants.PUBLIC_NETWORKS else False,\n        \"IsDevnet\": True if \"devnet\" in network else False,\n    }\n\n\ndef new_cl_client_info(beacon_http_url, full_name):\n    return {\n        \"Beacon_HTTP_URL\": beacon_http_url,\n        \"FullName\": full_name,\n    }\n\n\ndef new_el_client_info(execution_http_url, execution_snooper_url, full_name):\n    return {\n        \"Execution_HTTP_URL\": execution_http_url,\n        \"Execution_Engine_Snooper_URL\": execution_snooper_url,\n        \"FullName\": full_name,\n    }\n"
  },
  {
    "path": "src/dugtrio/dugtrio_launcher.star",
    "content": "shared_utils = import_module(\"../shared_utils/shared_utils.star\")\nconstants = import_module(\"../package_io/constants.star\")\ninput_parser = import_module(\"../package_io/input_parser.star\")\nSERVICE_NAME = \"dugtrio\"\n\nHTTP_PORT_NUMBER = 8080\n\nDUGTRIO_CONFIG_FILENAME = \"dugtrio-config.yaml\"\n\nDUGTRIO_CONFIG_MOUNT_DIRPATH_ON_SERVICE = \"/config\"\n\nIMAGE_NAME = \"ethpandaops/dugtrio:latest\"\n\n# The min/max CPU/memory that dugtrio can use\nMIN_CPU = 100\nMAX_CPU = 1000\nMIN_MEMORY = 128\nMAX_MEMORY = 2048\n\nUSED_PORTS = {\n    constants.HTTP_PORT_ID: shared_utils.new_port_spec(\n        HTTP_PORT_NUMBER,\n        shared_utils.TCP_PROTOCOL,\n        shared_utils.HTTP_APPLICATION_PROTOCOL,\n    )\n}\n\n\ndef launch_dugtrio(\n    plan,\n    config_template,\n    participant_contexts,\n    participant_configs,\n    network_params,\n    global_node_selectors,\n    global_tolerations,\n    port_publisher,\n    additional_service_index,\n    docker_cache_params,\n):\n    tolerations = shared_utils.get_tolerations(global_tolerations=global_tolerations)\n\n    all_cl_client_info = []\n    for index, participant in enumerate(participant_contexts):\n        full_name, cl_client, _, _ = shared_utils.get_client_names(\n            participant, index, participant_contexts, participant_configs\n        )\n        all_cl_client_info.append(\n            new_cl_client_info(\n                cl_client.beacon_http_url,\n                full_name,\n            )\n        )\n\n    template_data = new_config_template_data(\n        network_params.network, HTTP_PORT_NUMBER, all_cl_client_info\n    )\n\n    template_and_data = shared_utils.new_template_and_data(\n        config_template, template_data\n    )\n    template_and_data_by_rel_dest_filepath = {}\n    template_and_data_by_rel_dest_filepath[DUGTRIO_CONFIG_FILENAME] = template_and_data\n\n    config_files_artifact_name = plan.render_templates(\n        template_and_data_by_rel_dest_filepath, \"dugtrio-config\"\n    )\n    config = get_config(\n        config_files_artifact_name,\n        network_params,\n        global_node_selectors,\n        tolerations,\n        port_publisher,\n        additional_service_index,\n        docker_cache_params,\n    )\n\n    plan.add_service(SERVICE_NAME, config)\n\n\ndef get_config(\n    config_files_artifact_name,\n    network_params,\n    node_selectors,\n    tolerations,\n    port_publisher,\n    additional_service_index,\n    docker_cache_params,\n):\n    config_file_path = shared_utils.path_join(\n        DUGTRIO_CONFIG_MOUNT_DIRPATH_ON_SERVICE,\n        DUGTRIO_CONFIG_FILENAME,\n    )\n\n    public_ports = shared_utils.get_additional_service_standard_public_port(\n        port_publisher,\n        constants.HTTP_PORT_ID,\n        additional_service_index,\n        0,\n    )\n\n    return ServiceConfig(\n        image=shared_utils.docker_cache_image_calc(\n            docker_cache_params,\n            IMAGE_NAME,\n        ),\n        ports=USED_PORTS,\n        public_ports=public_ports,\n        files={\n            DUGTRIO_CONFIG_MOUNT_DIRPATH_ON_SERVICE: config_files_artifact_name,\n        },\n        cmd=[\"-config\", config_file_path],\n        min_cpu=MIN_CPU,\n        max_cpu=MAX_CPU,\n        min_memory=MIN_MEMORY,\n        max_memory=MAX_MEMORY,\n        node_selectors=node_selectors,\n        tolerations=tolerations,\n        ready_conditions=ReadyCondition(\n            recipe=GetHttpRequestRecipe(\n                port_id=\"http\",\n                endpoint=\"/healthcheck\",\n            ),\n            field=\"code\",\n            assertion=\"==\",\n            target_value=200,\n        ),\n    )\n\n\ndef new_config_template_data(network, listen_port_num, cl_client_info):\n    return {\n        \"Network\": network,\n        \"ListenPortNum\": listen_port_num,\n        \"CLClientInfo\": cl_client_info,\n    }\n\n\ndef new_cl_client_info(beacon_http_url, full_name):\n    return {\n        \"Beacon_HTTP_URL\": beacon_http_url,\n        \"FullName\": full_name,\n    }\n"
  },
  {
    "path": "src/el/besu/besu_launcher.star",
    "content": "shared_utils = import_module(\"../../shared_utils/shared_utils.star\")\ninput_parser = import_module(\"../../package_io/input_parser.star\")\nel_context = import_module(\"../../el/el_context.star\")\nel_admin_node_info = import_module(\"../../el/el_admin_node_info.star\")\nel_shared = import_module(\"../el_shared.star\")\nnode_metrics = import_module(\"../../node_metrics_info.star\")\nconstants = import_module(\"../../package_io/constants.star\")\n\n# The dirpath of the execution data directory on the client container\nEXECUTION_DATA_DIRPATH_ON_CLIENT_CONTAINER = \"/data/besu/execution-data\"\n\nMETRICS_PATH = \"/metrics\"\n\nRPC_PORT_NUM = 8545\nWS_PORT_NUM = 8546\nDISCOVERY_PORT_NUM = 30303\nENGINE_HTTP_RPC_PORT_NUM = 8551\nMETRICS_PORT_NUM = 9001\n\nJAVA_OPTS = {\"JAVA_OPTS\": \"-agentlib:jdwp=transport=dt_socket,server=y,suspend=n\"}\n\nENTRYPOINT_ARGS = [\"sh\", \"-c\"]\n\nVERBOSITY_LEVELS = {\n    constants.GLOBAL_LOG_LEVEL.error: \"ERROR\",\n    constants.GLOBAL_LOG_LEVEL.warn: \"WARN\",\n    constants.GLOBAL_LOG_LEVEL.info: \"INFO\",\n    constants.GLOBAL_LOG_LEVEL.debug: \"DEBUG\",\n    constants.GLOBAL_LOG_LEVEL.trace: \"TRACE\",\n    constants.GLOBAL_LOG_LEVEL.custom: \"CUSTOM\",\n}\n\n\ndef launch(\n    plan,\n    launcher,\n    service_name,\n    participant,\n    global_log_level,\n    existing_el_clients,\n    persistent,\n    tolerations,\n    node_selectors,\n    port_publisher,\n    participant_index,\n    network_params,\n    extra_files_artifacts,\n    bootnodoor_enode=None,\n    el_binary_artifact=None,\n):\n    cl_client_name = service_name.split(\"-\")[3]\n\n    config = get_config(\n        plan,\n        launcher,\n        participant,\n        service_name,\n        existing_el_clients,\n        cl_client_name,\n        global_log_level,\n        persistent,\n        tolerations,\n        node_selectors,\n        port_publisher,\n        participant_index,\n        network_params,\n        extra_files_artifacts,\n        bootnodoor_enode,\n        el_binary_artifact,\n    )\n\n    service = plan.add_service(\n        service_name, config, force_update=participant.el_force_restart\n    )\n\n    return get_el_context(\n        plan,\n        service_name,\n        service,\n        launcher,\n    )\n\n\ndef get_config(\n    plan,\n    launcher,\n    participant,\n    service_name,\n    existing_el_clients,\n    cl_client_name,\n    global_log_level,\n    persistent,\n    tolerations,\n    node_selectors,\n    port_publisher,\n    participant_index,\n    network_params,\n    extra_files_artifacts,\n    bootnodoor_enode=None,\n    el_binary_artifact=None,\n):\n    log_level = input_parser.get_client_log_level_or_default(\n        participant.el_log_level, global_log_level, VERBOSITY_LEVELS\n    )\n\n    public_ports = {}\n    public_ports_for_component = None\n    if port_publisher.el_enabled:\n        public_ports_for_component = shared_utils.get_public_ports_for_component(\n            \"el\", port_publisher, participant_index\n        )\n        public_ports = el_shared.get_general_el_public_port_specs(\n            public_ports_for_component\n        )\n        additional_public_port_assignments = {\n            constants.RPC_PORT_ID: public_ports_for_component[3],\n            constants.WS_PORT_ID: public_ports_for_component[4],\n        }\n        public_ports.update(\n            shared_utils.get_port_specs(additional_public_port_assignments)\n        )\n\n    discovery_port_tcp = (\n        public_ports_for_component[0]\n        if public_ports_for_component\n        else DISCOVERY_PORT_NUM\n    )\n    discovery_port_udp = (\n        public_ports_for_component[0]\n        if public_ports_for_component\n        else DISCOVERY_PORT_NUM\n    )\n\n    used_port_assignments = {\n        constants.TCP_DISCOVERY_PORT_ID: discovery_port_tcp,\n        constants.UDP_DISCOVERY_PORT_ID: discovery_port_udp,\n        constants.ENGINE_RPC_PORT_ID: ENGINE_HTTP_RPC_PORT_NUM,\n        constants.METRICS_PORT_ID: METRICS_PORT_NUM,\n        constants.RPC_PORT_ID: RPC_PORT_NUM,\n        constants.WS_PORT_ID: WS_PORT_NUM,\n    }\n    used_ports = shared_utils.get_port_specs(used_port_assignments)\n\n    cmd = [\n        \"besu\",\n    ]\n\n    if log_level != \"CUSTOM\":\n        cmd.append(\"--logging=\" + log_level)\n\n    cmd += [\n        \"--data-path=\" + EXECUTION_DATA_DIRPATH_ON_CLIENT_CONTAINER,\n        \"--host-allowlist=*\",\n        \"--rpc-http-enabled=true\",\n        \"--rpc-http-host=0.0.0.0\",\n        \"--rpc-http-port={0}\".format(RPC_PORT_NUM),\n        \"--rpc-http-api=ADMIN,ETH,NET,DEBUG,TXPOOL,ENGINE,TRACE,WEB3\",\n        \"--rpc-http-cors-origins=*\",\n        \"--rpc-http-max-active-connections=300\",\n        \"--rpc-ws-enabled=true\",\n        \"--rpc-ws-host=0.0.0.0\",\n        \"--rpc-ws-port={0}\".format(WS_PORT_NUM),\n        \"--rpc-ws-api=ADMIN,ETH,NET,DEBUG,TXPOOL,ENGINE,TRACE,WEB3\",\n        \"--p2p-enabled=true\",\n        \"--p2p-host=\" + port_publisher.el_nat_exit_ip,\n        \"--p2p-port={0}\".format(discovery_port_tcp),\n        \"--engine-rpc-enabled=true\",\n        \"--engine-jwt-secret=\" + constants.JWT_MOUNT_PATH_ON_CONTAINER,\n        \"--engine-host-allowlist=*\",\n        \"--engine-rpc-port={0}\".format(ENGINE_HTTP_RPC_PORT_NUM),\n        \"{0}\".format(\n            \"--sync-mode=FULL\"\n            if network_params.network in constants.NETWORK_NAME.kurtosis\n            or participant.el_storage_type == \"archive\"\n            else \"--sync-mode=SNAP\"\n        ),\n        \"--metrics-enabled=true\",\n        \"--metrics-host=0.0.0.0\",\n        \"--metrics-port={0}\".format(METRICS_PORT_NUM),\n        \"--min-gas-price=1000000000\",\n    ]\n\n    # Configure storage type - besu defaults to full (BONSAI), use FOREST for archive\n    if participant.el_storage_type == \"archive\":\n        cmd.append(\"--data-storage-format=FOREST\")\n\n    if network_params.gas_limit > 0:\n        cmd.append(\"--target-gas-limit={0}\".format(network_params.gas_limit))\n\n    if network_params.network not in constants.PUBLIC_NETWORKS:\n        cmd.append(\n            \"--genesis-file=\"\n            + constants.GENESIS_CONFIG_MOUNT_PATH_ON_CONTAINER\n            + \"/besu.json\"\n        )\n    else:\n        cmd.append(\"--network=\" + network_params.network)\n\n    # Handle bootnode configuration with bootnodoor_enode override\n    if bootnodoor_enode != None:\n        cmd.append(\"--bootnodes=\" + bootnodoor_enode)\n    elif (\n        network_params.network == constants.NETWORK_NAME.kurtosis\n        or constants.NETWORK_NAME.shadowfork in network_params.network\n    ):\n        if len(existing_el_clients) > 0:\n            cmd.append(\n                \"--bootnodes=\"\n                + \",\".join(\n                    [\n                        ctx.enode\n                        for ctx in existing_el_clients[: constants.MAX_ENODE_ENTRIES]\n                    ]\n                )\n            )\n    elif (\n        network_params.network not in constants.PUBLIC_NETWORKS\n        and constants.NETWORK_NAME.shadowfork not in network_params.network\n    ):\n        cmd.append(\n            \"--bootnodes=\"\n            + shared_utils.get_devnet_enodes(\n                plan, launcher.el_cl_genesis_data.files_artifact_uuid\n            )\n        )\n\n    if len(participant.el_extra_params) > 0:\n        # we do this as extra_params isn't a normal [] but a proto repeated array\n        cmd.extend([param for param in participant.el_extra_params])\n\n    cmd_str = \" \".join(cmd)\n\n    env_vars = participant.el_extra_env_vars | JAVA_OPTS\n\n    files = {\n        constants.GENESIS_DATA_MOUNTPOINT_ON_CLIENTS: launcher.el_cl_genesis_data.files_artifact_uuid,\n        constants.JWT_MOUNTPOINT_ON_CLIENTS: launcher.jwt_file,\n    }\n\n    if persistent:\n        volume_size_key = (\n            \"devnets\" if \"devnet\" in network_params.network else network_params.network\n        )\n        files[EXECUTION_DATA_DIRPATH_ON_CLIENT_CONTAINER] = Directory(\n            persistent_key=\"data-{0}\".format(service_name),\n            size=int(participant.el_volume_size)\n            if int(participant.el_volume_size) > 0\n            else constants.VOLUME_SIZE[volume_size_key][\n                constants.EL_TYPE.besu + \"_volume_size\"\n            ],\n        )\n\n    # Add extra mounts - automatically handle file uploads\n    processed_mounts = shared_utils.process_extra_mounts(\n        plan, participant.el_extra_mounts, extra_files_artifacts\n    )\n    for mount_path, artifact in processed_mounts.items():\n        files[mount_path] = artifact\n\n    # Binary injection - mount custom binary directory if provided\n    if el_binary_artifact != None:\n        files[\"/opt/bin\"] = el_binary_artifact.artifact\n        # Copy injected binary to override default, then run original command\n        final_cmd_str = (\n            \"cp /opt/bin/{0} /opt/besu/bin/besu && \".format(el_binary_artifact.filename)\n            + cmd_str\n        )\n    else:\n        final_cmd_str = cmd_str\n\n    config_args = {\n        \"image\": participant.el_image,\n        \"ports\": used_ports,\n        \"public_ports\": public_ports,\n        \"publish_udp\": port_publisher.el_enabled,\n        \"cmd\": [final_cmd_str],\n        \"files\": files,\n        \"entrypoint\": ENTRYPOINT_ARGS,\n        \"private_ip_address_placeholder\": constants.PRIVATE_IP_ADDRESS_PLACEHOLDER,\n        \"env_vars\": env_vars,\n        \"labels\": shared_utils.label_maker(\n            client=constants.EL_TYPE.besu,\n            client_type=constants.CLIENT_TYPES.el,\n            image=participant.el_image[-constants.MAX_LABEL_LENGTH :],\n            connected_client=cl_client_name,\n            extra_labels=participant.el_extra_labels\n            | {constants.NODE_INDEX_LABEL_KEY: str(participant_index + 1)},\n            supernode=participant.supernode,\n        ),\n        \"user\": User(uid=0, gid=0),\n        \"tolerations\": tolerations,\n        \"node_selectors\": node_selectors,\n    }\n\n    if participant.el_min_cpu > 0:\n        config_args[\"min_cpu\"] = participant.el_min_cpu\n    if participant.el_max_cpu > 0:\n        config_args[\"max_cpu\"] = participant.el_max_cpu\n    if participant.el_min_mem > 0:\n        config_args[\"min_memory\"] = participant.el_min_mem\n    if participant.el_max_mem > 0:\n        config_args[\"max_memory\"] = participant.el_max_mem\n    if len(participant.el_devices) > 0:\n        config_args[\"devices\"] = participant.el_devices\n    return ServiceConfig(**config_args)\n\n\n# makes request to [service_name] for enode and returns a full el_context\ndef get_el_context(\n    plan,\n    service_name,\n    service,\n    launcher,\n):\n    enode = el_admin_node_info.get_enode_for_node(\n        plan, service_name, constants.RPC_PORT_ID\n    )\n\n    metrics_url = \"{0}:{1}\".format(service.name, METRICS_PORT_NUM)\n    besu_metrics_info = node_metrics.new_node_metrics_info(\n        service_name, METRICS_PATH, metrics_url\n    )\n    http_url = \"http://{0}:{1}\".format(service.name, RPC_PORT_NUM)\n    ws_url = \"ws://{0}:{1}\".format(service.name, WS_PORT_NUM)\n\n    return el_context.new_el_context(\n        client_name=\"besu\",\n        enode=enode,\n        dns_name=service.name,\n        rpc_port_num=RPC_PORT_NUM,\n        ws_port_num=WS_PORT_NUM,\n        engine_rpc_port_num=ENGINE_HTTP_RPC_PORT_NUM,\n        rpc_http_url=http_url,\n        ws_url=ws_url,\n        service_name=service_name,\n        el_metrics_info=[besu_metrics_info],\n        ip_addr=service.ip_address,\n    )\n\n\ndef new_besu_launcher(el_cl_genesis_data, jwt_file):\n    return struct(\n        el_cl_genesis_data=el_cl_genesis_data,\n        jwt_file=jwt_file,\n    )\n"
  },
  {
    "path": "src/el/dummy/dummy_launcher.star",
    "content": "shared_utils = import_module(\"../../shared_utils/shared_utils.star\")\ninput_parser = import_module(\"../../package_io/input_parser.star\")\nel_context = import_module(\"../../el/el_context.star\")\nel_admin_node_info = import_module(\"../../el/el_admin_node_info.star\")\nel_shared = import_module(\"../el_shared.star\")\nconstants = import_module(\"../../package_io/constants.star\")\n\nRPC_PORT_NUM = 8545\nWS_PORT_NUM = 8546\nDISCOVERY_PORT_NUM = 30303\nENGINE_RPC_PORT_NUM = 8551\nMETRICS_PORT_NUM = 9001\n\nVERBOSITY_LEVELS = {\n    constants.GLOBAL_LOG_LEVEL.error: \"error\",\n    constants.GLOBAL_LOG_LEVEL.warn: \"warn\",\n    constants.GLOBAL_LOG_LEVEL.info: \"info\",\n    constants.GLOBAL_LOG_LEVEL.debug: \"debug\",\n    constants.GLOBAL_LOG_LEVEL.trace: \"trace\",\n}\n\n\ndef launch(\n    plan,\n    launcher,\n    service_name,\n    participant,\n    global_log_level,\n    existing_el_clients,\n    persistent,\n    tolerations,\n    node_selectors,\n    port_publisher,\n    participant_index,\n    network_params,\n    extra_files_artifacts,\n    bootnodoor_enode=None,\n    el_binary_artifact=None,\n):\n    cl_client_name = service_name.split(\"-\")[3]\n\n    config = get_config(\n        plan,\n        launcher,\n        participant,\n        service_name,\n        existing_el_clients,\n        cl_client_name,\n        global_log_level,\n        persistent,\n        tolerations,\n        node_selectors,\n        port_publisher,\n        participant_index,\n        network_params,\n        extra_files_artifacts,\n        bootnodoor_enode,\n        el_binary_artifact,\n    )\n\n    service = plan.add_service(\n        service_name, config, force_update=participant.el_force_restart\n    )\n\n    return get_el_context(\n        plan,\n        service_name,\n        service,\n        launcher,\n    )\n\n\ndef get_config(\n    plan,\n    launcher,\n    participant,\n    service_name,\n    existing_el_clients,\n    cl_client_name,\n    global_log_level,\n    persistent,\n    tolerations,\n    node_selectors,\n    port_publisher,\n    participant_index,\n    network_params,\n    extra_files_artifacts,\n    bootnodoor_enode=None,\n    el_binary_artifact=None,\n):\n    log_level = input_parser.get_client_log_level_or_default(\n        participant.el_log_level, global_log_level, VERBOSITY_LEVELS\n    )\n\n    public_ports = {}\n    public_ports_for_component = None\n    if port_publisher.el_enabled:\n        public_ports_for_component = shared_utils.get_public_ports_for_component(\n            \"el\", port_publisher, participant_index\n        )\n        public_ports = el_shared.get_general_el_public_port_specs(\n            public_ports_for_component\n        )\n        additional_public_port_assignments = {\n            constants.RPC_PORT_ID: public_ports_for_component[3],\n            constants.WS_PORT_ID: public_ports_for_component[4],\n        }\n        public_ports.update(\n            shared_utils.get_port_specs(additional_public_port_assignments)\n        )\n\n    discovery_port_tcp = (\n        public_ports_for_component[0]\n        if public_ports_for_component\n        else DISCOVERY_PORT_NUM\n    )\n    discovery_port_udp = (\n        public_ports_for_component[0]\n        if public_ports_for_component\n        else DISCOVERY_PORT_NUM\n    )\n\n    used_port_assignments = {\n        constants.TCP_DISCOVERY_PORT_ID: discovery_port_tcp,\n        constants.UDP_DISCOVERY_PORT_ID: discovery_port_udp,\n        constants.ENGINE_RPC_PORT_ID: ENGINE_RPC_PORT_NUM,\n        constants.RPC_PORT_ID: RPC_PORT_NUM,\n        constants.WS_PORT_ID: WS_PORT_NUM,\n        constants.METRICS_PORT_ID: METRICS_PORT_NUM,\n    }\n    used_ports = shared_utils.get_port_specs(used_port_assignments)\n\n    cmd = [\n        \"--host=0.0.0.0\",\n        \"--port={0}\".format(ENGINE_RPC_PORT_NUM),\n        \"--rpc-port={0}\".format(RPC_PORT_NUM),\n        \"--ws-port={0}\".format(WS_PORT_NUM),\n        \"--metrics-port={0}\".format(METRICS_PORT_NUM),\n        \"--p2p-port={0}\".format(discovery_port_tcp),\n        \"--jwt-secret=\" + constants.JWT_MOUNT_PATH_ON_CONTAINER,\n    ]\n\n    if len(participant.el_extra_params) > 0:\n        # this is a repeated<proto type>, we convert it into Starlark\n        cmd.extend([param for param in participant.el_extra_params])\n\n    files = {\n        constants.GENESIS_DATA_MOUNTPOINT_ON_CLIENTS: launcher.el_cl_genesis_data.files_artifact_uuid,\n        constants.JWT_MOUNTPOINT_ON_CLIENTS: launcher.jwt_file,\n    }\n\n    # Add extra mounts - automatically handle file uploads\n    processed_mounts = shared_utils.process_extra_mounts(\n        plan, participant.el_extra_mounts, extra_files_artifacts\n    )\n    for mount_path, artifact in processed_mounts.items():\n        files[mount_path] = artifact\n\n    # Binary injection - mount custom binary directory if provided\n    if el_binary_artifact != None:\n        files[\"/opt/bin\"] = el_binary_artifact.artifact\n\n    env_vars = participant.el_extra_env_vars\n    if \"RUST_LOG\" not in env_vars:\n        env_vars = env_vars | {\"RUST_LOG\": log_level}\n\n    config_args = {\n        \"image\": participant.el_image,\n        \"ports\": used_ports,\n        \"public_ports\": public_ports,\n        \"publish_udp\": port_publisher.el_enabled,\n        \"cmd\": cmd,\n        \"files\": files,\n        \"private_ip_address_placeholder\": constants.PRIVATE_IP_ADDRESS_PLACEHOLDER,\n        \"env_vars\": env_vars,\n        \"labels\": shared_utils.label_maker(\n            client=constants.EL_TYPE.dummy,\n            client_type=constants.CLIENT_TYPES.el,\n            image=participant.el_image[-constants.MAX_LABEL_LENGTH :],\n            connected_client=cl_client_name,\n            extra_labels=participant.el_extra_labels\n            | {constants.NODE_INDEX_LABEL_KEY: str(participant_index + 1)},\n            supernode=participant.supernode,\n        ),\n        \"tolerations\": tolerations,\n        \"node_selectors\": node_selectors,\n    }\n\n    # Binary injection - override entrypoint and cmd only when binary is provided\n    if el_binary_artifact != None:\n        config_args[\"entrypoint\"] = [\"sh\", \"-c\"]\n        config_args[\"cmd\"] = [\n            \"cp /opt/bin/{0} /usr/local/bin/dummy && dummy \".format(\n                el_binary_artifact.filename\n            )\n            + \" \".join(cmd)\n        ]\n\n    if participant.el_min_cpu > 0:\n        config_args[\"min_cpu\"] = participant.el_min_cpu\n    if participant.el_max_cpu > 0:\n        config_args[\"max_cpu\"] = participant.el_max_cpu\n    if participant.el_min_mem > 0:\n        config_args[\"min_memory\"] = participant.el_min_mem\n    if participant.el_max_mem > 0:\n        config_args[\"max_memory\"] = participant.el_max_mem\n    if len(participant.el_devices) > 0:\n        config_args[\"devices\"] = participant.el_devices\n    return ServiceConfig(**config_args)\n\n\ndef get_el_context(\n    plan,\n    service_name,\n    service,\n    launcher,\n):\n    enode, enr = el_admin_node_info.get_enode_enr_for_node(\n        plan, service_name, constants.RPC_PORT_ID\n    )\n\n    http_url = \"http://{0}:{1}\".format(service.name, RPC_PORT_NUM)\n    ws_url = \"ws://{0}:{1}\".format(service.name, WS_PORT_NUM)\n\n    return el_context.new_el_context(\n        client_name=constants.EL_TYPE.dummy,\n        enode=enode,\n        dns_name=service.name,\n        rpc_port_num=RPC_PORT_NUM,\n        ws_port_num=WS_PORT_NUM,\n        engine_rpc_port_num=ENGINE_RPC_PORT_NUM,\n        rpc_http_url=http_url,\n        ws_url=ws_url,\n        enr=enr,\n        service_name=service_name,\n        el_metrics_info=[],\n        ip_addr=service.ip_address,\n    )\n\n\ndef new_dummy_launcher(el_cl_genesis_data, jwt_file):\n    return struct(\n        el_cl_genesis_data=el_cl_genesis_data,\n        jwt_file=jwt_file,\n    )\n"
  },
  {
    "path": "src/el/el_admin_node_info.star",
    "content": "def get_enode_enr_for_node(plan, service_name, port_id):\n    recipe = PostHttpRequestRecipe(\n        endpoint=\"\",\n        body='{\"method\":\"admin_nodeInfo\",\"params\":[],\"id\":1,\"jsonrpc\":\"2.0\"}',\n        content_type=\"application/json\",\n        port_id=port_id,\n        extract={\n            \"enode\": \"\"\".result.enode | split(\"?\") | .[0]\"\"\",\n            \"enr\": \".result.enr\",\n        },\n    )\n    response = plan.wait(\n        recipe=recipe,\n        field=\"extract.enode\",\n        assertion=\"!=\",\n        target_value=\"\",\n        timeout=\"30m\",\n        service_name=service_name,\n    )\n    return (response[\"extract.enode\"], response[\"extract.enr\"])\n\n\ndef get_enode_for_node(plan, service_name, port_id):\n    recipe = PostHttpRequestRecipe(\n        endpoint=\"\",\n        body='{\"method\":\"admin_nodeInfo\",\"params\":[],\"id\":1,\"jsonrpc\":\"2.0\"}',\n        content_type=\"application/json\",\n        port_id=port_id,\n        extract={\n            \"enode\": \"\"\".result.enode | split(\"?\") | .[0]\"\"\",\n        },\n    )\n    response = plan.wait(\n        recipe=recipe,\n        field=\"extract.enode\",\n        assertion=\"!=\",\n        target_value=\"\",\n        timeout=\"30m\",\n        service_name=service_name,\n    )\n    return response[\"extract.enode\"]\n"
  },
  {
    "path": "src/el/el_context.star",
    "content": "def new_el_context(\n    client_name,\n    enode,\n    dns_name,\n    rpc_port_num,\n    ws_port_num,\n    engine_rpc_port_num,\n    rpc_http_url,\n    ws_url=\"\",\n    enr=\"\",\n    service_name=\"\",\n    el_metrics_info=None,\n    ip_addr=\"\",\n):\n    return struct(\n        client_name=client_name,\n        enode=enode,\n        dns_name=dns_name,\n        rpc_port_num=rpc_port_num,\n        ws_port_num=ws_port_num,\n        engine_rpc_port_num=engine_rpc_port_num,\n        rpc_http_url=rpc_http_url,\n        ws_url=ws_url,\n        enr=enr,\n        service_name=service_name,\n        el_metrics_info=el_metrics_info,\n        ip_addr=ip_addr,\n    )\n"
  },
  {
    "path": "src/el/el_launcher.star",
    "content": "constants = import_module(\"../package_io/constants.star\")\ninput_parser = import_module(\"../package_io/input_parser.star\")\nshared_utils = import_module(\"../shared_utils/shared_utils.star\")\nel_context_l = import_module(\"./el_context.star\")\nel_admin_node_info = import_module(\"./el_admin_node_info.star\")\nnode_metrics = import_module(\"../node_metrics_info.star\")\n\ngeth = import_module(\"./geth/geth_launcher.star\")\nbesu = import_module(\"./besu/besu_launcher.star\")\nerigon = import_module(\"./erigon/erigon_launcher.star\")\nnethermind = import_module(\"./nethermind/nethermind_launcher.star\")\nreth = import_module(\"./reth/reth_launcher.star\")\nethereumjs = import_module(\"./ethereumjs/ethereumjs_launcher.star\")\nnimbus_eth1 = import_module(\"./nimbus-eth1/nimbus_launcher.star\")\nethrex = import_module(\"./ethrex/ethrex_launcher.star\")\ndummy = import_module(\"./dummy/dummy_launcher.star\")\n\n\ndef launch(\n    plan,\n    network_params,\n    el_cl_data,\n    jwt_file,\n    participants,\n    global_log_level,\n    global_node_selectors,\n    global_tolerations,\n    persistent,\n    network_id,\n    num_participants,\n    port_publisher,\n    mev_builder_type,\n    mev_params,\n    extra_files_artifacts={},\n    bootnodoor_enode=None,\n    binary_artifacts={},\n):\n    el_launchers = {\n        constants.EL_TYPE.geth: {\n            \"launcher\": geth.new_geth_launcher(\n                el_cl_data,\n                jwt_file,\n                network_id,\n            ),\n            \"launch_method\": geth.launch,\n            \"get_config\": geth.get_config,\n            \"get_el_context\": geth.get_el_context,\n        },\n        constants.EL_TYPE.besu: {\n            \"launcher\": besu.new_besu_launcher(\n                el_cl_data,\n                jwt_file,\n            ),\n            \"launch_method\": besu.launch,\n            \"get_config\": besu.get_config,\n            \"get_el_context\": besu.get_el_context,\n        },\n        constants.EL_TYPE.erigon: {\n            \"launcher\": erigon.new_erigon_launcher(\n                el_cl_data,\n                jwt_file,\n                network_id,\n            ),\n            \"launch_method\": erigon.launch,\n            \"get_config\": erigon.get_config,\n            \"get_el_context\": erigon.get_el_context,\n        },\n        constants.EL_TYPE.nethermind: {\n            \"launcher\": nethermind.new_nethermind_launcher(\n                el_cl_data,\n                jwt_file,\n            ),\n            \"launch_method\": nethermind.launch,\n            \"get_config\": nethermind.get_config,\n            \"get_el_context\": nethermind.get_el_context,\n        },\n        constants.EL_TYPE.reth: {\n            \"launcher\": reth.new_reth_launcher(\n                el_cl_data,\n                jwt_file,\n            ),\n            \"launch_method\": reth.launch,\n            \"get_config\": reth.get_config,\n            \"get_el_context\": reth.get_el_context,\n        },\n        constants.EL_TYPE.reth_builder: {\n            \"launcher\": reth.new_reth_launcher(\n                el_cl_data,\n                jwt_file,\n                builder_type=mev_builder_type,\n                mev_params=mev_params,\n            ),\n            \"launch_method\": reth.launch,\n            \"get_config\": reth.get_config,\n            \"get_el_context\": reth.get_el_context,\n        },\n        constants.EL_TYPE.ethereumjs: {\n            \"launcher\": ethereumjs.new_ethereumjs_launcher(\n                el_cl_data,\n                jwt_file,\n            ),\n            \"launch_method\": ethereumjs.launch,\n            \"get_config\": ethereumjs.get_config,\n            \"get_el_context\": ethereumjs.get_el_context,\n        },\n        constants.EL_TYPE.nimbus: {\n            \"launcher\": nimbus_eth1.new_nimbus_launcher(\n                el_cl_data,\n                jwt_file,\n            ),\n            \"launch_method\": nimbus_eth1.launch,\n            \"get_config\": nimbus_eth1.get_config,\n            \"get_el_context\": nimbus_eth1.get_el_context,\n        },\n        constants.EL_TYPE.ethrex: {\n            \"launcher\": ethrex.new_ethrex_launcher(\n                el_cl_data,\n                jwt_file,\n            ),\n            \"get_config\": ethrex.get_config,\n            \"get_el_context\": ethrex.get_el_context,\n            \"launch_method\": ethrex.launch,\n        },\n        constants.EL_TYPE.dummy: {\n            \"launcher\": dummy.new_dummy_launcher(\n                el_cl_data,\n                jwt_file,\n            ),\n            \"launch_method\": dummy.launch,\n            \"get_config\": dummy.get_config,\n            \"get_el_context\": dummy.get_el_context,\n        },\n    }\n\n    all_el_contexts = []\n    network_name = shared_utils.get_network_name(network_params.network)\n    el_service_configs = {}\n    el_participant_info = {}\n\n    # Generic bootnode ENODE override - can be set from bootnodoor or any other bootnode service\n    if bootnodoor_enode != None:\n        plan.print(\n            \"Using bootnode ENODE override for all EL clients: {0}\".format(\n                bootnodoor_enode\n            )\n        )\n\n    for index, participant in enumerate(participants):\n        cl_type = participant.cl_type\n        el_type = participant.el_type\n        node_selectors = input_parser.get_client_node_selectors(\n            participant.node_selectors,\n            global_node_selectors,\n        )\n        tolerations = shared_utils.get_tolerations(\n            specific_container_tolerations=participant.el_tolerations,\n            participant_tolerations=participant.tolerations,\n            global_tolerations=global_tolerations,\n        )\n\n        if el_type not in el_launchers:\n            fail(\n                \"Unsupported launcher '{0}', need one of '{1}'\".format(\n                    el_type, \",\".join(el_launchers.keys())\n                )\n            )\n\n        el_launcher, launch_method, get_config = (\n            el_launchers[el_type][\"launcher\"],\n            el_launchers[el_type][\"launch_method\"],\n            el_launchers[el_type][\"get_config\"],\n        )\n\n        # Zero-pad the index using the calculated zfill value\n        index_str = shared_utils.zfill_custom(index + 1, len(str(len(participants))))\n\n        el_service_name = \"el-{0}-{1}-{2}\".format(index_str, el_type, cl_type)\n        el_binary_artifact = binary_artifacts.get(index, {}).get(\"el\", None)\n\n        if index == 0:\n            el_context = launch_method(\n                plan,\n                el_launcher,\n                el_service_name,\n                participant,\n                global_log_level,\n                all_el_contexts,\n                persistent,\n                tolerations,\n                node_selectors,\n                port_publisher,\n                index,\n                network_params,\n                extra_files_artifacts,\n                bootnodoor_enode,\n                el_binary_artifact,\n            )\n\n            # Add participant el additional prometheus metrics\n            for metrics_info in el_context.el_metrics_info:\n                if metrics_info != None:\n                    metrics_info[\"config\"] = participant.prometheus_config\n\n            all_el_contexts.append(el_context)\n        else:\n            el_service_configs[el_service_name] = get_config(\n                plan,\n                el_launcher,\n                participant,\n                el_service_name,\n                all_el_contexts,\n                cl_type,\n                global_log_level,\n                persistent,\n                tolerations,\n                node_selectors,\n                port_publisher,\n                index,\n                network_params,\n                extra_files_artifacts,\n                bootnodoor_enode,\n                el_binary_artifact,\n            )\n\n            el_participant_info[el_service_name] = {\n                \"client_name\": el_type,\n                \"supernode\": participant.supernode,\n                \"participant_index\": index,\n                \"participant\": participant,\n            }\n\n    # add remainder of el's in parallel to speed package execution\n    el_services = shared_utils.add_services_with_force_restart(\n        plan, el_service_configs, el_participant_info, \"el_force_restart\"\n    )\n\n    # Create contexts ordered by participant index\n    el_contexts_temp = {}\n    for el_service_name, el_service in el_services.items():\n        el_type = el_participant_info[el_service_name][\"client_name\"]\n        participant_index = el_participant_info[el_service_name][\"participant_index\"]\n        participant = el_participant_info[el_service_name][\"participant\"]\n        get_el_context = el_launchers[el_type][\"get_el_context\"]\n\n        el_context = get_el_context(\n            plan,\n            el_service_name,\n            el_service,\n            el_launchers[el_type][\"launcher\"],\n        )\n\n        # Add participant el additional prometheus metrics\n        for metrics_info in el_context.el_metrics_info:\n            if metrics_info != None:\n                metrics_info[\"config\"] = participant.prometheus_config\n\n        el_contexts_temp[participant_index] = el_context\n\n    # Add remaining EL contexts in participant order (skipping index 0 which was added earlier)\n    for i in range(1, len(participants)):\n        if i in el_contexts_temp:\n            all_el_contexts.append(el_contexts_temp[i])\n\n    plan.print(\"Successfully added {0} EL participants\".format(num_participants))\n    return all_el_contexts\n"
  },
  {
    "path": "src/el/el_shared.star",
    "content": "shared_utils = import_module(\"../shared_utils/shared_utils.star\")\nconstants = import_module(\"../package_io/constants.star\")\n\n\ndef get_general_el_public_port_specs(public_ports_for_component):\n    public_port_assignments = {\n        constants.TCP_DISCOVERY_PORT_ID: public_ports_for_component[0],\n        constants.UDP_DISCOVERY_PORT_ID: public_ports_for_component[0],\n        constants.ENGINE_RPC_PORT_ID: public_ports_for_component[1],\n        constants.METRICS_PORT_ID: public_ports_for_component[2],\n    }\n    public_ports = shared_utils.get_port_specs(public_port_assignments)\n    return public_ports\n"
  },
  {
    "path": "src/el/erigon/erigon_launcher.star",
    "content": "shared_utils = import_module(\"../../shared_utils/shared_utils.star\")\ninput_parser = import_module(\"../../package_io/input_parser.star\")\nel_admin_node_info = import_module(\"../../el/el_admin_node_info.star\")\nel_context = import_module(\"../../el/el_context.star\")\nel_shared = import_module(\"../el_shared.star\")\nnode_metrics = import_module(\"../../node_metrics_info.star\")\nconstants = import_module(\"../../package_io/constants.star\")\n\n# The dirpath of the execution data directory on the client container\nEXECUTION_DATA_DIRPATH_ON_CLIENT_CONTAINER = \"/data/erigon/execution-data\"\n\nMETRICS_PATH = \"/metrics\"\n\nWS_RPC_PORT_NUM = 8545\nDISCOVERY_PORT_NUM = 30303\nENGINE_RPC_PORT_NUM = 8551\nMETRICS_PORT_NUM = 9001\nTORRENT_PORT_NUM = 42069\n\nENTRYPOINT_ARGS = [\"sh\", \"-c\"]\n\nVERBOSITY_LEVELS = {\n    constants.GLOBAL_LOG_LEVEL.error: \"1\",\n    constants.GLOBAL_LOG_LEVEL.warn: \"2\",\n    constants.GLOBAL_LOG_LEVEL.info: \"3\",\n    constants.GLOBAL_LOG_LEVEL.debug: \"4\",\n    constants.GLOBAL_LOG_LEVEL.trace: \"5\",\n}\n\n\ndef launch(\n    plan,\n    launcher,\n    service_name,\n    participant,\n    global_log_level,\n    existing_el_clients,\n    persistent,\n    tolerations,\n    node_selectors,\n    port_publisher,\n    participant_index,\n    network_params,\n    extra_files_artifacts,\n    bootnodoor_enode=None,\n    el_binary_artifact=None,\n):\n    cl_client_name = service_name.split(\"-\")[3]\n\n    config = get_config(\n        plan,\n        launcher,\n        participant,\n        service_name,\n        existing_el_clients,\n        cl_client_name,\n        global_log_level,\n        persistent,\n        tolerations,\n        node_selectors,\n        port_publisher,\n        participant_index,\n        network_params,\n        extra_files_artifacts,\n        bootnodoor_enode,\n        el_binary_artifact,\n    )\n\n    service = plan.add_service(\n        service_name, config, force_update=participant.el_force_restart\n    )\n\n    return get_el_context(\n        plan,\n        service_name,\n        service,\n        launcher,\n    )\n\n\ndef get_config(\n    plan,\n    launcher,\n    participant,\n    service_name,\n    existing_el_clients,\n    cl_client_name,\n    global_log_level,\n    persistent,\n    tolerations,\n    node_selectors,\n    port_publisher,\n    participant_index,\n    network_params,\n    extra_files_artifacts,\n    bootnodoor_enode=None,\n    el_binary_artifact=None,\n):\n    log_level = input_parser.get_client_log_level_or_default(\n        participant.el_log_level, global_log_level, VERBOSITY_LEVELS\n    )\n\n    init_datadir_cmd_str = \"erigon init --datadir={0} {1}\".format(\n        EXECUTION_DATA_DIRPATH_ON_CLIENT_CONTAINER,\n        constants.GENESIS_CONFIG_MOUNT_PATH_ON_CONTAINER + \"/genesis.json\",\n    )\n\n    public_ports = {}\n    public_ports_for_component = None\n    if port_publisher.el_enabled:\n        public_ports_for_component = shared_utils.get_public_ports_for_component(\n            \"el\", port_publisher, participant_index\n        )\n        public_ports = el_shared.get_general_el_public_port_specs(\n            public_ports_for_component\n        )\n        additional_public_port_assignments = {\n            constants.WS_RPC_PORT_ID: public_ports_for_component[3],\n            constants.TORRENT_PORT_ID: public_ports_for_component[4],\n        }\n        public_ports.update(\n            shared_utils.get_port_specs(additional_public_port_assignments)\n        )\n\n    discovery_port_tcp = (\n        public_ports_for_component[0]\n        if public_ports_for_component\n        else DISCOVERY_PORT_NUM\n    )\n    discovery_port_udp = (\n        public_ports_for_component[0]\n        if public_ports_for_component\n        else DISCOVERY_PORT_NUM\n    )\n    torrent_port = (\n        public_ports_for_component[4]\n        if public_ports_for_component\n        else TORRENT_PORT_NUM\n    )\n\n    used_port_assignments = {\n        constants.TCP_DISCOVERY_PORT_ID: discovery_port_tcp,\n        constants.UDP_DISCOVERY_PORT_ID: discovery_port_udp,\n        constants.ENGINE_RPC_PORT_ID: ENGINE_RPC_PORT_NUM,\n        constants.WS_RPC_PORT_ID: WS_RPC_PORT_NUM,\n        constants.METRICS_PORT_ID: METRICS_PORT_NUM,\n        constants.TORRENT_PORT_ID: torrent_port,\n    }\n    used_ports = shared_utils.get_port_specs(used_port_assignments)\n\n    cmd = [\n        \"erigon\",\n        \"--networkid={0}\".format(launcher.networkid),\n        \"--log.console.verbosity=\" + log_level,\n        \"--datadir=\" + EXECUTION_DATA_DIRPATH_ON_CLIENT_CONTAINER,\n        \"--port={0}\".format(discovery_port_tcp),\n        \"--http.api=eth,erigon,engine,web3,net,debug,trace,txpool,admin\",\n        \"--http.vhosts=*\",\n        \"--ws\",\n        \"--allow-insecure-unlock\",\n        \"--nat=extip:\" + port_publisher.el_nat_exit_ip,\n        \"--http\",\n        \"--http.addr=0.0.0.0\",\n        \"--http.corsdomain=*\",\n        \"--http.port={0}\".format(WS_RPC_PORT_NUM),\n        \"--authrpc.jwtsecret=\" + constants.JWT_MOUNT_PATH_ON_CONTAINER,\n        \"--authrpc.addr=0.0.0.0\",\n        \"--authrpc.port={0}\".format(ENGINE_RPC_PORT_NUM),\n        \"--authrpc.vhosts=*\",\n        \"--externalcl\",\n        \"--metrics\",\n        \"--metrics.addr=0.0.0.0\",\n        \"--metrics.port={0}\".format(METRICS_PORT_NUM),\n        \"--torrent.port={0}\".format(torrent_port),\n    ]\n\n    # Configure storage type - erigon defaults to archive, use --prune.mode=full for full node\n    if participant.el_storage_type == \"full\":\n        cmd.append(\"--prune.mode=full\")\n\n    if network_params.gas_limit > 0:\n        cmd.append(\"--miner.gaslimit={0}\".format(network_params.gas_limit))\n\n    if constants.NETWORK_NAME.shadowfork in network_params.network:  # shadowfork\n        cmd.append(\"--keep.stored.chain.config=true\")\n\n    files = {\n        constants.GENESIS_DATA_MOUNTPOINT_ON_CLIENTS: launcher.el_cl_genesis_data.files_artifact_uuid,\n        constants.JWT_MOUNTPOINT_ON_CLIENTS: launcher.jwt_file,\n    }\n\n    if persistent:\n        volume_size_key = (\n            \"devnets\" if \"devnet\" in network_params.network else network_params.network\n        )\n        cmd.append(\n            \"--db.size.limit={0}MB\".format(\n                int(participant.el_volume_size)\n                if int(participant.el_volume_size) > 0\n                else constants.VOLUME_SIZE[volume_size_key][\n                    constants.EL_TYPE.erigon + \"_volume_size\"\n                ],\n            )\n        )\n        files[EXECUTION_DATA_DIRPATH_ON_CLIENT_CONTAINER] = Directory(\n            persistent_key=\"data-{0}\".format(service_name),\n            size=int(participant.el_volume_size)\n            if int(participant.el_volume_size) > 0\n            else constants.VOLUME_SIZE[volume_size_key][\n                constants.EL_TYPE.erigon + \"_volume_size\"\n            ],\n        )\n\n    # Add extra mounts - automatically handle file uploads\n    processed_mounts = shared_utils.process_extra_mounts(\n        plan, participant.el_extra_mounts, extra_files_artifacts\n    )\n    for mount_path, artifact in processed_mounts.items():\n        files[mount_path] = artifact\n\n    # Handle bootnode configuration with bootnodoor_enode override\n    if bootnodoor_enode != None:\n        cmd.append(\"--bootnodes=\" + bootnodoor_enode)\n    elif (\n        network_params.network == constants.NETWORK_NAME.kurtosis\n        or constants.NETWORK_NAME.shadowfork in network_params.network\n    ):\n        if len(existing_el_clients) > 0:\n            cmd.append(\n                \"--bootnodes=\"\n                + \",\".join(\n                    [\n                        ctx.enode\n                        for ctx in existing_el_clients[: constants.MAX_ENODE_ENTRIES]\n                    ]\n                )\n            )\n    elif (\n        network_params.network not in constants.PUBLIC_NETWORKS\n        and constants.NETWORK_NAME.shadowfork not in network_params.network\n    ):\n        cmd.append(\n            \"--bootnodes=\"\n            + shared_utils.get_devnet_enodes(\n                plan, launcher.el_cl_genesis_data.files_artifact_uuid\n            )\n        )\n\n    if len(participant.el_extra_params) > 0:\n        cmd.extend([param for param in participant.el_extra_params])\n\n    # Binary injection - mount custom binary directory if provided\n    if el_binary_artifact != None:\n        files[\"/opt/bin\"] = el_binary_artifact.artifact\n\n    # Build command with optional binary copy\n    cmd_str = \" \".join(cmd)\n    if network_params.network not in constants.PUBLIC_NETWORKS:\n        if el_binary_artifact != None:\n            command_arg_str = (\n                init_datadir_cmd_str\n                + \" && cp /opt/bin/{0} /usr/local/bin/erigon && \".format(\n                    el_binary_artifact.filename\n                )\n                + cmd_str\n            )\n        else:\n            command_arg_str = init_datadir_cmd_str + \" && \" + cmd_str\n    else:\n        if el_binary_artifact != None:\n            command_arg_str = (\n                \"cp /opt/bin/{0} /usr/local/bin/erigon && \".format(\n                    el_binary_artifact.filename\n                )\n                + cmd_str\n            )\n        else:\n            command_arg_str = cmd_str\n\n    env_vars = participant.el_extra_env_vars\n    config_args = {\n        \"image\": participant.el_image,\n        \"ports\": used_ports,\n        \"public_ports\": public_ports,\n        \"publish_udp\": port_publisher.el_enabled,\n        \"cmd\": [command_arg_str],\n        \"files\": files,\n        \"entrypoint\": ENTRYPOINT_ARGS,\n        \"private_ip_address_placeholder\": constants.PRIVATE_IP_ADDRESS_PLACEHOLDER,\n        \"env_vars\": env_vars,\n        \"labels\": shared_utils.label_maker(\n            client=constants.EL_TYPE.erigon,\n            client_type=constants.CLIENT_TYPES.el,\n            image=participant.el_image[-constants.MAX_LABEL_LENGTH :],\n            connected_client=cl_client_name,\n            extra_labels=participant.el_extra_labels\n            | {constants.NODE_INDEX_LABEL_KEY: str(participant_index + 1)},\n            supernode=participant.supernode,\n        ),\n        \"tolerations\": tolerations,\n        \"node_selectors\": node_selectors,\n        \"user\": User(uid=0, gid=0),\n    }\n\n    if participant.el_min_cpu > 0:\n        config_args[\"min_cpu\"] = participant.el_min_cpu\n    if participant.el_max_cpu > 0:\n        config_args[\"max_cpu\"] = participant.el_max_cpu\n    if participant.el_min_mem > 0:\n        config_args[\"min_memory\"] = participant.el_min_mem\n    if participant.el_max_mem > 0:\n        config_args[\"max_memory\"] = participant.el_max_mem\n    if len(participant.el_devices) > 0:\n        config_args[\"devices\"] = participant.el_devices\n    return ServiceConfig(**config_args)\n\n\n# makes request to [service_name] for enode and enr and returns a full el_context\ndef get_el_context(\n    plan,\n    service_name,\n    service,\n    launcher,\n):\n    enode, enr = el_admin_node_info.get_enode_enr_for_node(\n        plan, service_name, constants.WS_RPC_PORT_ID\n    )\n\n    metrics_url = \"{0}:{1}\".format(service.name, METRICS_PORT_NUM)\n    erigon_metrics_info = node_metrics.new_node_metrics_info(\n        service_name, METRICS_PATH, metrics_url\n    )\n\n    http_url = \"http://{0}:{1}\".format(service.name, WS_RPC_PORT_NUM)\n    ws_url = \"ws://{0}:{1}\".format(service.name, WS_RPC_PORT_NUM)\n\n    return el_context.new_el_context(\n        client_name=\"erigon\",\n        enode=enode,\n        dns_name=service.name,\n        rpc_port_num=WS_RPC_PORT_NUM,\n        ws_port_num=WS_RPC_PORT_NUM,\n        engine_rpc_port_num=ENGINE_RPC_PORT_NUM,\n        rpc_http_url=http_url,\n        ws_url=ws_url,\n        enr=enr,\n        service_name=service_name,\n        el_metrics_info=[erigon_metrics_info],\n        ip_addr=service.ip_address,\n    )\n\n\ndef new_erigon_launcher(el_cl_genesis_data, jwt_file, networkid):\n    return struct(\n        el_cl_genesis_data=el_cl_genesis_data,\n        jwt_file=jwt_file,\n        networkid=networkid,\n    )\n"
  },
  {
    "path": "src/el/ethereumjs/ethereumjs_launcher.star",
    "content": "shared_utils = import_module(\"../../shared_utils/shared_utils.star\")\ninput_parser = import_module(\"../..//package_io/input_parser.star\")\nel_context = import_module(\"../../el/el_context.star\")\nel_admin_node_info = import_module(\"../../el/el_admin_node_info.star\")\nel_shared = import_module(\"../el_shared.star\")\nnode_metrics = import_module(\"../../node_metrics_info.star\")\nconstants = import_module(\"../../package_io/constants.star\")\n\nRPC_PORT_NUM = 8545\nWS_PORT_NUM = 8546\nWS_PORT_ENGINE_NUM = 8547\nDISCOVERY_PORT_NUM = 30303\nENGINE_RPC_PORT_NUM = 8551\nMETRICS_PORT_NUM = 9001\nDEBUG_PORT_NUM = 9229\n\nMETRICS_PATH = \"/metrics\"\n\n# The dirpath of the execution data directory on the client container\nEXECUTION_DATA_DIRPATH_ON_CLIENT_CONTAINER = \"/data/ethereumjs/execution-data\"\n\nENTRYPOINT_ARGS = []\n\nVERBOSITY_LEVELS = {\n    constants.GLOBAL_LOG_LEVEL.error: \"error\",\n    constants.GLOBAL_LOG_LEVEL.warn: \"warn\",\n    constants.GLOBAL_LOG_LEVEL.info: \"info\",\n    constants.GLOBAL_LOG_LEVEL.debug: \"debug\",\n    constants.GLOBAL_LOG_LEVEL.trace: \"trace\",\n}\n\n\ndef launch(\n    plan,\n    launcher,\n    service_name,\n    participant,\n    global_log_level,\n    existing_el_clients,\n    persistent,\n    tolerations,\n    node_selectors,\n    port_publisher,\n    participant_index,\n    network_params,\n    extra_files_artifacts,\n    bootnodoor_enode=None,\n    el_binary_artifact=None,\n):\n    cl_client_name = service_name.split(\"-\")[3]\n\n    config = get_config(\n        plan,\n        launcher,\n        participant,\n        service_name,\n        existing_el_clients,\n        cl_client_name,\n        global_log_level,\n        persistent,\n        tolerations,\n        node_selectors,\n        port_publisher,\n        participant_index,\n        network_params,\n        extra_files_artifacts,\n        bootnodoor_enode,\n        el_binary_artifact,\n    )\n\n    service = plan.add_service(\n        service_name, config, force_update=participant.el_force_restart\n    )\n\n    return get_el_context(\n        plan,\n        service_name,\n        service,\n        launcher,\n    )\n\n\ndef get_config(\n    plan,\n    launcher,\n    participant,\n    service_name,\n    existing_el_clients,\n    cl_client_name,\n    global_log_level,\n    persistent,\n    tolerations,\n    node_selectors,\n    port_publisher,\n    participant_index,\n    network_params,\n    extra_files_artifacts,\n    bootnodoor_enode=None,\n    el_binary_artifact=None,\n):\n    log_level = input_parser.get_client_log_level_or_default(\n        participant.el_log_level, global_log_level, VERBOSITY_LEVELS\n    )\n\n    public_ports = {}\n    public_ports_for_component = None\n    if port_publisher.el_enabled:\n        public_ports_for_component = shared_utils.get_public_ports_for_component(\n            \"el\", port_publisher, participant_index\n        )\n        public_ports = el_shared.get_general_el_public_port_specs(\n            public_ports_for_component\n        )\n        additional_public_port_assignments = {\n            constants.RPC_PORT_ID: public_ports_for_component[3],\n            constants.WS_PORT_ID: public_ports_for_component[4],\n            constants.ENGINE_WS_PORT_ID: public_ports_for_component[5],\n        }\n\n        if \"--inspect\" in participant.el_extra_env_vars.get(\"NODE_OPTIONS\", \"\"):\n            additional_public_port_assignments[\n                constants.DEBUG_PORT_ID\n            ] = public_ports_for_component[6]\n\n        public_ports.update(\n            shared_utils.get_port_specs(additional_public_port_assignments)\n        )\n\n    discovery_port_tcp = (\n        public_ports_for_component[0]\n        if public_ports_for_component\n        else DISCOVERY_PORT_NUM\n    )\n    discovery_port_udp = (\n        public_ports_for_component[0]\n        if public_ports_for_component\n        else DISCOVERY_PORT_NUM\n    )\n\n    used_port_assignments = {\n        constants.TCP_DISCOVERY_PORT_ID: discovery_port_tcp,\n        constants.UDP_DISCOVERY_PORT_ID: discovery_port_udp,\n        constants.ENGINE_RPC_PORT_ID: ENGINE_RPC_PORT_NUM,\n        constants.METRICS_PORT_ID: METRICS_PORT_NUM,\n        constants.RPC_PORT_ID: RPC_PORT_NUM,\n        constants.WS_PORT_ID: WS_PORT_NUM,\n        constants.ENGINE_WS_PORT_ID: WS_PORT_ENGINE_NUM,\n    }\n\n    if \"--inspect\" in participant.el_extra_env_vars.get(\"NODE_OPTIONS\", \"\"):\n        used_port_assignments[constants.DEBUG_PORT_ID] = DEBUG_PORT_NUM\n\n    used_ports = shared_utils.get_port_specs(used_port_assignments)\n\n    cmd = [\n        \"--dataDir=\" + EXECUTION_DATA_DIRPATH_ON_CLIENT_CONTAINER,\n        \"--port={0}\".format(discovery_port_tcp),\n        \"--rpc\",\n        \"--rpcAddr=0.0.0.0\",\n        \"--rpcPort={0}\".format(RPC_PORT_NUM),\n        \"--rpcCors=*\",\n        \"--rpcEngine\",\n        \"--rpcEngineAddr=0.0.0.0\",\n        \"--rpcEnginePort={0}\".format(ENGINE_RPC_PORT_NUM),\n        \"--ws\",\n        \"--wsAddr=0.0.0.0\",\n        \"--wsPort={0}\".format(WS_PORT_NUM),\n        \"--wsEnginePort={0}\".format(WS_PORT_ENGINE_NUM),\n        \"--wsEngineAddr=0.0.0.0\",\n        \"--jwt-secret=\" + constants.JWT_MOUNT_PATH_ON_CONTAINER,\n        \"--extIP={0}\".format(port_publisher.el_nat_exit_ip),\n        \"--sync=full\",\n        \"--isSingleNode=true\",\n        \"--logLevel={0}\".format(log_level),\n        \"--prometheus\",\n        \"--prometheusPort={0}\".format(METRICS_PORT_NUM),\n    ]\n\n    if network_params.network not in constants.PUBLIC_NETWORKS:\n        cmd.append(\n            \"--gethGenesis=\"\n            + constants.GENESIS_CONFIG_MOUNT_PATH_ON_CONTAINER\n            + \"/genesis.json\",\n        )\n    else:\n        cmd.append(\"--network=\" + network_params.network)\n\n    # Handle bootnode configuration with bootnodoor_enode override\n    if bootnodoor_enode != None:\n        cmd.append(\"--bootnodes=\" + bootnodoor_enode)\n    elif (\n        network_params.network == constants.NETWORK_NAME.kurtosis\n        or constants.NETWORK_NAME.shadowfork in network_params.network\n    ):\n        if len(existing_el_clients) > 0:\n            cmd.append(\n                \"--bootnodes=\"\n                + \",\".join(\n                    [\n                        ctx.enode\n                        for ctx in existing_el_clients[: constants.MAX_ENODE_ENTRIES]\n                    ]\n                )\n            )\n    elif (\n        network_params.network not in constants.PUBLIC_NETWORKS\n        and constants.NETWORK_NAME.shadowfork not in network_params.network\n    ):\n        cmd.append(\n            \"--bootnodes=\"\n            + shared_utils.get_devnet_enodes(\n                plan, launcher.el_cl_genesis_data.files_artifact_uuid\n            )\n        )\n\n    if len(participant.el_extra_params) > 0:\n        # this is a repeated<proto type>, we convert it into Starlark\n        cmd.extend([param for param in participant.el_extra_params])\n\n    files = {\n        constants.GENESIS_DATA_MOUNTPOINT_ON_CLIENTS: launcher.el_cl_genesis_data.files_artifact_uuid,\n        constants.JWT_MOUNTPOINT_ON_CLIENTS: launcher.jwt_file,\n    }\n\n    if persistent:\n        volume_size_key = (\n            \"devnets\" if \"devnet\" in network_params.network else network_params.network\n        )\n        files[EXECUTION_DATA_DIRPATH_ON_CLIENT_CONTAINER] = Directory(\n            persistent_key=\"data-{0}\".format(service_name),\n            size=int(participant.el_volume_size)\n            if int(participant.el_volume_size) > 0\n            else constants.VOLUME_SIZE[volume_size_key][\n                constants.EL_TYPE.ethereumjs + \"_volume_size\"\n            ],\n        )\n\n    # Add extra mounts - automatically handle file uploads\n    processed_mounts = shared_utils.process_extra_mounts(\n        plan, participant.el_extra_mounts, extra_files_artifacts\n    )\n    for mount_path, artifact in processed_mounts.items():\n        files[mount_path] = artifact\n\n    # Binary injection - mount custom binary directory if provided\n    if el_binary_artifact != None:\n        files[\"/opt/bin\"] = el_binary_artifact.artifact\n\n    env_vars = participant.el_extra_env_vars\n    config_args = {\n        \"image\": participant.el_image,\n        \"ports\": used_ports,\n        \"public_ports\": public_ports,\n        \"publish_udp\": port_publisher.el_enabled,\n        \"cmd\": cmd,\n        \"files\": files,\n        \"entrypoint\": ENTRYPOINT_ARGS,\n        \"private_ip_address_placeholder\": constants.PRIVATE_IP_ADDRESS_PLACEHOLDER,\n        \"env_vars\": env_vars,\n        \"labels\": shared_utils.label_maker(\n            client=constants.EL_TYPE.ethereumjs,\n            client_type=constants.CLIENT_TYPES.el,\n            image=participant.el_image[-constants.MAX_LABEL_LENGTH :],\n            connected_client=cl_client_name,\n            extra_labels=participant.el_extra_labels\n            | {constants.NODE_INDEX_LABEL_KEY: str(participant_index + 1)},\n            supernode=participant.supernode,\n        ),\n        \"tolerations\": tolerations,\n        \"node_selectors\": node_selectors,\n    }\n\n    # Binary injection - override entrypoint and cmd only when binary is provided\n    if el_binary_artifact != None:\n        config_args[\"entrypoint\"] = [\"sh\", \"-c\"]\n        config_args[\"cmd\"] = [\n            \"cp /opt/bin/{0} /usr/app/packages/client/bin/cli.js && node /usr/app/packages/client/bin/cli.js \".format(\n                el_binary_artifact.filename\n            )\n            + \" \".join(cmd)\n        ]\n\n    if participant.el_min_cpu > 0:\n        config_args[\"min_cpu\"] = participant.el_min_cpu\n    if participant.el_max_cpu > 0:\n        config_args[\"max_cpu\"] = participant.el_max_cpu\n    if participant.el_min_mem > 0:\n        config_args[\"min_memory\"] = participant.el_min_mem\n    if participant.el_max_mem > 0:\n        config_args[\"max_memory\"] = participant.el_max_mem\n    if len(participant.el_devices) > 0:\n        config_args[\"devices\"] = participant.el_devices\n    return ServiceConfig(**config_args)\n\n\n# makes request to [service_name] for enode and returns a full el_context\ndef get_el_context(\n    plan,\n    service_name,\n    service,\n    launcher,\n):\n    enode = el_admin_node_info.get_enode_for_node(\n        plan, service_name, constants.RPC_PORT_ID\n    )\n\n    # TODO: Passing empty string for metrics_url for now https://github.com/ethpandaops/ethereum-package/issues/127\n    # metrics_url = \"http://{0}:{1}\".format(service.name, METRICS_PORT_NUM)\n    ethjs_metrics_info = None\n\n    http_url = \"http://{0}:{1}\".format(service.name, RPC_PORT_NUM)\n    ws_url = \"ws://{0}:{1}\".format(service.name, WS_PORT_NUM)\n\n    return el_context.new_el_context(\n        client_name=\"ethereumjs\",\n        enode=enode,\n        dns_name=service.name,\n        rpc_port_num=RPC_PORT_NUM,\n        ws_port_num=WS_PORT_NUM,\n        engine_rpc_port_num=ENGINE_RPC_PORT_NUM,\n        rpc_http_url=http_url,\n        ws_url=ws_url,\n        service_name=service_name,\n        el_metrics_info=[ethjs_metrics_info],\n        ip_addr=service.ip_address,\n    )\n\n\ndef new_ethereumjs_launcher(el_cl_genesis_data, jwt_file):\n    return struct(\n        el_cl_genesis_data=el_cl_genesis_data,\n        jwt_file=jwt_file,\n    )\n"
  },
  {
    "path": "src/el/ethrex/ethrex_launcher.star",
    "content": "shared_utils = import_module(\"../../shared_utils/shared_utils.star\")\ninput_parser = import_module(\"../../package_io/input_parser.star\")\nel_context = import_module(\"../../el/el_context.star\")\nel_admin_node_info = import_module(\"../../el/el_admin_node_info.star\")\nnode_metrics = import_module(\"../../node_metrics_info.star\")\nconstants = import_module(\"../../package_io/constants.star\")\nel_shared = import_module(\"../el_shared.star\")\n\nRPC_PORT_NUM = 8545\nWS_PORT_NUM = 8546\nDISCOVERY_PORT_NUM = 30303\nENGINE_RPC_PORT_NUM = 8551\nMETRICS_PORT_NUM = 9001\n\n# Paths\nMETRICS_PATH = \"/metrics\"\nEXECUTION_DATA_DIRPATH_ON_CLIENT_CONTAINER = \"/data/ethrex/execution-data\"\n\n\ndef get_used_ports(discovery_port):\n    used_ports = {\n        constants.RPC_PORT_ID: shared_utils.new_port_spec(\n            RPC_PORT_NUM,\n            shared_utils.TCP_PROTOCOL,\n            shared_utils.HTTP_APPLICATION_PROTOCOL,\n        ),\n        constants.ENGINE_RPC_PORT_ID: shared_utils.new_port_spec(\n            ENGINE_RPC_PORT_NUM, shared_utils.TCP_PROTOCOL\n        ),\n        constants.METRICS_PORT_ID: shared_utils.new_port_spec(\n            METRICS_PORT_NUM,\n            shared_utils.TCP_PROTOCOL,\n            shared_utils.HTTP_APPLICATION_PROTOCOL,\n        ),\n    }\n    return used_ports\n\n\nVERBOSITY_LEVELS = {\n    constants.GLOBAL_LOG_LEVEL.error: \"error\",\n    constants.GLOBAL_LOG_LEVEL.warn: \"warn\",\n    constants.GLOBAL_LOG_LEVEL.info: \"info\",\n    constants.GLOBAL_LOG_LEVEL.debug: \"debug\",\n    constants.GLOBAL_LOG_LEVEL.trace: \"trace\",\n}\n\n\ndef launch(\n    plan,\n    launcher,\n    service_name,\n    participant,\n    global_log_level,\n    existing_el_clients,\n    persistent,\n    tolerations,\n    node_selectors,\n    port_publisher,\n    participant_index,\n    network_params,\n    extra_files_artifacts,\n    bootnodoor_enode=None,\n    el_binary_artifact=None,\n):\n    cl_client_name = service_name.split(\"-\")[3]\n\n    config = get_config(\n        plan,\n        launcher,\n        participant,\n        service_name,\n        existing_el_clients,\n        cl_client_name,\n        global_log_level,\n        persistent,\n        tolerations,\n        node_selectors,\n        port_publisher,\n        participant_index,\n        network_params,\n        extra_files_artifacts,\n        bootnodoor_enode,\n        el_binary_artifact,\n    )\n\n    service = plan.add_service(\n        service_name, config, force_update=participant.el_force_restart\n    )\n\n    return get_el_context(\n        plan,\n        service_name,\n        service,\n        launcher,\n    )\n\n\ndef get_config(\n    plan,\n    launcher,\n    participant,\n    service_name,\n    existing_el_clients,\n    cl_client_name,\n    global_log_level,\n    persistent,\n    tolerations,\n    node_selectors,\n    port_publisher,\n    participant_index,\n    network_params,\n    extra_files_artifacts,\n    bootnodoor_enode=None,\n    el_binary_artifact=None,\n):\n    public_ports = {}\n    public_ports_for_component = None\n    if port_publisher.el_enabled:\n        public_ports_for_component = shared_utils.get_public_ports_for_component(\n            \"el\", port_publisher, participant_index\n        )\n        public_ports = el_shared.get_general_el_public_port_specs(\n            public_ports_for_component\n        )\n        additional_public_port_assignments = {\n            constants.RPC_PORT_ID: public_ports_for_component[3],\n            # constants.WS_PORT_ID: public_ports_for_component[4],\n        }\n        public_ports.update(\n            shared_utils.get_port_specs(additional_public_port_assignments)\n        )\n\n    discovery_port_tcp = (\n        public_ports_for_component[0]\n        if public_ports_for_component\n        else DISCOVERY_PORT_NUM\n    )\n    discovery_port_udp = (\n        public_ports_for_component[0]\n        if public_ports_for_component\n        else DISCOVERY_PORT_NUM\n    )\n\n    used_port_assignments = {\n        constants.TCP_DISCOVERY_PORT_ID: discovery_port_tcp,\n        constants.UDP_DISCOVERY_PORT_ID: discovery_port_udp,\n        constants.ENGINE_RPC_PORT_ID: ENGINE_RPC_PORT_NUM,\n        constants.RPC_PORT_ID: RPC_PORT_NUM,\n        # constants.WS_PORT_ID: WS_PORT_NUM,\n        constants.METRICS_PORT_ID: METRICS_PORT_NUM,\n    }\n    used_ports = shared_utils.get_port_specs(used_port_assignments)\n\n    cmd = [\n        \"--datadir=\" + EXECUTION_DATA_DIRPATH_ON_CLIENT_CONTAINER,\n        \"--network={0}\".format(\n            network_params.network\n            if network_params.network in constants.PUBLIC_NETWORKS\n            else constants.GENESIS_CONFIG_MOUNT_PATH_ON_CONTAINER + \"/genesis.json\"\n        ),\n        \"--syncmode=full\",\n        \"--log.level={0}\".format(VERBOSITY_LEVELS[global_log_level]),\n        \"--http.port={0}\".format(RPC_PORT_NUM),\n        \"--http.addr=0.0.0.0\",\n        \"--authrpc.port={0}\".format(ENGINE_RPC_PORT_NUM),\n        \"--authrpc.jwtsecret=\" + constants.JWT_MOUNT_PATH_ON_CONTAINER,\n        \"--authrpc.addr=0.0.0.0\",\n        \"--p2p.port={0}\".format(discovery_port_tcp),\n        \"--discovery.port={0}\".format(discovery_port_udp),\n        \"--metrics\",\n        \"--metrics.addr=0.0.0.0\",\n        \"--metrics.port={0}\".format(METRICS_PORT_NUM),\n    ]\n    # Handle bootnode configuration with bootnodoor_enode override\n    if bootnodoor_enode != None:\n        cmd.append(\"--bootnodes=\" + bootnodoor_enode)\n    elif network_params.network == constants.NETWORK_NAME.kurtosis:\n        if len(existing_el_clients) > 0:\n            cmd.append(\n                \"--bootnodes=\"\n                + \",\".join(\n                    [\n                        ctx.enode\n                        for ctx in existing_el_clients[: constants.MAX_ENODE_ENTRIES]\n                    ]\n                )\n            )\n    elif (\n        network_params.network not in constants.PUBLIC_NETWORKS\n        and constants.NETWORK_NAME.shadowfork not in network_params.network\n    ):\n        cmd.append(\n            \"--bootnodes=\"\n            + shared_utils.get_devnet_enodes(\n                plan, launcher.el_cl_genesis_data.files_artifact_uuid\n            )\n        )\n\n    if network_params.gas_limit > 0:\n        cmd.append(\"--builder.gas-limit={0}\".format(network_params.gas_limit))\n\n    if len(participant.el_extra_params) > 0:\n        # this is a repeated<proto type>, we convert it into Starlark\n        cmd.extend([param for param in participant.el_extra_params])\n\n    cmd_str = \" \".join(cmd)\n    if network_params.network not in constants.PUBLIC_NETWORKS:\n        subcommand_strs = [cmd_str]\n    else:\n        subcommand_strs = [cmd_str]\n\n    command_str = \" && \".join(subcommand_strs)\n\n    files = {\n        constants.GENESIS_DATA_MOUNTPOINT_ON_CLIENTS: launcher.el_cl_genesis_data.files_artifact_uuid,\n        constants.JWT_MOUNTPOINT_ON_CLIENTS: launcher.jwt_file,\n    }\n\n    if persistent:\n        volume_size_key = (\n            \"devnets\" if \"devnet\" in network_params.network else network_params.network\n        )\n        files[EXECUTION_DATA_DIRPATH_ON_CLIENT_CONTAINER] = Directory(\n            persistent_key=\"data-{0}\".format(service_name),\n            size=int(participant.el_volume_size)\n            if int(participant.el_volume_size) > 0\n            else constants.VOLUME_SIZE[volume_size_key][\n                constants.EL_TYPE.ethrex + \"_volume_size\"\n            ],\n        )\n\n    # Add extra mounts - automatically handle file uploads\n    processed_mounts = shared_utils.process_extra_mounts(\n        plan, participant.el_extra_mounts, extra_files_artifacts\n    )\n    for mount_path, artifact in processed_mounts.items():\n        files[mount_path] = artifact\n\n    # Binary injection - mount custom binary directory if provided\n    if el_binary_artifact != None:\n        files[\"/opt/bin\"] = el_binary_artifact.artifact\n\n    config_args = {\n        \"image\": participant.el_image,\n        \"ports\": used_ports,\n        \"public_ports\": public_ports,\n        \"publish_udp\": port_publisher.el_enabled,\n        \"cmd\": cmd,\n        \"files\": files,\n        \"private_ip_address_placeholder\": constants.PRIVATE_IP_ADDRESS_PLACEHOLDER,\n        \"env_vars\": participant.el_extra_env_vars,\n        \"labels\": shared_utils.label_maker(\n            client=constants.EL_TYPE.ethrex,\n            client_type=constants.CLIENT_TYPES.el,\n            image=participant.el_image[-constants.MAX_LABEL_LENGTH :],\n            connected_client=cl_client_name,\n            extra_labels=participant.el_extra_labels\n            | {constants.NODE_INDEX_LABEL_KEY: str(participant_index + 1)},\n            supernode=participant.supernode,\n        ),\n        \"tolerations\": tolerations,\n        \"node_selectors\": node_selectors,\n    }\n\n    # Binary injection - override entrypoint and cmd only when binary is provided\n    if el_binary_artifact != None:\n        config_args[\"entrypoint\"] = [\"sh\", \"-c\"]\n        config_args[\"cmd\"] = [\n            \"cp /opt/bin/{0} /usr/local/bin/ethrex && ethrex \".format(\n                el_binary_artifact.filename\n            )\n            + \" \".join(cmd)\n        ]\n\n    if participant.el_min_cpu > 0:\n        config_args[\"min_cpu\"] = participant.el_min_cpu\n    if participant.el_max_cpu > 0:\n        config_args[\"max_cpu\"] = participant.el_max_cpu\n    if participant.el_min_mem > 0:\n        config_args[\"min_memory\"] = participant.el_min_mem\n    if participant.el_max_mem > 0:\n        config_args[\"max_memory\"] = participant.el_max_mem\n    if len(participant.el_devices) > 0:\n        config_args[\"devices\"] = participant.el_devices\n\n    return ServiceConfig(**config_args)\n\n\n# makes request to [service_name] for enode and enr and returns a full el_context\ndef get_el_context(\n    plan,\n    service_name,\n    service,\n    launcher,\n):\n    enode, enr = el_admin_node_info.get_enode_enr_for_node(\n        plan, service_name, constants.RPC_PORT_ID\n    )\n\n    metrics_url = \"{0}:{1}\".format(service.name, METRICS_PORT_NUM)\n    ethrex_metrics_info = node_metrics.new_node_metrics_info(\n        service_name, METRICS_PATH, metrics_url\n    )\n\n    http_url = \"http://{0}:{1}\".format(service.name, RPC_PORT_NUM)\n    # ws_url = \"ws://{0}:{1}\".format(service.name, WS_PORT_NUM)\n\n    return el_context.new_el_context(\n        client_name=\"ethrex\",\n        enode=enode,\n        dns_name=service.name,\n        rpc_port_num=RPC_PORT_NUM,\n        ws_port_num=WS_PORT_NUM,\n        engine_rpc_port_num=ENGINE_RPC_PORT_NUM,\n        rpc_http_url=http_url,\n        # ws_url=ws_url,\n        enr=enr,\n        service_name=service_name,\n        el_metrics_info=[ethrex_metrics_info],\n        ip_addr=service.ip_address,\n    )\n\n\ndef new_ethrex_launcher(el_cl_genesis_data, jwt_file):\n    return struct(el_cl_genesis_data=el_cl_genesis_data, jwt_file=jwt_file)\n"
  },
  {
    "path": "src/el/geth/geth_launcher.star",
    "content": "shared_utils = import_module(\"../../shared_utils/shared_utils.star\")\ninput_parser = import_module(\"../../package_io/input_parser.star\")\nel_context = import_module(\"../../el/el_context.star\")\nel_admin_node_info = import_module(\"../../el/el_admin_node_info.star\")\ngenesis_constants = import_module(\n    \"../../prelaunch_data_generator/genesis_constants/genesis_constants.star\"\n)\nel_shared = import_module(\"../el_shared.star\")\nnode_metrics = import_module(\"../../node_metrics_info.star\")\nconstants = import_module(\"../../package_io/constants.star\")\n\nRPC_PORT_NUM = 8545\nWS_PORT_NUM = 8546\nDISCOVERY_PORT_NUM = 30303\nENGINE_RPC_PORT_NUM = 8551\nMETRICS_PORT_NUM = 9001\n\n# TODO(old) Scale this dynamically based on CPUs available and Geth nodes mining\nNUM_MINING_THREADS = 1\n\nMETRICS_PATH = \"/debug/metrics/prometheus\"\n\n# The dirpath of the execution data directory on the client container\nEXECUTION_DATA_DIRPATH_ON_CLIENT_CONTAINER = \"/data/geth/execution-data\"\n\nENTRYPOINT_ARGS = [\"sh\", \"-c\"]\n\nVERBOSITY_LEVELS = {\n    constants.GLOBAL_LOG_LEVEL.error: \"1\",\n    constants.GLOBAL_LOG_LEVEL.warn: \"2\",\n    constants.GLOBAL_LOG_LEVEL.info: \"3\",\n    constants.GLOBAL_LOG_LEVEL.debug: \"4\",\n    constants.GLOBAL_LOG_LEVEL.trace: \"5\",\n}\n\nBUILDER_IMAGE_STR = \"builder\"\nSUAVE_ENABLED_GETH_IMAGE_STR = \"suave\"\n\n\ndef launch(\n    plan,\n    launcher,\n    service_name,\n    participant,\n    global_log_level,\n    existing_el_clients,\n    persistent,\n    tolerations,\n    node_selectors,\n    port_publisher,\n    participant_index,\n    network_params,\n    extra_files_artifacts,\n    bootnodoor_enode=None,\n    el_binary_artifact=None,\n):\n    cl_client_name = service_name.split(\"-\")[3]\n\n    config = get_config(\n        plan,\n        launcher,\n        participant,\n        service_name,\n        existing_el_clients,\n        cl_client_name,\n        global_log_level,\n        persistent,\n        tolerations,\n        node_selectors,\n        port_publisher,\n        participant_index,\n        network_params,\n        extra_files_artifacts,\n        bootnodoor_enode,\n        el_binary_artifact,\n    )\n\n    service = plan.add_service(\n        service_name, config, force_update=participant.el_force_restart\n    )\n\n    return get_el_context(\n        plan,\n        service_name,\n        service,\n        launcher,\n    )\n\n\ndef get_config(\n    plan,\n    launcher,\n    participant,\n    service_name,\n    existing_el_clients,\n    cl_client_name,\n    global_log_level,\n    persistent,\n    tolerations,\n    node_selectors,\n    port_publisher,\n    participant_index,\n    network_params,\n    extra_files_artifacts,\n    bootnodoor_enode=None,\n    el_binary_artifact=None,\n):\n    log_level = input_parser.get_client_log_level_or_default(\n        participant.el_log_level, global_log_level, VERBOSITY_LEVELS\n    )\n\n    # Check if archive mode is explicitly set via extra params or el_storage_type\n    if (\n        \"--gcmode=archive\" in participant.el_extra_params\n        or \"--gcmode archive\" in participant.el_extra_params\n        or participant.el_storage_type == \"archive\"\n    ):\n        gcmode_archive = True\n    else:\n        gcmode_archive = False\n\n    public_ports = {}\n    public_ports_for_component = None\n    if port_publisher.el_enabled:\n        public_ports_for_component = shared_utils.get_public_ports_for_component(\n            \"el\", port_publisher, participant_index\n        )\n        public_ports = el_shared.get_general_el_public_port_specs(\n            public_ports_for_component\n        )\n        additional_public_port_assignments = {\n            constants.RPC_PORT_ID: public_ports_for_component[3],\n            constants.WS_PORT_ID: public_ports_for_component[4],\n        }\n        public_ports.update(\n            shared_utils.get_port_specs(additional_public_port_assignments)\n        )\n\n    discovery_port_tcp = (\n        public_ports_for_component[0]\n        if public_ports_for_component\n        else DISCOVERY_PORT_NUM\n    )\n    discovery_port_udp = (\n        public_ports_for_component[0]\n        if public_ports_for_component\n        else DISCOVERY_PORT_NUM\n    )\n\n    used_port_assignments = {\n        constants.TCP_DISCOVERY_PORT_ID: discovery_port_tcp,\n        constants.UDP_DISCOVERY_PORT_ID: discovery_port_udp,\n        constants.ENGINE_RPC_PORT_ID: ENGINE_RPC_PORT_NUM,\n        constants.RPC_PORT_ID: RPC_PORT_NUM,\n        constants.WS_PORT_ID: WS_PORT_NUM,\n        constants.METRICS_PORT_ID: METRICS_PORT_NUM,\n    }\n    used_ports = shared_utils.get_port_specs(used_port_assignments)\n\n    cmd = [\n        \"geth\",\n        \"{0}\".format(\n            \"--{}\".format(network_params.network)\n            if network_params.network in constants.PUBLIC_NETWORKS\n            else \"\"\n        ),\n        \"{0}\".format(\n            \"--override.genesis={0}\".format(\n                constants.GENESIS_CONFIG_MOUNT_PATH_ON_CONTAINER + \"/genesis.json\"\n            )\n            if network_params.network not in constants.PUBLIC_NETWORKS\n            else \"\"\n        ),\n        \"--verbosity=\" + log_level,\n        \"--datadir=\" + EXECUTION_DATA_DIRPATH_ON_CLIENT_CONTAINER,\n        \"--http\",\n        \"--http.addr=0.0.0.0\",\n        \"--http.port={0}\".format(RPC_PORT_NUM),\n        \"--http.vhosts=*\",\n        \"--http.corsdomain=*\",\n        # WARNING: The admin info endpoint is enabled so that we can easily get ENR/enode, which means\n        #  that users should NOT store private information in these Kurtosis nodes!\n        \"--http.api=admin,engine,net,eth,web3,debug,txpool\",\n        \"--ws\",\n        \"--ws.addr=0.0.0.0\",\n        \"--ws.port={0}\".format(WS_PORT_NUM),\n        \"--ws.api=admin,engine,net,eth,web3,debug,txpool\",\n        \"--ws.origins=*\",\n        \"--nat=extip:\" + port_publisher.el_nat_exit_ip,\n        \"--authrpc.port={0}\".format(ENGINE_RPC_PORT_NUM),\n        \"--authrpc.addr=0.0.0.0\",\n        \"--authrpc.vhosts=*\",\n        \"--authrpc.jwtsecret=\" + constants.JWT_MOUNT_PATH_ON_CONTAINER,\n        \"--syncmode=full\"\n        if network_params.network == constants.NETWORK_NAME.kurtosis\n        and not gcmode_archive\n        else \"--syncmode=snap\"\n        if not gcmode_archive\n        else \"--gcmode=archive\",\n        \"--rpc.allow-unprotected-txs\",\n        \"--metrics\",\n        \"--metrics.addr=0.0.0.0\",\n        \"--metrics.port={0}\".format(METRICS_PORT_NUM),\n        \"--discovery.port={0}\".format(discovery_port_tcp),\n        \"--port={0}\".format(discovery_port_tcp),\n        \"{0}\".format(\n            \"--miner.gasprice=1\"\n            if network_params.network == constants.NETWORK_NAME.kurtosis\n            else \"\"\n        ),\n    ]\n\n    if network_params.gas_limit > 0:\n        cmd.append(\"--miner.gaslimit={0}\".format(network_params.gas_limit))\n\n    if BUILDER_IMAGE_STR in participant.el_image:\n        for index, arg in enumerate(cmd):\n            if \"--http.api\" in arg:\n                cmd[index] = \"--http.api=admin,engine,net,eth,web3,debug,mev,flashbots\"\n            if \"--ws.api\" in arg:\n                cmd[index] = \"--ws.api=admin,engine,net,eth,web3,debug,mev,flashbots\"\n\n    if SUAVE_ENABLED_GETH_IMAGE_STR in participant.el_image:\n        for index, arg in enumerate(cmd):\n            if \"--http.api\" in arg:\n                cmd[index] = \"--http.api=admin,engine,net,eth,web3,debug,suavex\"\n            if \"--ws.api\" in arg:\n                cmd[index] = \"--ws.api=admin,engine,net,eth,web3,debug,suavex\"\n\n    # Handle bootnode configuration with bootnodoor_enode override\n    if bootnodoor_enode != None:\n        cmd.append(\"--bootnodes=\" + bootnodoor_enode)\n    elif (\n        network_params.network == constants.NETWORK_NAME.kurtosis\n        or constants.NETWORK_NAME.shadowfork in network_params.network\n    ):\n        cmd.append(\n            \"--bootnodes=\"\n            + \",\".join(\n                [\n                    ctx.enode\n                    for ctx in existing_el_clients[: constants.MAX_ENODE_ENTRIES]\n                ]\n            )\n        )\n    elif (\n        network_params.network not in constants.PUBLIC_NETWORKS\n        and constants.NETWORK_NAME.shadowfork not in network_params.network\n    ):\n        cmd.append(\n            \"--bootnodes=\"\n            + shared_utils.get_devnet_enodes(\n                plan, launcher.el_cl_genesis_data.files_artifact_uuid\n            )\n        )\n\n    if len(participant.el_extra_params) > 0:\n        # this is a repeated<proto type>, we convert it into Starlark\n        cmd.extend([param for param in participant.el_extra_params])\n\n    command_str = \" \".join(cmd)\n\n    files = {\n        constants.GENESIS_DATA_MOUNTPOINT_ON_CLIENTS: launcher.el_cl_genesis_data.files_artifact_uuid,\n        constants.JWT_MOUNTPOINT_ON_CLIENTS: launcher.jwt_file,\n    }\n    if persistent:\n        volume_size_key = (\n            \"devnets\" if \"devnet\" in network_params.network else network_params.network\n        )\n        files[EXECUTION_DATA_DIRPATH_ON_CLIENT_CONTAINER] = Directory(\n            persistent_key=\"data-{0}\".format(service_name),\n            size=int(participant.el_volume_size)\n            if int(participant.el_volume_size) > 0\n            else constants.VOLUME_SIZE[volume_size_key][\n                constants.EL_TYPE.geth + \"_volume_size\"\n            ],\n        )\n\n    # Add extra mounts - automatically handle file uploads\n    processed_mounts = shared_utils.process_extra_mounts(\n        plan, participant.el_extra_mounts, extra_files_artifacts\n    )\n    for mount_path, artifact in processed_mounts.items():\n        files[mount_path] = artifact\n\n    # Binary injection - mount custom binary directory if provided\n    if el_binary_artifact != None:\n        files[\"/opt/bin\"] = el_binary_artifact.artifact\n        # Copy injected binary to override default, then run original command\n        cmd_str = (\n            \"cp /opt/bin/{0} /usr/local/bin/geth && \".format(\n                el_binary_artifact.filename\n            )\n            + command_str\n        )\n    else:\n        cmd_str = command_str\n\n    env_vars = participant.el_extra_env_vars\n    config_args = {\n        \"image\": participant.el_image,\n        \"ports\": used_ports,\n        \"public_ports\": public_ports,\n        \"publish_udp\": port_publisher.el_enabled,\n        \"cmd\": [cmd_str],\n        \"files\": files,\n        \"entrypoint\": ENTRYPOINT_ARGS,\n        \"private_ip_address_placeholder\": constants.PRIVATE_IP_ADDRESS_PLACEHOLDER,\n        \"env_vars\": env_vars,\n        \"labels\": shared_utils.label_maker(\n            client=constants.EL_TYPE.geth,\n            client_type=constants.CLIENT_TYPES.el,\n            image=participant.el_image[-constants.MAX_LABEL_LENGTH :],\n            connected_client=cl_client_name,\n            extra_labels=participant.el_extra_labels\n            | {constants.NODE_INDEX_LABEL_KEY: str(participant_index + 1)},\n            supernode=participant.supernode,\n        ),\n        \"tolerations\": tolerations,\n        \"node_selectors\": node_selectors,\n    }\n\n    if participant.el_min_cpu > 0:\n        config_args[\"min_cpu\"] = participant.el_min_cpu\n    if participant.el_max_cpu > 0:\n        config_args[\"max_cpu\"] = participant.el_max_cpu\n    if participant.el_min_mem > 0:\n        config_args[\"min_memory\"] = participant.el_min_mem\n    if participant.el_max_mem > 0:\n        config_args[\"max_memory\"] = participant.el_max_mem\n    if len(participant.el_devices) > 0:\n        config_args[\"devices\"] = participant.el_devices\n    return ServiceConfig(**config_args)\n\n\n# makes request to [service_name] for enode and enr and returns a full el_context\ndef get_el_context(\n    plan,\n    service_name,\n    service,\n    launcher,\n):\n    enode, enr = el_admin_node_info.get_enode_enr_for_node(\n        plan, service_name, constants.RPC_PORT_ID\n    )\n\n    metrics_url = \"{0}:{1}\".format(service.name, METRICS_PORT_NUM)\n    geth_metrics_info = node_metrics.new_node_metrics_info(\n        service_name, METRICS_PATH, metrics_url\n    )\n\n    http_url = \"http://{0}:{1}\".format(service.name, RPC_PORT_NUM)\n    ws_url = \"ws://{0}:{1}\".format(service.name, WS_PORT_NUM)\n\n    return el_context.new_el_context(\n        client_name=\"geth\",\n        enode=enode,\n        dns_name=service.name,\n        rpc_port_num=RPC_PORT_NUM,\n        ws_port_num=WS_PORT_NUM,\n        engine_rpc_port_num=ENGINE_RPC_PORT_NUM,\n        rpc_http_url=http_url,\n        ws_url=ws_url,\n        enr=enr,\n        service_name=service_name,\n        el_metrics_info=[geth_metrics_info],\n        ip_addr=service.ip_address,\n    )\n\n\ndef new_geth_launcher(\n    el_cl_genesis_data,\n    jwt_file,\n    networkid,\n):\n    return struct(\n        el_cl_genesis_data=el_cl_genesis_data,\n        jwt_file=jwt_file,\n        networkid=networkid,\n    )\n"
  },
  {
    "path": "src/el/nethermind/nethermind_launcher.star",
    "content": "shared_utils = import_module(\"../../shared_utils/shared_utils.star\")\ninput_parser = import_module(\"../../package_io/input_parser.star\")\nel_context = import_module(\"../../el/el_context.star\")\nel_admin_node_info = import_module(\"../../el/el_admin_node_info.star\")\nel_shared = import_module(\"../el_shared.star\")\nnode_metrics = import_module(\"../../node_metrics_info.star\")\nconstants = import_module(\"../../package_io/constants.star\")\n\n# The dirpath of the execution data directory on the client container\nEXECUTION_DATA_DIRPATH_ON_CLIENT_CONTAINER = \"/data/nethermind/execution-data\"\n\nMETRICS_PATH = \"/metrics\"\n\nRPC_PORT_NUM = 8545\nWS_PORT_NUM = 8546\nDISCOVERY_PORT_NUM = 30303\nENGINE_RPC_PORT_NUM = 8551\nMETRICS_PORT_NUM = 9001\n\nVERBOSITY_LEVELS = {\n    constants.GLOBAL_LOG_LEVEL.error: \"ERROR\",\n    constants.GLOBAL_LOG_LEVEL.warn: \"WARN\",\n    constants.GLOBAL_LOG_LEVEL.info: \"INFO\",\n    constants.GLOBAL_LOG_LEVEL.debug: \"DEBUG\",\n    constants.GLOBAL_LOG_LEVEL.trace: \"TRACE\",\n}\n\n\ndef launch(\n    plan,\n    launcher,\n    service_name,\n    participant,\n    global_log_level,\n    existing_el_clients,\n    persistent,\n    tolerations,\n    node_selectors,\n    port_publisher,\n    participant_index,\n    network_params,\n    extra_files_artifacts,\n    bootnodoor_enode=None,\n    el_binary_artifact=None,\n):\n    cl_client_name = service_name.split(\"-\")[3]\n\n    config = get_config(\n        plan,\n        launcher,\n        participant,\n        service_name,\n        existing_el_clients,\n        cl_client_name,\n        global_log_level,\n        persistent,\n        tolerations,\n        node_selectors,\n        port_publisher,\n        participant_index,\n        network_params,\n        extra_files_artifacts,\n        bootnodoor_enode,\n        el_binary_artifact,\n    )\n\n    service = plan.add_service(\n        service_name, config, force_update=participant.el_force_restart\n    )\n\n    return get_el_context(\n        plan,\n        service_name,\n        service,\n        launcher,\n    )\n\n\ndef get_config(\n    plan,\n    launcher,\n    participant,\n    service_name,\n    existing_el_clients,\n    cl_client_name,\n    global_log_level,\n    persistent,\n    tolerations,\n    node_selectors,\n    port_publisher,\n    participant_index,\n    network_params,\n    extra_files_artifacts,\n    bootnodoor_enode=None,\n    el_binary_artifact=None,\n):\n    log_level = input_parser.get_client_log_level_or_default(\n        participant.el_log_level, global_log_level, VERBOSITY_LEVELS\n    )\n\n    public_ports = {}\n    public_ports_for_component = None\n    if port_publisher.el_enabled:\n        public_ports_for_component = shared_utils.get_public_ports_for_component(\n            \"el\", port_publisher, participant_index\n        )\n        public_ports = el_shared.get_general_el_public_port_specs(\n            public_ports_for_component\n        )\n        additional_public_port_assignments = {\n            constants.RPC_PORT_ID: public_ports_for_component[3],\n            constants.WS_PORT_ID: public_ports_for_component[4],\n        }\n        public_ports.update(\n            shared_utils.get_port_specs(additional_public_port_assignments)\n        )\n\n    discovery_port_tcp = (\n        public_ports_for_component[0]\n        if public_ports_for_component\n        else DISCOVERY_PORT_NUM\n    )\n    discovery_port_udp = (\n        public_ports_for_component[0]\n        if public_ports_for_component\n        else DISCOVERY_PORT_NUM\n    )\n\n    used_port_assignments = {\n        constants.UDP_DISCOVERY_PORT_ID: discovery_port_udp,\n        constants.TCP_DISCOVERY_PORT_ID: discovery_port_tcp,\n        constants.ENGINE_RPC_PORT_ID: ENGINE_RPC_PORT_NUM,\n        constants.RPC_PORT_ID: RPC_PORT_NUM,\n        constants.WS_PORT_ID: WS_PORT_NUM,\n        constants.METRICS_PORT_ID: METRICS_PORT_NUM,\n    }\n    used_ports = shared_utils.get_port_specs(used_port_assignments)\n\n    cmd = [\n        \"--log=\" + log_level,\n        \"--datadir=\" + EXECUTION_DATA_DIRPATH_ON_CLIENT_CONTAINER,\n        \"--Init.WebSocketsEnabled=true\",\n        \"--JsonRpc.Enabled=true\",\n        \"--JsonRpc.EnabledModules=net,eth,consensus,subscribe,web3,admin,debug,txpool,trace\",\n        \"--JsonRpc.Host=0.0.0.0\",\n        \"--JsonRpc.Port={0}\".format(RPC_PORT_NUM),\n        \"--JsonRpc.WebSocketsPort={0}\".format(WS_PORT_NUM),\n        \"--JsonRpc.EngineHost=0.0.0.0\",\n        \"--JsonRpc.EnginePort={0}\".format(ENGINE_RPC_PORT_NUM),\n        \"--Network.ExternalIp={0}\".format(port_publisher.el_nat_exit_ip),\n        \"--Network.DiscoveryPort={0}\".format(discovery_port_tcp),\n        \"--Network.P2PPort={0}\".format(discovery_port_tcp),\n        \"--JsonRpc.JwtSecretFile=\" + constants.JWT_MOUNT_PATH_ON_CONTAINER,\n        \"--Metrics.Enabled=true\",\n        \"--Metrics.ExposePort={0}\".format(METRICS_PORT_NUM),\n        \"--Metrics.ExposeHost=0.0.0.0\",\n    ]\n\n    # Configure storage type - nethermind defaults to hybrid pruning, use None mode for archive\n    if participant.el_storage_type == \"archive\":\n        cmd.append(\"--Pruning.Mode=None\")\n\n    if network_params.gas_limit > 0:\n        cmd.append(\"--Blocks.TargetBlockGasLimit={0}\".format(network_params.gas_limit))\n\n    if constants.NETWORK_NAME.shadowfork in network_params.network:\n        cmd.append(\n            \"--Init.ChainSpecPath=\"\n            + constants.GENESIS_CONFIG_MOUNT_PATH_ON_CONTAINER\n            + \"/chainspec.json\"\n        )\n        cmd.append(\"--config=\" + network_params.network.split(\"-\")[0])\n        cmd.append(\"--Init.BaseDbPath=\" + network_params.network.split(\"-\")[0])\n    elif network_params.network not in constants.PUBLIC_NETWORKS:\n        cmd.append(\"--config=none\")\n        cmd.append(\n            \"--Init.ChainSpecPath=\"\n            + constants.GENESIS_CONFIG_MOUNT_PATH_ON_CONTAINER\n            + \"/chainspec.json\"\n        )\n\n        # Configure block timing to match consensus layer\n        if network_params.seconds_per_slot and network_params.seconds_per_slot != 12:\n            cmd.append(\n                \"--Blocks.SecondsPerSlot={0}\".format(network_params.seconds_per_slot)\n            )\n    else:\n        cmd.append(\"--config=\" + network_params.network)\n\n    # Handle bootnode configuration with bootnodoor_enode override\n    if bootnodoor_enode != None:\n        cmd.append(\"--Discovery.Bootnodes=\" + bootnodoor_enode)\n    elif (\n        network_params.network == constants.NETWORK_NAME.kurtosis\n        or constants.NETWORK_NAME.shadowfork in network_params.network\n    ):\n        if len(existing_el_clients) > 0:\n            cmd.append(\n                \"--Discovery.Bootnodes=\"\n                + \",\".join(\n                    [\n                        ctx.enode\n                        for ctx in existing_el_clients[: constants.MAX_ENODE_ENTRIES]\n                    ]\n                )\n            )\n    elif (\n        network_params.network not in constants.PUBLIC_NETWORKS\n        and constants.NETWORK_NAME.shadowfork not in network_params.network\n    ):\n        cmd.append(\n            \"--Discovery.Bootnodes=\"\n            + shared_utils.get_devnet_enodes(\n                plan, launcher.el_cl_genesis_data.files_artifact_uuid\n            )\n        )\n\n    if len(participant.el_extra_params) > 0:\n        # this is a repeated<proto type>, we convert it into Starlark\n        cmd.extend([param for param in participant.el_extra_params])\n\n    files = {\n        constants.GENESIS_DATA_MOUNTPOINT_ON_CLIENTS: launcher.el_cl_genesis_data.files_artifact_uuid,\n        constants.JWT_MOUNTPOINT_ON_CLIENTS: launcher.jwt_file,\n    }\n\n    if persistent:\n        volume_size_key = (\n            \"devnets\" if \"devnet\" in network_params.network else network_params.network\n        )\n        files[EXECUTION_DATA_DIRPATH_ON_CLIENT_CONTAINER] = Directory(\n            persistent_key=\"data-{0}\".format(service_name),\n            size=int(participant.el_volume_size)\n            if int(participant.el_volume_size) > 0\n            else constants.VOLUME_SIZE[volume_size_key][\n                constants.EL_TYPE.nethermind + \"_volume_size\"\n            ],\n        )\n\n    # Add extra mounts - automatically handle file uploads\n    processed_mounts = shared_utils.process_extra_mounts(\n        plan, participant.el_extra_mounts, extra_files_artifacts\n    )\n    for mount_path, artifact in processed_mounts.items():\n        files[mount_path] = artifact\n\n    # Binary injection - mount custom binary directory if provided\n    if el_binary_artifact != None:\n        files[\"/opt/bin\"] = el_binary_artifact.artifact\n\n    env_vars = participant.el_extra_env_vars\n    config_args = {\n        \"image\": participant.el_image,\n        \"ports\": used_ports,\n        \"public_ports\": public_ports,\n        \"publish_udp\": port_publisher.el_enabled,\n        \"cmd\": cmd,\n        \"files\": files,\n        \"private_ip_address_placeholder\": constants.PRIVATE_IP_ADDRESS_PLACEHOLDER,\n        \"env_vars\": env_vars,\n        \"labels\": shared_utils.label_maker(\n            client=constants.EL_TYPE.nethermind,\n            client_type=constants.CLIENT_TYPES.el,\n            image=participant.el_image[-constants.MAX_LABEL_LENGTH :],\n            connected_client=cl_client_name,\n            extra_labels=participant.el_extra_labels\n            | {constants.NODE_INDEX_LABEL_KEY: str(participant_index + 1)},\n            supernode=participant.supernode,\n        ),\n        \"tolerations\": tolerations,\n        \"node_selectors\": node_selectors,\n    }\n\n    # Binary injection - override entrypoint and cmd only when binary is provided\n    if el_binary_artifact != None:\n        config_args[\"entrypoint\"] = [\"sh\", \"-c\"]\n        config_args[\"cmd\"] = [\n            \"cp /opt/bin/{0} /nethermind/nethermind && /nethermind/nethermind \".format(\n                el_binary_artifact.filename\n            )\n            + \" \".join(cmd)\n        ]\n\n    if participant.el_min_cpu > 0:\n        config_args[\"min_cpu\"] = participant.el_min_cpu\n    if participant.el_max_cpu > 0:\n        config_args[\"max_cpu\"] = participant.el_max_cpu\n    if participant.el_min_mem > 0:\n        config_args[\"min_memory\"] = participant.el_min_mem\n    if participant.el_max_mem > 0:\n        config_args[\"max_memory\"] = participant.el_max_mem\n    if len(participant.el_devices) > 0:\n        config_args[\"devices\"] = participant.el_devices\n    return ServiceConfig(**config_args)\n\n\ndef get_el_context(\n    plan,\n    service_name,\n    service,\n    launcher,\n):\n    enode = el_admin_node_info.get_enode_for_node(\n        plan, service_name, constants.RPC_PORT_ID\n    )\n\n    metrics_url = \"{0}:{1}\".format(service.name, METRICS_PORT_NUM)\n    nethermind_metrics_info = node_metrics.new_node_metrics_info(\n        service_name, METRICS_PATH, metrics_url\n    )\n\n    http_url = \"http://{0}:{1}\".format(service.name, RPC_PORT_NUM)\n    ws_url = \"ws://{0}:{1}\".format(service.name, WS_PORT_NUM)\n\n    return el_context.new_el_context(\n        client_name=\"nethermind\",\n        enode=enode,\n        dns_name=service.name,\n        rpc_port_num=RPC_PORT_NUM,\n        ws_port_num=WS_PORT_NUM,\n        engine_rpc_port_num=ENGINE_RPC_PORT_NUM,\n        rpc_http_url=http_url,\n        ws_url=ws_url,\n        service_name=service_name,\n        el_metrics_info=[nethermind_metrics_info],\n        ip_addr=service.ip_address,\n    )\n\n\ndef new_nethermind_launcher(el_cl_genesis_data, jwt_file):\n    return struct(\n        el_cl_genesis_data=el_cl_genesis_data,\n        jwt_file=jwt_file,\n    )\n"
  },
  {
    "path": "src/el/nimbus-eth1/nimbus_launcher.star",
    "content": "shared_utils = import_module(\"../../shared_utils/shared_utils.star\")\ninput_parser = import_module(\"../../package_io/input_parser.star\")\nel_context = import_module(\"../../el/el_context.star\")\nel_admin_node_info = import_module(\"../../el/el_admin_node_info.star\")\nel_shared = import_module(\"../el_shared.star\")\nnode_metrics = import_module(\"../../node_metrics_info.star\")\nconstants = import_module(\"../../package_io/constants.star\")\n\nWS_RPC_PORT_NUM = 8545\nDISCOVERY_PORT_NUM = 30303\nENGINE_RPC_PORT_NUM = 8551\nMETRICS_PORT_NUM = 9001\n\n# Paths\nMETRICS_PATH = \"/metrics\"\n\n# The dirpath of the execution data directory on the client container\nEXECUTION_DATA_DIRPATH_ON_CLIENT_CONTAINER = \"/data/nimbus/execution-data\"\n\nVERBOSITY_LEVELS = {\n    constants.GLOBAL_LOG_LEVEL.error: \"ERROR\",\n    constants.GLOBAL_LOG_LEVEL.warn: \"WARN\",\n    constants.GLOBAL_LOG_LEVEL.info: \"INFO\",\n    constants.GLOBAL_LOG_LEVEL.debug: \"DEBUG\",\n    constants.GLOBAL_LOG_LEVEL.trace: \"TRACE\",\n}\n\n\ndef launch(\n    plan,\n    launcher,\n    service_name,\n    participant,\n    global_log_level,\n    existing_el_clients,\n    persistent,\n    tolerations,\n    node_selectors,\n    port_publisher,\n    participant_index,\n    network_params,\n    extra_files_artifacts,\n    bootnodoor_enode=None,\n    el_binary_artifact=None,\n):\n    cl_client_name = service_name.split(\"-\")[3]\n\n    config = get_config(\n        plan,\n        launcher,\n        participant,\n        service_name,\n        existing_el_clients,\n        cl_client_name,\n        global_log_level,\n        persistent,\n        tolerations,\n        node_selectors,\n        port_publisher,\n        participant_index,\n        network_params,\n        extra_files_artifacts,\n        bootnodoor_enode,\n        el_binary_artifact,\n    )\n\n    service = plan.add_service(\n        service_name, config, force_update=participant.el_force_restart\n    )\n\n    return get_el_context(\n        plan,\n        service_name,\n        service,\n        launcher,\n    )\n\n\ndef get_config(\n    plan,\n    launcher,\n    participant,\n    service_name,\n    existing_el_clients,\n    cl_client_name,\n    global_log_level,\n    persistent,\n    tolerations,\n    node_selectors,\n    port_publisher,\n    participant_index,\n    network_params,\n    extra_files_artifacts,\n    bootnodoor_enode=None,\n    el_binary_artifact=None,\n):\n    log_level = input_parser.get_client_log_level_or_default(\n        participant.el_log_level, global_log_level, VERBOSITY_LEVELS\n    )\n\n    public_ports = {}\n    public_ports_for_component = None\n    if port_publisher.el_enabled:\n        public_ports_for_component = shared_utils.get_public_ports_for_component(\n            \"el\", port_publisher, participant_index\n        )\n        public_ports = el_shared.get_general_el_public_port_specs(\n            public_ports_for_component\n        )\n        additional_public_port_assignments = {\n            constants.WS_RPC_PORT_ID: public_ports_for_component[3],\n        }\n        public_ports.update(\n            shared_utils.get_port_specs(additional_public_port_assignments)\n        )\n\n    discovery_port_tcp = (\n        public_ports_for_component[0]\n        if public_ports_for_component\n        else DISCOVERY_PORT_NUM\n    )\n    discovery_port_udp = (\n        public_ports_for_component[0]\n        if public_ports_for_component\n        else DISCOVERY_PORT_NUM\n    )\n\n    used_port_assignments = {\n        constants.TCP_DISCOVERY_PORT_ID: discovery_port_tcp,\n        constants.UDP_DISCOVERY_PORT_ID: discovery_port_udp,\n        constants.ENGINE_RPC_PORT_ID: ENGINE_RPC_PORT_NUM,\n        constants.WS_RPC_PORT_ID: WS_RPC_PORT_NUM,\n        constants.METRICS_PORT_ID: METRICS_PORT_NUM,\n    }\n    used_ports = shared_utils.get_port_specs(used_port_assignments)\n\n    cmd = [\n        \"executionClient\",\n        \"--log-level={0}\".format(log_level),\n        \"--data-dir=\" + EXECUTION_DATA_DIRPATH_ON_CLIENT_CONTAINER,\n        \"--net-key={0}/nodekey\".format(EXECUTION_DATA_DIRPATH_ON_CLIENT_CONTAINER),\n        \"--http-port={0}\".format(WS_RPC_PORT_NUM),\n        \"--http-address=0.0.0.0\",\n        \"--rpc\",\n        \"--rpc-api=admin,eth,debug\",\n        \"--ws\",\n        \"--ws-api=admin,eth,debug\",\n        \"--engine-api\",\n        \"--engine-api-address=0.0.0.0\",\n        \"--engine-api-port={0}\".format(ENGINE_RPC_PORT_NUM),\n        \"--jwt-secret=\" + constants.JWT_MOUNT_PATH_ON_CONTAINER,\n        \"--metrics\",\n        \"--metrics-address=0.0.0.0\",\n        \"--metrics-port={0}\".format(METRICS_PORT_NUM),\n        \"--nat=extip:{0}\".format(port_publisher.el_nat_exit_ip),\n        \"--tcp-port={0}\".format(discovery_port_tcp),\n        \"--udp-port={0}\".format(discovery_port_udp),\n    ]\n\n    if network_params.gas_limit > 0:\n        cmd.append(\"--gas-limit={0}\".format(network_params.gas_limit))\n\n    if network_params.network not in constants.PUBLIC_NETWORKS:\n        cmd.append(\n            \"--network=\"\n            + constants.GENESIS_CONFIG_MOUNT_PATH_ON_CONTAINER\n            + \"/genesis.json\"\n        )\n    else:\n        cmd.append(\"--network=\" + network_params.network)\n\n    # Handle bootnode configuration with bootnodoor_enode override\n    if bootnodoor_enode != None:\n        cmd.append(\"--bootstrap-node=\" + bootnodoor_enode)\n    elif (\n        network_params.network == constants.NETWORK_NAME.kurtosis\n        or constants.NETWORK_NAME.shadowfork in network_params.network\n    ):\n        if len(existing_el_clients) > 0:\n            cmd.append(\n                \"--bootstrap-node=\"\n                + \",\".join(\n                    [\n                        ctx.enode\n                        for ctx in existing_el_clients[: constants.MAX_ENODE_ENTRIES]\n                    ]\n                )\n            )\n    elif (\n        network_params.network not in constants.PUBLIC_NETWORKS\n        and constants.NETWORK_NAME.shadowfork not in network_params.network\n    ):\n        cmd.append(\n            \"--bootstrap-node=\"\n            + shared_utils.get_devnet_enodes(\n                plan, launcher.el_cl_genesis_data.files_artifact_uuid\n            )\n        )\n\n    if len(participant.el_extra_params) > 0:\n        # this is a repeated<proto type>, we convert it into Starlark\n        cmd.extend([param for param in participant.el_extra_params])\n\n    files = {\n        constants.GENESIS_DATA_MOUNTPOINT_ON_CLIENTS: launcher.el_cl_genesis_data.files_artifact_uuid,\n        constants.JWT_MOUNTPOINT_ON_CLIENTS: launcher.jwt_file,\n    }\n\n    if persistent:\n        volume_size_key = (\n            \"devnets\" if \"devnet\" in network_params.network else network_params.network\n        )\n        files[EXECUTION_DATA_DIRPATH_ON_CLIENT_CONTAINER] = Directory(\n            persistent_key=\"data-{0}\".format(service_name),\n            size=int(participant.el_volume_size)\n            if int(participant.el_volume_size) > 0\n            else constants.VOLUME_SIZE[volume_size_key][\n                constants.EL_TYPE.nimbus + \"_volume_size\"\n            ],\n        )\n\n    # Add extra mounts - automatically handle file uploads\n    processed_mounts = shared_utils.process_extra_mounts(\n        plan, participant.el_extra_mounts, extra_files_artifacts\n    )\n    for mount_path, artifact in processed_mounts.items():\n        files[mount_path] = artifact\n\n    # Binary injection - mount custom binary directory if provided\n    if el_binary_artifact != None:\n        files[\"/opt/bin\"] = el_binary_artifact.artifact\n\n    env_vars = participant.el_extra_env_vars\n    config_args = {\n        \"image\": participant.el_image,\n        \"ports\": used_ports,\n        \"public_ports\": public_ports,\n        \"publish_udp\": port_publisher.el_enabled,\n        \"cmd\": cmd,\n        \"files\": files,\n        \"private_ip_address_placeholder\": constants.PRIVATE_IP_ADDRESS_PLACEHOLDER,\n        \"env_vars\": env_vars,\n        \"labels\": shared_utils.label_maker(\n            client=constants.EL_TYPE.nimbus,\n            client_type=constants.CLIENT_TYPES.el,\n            image=participant.el_image[-constants.MAX_LABEL_LENGTH :],\n            connected_client=cl_client_name,\n            extra_labels=participant.el_extra_labels\n            | {constants.NODE_INDEX_LABEL_KEY: str(participant_index + 1)},\n            supernode=participant.supernode,\n        ),\n        \"tolerations\": tolerations,\n        \"node_selectors\": node_selectors,\n    }\n\n    # Binary injection - override entrypoint and cmd only when binary is provided\n    if el_binary_artifact != None:\n        config_args[\"entrypoint\"] = [\"sh\", \"-c\"]\n        config_args[\"cmd\"] = [\n            \"cp /opt/bin/{0} /usr/local/bin/nimbus && nimbus \".format(\n                el_binary_artifact.filename\n            )\n            + \" \".join(cmd)\n        ]\n\n    if participant.el_min_cpu > 0:\n        config_args[\"min_cpu\"] = participant.el_min_cpu\n    if participant.el_max_cpu > 0:\n        config_args[\"max_cpu\"] = participant.el_max_cpu\n    if participant.el_min_mem > 0:\n        config_args[\"min_memory\"] = participant.el_min_mem\n    if participant.el_max_mem > 0:\n        config_args[\"max_memory\"] = participant.el_max_mem\n    if len(participant.el_devices) > 0:\n        config_args[\"devices\"] = participant.el_devices\n    return ServiceConfig(**config_args)\n\n\n# makes request to [service_name] for enode and returns a full el_context\ndef get_el_context(\n    plan,\n    service_name,\n    service,\n    launcher,\n):\n    enode = el_admin_node_info.get_enode_for_node(\n        plan, service_name, constants.WS_RPC_PORT_ID\n    )\n\n    metric_url = \"{0}:{1}\".format(service.name, METRICS_PORT_NUM)\n    nimbus_metrics_info = node_metrics.new_node_metrics_info(\n        service_name, METRICS_PATH, metric_url\n    )\n\n    http_url = \"http://{0}:{1}\".format(service.name, WS_RPC_PORT_NUM)\n    ws_url = \"ws://{0}:{1}\".format(service.name, WS_RPC_PORT_NUM)\n\n    return el_context.new_el_context(\n        client_name=\"nimbus\",\n        enode=enode,\n        dns_name=service.name,\n        rpc_port_num=WS_RPC_PORT_NUM,\n        ws_port_num=WS_RPC_PORT_NUM,\n        engine_rpc_port_num=ENGINE_RPC_PORT_NUM,\n        rpc_http_url=http_url,\n        ws_url=ws_url,\n        service_name=service_name,\n        el_metrics_info=[nimbus_metrics_info],\n        ip_addr=service.ip_address,\n    )\n\n\ndef new_nimbus_launcher(el_cl_genesis_data, jwt_file):\n    return struct(\n        el_cl_genesis_data=el_cl_genesis_data,\n        jwt_file=jwt_file,\n    )\n"
  },
  {
    "path": "src/el/reth/reth_launcher.star",
    "content": "shared_utils = import_module(\"../../shared_utils/shared_utils.star\")\ninput_parser = import_module(\"../../package_io/input_parser.star\")\nel_context = import_module(\"../el_context.star\")\nel_admin_node_info = import_module(\"../el_admin_node_info.star\")\nel_shared = import_module(\"../el_shared.star\")\nnode_metrics = import_module(\"../../node_metrics_info.star\")\nconstants = import_module(\"../../package_io/constants.star\")\nmev_rs_builder = import_module(\"../../mev/mev-rs/mev_builder/mev_builder_launcher.star\")\nlighthouse = import_module(\"../../cl/lighthouse/lighthouse_launcher.star\")\nflashbots_rbuilder = import_module(\n    \"../../mev/flashbots/mev_builder/mev_builder_launcher.star\"\n)\n\nRPC_PORT_NUM = 8545\nWS_PORT_NUM = 8546\nDISCOVERY_PORT_NUM = 30303\nENGINE_RPC_PORT_NUM = 8551\nMETRICS_PORT_NUM = 9001\nRBUILDER_PORT_NUM = 8645\nRBUILDER_METRICS_PORT_NUM = 6060\n\n# Paths\nMETRICS_PATH = \"/metrics\"\n\n# The dirpath of the execution data directory on the client container\nEXECUTION_DATA_DIRPATH_ON_CLIENT_CONTAINER = \"/data/reth/execution-data\"\n\n\nVERBOSITY_LEVELS = {\n    constants.GLOBAL_LOG_LEVEL.error: \"v\",\n    constants.GLOBAL_LOG_LEVEL.warn: \"vv\",\n    constants.GLOBAL_LOG_LEVEL.info: \"vvv\",\n    constants.GLOBAL_LOG_LEVEL.debug: \"vvvv\",\n    constants.GLOBAL_LOG_LEVEL.trace: \"vvvvv\",\n}\n\n\ndef launch(\n    plan,\n    launcher,\n    service_name,\n    participant,\n    global_log_level,\n    existing_el_clients,\n    persistent,\n    tolerations,\n    node_selectors,\n    port_publisher,\n    participant_index,\n    network_params,\n    extra_files_artifacts,\n    bootnodoor_enode=None,\n    el_binary_artifact=None,\n):\n    cl_client_name = service_name.split(\"-\")[3]\n\n    config = get_config(\n        plan,\n        launcher,\n        participant,\n        service_name,\n        existing_el_clients,\n        cl_client_name,\n        global_log_level,\n        persistent,\n        tolerations,\n        node_selectors,\n        port_publisher,\n        participant_index,\n        network_params,\n        extra_files_artifacts,\n        bootnodoor_enode,\n        el_binary_artifact,\n    )\n\n    service = plan.add_service(\n        service_name, config, force_update=participant.el_force_restart\n    )\n\n    return get_el_context(\n        plan,\n        service_name,\n        service,\n        launcher,\n    )\n\n\ndef get_config(\n    plan,\n    launcher,\n    participant,\n    service_name,\n    existing_el_clients,\n    cl_client_name,\n    global_log_level,\n    persistent,\n    tolerations,\n    node_selectors,\n    port_publisher,\n    participant_index,\n    network_params,\n    extra_files_artifacts,\n    bootnodoor_enode=None,\n    el_binary_artifact=None,\n):\n    log_level = input_parser.get_client_log_level_or_default(\n        participant.el_log_level, global_log_level, VERBOSITY_LEVELS\n    )\n\n    public_ports = {}\n    public_ports_for_component = None\n    if port_publisher.el_enabled:\n        public_ports_for_component = shared_utils.get_public_ports_for_component(\n            \"el\", port_publisher, participant_index\n        )\n        public_ports = el_shared.get_general_el_public_port_specs(\n            public_ports_for_component\n        )\n        additional_public_port_assignments = {\n            constants.RPC_PORT_ID: public_ports_for_component[3],\n            constants.WS_PORT_ID: public_ports_for_component[4],\n        }\n        if (\n            launcher.builder_type == constants.FLASHBOTS_MEV_TYPE\n            or launcher.builder_type == constants.COMMIT_BOOST_MEV_TYPE\n            or launcher.builder_type == constants.HELIX_MEV_TYPE\n        ):\n            additional_public_port_assignments[\n                constants.RBUILDER_PORT_ID\n            ] = public_ports_for_component[5]\n            additional_public_port_assignments[\n                constants.RBUILDER_METRICS_PORT_ID\n            ] = public_ports_for_component[6]\n        public_ports.update(\n            shared_utils.get_port_specs(additional_public_port_assignments)\n        )\n\n    discovery_port_tcp = (\n        public_ports_for_component[0]\n        if public_ports_for_component\n        else DISCOVERY_PORT_NUM\n    )\n    discovery_port_udp = (\n        public_ports_for_component[0]\n        if public_ports_for_component\n        else DISCOVERY_PORT_NUM\n    )\n\n    used_port_assignments = {\n        constants.TCP_DISCOVERY_PORT_ID: discovery_port_tcp,\n        constants.UDP_DISCOVERY_PORT_ID: discovery_port_udp,\n        constants.ENGINE_RPC_PORT_ID: ENGINE_RPC_PORT_NUM,\n        constants.RPC_PORT_ID: RPC_PORT_NUM,\n        constants.WS_PORT_ID: WS_PORT_NUM,\n        constants.METRICS_PORT_ID: METRICS_PORT_NUM,\n    }\n\n    if (\n        launcher.builder_type == constants.FLASHBOTS_MEV_TYPE\n        or launcher.builder_type == constants.COMMIT_BOOST_MEV_TYPE\n        or launcher.builder_type == constants.HELIX_MEV_TYPE\n    ):\n        used_port_assignments[constants.RBUILDER_PORT_ID] = RBUILDER_PORT_NUM\n        used_port_assignments[\n            constants.RBUILDER_METRICS_PORT_ID\n        ] = RBUILDER_METRICS_PORT_NUM\n\n    used_ports = shared_utils.get_port_specs(used_port_assignments)\n\n    cmd = []\n\n    if launcher.builder_type == \"mev-rs\":\n        cmd.append(\"build\")\n\n    cmd.extend(\n        [\n            \"node\",\n            \"-{0}\".format(log_level),\n            \"--datadir=\" + EXECUTION_DATA_DIRPATH_ON_CLIENT_CONTAINER,\n            \"--chain={0}\".format(\n                network_params.network\n                if network_params.network in constants.PUBLIC_NETWORKS\n                else constants.GENESIS_CONFIG_MOUNT_PATH_ON_CONTAINER + \"/genesis.json\"\n            ),\n            \"--http\",\n            \"--http.port={0}\".format(RPC_PORT_NUM),\n            \"--http.addr=0.0.0.0\",\n            \"--http.corsdomain=*\",\n            \"--http.api=admin,net,eth,web3,debug,txpool,trace{0}\".format(\n                \",flashbots\"\n                if launcher.builder_type == constants.FLASHBOTS_MEV_TYPE\n                or launcher.builder_type == constants.COMMIT_BOOST_MEV_TYPE\n                or launcher.builder_type == constants.HELIX_MEV_TYPE\n                else \"\"\n            ),\n            \"--ws\",\n            \"--ws.addr=0.0.0.0\",\n            \"--ws.port={0}\".format(WS_PORT_NUM),\n            \"--ws.api=net,eth\",\n            \"--ws.origins=*\",\n            \"--nat=extip:\" + port_publisher.el_nat_exit_ip,\n            \"--authrpc.port={0}\".format(ENGINE_RPC_PORT_NUM),\n            \"--authrpc.jwtsecret=\" + constants.JWT_MOUNT_PATH_ON_CONTAINER,\n            \"--authrpc.addr=0.0.0.0\",\n            \"--metrics=0.0.0.0:{0}\".format(METRICS_PORT_NUM),\n            \"--discovery.port={0}\".format(discovery_port_udp),\n            \"--port={0}\".format(discovery_port_tcp),\n        ]\n    )\n\n    # Configure storage type - reth defaults to archive, use --full for full node\n    if participant.el_storage_type == \"full\":\n        cmd.append(\"--full\")\n\n    if network_params.gas_limit > 0:\n        cmd.append(\"--builder.gaslimit={0}\".format(network_params.gas_limit))\n\n    # Handle bootnode configuration with bootnodoor_enode override\n    if bootnodoor_enode != None:\n        cmd.append(\"--bootnodes=\" + bootnodoor_enode)\n    elif (\n        network_params.network == constants.NETWORK_NAME.kurtosis\n        or constants.NETWORK_NAME.shadowfork in network_params.network\n    ):\n        if len(existing_el_clients) > 0:\n            cmd.append(\n                \"--bootnodes=\"\n                + \",\".join(\n                    [\n                        ctx.enode\n                        for ctx in existing_el_clients[: constants.MAX_ENODE_ENTRIES]\n                    ]\n                )\n            )\n    elif (\n        network_params.network not in constants.PUBLIC_NETWORKS\n        and constants.NETWORK_NAME.shadowfork not in network_params.network\n    ):\n        cmd.append(\n            \"--bootnodes=\"\n            + shared_utils.get_devnet_enodes(\n                plan, launcher.el_cl_genesis_data.files_artifact_uuid\n            )\n        )\n\n    if len(participant.el_extra_params) > 0:\n        # this is a repeated<proto type>, we convert it into Starlark\n        cmd.extend([param for param in participant.el_extra_params])\n\n    files = {\n        constants.GENESIS_DATA_MOUNTPOINT_ON_CLIENTS: launcher.el_cl_genesis_data.files_artifact_uuid,\n        constants.JWT_MOUNTPOINT_ON_CLIENTS: launcher.jwt_file,\n    }\n\n    if persistent:\n        volume_size_key = (\n            \"devnets\" if \"devnet\" in network_params.network else network_params.network\n        )\n        files[EXECUTION_DATA_DIRPATH_ON_CLIENT_CONTAINER] = Directory(\n            persistent_key=\"data-{0}\".format(service_name),\n            size=int(participant.el_volume_size)\n            if int(participant.el_volume_size) > 0\n            else constants.VOLUME_SIZE[volume_size_key][\n                constants.EL_TYPE.reth + \"_volume_size\"\n            ],\n        )\n\n    # Add extra mounts - automatically handle file uploads\n    processed_mounts = shared_utils.process_extra_mounts(\n        plan, participant.el_extra_mounts, extra_files_artifacts\n    )\n    for mount_path, artifact in processed_mounts.items():\n        files[mount_path] = artifact\n\n    # Binary injection - mount custom binary directory if provided\n    # The artifact is a directory, so we mount it and reference the binary inside\n    if el_binary_artifact != None:\n        files[\"/opt/bin\"] = el_binary_artifact.artifact\n\n    env_vars = {}\n    image = participant.el_image\n    if launcher.builder_type == constants.MEV_RS_MEV_TYPE:\n        files[\n            mev_rs_builder.MEV_BUILDER_MOUNT_DIRPATH_ON_SERVICE\n        ] = mev_rs_builder.MEV_BUILDER_FILES_ARTIFACT_NAME\n    elif (\n        launcher.builder_type == constants.FLASHBOTS_MEV_TYPE\n        or launcher.builder_type == constants.COMMIT_BOOST_MEV_TYPE\n        or launcher.builder_type == constants.HELIX_MEV_TYPE\n    ):\n        image = launcher.mev_params.mev_builder_image\n        cl_client_name = service_name.split(\"-\")[4]\n        cmd.append(\"--rbuilder.config=\" + flashbots_rbuilder.MEV_FILE_PATH_ON_CONTAINER)\n        cmd.append(\"--engine.persistence-threshold=0\")\n        cmd.append(\"--engine.memory-block-buffer-target=0\")\n        cmd.append(\n            \"--txpool.no-local-transactions-propagation\"\n        )  # disable tx propagation so that builder will have juicy blocks\n        files[\n            flashbots_rbuilder.MEV_BUILDER_MOUNT_DIRPATH_ON_SERVICE\n        ] = flashbots_rbuilder.MEV_BUILDER_FILES_ARTIFACT_NAME\n        env_vars.update(\n            {\n                \"CL_ENDPOINT\": \"http://cl-{0}-{1}-{2}:{3}\".format(\n                    participant_index + 1,\n                    cl_client_name,\n                    constants.EL_TYPE.reth_builder,\n                    lighthouse.BEACON_HTTP_PORT_NUM,\n                ),\n            }\n        )\n\n    config_args = {\n        \"image\": image,\n        \"ports\": used_ports,\n        \"public_ports\": public_ports,\n        \"publish_udp\": port_publisher.el_enabled,\n        \"cmd\": cmd,\n        \"files\": files,\n        \"private_ip_address_placeholder\": constants.PRIVATE_IP_ADDRESS_PLACEHOLDER,\n        \"env_vars\": env_vars | participant.el_extra_env_vars,\n        \"labels\": shared_utils.label_maker(\n            client=constants.EL_TYPE.reth,\n            client_type=constants.CLIENT_TYPES.el,\n            image=participant.el_image[-constants.MAX_LABEL_LENGTH :],\n            connected_client=cl_client_name,\n            extra_labels=participant.el_extra_labels\n            | {constants.NODE_INDEX_LABEL_KEY: str(participant_index + 1)},\n            supernode=participant.supernode,\n        ),\n        \"tolerations\": tolerations,\n        \"node_selectors\": node_selectors,\n    }\n\n    # Binary injection - override entrypoint and cmd only when binary is provided\n    if el_binary_artifact != None:\n        config_args[\"entrypoint\"] = [\"sh\", \"-c\"]\n        config_args[\"cmd\"] = [\n            \"cp /opt/bin/{0} /usr/local/bin/reth && reth \".format(\n                el_binary_artifact.filename\n            )\n            + \" \".join(cmd)\n        ]\n\n    if participant.el_min_cpu > 0:\n        config_args[\"min_cpu\"] = participant.el_min_cpu\n    if participant.el_max_cpu > 0:\n        config_args[\"max_cpu\"] = participant.el_max_cpu\n    if participant.el_min_mem > 0:\n        config_args[\"min_memory\"] = participant.el_min_mem\n    if participant.el_max_mem > 0:\n        config_args[\"max_memory\"] = participant.el_max_mem\n    if len(participant.el_devices) > 0:\n        config_args[\"devices\"] = participant.el_devices\n    return ServiceConfig(**config_args)\n\n\n# makes request to [service_name] for enode and returns a full el_context\ndef get_el_context(\n    plan,\n    service_name,\n    service,\n    launcher,\n):\n    enode = el_admin_node_info.get_enode_for_node(\n        plan, service_name, constants.RPC_PORT_ID\n    )\n\n    metric_url = \"{0}:{1}\".format(service.name, METRICS_PORT_NUM)\n    reth_metrics_info = node_metrics.new_node_metrics_info(\n        service_name, METRICS_PATH, metric_url\n    )\n\n    http_url = \"http://{0}:{1}\".format(service.name, RPC_PORT_NUM)\n    ws_url = \"ws://{0}:{1}\".format(service.name, WS_PORT_NUM)\n\n    return el_context.new_el_context(\n        client_name=\"reth-builder\" if launcher.builder_type else \"reth\",\n        enode=enode,\n        dns_name=service.name,\n        rpc_port_num=RPC_PORT_NUM,\n        ws_port_num=WS_PORT_NUM,\n        engine_rpc_port_num=ENGINE_RPC_PORT_NUM,\n        rpc_http_url=http_url,\n        ws_url=ws_url,\n        service_name=service_name,\n        el_metrics_info=[reth_metrics_info],\n        ip_addr=service.ip_address,\n    )\n\n\ndef new_reth_launcher(\n    el_cl_genesis_data, jwt_file, builder_type=False, mev_params=None\n):\n    return struct(\n        el_cl_genesis_data=el_cl_genesis_data,\n        jwt_file=jwt_file,\n        builder_type=builder_type,\n        mev_params=mev_params,\n    )\n"
  },
  {
    "path": "src/erpc/erpc_launcher.star",
    "content": "shared_utils = import_module(\"../shared_utils/shared_utils.star\")\nconstants = import_module(\"../package_io/constants.star\")\ninput_parser = import_module(\"../package_io/input_parser.star\")\nSERVICE_NAME = \"erpc\"\n\nHTTP_PORT_NUMBER = 4000\nMETRICS_PORT_NUMBER = 4001\n\nERPC_CONFIG_FILENAME = \"erpc.yaml\"\n\nERPC_CONFIG_MOUNT_DIRPATH_ON_SERVICE = \"/root\"\n\nIMAGE_NAME = \"ghcr.io/erpc/erpc:latest\"\n\nMIN_CPU = 100\nMAX_CPU = 1000\nMIN_MEMORY = 128\nMAX_MEMORY = 2048\n\nUSED_PORTS = {\n    constants.HTTP_PORT_ID: shared_utils.new_port_spec(\n        HTTP_PORT_NUMBER,\n        shared_utils.TCP_PROTOCOL,\n        shared_utils.HTTP_APPLICATION_PROTOCOL,\n    ),\n    constants.METRICS_PORT_ID: shared_utils.new_port_spec(\n        METRICS_PORT_NUMBER,\n        shared_utils.TCP_PROTOCOL,\n        shared_utils.HTTP_APPLICATION_PROTOCOL,\n    ),\n}\n\n\ndef launch_erpc(\n    plan,\n    config_template,\n    participant_contexts,\n    participant_configs,\n    network_params,\n    global_node_selectors,\n    global_tolerations,\n    port_publisher,\n    additional_service_index,\n    docker_cache_params,\n):\n    tolerations = shared_utils.get_tolerations(global_tolerations=global_tolerations)\n\n    all_el_client_info = []\n    for index, participant in enumerate(participant_contexts):\n        full_name, _, el_client, _ = shared_utils.get_client_names(\n            participant, index, participant_contexts, participant_configs\n        )\n        all_el_client_info.append(\n            new_el_client_info(\n                el_client.dns_name,\n                el_client.rpc_port_num,\n                el_client.ws_port_num,\n                full_name,\n            )\n        )\n\n    template_data = new_config_template_data(\n        network_params.network,\n        network_params.network_id,\n        HTTP_PORT_NUMBER,\n        METRICS_PORT_NUMBER,\n        all_el_client_info,\n    )\n\n    template_and_data = shared_utils.new_template_and_data(\n        config_template, template_data\n    )\n    template_and_data_by_rel_dest_filepath = {}\n    template_and_data_by_rel_dest_filepath[ERPC_CONFIG_FILENAME] = template_and_data\n\n    config_files_artifact_name = plan.render_templates(\n        template_and_data_by_rel_dest_filepath, \"erpc-config\"\n    )\n\n    config = get_config(\n        config_files_artifact_name,\n        network_params,\n        global_node_selectors,\n        tolerations,\n        port_publisher,\n        additional_service_index,\n        docker_cache_params,\n    )\n\n    plan.add_service(SERVICE_NAME, config)\n\n\ndef get_config(\n    config_files_artifact_name,\n    network_params,\n    node_selectors,\n    tolerations,\n    port_publisher,\n    additional_service_index,\n    docker_cache_params,\n):\n    config_file_path = shared_utils.path_join(\n        ERPC_CONFIG_MOUNT_DIRPATH_ON_SERVICE,\n        ERPC_CONFIG_FILENAME,\n    )\n\n    public_ports = {}\n    if port_publisher.additional_services_enabled:\n        public_ports_for_component = shared_utils.get_public_ports_for_component(\n            \"additional_services\", port_publisher, additional_service_index\n        )\n        public_port_assignments = {\n            constants.HTTP_PORT_ID: public_ports_for_component[0],\n            constants.METRICS_PORT_ID: public_ports_for_component[1],\n        }\n        public_ports = shared_utils.get_port_specs(public_port_assignments)\n\n    return ServiceConfig(\n        image=shared_utils.docker_cache_image_calc(\n            docker_cache_params,\n            IMAGE_NAME,\n        ),\n        ports=USED_PORTS,\n        public_ports=public_ports,\n        files={\n            ERPC_CONFIG_MOUNT_DIRPATH_ON_SERVICE: config_files_artifact_name,\n        },\n        cmd=[\"/erpc-server\", config_file_path],\n        min_cpu=MIN_CPU,\n        max_cpu=MAX_CPU,\n        min_memory=MIN_MEMORY,\n        max_memory=MAX_MEMORY,\n        node_selectors=node_selectors,\n        tolerations=tolerations,\n        ready_conditions=ReadyCondition(\n            recipe=PostHttpRequestRecipe(\n                port_id=\"http\",\n                endpoint=\"/\",\n                content_type=\"application/json\",\n                body='{\"jsonrpc\":\"2.0\",\"method\":\"eth_blockNumber\",\"params\":[],\"id\":1}',\n            ),\n            field=\"code\",\n            assertion=\"==\",\n            target_value=200,\n        ),\n    )\n\n\ndef new_config_template_data(\n    network, network_id, http_port, metrics_port, el_client_info\n):\n    return {\n        \"Network\": network,\n        \"NetworkID\": network_id,\n        \"HTTPPort\": http_port,\n        \"MetricsPort\": metrics_port,\n        \"ELClientInfo\": el_client_info,\n    }\n\n\ndef new_el_client_info(ip_addr, rpc_port_num, ws_port_num, full_name):\n    return {\n        \"IP_Addr\": ip_addr,\n        \"RPC_PortNum\": rpc_port_num,\n        \"WS_PortNum\": ws_port_num,\n        \"FullName\": full_name,\n    }\n"
  },
  {
    "path": "src/ethereum_metrics_exporter/ethereum_metrics_exporter_context.star",
    "content": "def new_ethereum_metrics_exporter_context(\n    pair_name,\n    ip_addr,\n    metrics_port_num,\n    cl_name,\n    el_name,\n):\n    return struct(\n        pair_name=pair_name,\n        ip_addr=ip_addr,\n        metrics_port_num=metrics_port_num,\n        cl_name=cl_name,\n        el_name=el_name,\n    )\n"
  },
  {
    "path": "src/ethereum_metrics_exporter/ethereum_metrics_exporter_launcher.star",
    "content": "shared_utils = import_module(\"../shared_utils/shared_utils.star\")\nstatic_files = import_module(\"../static_files/static_files.star\")\nethereum_metrics_exporter_context = import_module(\n    \"../ethereum_metrics_exporter/ethereum_metrics_exporter_context.star\"\n)\ninput_parser = import_module(\"../package_io/input_parser.star\")\nHTTP_PORT_ID = \"http\"\nMETRICS_PORT_NUMBER = 9090\n\npath_to_el_db = \"/data/execution-db\"\npath_to_cl_db = \"/data/consensus-db\"\n\nDEFAULT_ETHEREUM_METRICS_EXPORTER_IMAGE = (\n    \"ethpandaops/ethereum-metrics-exporter:debian-latest\"\n)\n\n# The min/max CPU/memory that ethereum-metrics-exporter can use\nMIN_CPU = 10\nMAX_CPU = 100\nMIN_MEMORY = 16\nMAX_MEMORY = 128\n\n\ndef launch(\n    plan,\n    pair_name,\n    ethereum_metrics_exporter_service_name,\n    el_context,\n    cl_context,\n    node_selectors,\n    global_tolerations,\n    port_publisher,\n    global_other_index,\n    docker_cache_params,\n    persistent,\n):\n    tolerations = shared_utils.get_tolerations(global_tolerations=global_tolerations)\n    public_ports = shared_utils.get_other_public_port(\n        port_publisher,\n        HTTP_PORT_ID,\n        global_other_index,\n        0,\n    )\n    files = {}\n    cmd = [\n        \"--metrics-port\",\n        str(METRICS_PORT_NUMBER),\n        \"--consensus-url\",\n        \"{0}\".format(\n            cl_context.beacon_http_url,\n        ),\n        \"--execution-url\",\n        \"http://{}:{}\".format(\n            el_context.dns_name,\n            el_context.rpc_port_num,\n        ),\n    ]\n\n    if persistent:\n        cmd.append(\"--monitored-directories\")\n        cmd.append(path_to_cl_db)\n        cmd.append(\"--monitored-directories\")\n        cmd.append(path_to_el_db)\n        cmd.append(\"--disk-usage-interval\")\n        cmd.append(\"1m\")\n\n        files[path_to_el_db] = Directory(\n            persistent_key=\"data-{0}\".format(el_context.service_name),\n        )\n        files[path_to_cl_db] = Directory(\n            persistent_key=\"data-{0}\".format(cl_context.beacon_service_name),\n        )\n    exporter_service = plan.add_service(\n        ethereum_metrics_exporter_service_name,\n        ServiceConfig(\n            image=shared_utils.docker_cache_image_calc(\n                docker_cache_params,\n                DEFAULT_ETHEREUM_METRICS_EXPORTER_IMAGE,\n            ),\n            ports={\n                HTTP_PORT_ID: shared_utils.new_port_spec(\n                    METRICS_PORT_NUMBER,\n                    shared_utils.TCP_PROTOCOL,\n                    shared_utils.HTTP_APPLICATION_PROTOCOL,\n                )\n            },\n            public_ports=public_ports,\n            cmd=cmd,\n            files=files,\n            min_cpu=MIN_CPU,\n            max_cpu=MAX_CPU,\n            min_memory=MIN_MEMORY,\n            max_memory=MAX_MEMORY,\n            node_selectors=node_selectors,\n            tolerations=tolerations,\n        ),\n    )\n\n    return ethereum_metrics_exporter_context.new_ethereum_metrics_exporter_context(\n        pair_name,\n        exporter_service.name,\n        METRICS_PORT_NUMBER,\n        cl_context.client_name,\n        el_context.client_name,\n    )\n"
  },
  {
    "path": "src/forkmon/forkmon_launcher.star",
    "content": "shared_utils = import_module(\"../shared_utils/shared_utils.star\")\nconstants = import_module(\"../package_io/constants.star\")\ninput_parser = import_module(\"../package_io/input_parser.star\")\n\nSERVICE_NAME = \"forkmon\"\nIMAGE_NAME = \"ethpandaops/execution-monitor:master\"\n\nHTTP_PORT_NUMBER = 8080\n\nFORKMON_CONFIG_FILENAME = \"forkmon-config.toml\"\n\nFORKMON_CONFIG_MOUNT_DIRPATH_ON_SERVICE = \"/config\"\n\nUSED_PORTS = {\n    constants.HTTP_PORT_ID: shared_utils.new_port_spec(\n        HTTP_PORT_NUMBER,\n        shared_utils.TCP_PROTOCOL,\n        shared_utils.HTTP_APPLICATION_PROTOCOL,\n    )\n}\n\n# The min/max CPU/memory that forkmon can use\nMIN_CPU = 10\nMAX_CPU = 100\nMIN_MEMORY = 32\nMAX_MEMORY = 256\n\n\ndef launch_forkmon(\n    plan,\n    config_template,\n    el_contexts,\n    global_node_selectors,\n    global_tolerations,\n    port_publisher,\n    additional_service_index,\n    docker_cache_params,\n):\n    tolerations = shared_utils.get_tolerations(global_tolerations=global_tolerations)\n\n    all_el_client_info = []\n    for client in el_contexts:\n        client_info = new_el_client_info(\n            client.dns_name, client.rpc_port_num, client.service_name\n        )\n        all_el_client_info.append(client_info)\n\n    template_data = new_config_template_data(HTTP_PORT_NUMBER, all_el_client_info)\n\n    template_and_data = shared_utils.new_template_and_data(\n        config_template, template_data\n    )\n    template_and_data_by_rel_dest_filepath = {}\n    template_and_data_by_rel_dest_filepath[FORKMON_CONFIG_FILENAME] = template_and_data\n\n    config_files_artifact_name = plan.render_templates(\n        template_and_data_by_rel_dest_filepath, \"forkmon-config\"\n    )\n\n    config = get_config(\n        config_files_artifact_name,\n        global_node_selectors,\n        tolerations,\n        port_publisher,\n        additional_service_index,\n        docker_cache_params,\n    )\n\n    plan.add_service(SERVICE_NAME, config)\n\n\ndef get_config(\n    config_files_artifact_name,\n    node_selectors,\n    tolerations,\n    port_publisher,\n    additional_service_index,\n    docker_cache_params,\n):\n    config_file_path = shared_utils.path_join(\n        FORKMON_CONFIG_MOUNT_DIRPATH_ON_SERVICE, FORKMON_CONFIG_FILENAME\n    )\n\n    public_ports = shared_utils.get_additional_service_standard_public_port(\n        port_publisher,\n        constants.HTTP_PORT_ID,\n        additional_service_index,\n        0,\n    )\n\n    return ServiceConfig(\n        image=shared_utils.docker_cache_image_calc(\n            docker_cache_params,\n            IMAGE_NAME,\n        ),\n        ports=USED_PORTS,\n        public_ports=public_ports,\n        files={\n            FORKMON_CONFIG_MOUNT_DIRPATH_ON_SERVICE: config_files_artifact_name,\n        },\n        cmd=[config_file_path],\n        min_cpu=MIN_CPU,\n        max_cpu=MAX_CPU,\n        min_memory=MIN_MEMORY,\n        max_memory=MAX_MEMORY,\n        node_selectors=node_selectors,\n        tolerations=tolerations,\n    )\n\n\ndef new_config_template_data(listen_port_num, el_client_info):\n    return {\n        \"ListenPortNum\": listen_port_num,\n        \"ELClientInfo\": el_client_info,\n    }\n\n\ndef new_el_client_info(ip_addr, port_num, service_name):\n    return {\"IPAddr\": ip_addr, \"PortNum\": port_num, \"Name\": service_name}\n"
  },
  {
    "path": "src/forky/forky_launcher.star",
    "content": "shared_utils = import_module(\"../shared_utils/shared_utils.star\")\nconstants = import_module(\"../package_io/constants.star\")\ninput_parser = import_module(\"../package_io/input_parser.star\")\n\nSERVICE_NAME = \"forky\"\n\nHTTP_PORT_NUMBER = 8080\n\nFORKY_CONFIG_FILENAME = \"forky-config.yaml\"\n\nFORKY_CONFIG_MOUNT_DIRPATH_ON_SERVICE = \"/config\"\n\nVALIDATOR_RANGES_MOUNT_DIRPATH_ON_SERVICE = \"/validator-ranges\"\nVALIDATOR_RANGES_ARTIFACT_NAME = \"validator-ranges\"\n\n# The min/max CPU/memory that forky can use\nMIN_CPU = 100\nMAX_CPU = 1000\nMIN_MEMORY = 128\nMAX_MEMORY = 2048\n\nUSED_PORTS = {\n    constants.HTTP_PORT_ID: shared_utils.new_port_spec(\n        HTTP_PORT_NUMBER,\n        shared_utils.TCP_PROTOCOL,\n        shared_utils.HTTP_APPLICATION_PROTOCOL,\n    )\n}\n\n\ndef launch_forky(\n    plan,\n    config_template,\n    participant_contexts,\n    participant_configs,\n    el_cl_data_files_artifact_uuid,\n    network_params,\n    global_node_selectors,\n    global_tolerations,\n    final_genesis_timestamp,\n    port_publisher,\n    additional_service_index,\n    docker_cache_params,\n):\n    tolerations = shared_utils.get_tolerations(global_tolerations=global_tolerations)\n\n    all_cl_client_info = []\n    all_el_client_info = []\n    for index, participant in enumerate(participant_contexts):\n        full_name, cl_client, el_client, _ = shared_utils.get_client_names(\n            participant, index, participant_contexts, participant_configs\n        )\n        all_cl_client_info.append(\n            new_cl_client_info(\n                cl_client.beacon_http_url,\n                full_name,\n            )\n        )\n        all_el_client_info.append(\n            new_el_client_info(\n                \"http://{0}:{1}\".format(\n                    el_client.dns_name,\n                    el_client.rpc_port_num,\n                ),\n                full_name,\n            )\n        )\n\n    template_data = new_config_template_data(\n        network_params.network,\n        network_params.seconds_per_slot,\n        final_genesis_timestamp,\n        network_params.preset,\n        HTTP_PORT_NUMBER,\n        all_cl_client_info,\n        all_el_client_info,\n    )\n\n    template_and_data = shared_utils.new_template_and_data(\n        config_template, template_data\n    )\n    template_and_data_by_rel_dest_filepath = {}\n    template_and_data_by_rel_dest_filepath[FORKY_CONFIG_FILENAME] = template_and_data\n\n    config_files_artifact_name = plan.render_templates(\n        template_and_data_by_rel_dest_filepath, \"forky-config\"\n    )\n    el_cl_data_files_artifact_uuid = el_cl_data_files_artifact_uuid\n    config = get_config(\n        config_files_artifact_name,\n        el_cl_data_files_artifact_uuid,\n        network_params,\n        global_node_selectors,\n        tolerations,\n        port_publisher,\n        additional_service_index,\n        docker_cache_params,\n    )\n\n    plan.add_service(SERVICE_NAME, config)\n\n\ndef get_config(\n    config_files_artifact_name,\n    el_cl_data_files_artifact_uuid,\n    network_params,\n    node_selectors,\n    tolerations,\n    port_publisher,\n    additional_service_index,\n    docker_cache_params,\n):\n    config_file_path = shared_utils.path_join(\n        FORKY_CONFIG_MOUNT_DIRPATH_ON_SERVICE,\n        FORKY_CONFIG_FILENAME,\n    )\n\n    IMAGE_NAME = \"ethpandaops/forky:latest\"\n\n    public_ports = shared_utils.get_additional_service_standard_public_port(\n        port_publisher,\n        constants.HTTP_PORT_ID,\n        additional_service_index,\n        0,\n    )\n\n    return ServiceConfig(\n        image=shared_utils.docker_cache_image_calc(\n            docker_cache_params,\n            IMAGE_NAME,\n        ),\n        ports=USED_PORTS,\n        public_ports=public_ports,\n        files={\n            FORKY_CONFIG_MOUNT_DIRPATH_ON_SERVICE: config_files_artifact_name,\n            VALIDATOR_RANGES_MOUNT_DIRPATH_ON_SERVICE: VALIDATOR_RANGES_ARTIFACT_NAME,\n            constants.GENESIS_DATA_MOUNTPOINT_ON_CLIENTS: el_cl_data_files_artifact_uuid,\n        },\n        cmd=[\"--config\", config_file_path],\n        min_cpu=MIN_CPU,\n        max_cpu=MAX_CPU,\n        min_memory=MIN_MEMORY,\n        max_memory=MAX_MEMORY,\n        node_selectors=node_selectors,\n        tolerations=tolerations,\n    )\n\n\ndef new_config_template_data(\n    network,\n    seconds_per_slot,\n    final_genesis_timestamp,\n    preset,\n    listen_port_num,\n    cl_client_info,\n    el_client_info,\n):\n    return {\n        \"Network\": network,\n        \"SecondsPerSlot\": seconds_per_slot,\n        \"FinalGenesisTimestamp\": final_genesis_timestamp,\n        \"Preset\": preset,\n        \"ListenPortNum\": listen_port_num,\n        \"CLClientInfo\": cl_client_info,\n        \"ELClientInfo\": el_client_info,\n        \"PublicNetwork\": True if network in constants.PUBLIC_NETWORKS else False,\n    }\n\n\ndef new_cl_client_info(beacon_http_url, full_name):\n    return {\n        \"Beacon_HTTP_URL\": beacon_http_url,\n        \"FullName\": full_name,\n    }\n\n\ndef new_el_client_info(execution_http_url, full_name):\n    return {\n        \"Execution_HTTP_URL\": execution_http_url,\n        \"FullName\": full_name,\n    }\n"
  },
  {
    "path": "src/full_beaconchain/full_beaconchain_launcher.star",
    "content": "shared_utils = import_module(\"../shared_utils/shared_utils.star\")\npostgres = import_module(\"github.com/kurtosis-tech/postgres-package/main.star\")\nredis = import_module(\"github.com/kurtosis-tech/redis-package/main.star\")\nconstants = import_module(\"../package_io/constants.star\")\ninput_parser = import_module(\"../package_io/input_parser.star\")\nIMAGE_NAME = \"gobitfly/eth2-beaconchain-explorer:latest\"\n\nPOSTGRES_PORT_ID = \"postgres\"\nPOSTGRES_PORT_NUMBER = 5432\nPOSTGRES_DB = \"db\"\nPOSTGRES_USER = \"postgres\"\nPOSTGRES_PASSWORD = \"pass\"\n\nREDIS_PORT_ID = \"redis\"\nREDIS_PORT_NUMBER = 6379\n\nFRONTEND_PORT_NUMBER = 8080\nLITTLE_BIGTABLE_PORT_NUMBER = 9000\n\nFULL_BEACONCHAIN_CONFIG_FILENAME = \"beaconchain-config.yml\"\n\n\ndef get_little_bigtable_host(little_bigtable, port_publisher):\n    if port_publisher.additional_services_enabled:\n        return port_publisher.additional_services_nat_exit_ip\n    return little_bigtable.ip_address\n\n\ndef get_little_bigtable_port(little_bigtable, port_publisher):\n    if port_publisher.additional_services_enabled:\n        public_ports = shared_utils.get_public_ports_for_component(\n            \"additional_services\", port_publisher, 0\n        )\n        return public_ports[0]  # Use first port for little bigtable\n    return LITTLE_BIGTABLE_PORT_NUMBER\n\n\n# The min/max CPU/memory that postgres can use\nPOSTGRES_MIN_CPU = 10\nPOSTGRES_MAX_CPU = 1000\nPOSTGRES_MIN_MEMORY = 32\nPOSTGRES_MAX_MEMORY = 1024\n\n# The min/max CPU/memory that redis can use\nREDIS_MIN_CPU = 10\nREDIS_MAX_CPU = 1000\nREDIS_MIN_MEMORY = 32\nREDIS_MAX_MEMORY = 1024\n\n# The min/max CPU/memory that littlebigtable can use\nLITTLE_BIGTABLE_MIN_CPU = 100\nLITTLE_BIGTABLE_MAX_CPU = 1000\nLITTLE_BIGTABLE_MIN_MEMORY = 128\nLITTLE_BIGTABLE_MAX_MEMORY = 2048\n\n# The min/max CPU/memory that the indexer can use\nINDEXER_MIN_CPU = 100\nINDEXER_MAX_CPU = 1000\nINDEXER_MIN_MEMORY = 1024\nINDEXER_MAX_MEMORY = 2048\n\n# The min/max CPU/memory that the init can use\nINIT_MIN_CPU = 10\nINIT_MAX_CPU = 100\nINIT_MIN_MEMORY = 32\nINIT_MAX_MEMORY = 128\n\n# The min/max CPU/memory that the eth1indexer can use\nETH1INDEXER_MIN_CPU = 100\nETH1INDEXER_MAX_CPU = 1000\nETH1INDEXER_MIN_MEMORY = 128\nETH1INDEXER_MAX_MEMORY = 1024\n\n# The min/max CPU/memory that the rewards-exporter can use\nREWARDSEXPORTER_MIN_CPU = 10\nREWARDSEXPORTER_MAX_CPU = 100\nREWARDSEXPORTER_MIN_MEMORY = 32\nREWARDSEXPORTER_MAX_MEMORY = 128\n\n# The min/max CPU/memory that the statistics can use\nSTATISTICS_MIN_CPU = 10\nSTATISTICS_MAX_CPU = 100\nSTATISTICS_MIN_MEMORY = 32\nSTATISTICS_MAX_MEMORY = 128\n\n# The min/max CPU/memory that the frontend-data-updater can use\nFDU_MIN_CPU = 10\nFDU_MAX_CPU = 100\nFDU_MIN_MEMORY = 32\nFDU_MAX_MEMORY = 128\n\n# The min/max CPU/memory that the frontend can use\nFRONTEND_MIN_CPU = 100\nFRONTEND_MAX_CPU = 1000\nFRONTEND_MIN_MEMORY = 512\nFRONTEND_MAX_MEMORY = 2048\n\n\ndef launch_full_beacon(\n    plan,\n    config_template,\n    el_cl_data_files_artifact_uuid,\n    cl_contexts,\n    el_contexts,\n    persistent,\n    global_node_selectors,\n    global_tolerations,\n    port_publisher,\n    additional_service_index,\n):\n    tolerations = shared_utils.get_tolerations(global_tolerations=global_tolerations)\n    node_selectors = global_node_selectors\n    postgres_output = postgres.run(\n        plan,\n        service_name=\"beaconchain-postgres\",\n        image=\"postgres:15.2-alpine\",\n        user=POSTGRES_USER,\n        password=POSTGRES_PASSWORD,\n        database=POSTGRES_DB,\n        min_cpu=POSTGRES_MIN_CPU,\n        max_cpu=POSTGRES_MAX_CPU,\n        min_memory=POSTGRES_MIN_MEMORY,\n        max_memory=POSTGRES_MAX_MEMORY,\n        persistent=persistent,\n        node_selectors=node_selectors,\n        tolerations=tolerations,\n    )\n    redis_output = redis.run(\n        plan,\n        service_name=\"beaconchain-redis\",\n        image=\"redis:7\",\n        min_cpu=REDIS_MIN_CPU,\n        max_cpu=REDIS_MAX_CPU,\n        min_memory=REDIS_MIN_MEMORY,\n        max_memory=REDIS_MAX_MEMORY,\n        node_selectors=node_selectors,\n        tolerations=tolerations,\n    )\n    # TODO perhaps create a new service for the littlebigtable\n    little_bigtable = plan.add_service(\n        name=\"beaconchain-littlebigtable\",\n        config=get_little_bigtable_config(\n            node_selectors, tolerations, port_publisher, additional_service_index\n        ),\n    )\n\n    el_uri = \"http://{0}:{1}\".format(\n        el_contexts[0].dns_name, el_contexts[0].rpc_port_num\n    )\n    redis_url = \"{}:{}\".format(redis_output.hostname, redis_output.port_number)\n\n    template_data = new_config_template_data(\n        cl_contexts[0].dns_name,\n        cl_contexts[0].http_port,\n        cl_contexts[0].client_name,\n        el_uri,\n        get_little_bigtable_host(little_bigtable, port_publisher),\n        get_little_bigtable_port(little_bigtable, port_publisher),\n        postgres_output.service.name,\n        POSTGRES_PORT_NUMBER,\n        redis_url,\n        FRONTEND_PORT_NUMBER,\n    )\n\n    template_and_data = shared_utils.new_template_and_data(\n        config_template, template_data\n    )\n    template_and_data_by_rel_dest_filepath = {}\n    template_and_data_by_rel_dest_filepath[\n        FULL_BEACONCHAIN_CONFIG_FILENAME\n    ] = template_and_data\n\n    config_files_artifact_name = plan.render_templates(\n        template_and_data_by_rel_dest_filepath, \"beaconchain-config.yml\"\n    )\n\n    files = {\n        \"/app/config/\": config_files_artifact_name,\n        constants.GENESIS_DATA_MOUNTPOINT_ON_CLIENTS: el_cl_data_files_artifact_uuid,\n    }\n\n    # Initialize the db schema\n    initdbschema = plan.add_service(\n        name=\"beaconchain-schema-initializer\",\n        config=ServiceConfig(\n            image=IMAGE_NAME,\n            files=files,\n            entrypoint=[\"tail\", \"-f\", \"/dev/null\"],\n            min_cpu=INIT_MIN_CPU,\n            max_cpu=INIT_MAX_CPU,\n            min_memory=INIT_MIN_MEMORY,\n            max_memory=INIT_MAX_MEMORY,\n            node_selectors=node_selectors,\n            tolerations=tolerations,\n        ),\n    )\n\n    plan.print(\"applying db schema\")\n    plan.exec(\n        service_name=initdbschema.name,\n        description=\"Applying db schema\",\n        recipe=ExecRecipe(\n            [\n                \"./misc\",\n                \"-config\",\n                \"/app/config/beaconchain-config.yml\",\n                \"-command\",\n                \"applyDbSchema\",\n            ]\n        ),\n    )\n\n    plan.print(\"applying big table schema\")\n    # Initialize the bigtable schema\n    plan.exec(\n        service_name=initdbschema.name,\n        description=\"Applying big table schema\",\n        recipe=ExecRecipe(\n            [\n                \"./misc\",\n                \"-config\",\n                \"/app/config/beaconchain-config.yml\",\n                \"-command\",\n                \"initBigtableSchema\",\n            ]\n        ),\n    )\n\n    # Start the indexer\n    indexer = plan.add_service(\n        name=\"beaconchain-indexer\",\n        config=ServiceConfig(\n            image=IMAGE_NAME,\n            files=files,\n            entrypoint=[\"./explorer\"],\n            cmd=[\n                \"-config\",\n                \"/app/config/beaconchain-config.yml\",\n            ],\n            env_vars={\n                \"INDEXER_ENABLED\": \"TRUE\",\n            },\n            min_cpu=INDEXER_MIN_CPU,\n            max_cpu=INDEXER_MAX_CPU,\n            min_memory=INDEXER_MIN_MEMORY,\n            max_memory=INDEXER_MAX_MEMORY,\n            node_selectors=node_selectors,\n            tolerations=tolerations,\n        ),\n    )\n    # Start the eth1indexer\n    eth1indexer = plan.add_service(\n        name=\"beaconchain-eth1indexer\",\n        config=ServiceConfig(\n            image=IMAGE_NAME,\n            files=files,\n            entrypoint=[\"./eth1indexer\"],\n            cmd=[\n                \"-config\",\n                \"/app/config/beaconchain-config.yml\",\n                \"-blocks.concurrency\",\n                \"1\",\n                \"-blocks.tracemode\",\n                \"geth\",\n                \"-data.concurrency\",\n                \"1\",\n                \"-balances.enabled\",\n            ],\n            min_cpu=ETH1INDEXER_MIN_CPU,\n            max_cpu=ETH1INDEXER_MAX_CPU,\n            min_memory=ETH1INDEXER_MIN_MEMORY,\n            max_memory=ETH1INDEXER_MAX_MEMORY,\n            node_selectors=node_selectors,\n            tolerations=tolerations,\n        ),\n    )\n\n    rewardsexporter = plan.add_service(\n        name=\"beaconchain-rewardsexporter\",\n        config=ServiceConfig(\n            image=IMAGE_NAME,\n            files=files,\n            entrypoint=[\"./rewards-exporter\"],\n            cmd=[\n                \"-config\",\n                \"/app/config/beaconchain-config.yml\",\n            ],\n            min_cpu=REWARDSEXPORTER_MIN_CPU,\n            max_cpu=REWARDSEXPORTER_MAX_CPU,\n            min_memory=REWARDSEXPORTER_MIN_MEMORY,\n            max_memory=REWARDSEXPORTER_MAX_MEMORY,\n            node_selectors=node_selectors,\n            tolerations=tolerations,\n        ),\n    )\n\n    statistics = plan.add_service(\n        name=\"beaconchain-statistics\",\n        config=ServiceConfig(\n            image=IMAGE_NAME,\n            files=files,\n            entrypoint=[\"./statistics\"],\n            cmd=[\n                \"-config\",\n                \"/app/config/beaconchain-config.yml\",\n                \"-charts.enabled\",\n                \"-graffiti.enabled\",\n                \"-validators.enabled\",\n            ],\n            min_cpu=STATISTICS_MIN_CPU,\n            max_cpu=STATISTICS_MAX_CPU,\n            min_memory=STATISTICS_MIN_MEMORY,\n            max_memory=STATISTICS_MAX_MEMORY,\n            node_selectors=node_selectors,\n            tolerations=tolerations,\n        ),\n    )\n\n    fdu = plan.add_service(\n        name=\"beaconchain-fdu\",\n        config=ServiceConfig(\n            image=IMAGE_NAME,\n            files=files,\n            entrypoint=[\"./frontend-data-updater\"],\n            cmd=[\n                \"-config\",\n                \"/app/config/beaconchain-config.yml\",\n            ],\n            min_cpu=FDU_MIN_CPU,\n            max_cpu=FDU_MAX_CPU,\n            min_memory=FDU_MIN_MEMORY,\n            max_memory=FDU_MAX_MEMORY,\n            node_selectors=node_selectors,\n            tolerations=tolerations,\n        ),\n    )\n\n    frontend = plan.add_service(\n        name=\"beaconchain-frontend\",\n        config=get_frontend_config(\n            files,\n            node_selectors,\n            global_tolerations,\n            port_publisher,\n            additional_service_index,\n        ),\n    )\n\n\ndef get_little_bigtable_config(\n    node_selectors, tolerations, port_publisher, additional_service_index\n):\n    public_ports = shared_utils.get_additional_service_standard_public_port(\n        port_publisher,\n        constants.LITTLE_BIGTABLE_PORT_ID,\n        additional_service_index,\n        0,\n    )\n    return ServiceConfig(\n        image=\"gobitfly/little_bigtable:latest\",\n        ports={\n            constants.LITTLE_BIGTABLE_PORT_ID: PortSpec(\n                LITTLE_BIGTABLE_PORT_NUMBER, application_protocol=\"tcp\"\n            )\n        },\n        public_ports=public_ports,\n        min_cpu=LITTLE_BIGTABLE_MIN_CPU,\n        max_cpu=LITTLE_BIGTABLE_MAX_CPU,\n        min_memory=LITTLE_BIGTABLE_MIN_MEMORY,\n        max_memory=LITTLE_BIGTABLE_MAX_MEMORY,\n        node_selectors=node_selectors,\n        tolerations=tolerations,\n    )\n\n\ndef get_frontend_config(\n    files, node_selectors, tolerations, port_publisher, additional_service_index\n):\n    public_ports = shared_utils.get_additional_service_standard_public_port(\n        port_publisher,\n        constants.HTTP_PORT_ID,\n        additional_service_index,\n        1,\n    )\n    return ServiceConfig(\n        image=IMAGE_NAME,\n        files=files,\n        entrypoint=[\"./explorer\"],\n        cmd=[\n            \"-config\",\n            \"/app/config/beaconchain-config.yml\",\n        ],\n        env_vars={\n            \"FRONTEND_ENABLED\": \"TRUE\",\n        },\n        ports={\n            constants.HTTP_PORT_ID: PortSpec(\n                FRONTEND_PORT_NUMBER, application_protocol=\"http\"\n            ),\n        },\n        public_ports=public_ports,\n        min_cpu=FRONTEND_MIN_CPU,\n        max_cpu=FRONTEND_MAX_CPU,\n        min_memory=FRONTEND_MIN_MEMORY,\n        max_memory=FRONTEND_MAX_MEMORY,\n        node_selectors=node_selectors,\n        tolerations=tolerations,\n    )\n\n\ndef new_config_template_data(\n    cl_url,\n    cl_port,\n    cl_type,\n    el_uri,\n    lbt_host,\n    lbt_port,\n    db_host,\n    db_port,\n    redis_url,\n    frontend_port,\n):\n    return {\n        \"CLNodeHost\": cl_url,\n        \"CLNodePort\": cl_port,\n        \"CLNodeType\": cl_type,\n        \"ELNodeEndpoint\": el_uri,\n        \"LBTHost\": lbt_host,\n        \"LBTPort\": lbt_port,\n        \"DBName\": POSTGRES_DB,\n        \"DBUser\": POSTGRES_USER,\n        \"DBPass\": POSTGRES_PASSWORD,\n        \"DBHost\": db_host,\n        \"DBPort\": db_port,\n        \"RedisEndpoint\": redis_url,\n        \"FrontendPort\": frontend_port,\n    }\n"
  },
  {
    "path": "src/grafana/grafana_launcher.star",
    "content": "shared_utils = import_module(\"../shared_utils/shared_utils.star\")\nstatic_files = import_module(\"../static_files/static_files.star\")\nconstants = import_module(\"../package_io/constants.star\")\ninput_parser = import_module(\"../package_io/input_parser.star\")\n\nSERVICE_NAME = \"grafana\"\n\nHTTP_PORT_ID = \"http\"\nHTTP_PORT_NUMBER_UINT16 = 3000\n\nDATASOURCE_CONFIG_REL_FILEPATH = \"datasources/datasource.yml\"\n\n# this is relative to the files artifact root\nDASHBOARD_PROVIDERS_CONFIG_REL_FILEPATH = \"dashboards/dashboard-providers.yml\"\n\nCONFIG_DIRPATH_ENV_VAR = \"GF_PATHS_PROVISIONING\"\n\nGRAFANA_CONFIG_DIRPATH_ON_SERVICE = \"/config\"\nGRAFANA_DASHBOARDS_DIRPATH_ON_SERVICE = \"/dashboards\"\nGRAFANA_DASHBOARDS_FILEPATH_ON_SERVICE = GRAFANA_DASHBOARDS_DIRPATH_ON_SERVICE\n\nGRAFANA_ADDITIONAL_DASHBOARDS_FOLDER_NAME = \"grafana-additional-dashboards-{0}\"\nGRAFANA_ADDITIONAL_DASHBOARDS_MERGED_STORED_PATH_FORMAT = (\n    GRAFANA_DASHBOARDS_DIRPATH_ON_SERVICE + \"/*\"\n)\nGRAFANA_ADDITIONAL_DASHBOARDS_FILEPATH_ON_SERVICE = \"/additional-dashobards\"\nGRAFANA_ADDITIONAL_DASHBOARDS_FILEPATH_ON_SERVICE_FORMAT = (\n    GRAFANA_ADDITIONAL_DASHBOARDS_FILEPATH_ON_SERVICE + \"/{0}\"\n)\nGRAFANA_ADDITIONAL_DASHBOARDS_SERVICE_PATH_KEY = \"ServicePath\"\nGRANAFA_ADDITIONAL_DASHBOARDS_ARTIFACT_NAME_KEY = \"ArtifactName\"\n\nUSED_PORTS = {\n    HTTP_PORT_ID: shared_utils.new_port_spec(\n        HTTP_PORT_NUMBER_UINT16,\n        shared_utils.TCP_PROTOCOL,\n        shared_utils.HTTP_APPLICATION_PROTOCOL,\n    )\n}\n\n\ndef launch_grafana(\n    plan,\n    datasource_config_template,\n    dashboard_providers_config_template,\n    prometheus_private_url,\n    global_node_selectors,\n    global_tolerations,\n    grafana_params,\n    port_publisher,\n    index,\n    tempo_query_url=None,\n):\n    tolerations = shared_utils.get_tolerations(global_tolerations=global_tolerations)\n\n    (\n        grafana_config_artifacts_uuid,\n        grafana_dashboards_artifacts_uuid,\n        grafana_additional_dashboards_data,\n    ) = get_grafana_config_dir_artifact_uuid(\n        plan,\n        datasource_config_template,\n        dashboard_providers_config_template,\n        prometheus_private_url,\n        tempo_query_url,\n        additional_dashboards=grafana_params.additional_dashboards,\n    )\n\n    merged_dashboards_artifact_name = merge_dashboards_artifacts(\n        plan,\n        grafana_dashboards_artifacts_uuid,\n        grafana_additional_dashboards_data,\n        global_tolerations,\n        global_node_selectors,\n    )\n\n    public_ports = shared_utils.get_additional_service_standard_public_port(\n        port_publisher,\n        HTTP_PORT_ID,\n        index,\n        1,\n    )\n\n    config = get_config(\n        grafana_config_artifacts_uuid,\n        merged_dashboards_artifact_name,\n        global_node_selectors,\n        tolerations,\n        grafana_params,\n        public_ports,\n    )\n\n    plan.add_service(SERVICE_NAME, config)\n\n\ndef get_grafana_config_dir_artifact_uuid(\n    plan,\n    datasource_config_template,\n    dashboard_providers_config_template,\n    prometheus_private_url,\n    tempo_query_url,\n    additional_dashboards=[],\n):\n    datasource_data = new_datasource_config_template_data(\n        prometheus_private_url, tempo_query_url\n    )\n    datasource_template_and_data = shared_utils.new_template_and_data(\n        datasource_config_template, datasource_data\n    )\n\n    dashboard_providers_data = new_dashboard_providers_config_template_data(\n        GRAFANA_DASHBOARDS_FILEPATH_ON_SERVICE\n    )\n    dashboard_providers_template_and_data = shared_utils.new_template_and_data(\n        dashboard_providers_config_template, dashboard_providers_data\n    )\n\n    template_and_data_by_rel_dest_filepath = {}\n    template_and_data_by_rel_dest_filepath[\n        DATASOURCE_CONFIG_REL_FILEPATH\n    ] = datasource_template_and_data\n    template_and_data_by_rel_dest_filepath[\n        DASHBOARD_PROVIDERS_CONFIG_REL_FILEPATH\n    ] = dashboard_providers_template_and_data\n\n    grafana_config_artifacts_name = plan.render_templates(\n        template_and_data_by_rel_dest_filepath, name=\"grafana-config\"\n    )\n\n    grafana_dashboards_artifacts_name = plan.upload_files(\n        static_files.GRAFANA_DASHBOARDS_CONFIG_DIRPATH, name=\"grafana-dashboards\"\n    )\n\n    grafana_additional_dashboards_data = upload_additional_dashboards(\n        plan, additional_dashboards\n    )\n\n    return (\n        grafana_config_artifacts_name,\n        grafana_dashboards_artifacts_name,\n        grafana_additional_dashboards_data,\n    )\n\n\ndef get_config(\n    grafana_config_artifacts_name,\n    grafana_dashboards_artifacts_name,\n    node_selectors,\n    tolerations,\n    grafana_params,\n    public_ports,\n):\n    return ServiceConfig(\n        image=grafana_params.image,\n        ports=USED_PORTS,\n        env_vars={\n            CONFIG_DIRPATH_ENV_VAR: GRAFANA_CONFIG_DIRPATH_ON_SERVICE,\n            \"GF_AUTH_ANONYMOUS_ENABLED\": \"true\",\n            \"GF_AUTH_ANONYMOUS_ORG_ROLE\": \"Admin\",\n            \"GF_AUTH_ANONYMOUS_ORG_NAME\": \"Main Org.\",\n            \"GF_DASHBOARDS_DEFAULT_HOME_DASHBOARD_PATH\": \"/dashboards/default.json\",\n        },\n        files={\n            GRAFANA_CONFIG_DIRPATH_ON_SERVICE: grafana_config_artifacts_name,\n            GRAFANA_DASHBOARDS_DIRPATH_ON_SERVICE: grafana_dashboards_artifacts_name,\n        },\n        min_cpu=grafana_params.min_cpu,\n        max_cpu=grafana_params.max_cpu,\n        min_memory=grafana_params.min_mem,\n        max_memory=grafana_params.max_mem,\n        node_selectors=node_selectors,\n        tolerations=tolerations,\n        public_ports=public_ports,\n    )\n\n\ndef new_datasource_config_template_data(prometheus_url, tempo_query_url):\n    data = {\"PrometheusURL\": prometheus_url}\n    if tempo_query_url != None:\n        data[\"TempoURL\"] = tempo_query_url\n    return data\n\n\ndef new_dashboard_providers_config_template_data(dashboards_dirpath):\n    return {\"DashboardsDirpath\": dashboards_dirpath}\n\n\ndef upload_additional_dashboards(plan, additional_dashboards):\n    data = []\n    for index, dashboard_src in enumerate(additional_dashboards):\n        additional_dashboard_folder_name = (\n            GRAFANA_ADDITIONAL_DASHBOARDS_FOLDER_NAME.format(index)\n        )\n        additional_dashboard_service_path = (\n            GRAFANA_ADDITIONAL_DASHBOARDS_FILEPATH_ON_SERVICE_FORMAT.format(\n                additional_dashboard_folder_name,\n            )\n        )\n        additional_dashboard_artifact_name = plan.upload_files(\n            dashboard_src, name=\"additional-grafana-dashboard-{0}\".format(index)\n        )\n        data.append(\n            {\n                GRAFANA_ADDITIONAL_DASHBOARDS_SERVICE_PATH_KEY: additional_dashboard_service_path,\n                GRANAFA_ADDITIONAL_DASHBOARDS_ARTIFACT_NAME_KEY: additional_dashboard_artifact_name,\n            }\n        )\n    return data\n\n\ndef merge_dashboards_artifacts(\n    plan,\n    grafana_dashboards_artifacts_name,\n    grafana_additional_dashboards_data=[],\n    global_tolerations=[],\n    global_node_selectors={},\n):\n    if len(grafana_additional_dashboards_data) == 0:\n        return grafana_dashboards_artifacts_name\n\n    files = {\n        GRAFANA_DASHBOARDS_DIRPATH_ON_SERVICE: grafana_dashboards_artifacts_name,\n    }\n\n    for additional_dashboard_data in grafana_additional_dashboards_data:\n        files[\n            additional_dashboard_data[GRAFANA_ADDITIONAL_DASHBOARDS_SERVICE_PATH_KEY]\n        ] = additional_dashboard_data[GRANAFA_ADDITIONAL_DASHBOARDS_ARTIFACT_NAME_KEY]\n\n    result = plan.run_sh(\n        name=\"merge-grafana-dashboards\",\n        description=\"Merging grafana dashboards artifacts\",\n        run=\"find \"\n        + GRAFANA_ADDITIONAL_DASHBOARDS_FILEPATH_ON_SERVICE\n        + \" -type f -exec cp {} \"\n        + GRAFANA_DASHBOARDS_DIRPATH_ON_SERVICE\n        + \" \\\\;\",\n        files=files,\n        store=[\n            GRAFANA_ADDITIONAL_DASHBOARDS_MERGED_STORED_PATH_FORMAT,\n        ],\n        tolerations=shared_utils.get_tolerations(global_tolerations=global_tolerations),\n        node_selectors=global_node_selectors,\n    )\n\n    return result.files_artifacts[0]\n"
  },
  {
    "path": "src/mempool_bridge/mempool_bridge_launcher.star",
    "content": "shared_utils = import_module(\"../shared_utils/shared_utils.star\")\nconstants = import_module(\"../package_io/constants.star\")\ninput_parser = import_module(\"../package_io/input_parser.star\")\n\nSERVICE_NAME = \"mempool-bridge\"\nMAX_ENODES_TO_FETCH = 5\n\nVERBOSITY_LEVELS = {\n    constants.GLOBAL_LOG_LEVEL.error: \"error\",\n    constants.GLOBAL_LOG_LEVEL.warn: \"warn\",\n    constants.GLOBAL_LOG_LEVEL.info: \"info\",\n    constants.GLOBAL_LOG_LEVEL.debug: \"debug\",\n    constants.GLOBAL_LOG_LEVEL.trace: \"trace\",\n}\n\nENODE_URLS = {\n    \"mainnet\": \"https://raw.githubusercontent.com/eth-clients/mainnet/refs/heads/main/metadata/enodes.yaml\",\n    \"sepolia\": \"https://raw.githubusercontent.com/eth-clients/sepolia/refs/heads/main/metadata/enodes.yaml\",\n    \"hoodi\": \"https://raw.githubusercontent.com/eth-clients/hoodi/refs/heads/main/metadata/enodes.yaml\",\n    \"holesky\": \"https://raw.githubusercontent.com/eth-clients/holesky/refs/heads/main/metadata/enodes.yaml\",\n}\n\nHTTP_PORT_NUMBER = 9090\n\nMEMPOOL_BRIDGE_CONFIG_FILENAME = \"config.yaml\"\nMEMPOOL_BRIDGE_CONFIG_MOUNT_DIRPATH_ON_SERVICE = \"/config\"\n\nMIN_CPU = 100\nMAX_CPU = 1000\nMIN_MEMORY = 128\nMAX_MEMORY = 2048\n\nUSED_PORTS = {\n    constants.HTTP_PORT_ID: shared_utils.new_port_spec(\n        HTTP_PORT_NUMBER,\n        shared_utils.TCP_PROTOCOL,\n        shared_utils.HTTP_APPLICATION_PROTOCOL,\n    )\n}\n\n\ndef launch_mempool_bridge(\n    plan,\n    config_template,\n    all_el_contexts,\n    mempool_bridge_params,\n    network_params,\n    global_node_selectors,\n    global_tolerations,\n    port_publisher,\n    additional_service_index,\n    docker_cache_params,\n    global_log_level,\n):\n    tolerations = shared_utils.get_tolerations(global_tolerations=global_tolerations)\n\n    network = network_params.network\n    mode = mempool_bridge_params.mode\n\n    if mode == \"rpc\" and not mempool_bridge_params.source_enodes:\n        fail(\n            \"RPC mode requires source_enodes to be explicitly defined. Please provide dedicated RPC endpoints as the source when using RPC mode.\"\n        )\n\n    # Build source endpoints based on mode\n    source_endpoints = []\n    if mempool_bridge_params.source_enodes:\n        source_endpoints = mempool_bridge_params.source_enodes\n    else:\n        # Only fetch enodes for p2p mode when using public networks\n        if mode == \"p2p\":\n            if \"shadowfork\" in network_params.network:\n                network = network_params.network.split(\"-shadowfork\")[0]\n            if network in constants.PUBLIC_NETWORKS:\n                plan.print(\n                    \"Fetching enodes for {0} from eth-clients repo\".format(network)\n                )\n                for i in range(1, MAX_ENODES_TO_FETCH + 1):\n                    enode = plan.run_sh(\n                        name=\"fetch-enode-{0}\".format(i),\n                        description=\"Fetching enode #{0}\".format(i),\n                        run=\"curl -s {0} | grep -E '^[[:space:]]*-[[:space:]]*enode' | sed -n '{1}p' | sed 's/^[[:space:]]*-[[:space:]]*//; s/[[:space:]]*#.*//' | tr -d '\\\\n'\".format(\n                            ENODE_URLS[network], i\n                        ),\n                        node_selectors=global_node_selectors,\n                        tolerations=tolerations,\n                        wait=None,\n                    )\n                    source_endpoints.append(enode.output)\n\n    # Build target endpoints from all EL contexts based on mode\n    target_endpoints = []\n    for context in all_el_contexts:\n        if mode == \"rpc\":\n            # For RPC mode, use HTTP RPC endpoint\n            rpc_url = \"http://{0}:{1}\".format(context.dns_name, context.rpc_port_num)\n            target_endpoints.append(rpc_url)\n        else:\n            # For P2P mode, prefer enode if available, fallback to enr\n            if context.enode:\n                target_endpoints.append(context.enode)\n            elif context.enr:\n                target_endpoints.append(context.enr)\n\n    # Determine log level: use mempool_bridge_params.log_level if set, otherwise use global_log_level\n    log_level = input_parser.get_client_log_level_or_default(\n        mempool_bridge_params.log_level, global_log_level, VERBOSITY_LEVELS\n    )\n\n    template_data = new_config_template_data(\n        HTTP_PORT_NUMBER,\n        source_endpoints,\n        target_endpoints,\n        mempool_bridge_params.mode,\n        log_level,\n        mempool_bridge_params.send_concurrency,\n        mempool_bridge_params.polling_interval,\n        mempool_bridge_params.retry_interval,\n    )\n\n    template_and_data = shared_utils.new_template_and_data(\n        config_template, template_data\n    )\n    template_and_data_by_rel_dest_filepath = {}\n    template_and_data_by_rel_dest_filepath[\n        MEMPOOL_BRIDGE_CONFIG_FILENAME\n    ] = template_and_data\n\n    config_files_artifact_name = plan.render_templates(\n        template_and_data_by_rel_dest_filepath, \"mempool-bridge-config\"\n    )\n\n    config = get_config(\n        config_files_artifact_name,\n        global_node_selectors,\n        tolerations,\n        port_publisher,\n        additional_service_index,\n        docker_cache_params,\n        mempool_bridge_params,\n    )\n\n    plan.add_service(SERVICE_NAME, config)\n\n\ndef get_config(\n    config_files_artifact_name,\n    node_selectors,\n    tolerations,\n    port_publisher,\n    additional_service_index,\n    docker_cache_params,\n    mempool_bridge_params,\n):\n    config_file_path = shared_utils.path_join(\n        MEMPOOL_BRIDGE_CONFIG_MOUNT_DIRPATH_ON_SERVICE,\n        MEMPOOL_BRIDGE_CONFIG_FILENAME,\n    )\n\n    public_ports = shared_utils.get_additional_service_standard_public_port(\n        port_publisher,\n        constants.HTTP_PORT_ID,\n        additional_service_index,\n        0,\n    )\n\n    return ServiceConfig(\n        image=shared_utils.docker_cache_image_calc(\n            docker_cache_params,\n            mempool_bridge_params.image,\n        ),\n        ports=USED_PORTS,\n        public_ports=public_ports,\n        files={\n            MEMPOOL_BRIDGE_CONFIG_MOUNT_DIRPATH_ON_SERVICE: config_files_artifact_name,\n        },\n        cmd=[\n            \"--config={0}\".format(config_file_path),\n        ],\n        min_cpu=MIN_CPU,\n        max_cpu=MAX_CPU,\n        min_memory=MIN_MEMORY,\n        max_memory=MAX_MEMORY,\n        node_selectors=node_selectors,\n        tolerations=tolerations,\n    )\n\n\ndef new_config_template_data(\n    listen_port_num,\n    source_endpoints,\n    target_endpoints,\n    mode,\n    log_level,\n    send_concurrency,\n    polling_interval,\n    retry_interval,\n):\n    return {\n        \"ListenPortNum\": listen_port_num,\n        \"SourceEndpoints\": source_endpoints,\n        \"TargetEndpoints\": target_endpoints,\n        \"Mode\": mode,\n        \"LogLevel\": log_level,\n        \"SendConcurrency\": send_concurrency,\n        \"PollingInterval\": polling_interval,\n        \"RetryInterval\": retry_interval,\n    }\n"
  },
  {
    "path": "src/mev/buildoor/buildoor_launcher.star",
    "content": "constants = import_module(\"../../package_io/constants.star\")\nshared_utils = import_module(\"../../shared_utils/shared_utils.star\")\n\nBUILDOOR_SERVICE_NAME = \"buildoor\"\nBUILDOOR_API_PORT = 8080\nBUILDOOR_BUILDER_API_PORT = 9000\n\nMIN_CPU = 100\nMAX_CPU = 1000\nMIN_MEMORY = 128\nMAX_MEMORY = 1024\n\n\ndef launch_buildoor(\n    plan,\n    beacon_uri,\n    el_rpc_uri,\n    engine_rpc_uri,\n    jwt_file,\n    prefunded_key,\n    buildoor_params,\n    global_node_selectors,\n    global_tolerations,\n    builder_bls_secret_key=None,\n):\n    tolerations = shared_utils.get_tolerations(global_tolerations=global_tolerations)\n\n    # Strip 0x prefix if present since keys are expected as hex-only\n    wallet_key = prefunded_key\n    if wallet_key.startswith(\"0x\"):\n        wallet_key = wallet_key[2:]\n\n    # Use injected builder BLS key if provided, otherwise fall back to default\n    if builder_bls_secret_key != None:\n        builder_bls_key = builder_bls_secret_key\n    else:\n        builder_bls_key = constants.DEFAULT_MEV_SECRET_KEY[2:]\n\n    cmd = [\n        \"run\",\n        \"--cl-client={0}\".format(beacon_uri),\n        \"--el-rpc={0}\".format(el_rpc_uri),\n        \"--el-engine-api={0}\".format(engine_rpc_uri),\n        \"--el-jwt-secret=\" + constants.JWT_MOUNT_PATH_ON_CONTAINER,\n        \"--builder-privkey={0}\".format(builder_bls_key),\n        \"--wallet-privkey={0}\".format(wallet_key),\n        \"--api-port={0}\".format(BUILDOOR_API_PORT),\n        \"--builder-api-port={0}\".format(BUILDOOR_BUILDER_API_PORT),\n    ]\n\n    if buildoor_params.builder_api:\n        cmd.append(\"--builder-api-enabled\")\n\n    if buildoor_params.epbs_builder:\n        cmd.append(\"--epbs-enabled\")\n\n    cmd += buildoor_params.extra_args\n\n    buildoor_service = plan.add_service(\n        name=BUILDOOR_SERVICE_NAME,\n        config=ServiceConfig(\n            image=buildoor_params.image,\n            ports={\n                \"api\": PortSpec(\n                    number=BUILDOOR_API_PORT,\n                    transport_protocol=\"TCP\",\n                    application_protocol=\"http\",\n                ),\n                \"builder-api\": PortSpec(\n                    number=BUILDOOR_BUILDER_API_PORT, transport_protocol=\"TCP\"\n                ),\n            },\n            cmd=cmd,\n            files={\n                constants.JWT_MOUNTPOINT_ON_CLIENTS: jwt_file,\n            },\n            min_cpu=MIN_CPU,\n            max_cpu=MAX_CPU,\n            min_memory=MIN_MEMORY,\n            max_memory=MAX_MEMORY,\n            node_selectors=global_node_selectors,\n            tolerations=tolerations,\n        ),\n    )\n    return \"http://{0}@{1}:{2}\".format(\n        constants.DEFAULT_MEV_PUBKEY, BUILDOOR_SERVICE_NAME, BUILDOOR_BUILDER_API_PORT\n    )\n"
  },
  {
    "path": "src/mev/commit-boost/mev_boost/mev_boost_context.star",
    "content": "def new_mev_boost_context(private_ip_address, port):\n    return struct(\n        private_ip_address=private_ip_address,\n        port=port,\n    )\n\n\ndef mev_boost_endpoint(mev_boost_context):\n    return \"http://{0}:{1}\".format(\n        mev_boost_context.private_ip_address, mev_boost_context.port\n    )\n"
  },
  {
    "path": "src/mev/commit-boost/mev_boost/mev_boost_launcher.star",
    "content": "shared_utils = import_module(\"../../../shared_utils/shared_utils.star\")\nmev_boost_context_module = import_module(\"../mev_boost/mev_boost_context.star\")\ninput_parser = import_module(\"../../../package_io/input_parser.star\")\nstatic_files = import_module(\"../../../static_files/static_files.star\")\nconstants = import_module(\"../../../package_io/constants.star\")\n\nCB_CONFIG_FILENAME = \"cb-config.toml\"\nCB_CONFIG_MOUNT_DIRPATH_ON_SERVICE = \"/config\"\nCB_CONFIG_FILES_ARTIFACT_NAME = \"commit-boost-config\"\n\nUSED_PORTS = {\n    \"http\": shared_utils.new_port_spec(\n        constants.MEV_BOOST_PORT, shared_utils.TCP_PROTOCOL\n    )\n}\n\n# The min/max CPU/memory that mev-boost can use\nMIN_CPU = 10\nMAX_CPU = 500\nMIN_MEMORY = 16\nMAX_MEMORY = 256\n\n\ndef launch(\n    plan,\n    mev_boost_launcher,\n    service_name,\n    network,\n    mev_params,\n    relays,\n    el_cl_genesis_data,\n    port_publisher,\n    index,\n    global_node_selectors,\n    global_tolerations,\n    final_genesis_timestamp,\n):\n    tolerations = shared_utils.get_tolerations(global_tolerations=global_tolerations)\n\n    network = (\n        network\n        if network in constants.PUBLIC_NETWORKS\n        else constants.GENESIS_CONFIG_MOUNT_PATH_ON_CONTAINER + \"/config.yaml\"\n    )\n\n    public_ports = shared_utils.get_mev_public_port(\n        port_publisher,\n        constants.HTTP_PORT_ID,\n        index,\n        0,\n    )\n\n    image = mev_params.mev_boost_image\n\n    template_data = new_config_template_data(\n        network, constants.MEV_BOOST_PORT, relays, final_genesis_timestamp\n    )\n\n    if mev_params.commit_boost_config:\n        commit_boost_config_template = mev_params.commit_boost_config\n    else:\n        commit_boost_config_template = read_file(\n            static_files.COMMIT_BOOST_CONFIG_FILEPATH\n        )\n\n    template_and_data = shared_utils.new_template_and_data(\n        commit_boost_config_template, template_data\n    )\n\n    template_and_data_by_rel_dest_filepath = {}\n    template_and_data_by_rel_dest_filepath[CB_CONFIG_FILENAME] = template_and_data\n\n    config_files_artifact_name = plan.render_templates(\n        template_and_data_by_rel_dest_filepath,\n        CB_CONFIG_FILES_ARTIFACT_NAME + service_name,\n    )\n\n    config_file_path = shared_utils.path_join(\n        CB_CONFIG_MOUNT_DIRPATH_ON_SERVICE, CB_CONFIG_FILENAME\n    )\n\n    config = get_config(\n        mev_boost_launcher,\n        image,\n        config_file_path,\n        config_files_artifact_name,\n        el_cl_genesis_data,\n        global_node_selectors,\n        tolerations,\n        public_ports,\n        index,\n    )\n\n    mev_boost_service = plan.add_service(service_name, config)\n\n    return mev_boost_context_module.new_mev_boost_context(\n        mev_boost_service.name, constants.MEV_BOOST_PORT\n    )\n\n\ndef get_config(\n    mev_boost_launcher,\n    image,\n    config_file_path,\n    config_file,\n    el_cl_genesis_data,\n    node_selectors,\n    tolerations,\n    public_ports,\n    participant_index,\n):\n    return ServiceConfig(\n        image=image,\n        ports=USED_PORTS,\n        public_ports=public_ports,\n        cmd=[],\n        env_vars={\n            \"CB_CONFIG\": config_file_path,\n        },\n        files={\n            CB_CONFIG_MOUNT_DIRPATH_ON_SERVICE: config_file,\n            constants.GENESIS_DATA_MOUNTPOINT_ON_CLIENTS: el_cl_genesis_data,\n        },\n        min_cpu=MIN_CPU,\n        max_cpu=MAX_CPU,\n        min_memory=MIN_MEMORY,\n        max_memory=MAX_MEMORY,\n        node_selectors=node_selectors,\n        tolerations=tolerations,\n        labels={constants.NODE_INDEX_LABEL_KEY: str(participant_index + 1)},\n    )\n\n\ndef new_mev_boost_launcher(should_check_relay, relay_end_points):\n    return struct(\n        should_check_relay=should_check_relay, relay_end_points=relay_end_points\n    )\n\n\ndef new_config_template_data(network, port, relays, final_genesis_timestamp):\n    return {\n        \"Network\": network,\n        \"Port\": port,\n        \"Relays\": relays,\n        \"Timestamp\": final_genesis_timestamp,\n    }\n"
  },
  {
    "path": "src/mev/flashbots/mev_boost/mev_boost_context.star",
    "content": "def new_mev_boost_context(private_ip_address, port):\n    return struct(\n        private_ip_address=private_ip_address,\n        port=port,\n    )\n\n\ndef mev_boost_endpoint(mev_boost_context):\n    return \"http://{0}:{1}\".format(\n        mev_boost_context.private_ip_address, mev_boost_context.port\n    )\n"
  },
  {
    "path": "src/mev/flashbots/mev_boost/mev_boost_launcher.star",
    "content": "shared_utils = import_module(\"../../../shared_utils/shared_utils.star\")\nmev_boost_context_module = import_module(\"../mev_boost/mev_boost_context.star\")\ninput_parser = import_module(\"../../../package_io/input_parser.star\")\nconstants = import_module(\"../../../package_io/constants.star\")\n\nFLASHBOTS_MEV_BOOST_PROTOCOL = \"TCP\"\n\nUSED_PORTS = {\n    \"http\": shared_utils.new_port_spec(\n        constants.MEV_BOOST_PORT, shared_utils.TCP_PROTOCOL, wait=\"5s\"\n    )\n}\n\nNETWORK_ID_TO_NAME = {\n    \"1\": \"mainnet\",\n    \"17000\": \"holesky\",\n    \"11155111\": \"sepolia\",\n    \"560048\": \"hoodi\",\n}\n\n# The min/max CPU/memory that mev-boost can use\nMIN_CPU = 10\nMAX_CPU = 500\nMIN_MEMORY = 16\nMAX_MEMORY = 256\n\n\ndef launch(\n    plan,\n    mev_boost_launcher,\n    service_name,\n    genesis_timestamp,\n    mev_boost_image,\n    mev_boost_args,\n    participant,\n    seconds_per_slot,\n    port_publisher,\n    index,\n    global_node_selectors,\n    global_tolerations,\n):\n    public_ports = shared_utils.get_mev_public_port(\n        port_publisher,\n        constants.HTTP_PORT_ID,\n        index,\n        0,\n    )\n\n    tolerations = shared_utils.get_tolerations(global_tolerations=global_tolerations)\n\n    config = get_config(\n        mev_boost_launcher,\n        genesis_timestamp,\n        mev_boost_image,\n        mev_boost_args,\n        global_node_selectors,\n        tolerations,\n        participant,\n        seconds_per_slot,\n        public_ports,\n        index,\n    )\n\n    mev_boost_service = plan.add_service(service_name, config)\n\n    return (\n        mev_boost_context_module.new_mev_boost_context(\n            mev_boost_service.name, constants.MEV_BOOST_PORT\n        ),\n    )\n\n\ndef get_config(\n    mev_boost_launcher,\n    genesis_timestamp,\n    mev_boost_image,\n    mev_boost_args,\n    node_selectors,\n    tolerations,\n    participant,\n    seconds_per_slot,\n    public_ports,\n    participant_index,\n):\n    command = mev_boost_args\n\n    # Build the RELAYS string with all relay endpoints\n    # mev-boost accepts multiple relays separated by commas\n    relay_urls = []\n    for idx, endpoint in enumerate(mev_boost_launcher.relay_end_points):\n        relay_url = \"{0}?id={1}-{2}-relay{3}\".format(\n            endpoint,\n            participant.cl_type,\n            participant.el_type,\n            idx,\n        )\n        relay_urls.append(relay_url)\n    relays_str = \",\".join(relay_urls)\n\n    return ServiceConfig(\n        image=mev_boost_image,\n        ports=USED_PORTS,\n        public_ports=public_ports,\n        cmd=command,\n        env_vars={\n            \"GENESIS_FORK_VERSION\": constants.GENESIS_FORK_VERSION,\n            \"GENESIS_TIMESTAMP\": \"{0}\".format(genesis_timestamp),\n            \"BOOST_LISTEN_ADDR\": \"0.0.0.0:{0}\".format(constants.MEV_BOOST_PORT),\n            \"SKIP_RELAY_SIGNATURE_CHECK\": \"1\",\n            \"SLOT_SEC\": str(seconds_per_slot),\n            \"RELAYS\": relays_str,\n        },\n        min_cpu=MIN_CPU,\n        max_cpu=MAX_CPU,\n        min_memory=MIN_MEMORY,\n        max_memory=MAX_MEMORY,\n        node_selectors=node_selectors,\n        tolerations=tolerations,\n        labels=shared_utils.label_maker(\n            client=\"mev-boost\",\n            client_type=\"mev\",\n            image=mev_boost_image[-constants.MAX_LABEL_LENGTH :],\n            connected_client=\"{0}-{1}\".format(participant.cl_type, participant.el_type),\n            extra_labels={constants.NODE_INDEX_LABEL_KEY: str(participant_index + 1)},\n            supernode=participant.supernode,\n        ),\n    )\n\n\ndef new_mev_boost_launcher(should_check_relay, relay_end_points):\n    return struct(\n        should_check_relay=should_check_relay, relay_end_points=relay_end_points\n    )\n"
  },
  {
    "path": "src/mev/flashbots/mev_builder/mev_builder_launcher.star",
    "content": "shared_utils = import_module(\"../../../shared_utils/shared_utils.star\")\ninput_parser = import_module(\"../../../package_io/input_parser.star\")\nstatic_files = import_module(\"../../../static_files/static_files.star\")\nconstants = import_module(\"../../../package_io/constants.star\")\nflashbots_relay = import_module(\"../mev_relay/mev_relay_launcher.star\")\nhelix_relay = import_module(\"../../helix/helix_relay_launcher.star\")\nlighthouse = import_module(\"../../../cl/lighthouse/lighthouse_launcher.star\")\n# MEV Builder flags\n\nMEV_BUILDER_CONFIG_FILENAME = \"config.toml\"\nMEV_BUILDER_MOUNT_DIRPATH_ON_SERVICE = \"/config/\"\nMEV_BUILDER_FILES_ARTIFACT_NAME = \"mev-rbuilder-config\"\nMEV_FILE_PATH_ON_CONTAINER = (\n    MEV_BUILDER_MOUNT_DIRPATH_ON_SERVICE + MEV_BUILDER_CONFIG_FILENAME\n)\n\n\ndef new_builder_config(\n    plan,\n    mev_type,\n    network_params,\n    fee_recipient,\n    mnemonic,\n    mev_params,\n    participants,\n    global_node_selectors,\n):\n    num_of_participants = shared_utils.zfill_custom(\n        len(participants), len(str(len(participants)))\n    )\n    builder_template_data = new_builder_config_template_data(\n        network_params,\n        constants.DEFAULT_MEV_PUBKEY,\n        constants.DEFAULT_MEV_SECRET_KEY[2:],  # drop the 0x prefix\n        mnemonic,\n        fee_recipient,\n        mev_params.mev_builder_extra_data,\n        num_of_participants,\n        mev_params.mev_builder_subsidy,\n        mev_type,\n        mev_params.run_multiple_relays,\n    )\n    flashbots_builder_config_template = read_file(\n        static_files.FLASHBOTS_RBUILDER_CONFIG_FILEPATH\n    )\n\n    template_and_data = shared_utils.new_template_and_data(\n        flashbots_builder_config_template, builder_template_data\n    )\n\n    template_and_data_by_rel_dest_filepath = {}\n    template_and_data_by_rel_dest_filepath[\n        MEV_BUILDER_CONFIG_FILENAME\n    ] = template_and_data\n\n    config_files_artifact_name = plan.render_templates(\n        template_and_data_by_rel_dest_filepath, MEV_BUILDER_FILES_ARTIFACT_NAME\n    )\n\n    config_file_path = shared_utils.path_join(\n        MEV_BUILDER_MOUNT_DIRPATH_ON_SERVICE, MEV_BUILDER_CONFIG_FILENAME\n    )\n\n    return config_files_artifact_name\n\n\ndef new_builder_config_template_data(\n    network_params,\n    pubkey,\n    secret,\n    mnemonic,\n    fee_recipient,\n    extra_data,\n    num_of_participants,\n    subsidy,\n    mev_type,\n    run_multiple_relays=False,\n):\n    # Build the list of relays based on configuration\n    relays = []\n\n    if run_multiple_relays:\n        # Add both flashbots and helix relays\n        relays.append(\n            {\n                \"Name\": \"flashbots\",\n                \"Service\": \"mev-relay-api\",\n                \"Port\": flashbots_relay.MEV_RELAY_ENDPOINT_PORT,\n                \"Priority\": 0,\n            }\n        )\n        relays.append(\n            {\n                \"Name\": \"helix\",\n                \"Service\": \"helix-relay\",\n                \"Port\": helix_relay.HELIX_RELAY_ENDPOINT_PORT,\n                \"Priority\": 1,\n            }\n        )\n    elif mev_type == constants.HELIX_MEV_TYPE:\n        relays.append(\n            {\n                \"Name\": \"helix\",\n                \"Service\": \"helix-relay\",\n                \"Port\": helix_relay.HELIX_RELAY_ENDPOINT_PORT,\n                \"Priority\": 0,\n            }\n        )\n    else:\n        relays.append(\n            {\n                \"Name\": \"flashbots\",\n                \"Service\": \"mev-relay-api\",\n                \"Port\": flashbots_relay.MEV_RELAY_ENDPOINT_PORT,\n                \"Priority\": 0,\n            }\n        )\n\n    # Build enabled_relays string for the config: \"relay1\", \"relay2\"\n    enabled_relays = \", \".join(['\"{}\"'.format(r[\"Name\"]) for r in relays])\n\n    return {\n        \"Network\": network_params.network\n        if network_params.network in constants.PUBLIC_NETWORKS\n        else \"/network-configs/genesis.json\",\n        \"DataDir\": \"/data/reth/execution-data\",\n        \"CLEndpoint\": \"http://cl-{0}-{1}-{2}:{3}\".format(\n            num_of_participants,\n            constants.CL_TYPE.lighthouse,\n            constants.EL_TYPE.reth_builder,\n            lighthouse.BEACON_HTTP_PORT_NUM,\n        ),\n        \"GenesisForkVersion\": constants.GENESIS_FORK_VERSION,\n        \"Relays\": relays,\n        \"EnabledRelays\": enabled_relays,\n        \"PublicKey\": pubkey,\n        \"SecretKey\": secret,\n        \"Mnemonic\": mnemonic,\n        \"FeeRecipient\": fee_recipient,\n        \"ExtraData\": extra_data,\n        \"Subsidy\": subsidy,\n    }\n"
  },
  {
    "path": "src/mev/flashbots/mev_custom_flood/mev_custom_flood_launcher.star",
    "content": "shared_utils = import_module(\"../../../shared_utils/shared_utils.star\")\ninput_parser = import_module(\"../../../package_io/input_parser.star\")\nPYTHON_IMAGE = \"ethpandaops/python-web3\"\nCUSTOM_FLOOD_SERVICE_NAME = \"mev-custom-flood\"\n\n# The min/max CPU/memory that mev-custom-flood can use\nMIN_CPU = 10\nMAX_CPU = 1000\nMIN_MEMORY = 128\nMAX_MEMORY = 1024\n\n\ndef spam_in_background(\n    plan,\n    sender_key,\n    receiver_key,\n    el_uri,\n    params,\n    global_node_selectors,\n    global_tolerations,\n    docker_cache_params,\n):\n    tolerations = shared_utils.get_tolerations(global_tolerations=global_tolerations)\n    sender_script = plan.upload_files(src=\"./sender.py\", name=\"mev-custom-flood-sender\")\n\n    plan.add_service(\n        name=CUSTOM_FLOOD_SERVICE_NAME,\n        config=ServiceConfig(\n            image=shared_utils.docker_cache_image_calc(\n                docker_cache_params, PYTHON_IMAGE\n            ),\n            files={\"/tmp\": sender_script},\n            cmd=[\"/bin/sh\", \"-c\", \"touch /tmp/sender.log && tail -f /tmp/sender.log\"],\n            env_vars={\n                \"SENDER_PRIVATE_KEY\": sender_key,\n                \"RECEIVER_PUBLIC_KEY\": receiver_key,\n                \"EL_RPC_URI\": el_uri,\n            },\n            min_cpu=MIN_CPU,\n            max_cpu=MAX_CPU,\n            min_memory=MIN_MEMORY,\n            max_memory=MAX_MEMORY,\n            node_selectors=global_node_selectors,\n            tolerations=tolerations,\n        ),\n    )\n\n    plan.exec(\n        service_name=CUSTOM_FLOOD_SERVICE_NAME,\n        description=\"Sending transactions\",\n        recipe=ExecRecipe(\n            [\n                \"/bin/sh\",\n                \"-c\",\n                \"nohup python /tmp/sender.py  --interval_between_transactions {} > /dev/null 2>&1 &\".format(\n                    params.interval_between_transactions\n                ),\n            ]\n        ),\n    )\n"
  },
  {
    "path": "src/mev/flashbots/mev_custom_flood/sender.py",
    "content": "\"\"\"\nthis is s a really dumb script that sends tokens to the receiver from the sender every 3 seconds\nthis is being used as of 2023-09-06 to guarantee that payloads are delivered\n\"\"\"\nfrom functools import partial\n\nfrom web3 import Web3\nfrom web3.middleware import construct_sign_and_send_raw_middleware\nimport os\nimport time\nimport logging\nimport click\n\n\nVALUE_TO_SEND = 0x9184\n\nlogging.basicConfig(filename=\"/tmp/sender.log\",\n                    filemode='a',\n                    format='%(asctime)s,%(msecs)d %(name)s %(levelname)s %(message)s',\n                    datefmt='%H:%M:%S',\n                    level=logging.DEBUG)\n\n# this is the last prefunded address\nSENDER = os.getenv(\"SENDER_PRIVATE_KEY\", \"17fdf89989597e8bcac6cdfcc001b6241c64cece2c358ffc818b72ca70f5e1ce\")\n# this is the first prefunded address\nRECEIVER = os.getenv(\"RECEIVER_PUBLIC_KEY\", \"0x878705ba3f8Bc32FCf7F4CAa1A35E72AF65CF766\")\nEL_URI = os.getenv(\"EL_RPC_URI\", 'http://0.0.0.0:53913')\n\n\ndef send_transaction():\n    # Setting w3 as constant causes recursion exceeded error after ~500 transactions\n    # Thus it's created everytime a transaction is sent\n    w3 = Web3(Web3.HTTPProvider(EL_URI))\n\n    sender_account = w3.eth.account.from_key(SENDER)\n    w3.middleware_onion.add(construct_sign_and_send_raw_middleware(sender_account))\n\n    transaction = {\n        \"from\": sender_account.address,\n        \"value\": VALUE_TO_SEND,\n        \"to\": RECEIVER,\n        \"data\": \"0xabcd\",\n        \"gasPrice\": w3.eth.gas_price,\n    }\n\n    estimated_gas = w3.eth.estimate_gas(transaction)\n\n    transaction[\"gas\"] = estimated_gas\n\n    tx_hash = w3.eth.send_transaction(transaction)\n\n    tx = w3.eth.get_transaction(tx_hash)\n    logging.info(tx_hash.hex())\n    assert tx[\"from\"] == sender_account.address\n\n\ndef delayed_send(interval_between_transactions):\n    send_transaction()\n    time.sleep(interval_between_transactions)\n\n\n@click.command()\n@click.option('--interval_between_transactions', default=0.5, help='Interval between successive transaction sends (in seconds). The value may be an integer or decimal')\ndef run_infinitely(interval_between_transactions):\n    logging.info(f\"Using sender {SENDER} receiver {RECEIVER} and el_uri {EL_URI}\")\n    spam = send_transaction if interval_between_transactions == 0 else partial(delayed_send, interval_between_transactions)\n    while True:\n        try:\n            spam()\n        except Exception as e:\n            print(e)\n            print(\"restarting flood as previous one failed\")\n\n\nif __name__ == \"__main__\":\n    run_infinitely()\n"
  },
  {
    "path": "src/mev/flashbots/mev_relay/mev_relay_launcher.star",
    "content": "redis_module = import_module(\"github.com/kurtosis-tech/redis-package/main.star\")\npostgres_module = import_module(\"github.com/kurtosis-tech/postgres-package/main.star\")\nconstants = import_module(\"../../../package_io/constants.star\")\nshared_utils = import_module(\"../../../shared_utils/shared_utils.star\")\ninput_parser = import_module(\"../../../package_io/input_parser.star\")\n\nBUILDER_CL_WAIT_TIMEOUT = \"10m\"\n\nMEV_RELAY_WEBSITE = \"mev-relay-website\"\nMEV_RELAY_ENDPOINT = \"mev-relay-api\"\nMEV_RELAY_HOUSEKEEPER = \"mev-relay-housekeeper\"\n\nMEV_RELAY_ENDPOINT_PORT = 9062\nMEV_RELAY_WEBSITE_PORT = 9060\nMEV_RELAY_PPROF_PORT = 6060\nNETWORK_ID_TO_NAME = {\n    \"1\": \"mainnet\",\n    \"17000\": \"holesky\",\n    \"11155111\": \"sepolia\",\n    \"560048\": \"hoodi\",\n}\n\n\n# The min/max CPU/memory that mev-relay can use\nRELAY_MIN_CPU = 500\nRELAY_MAX_CPU = 3000\nRELAY_MIN_MEMORY = 256\nRELAY_MAX_MEMORY = 4096\n\n# The min/max CPU/memory that postgres can use\nPOSTGRES_MIN_CPU = 10\nPOSTGRES_MAX_CPU = 1000\nPOSTGRES_MIN_MEMORY = 32\nPOSTGRES_MAX_MEMORY = 1024\n\n# The min/max CPU/memory that redis can use\nREDIS_MIN_CPU = 500\nREDIS_MAX_CPU = 3000\nREDIS_MIN_MEMORY = 16\nREDIS_MAX_MEMORY = 1024\n\n\ndef launch_mev_relay(\n    plan,\n    mev_params,\n    network_id,\n    beacon_uris,\n    validator_root,\n    blocksim_uri,\n    network_params,\n    persistent,\n    port_publisher,\n    index,\n    global_node_selectors,\n    global_tolerations,\n    builder_cl_service_name,\n):\n    tolerations = shared_utils.get_tolerations(global_tolerations=global_tolerations)\n    public_ports = shared_utils.get_mev_public_port(\n        port_publisher,\n        constants.HTTP_PORT_ID,\n        index,\n        0,\n    )\n\n    node_selectors = global_node_selectors\n    redis = redis_module.run(\n        plan,\n        service_name=\"mev-relay-redis\",\n        min_cpu=REDIS_MIN_CPU,\n        max_cpu=REDIS_MAX_CPU,\n        min_memory=REDIS_MIN_MEMORY,\n        max_memory=REDIS_MAX_MEMORY,\n        node_selectors=node_selectors,\n        tolerations=tolerations,\n    )\n    # making the password postgres as the relay expects it to be postgres\n    postgres = postgres_module.run(\n        plan,\n        password=\"postgres\",\n        user=\"postgres\",\n        database=\"postgres\",\n        service_name=\"mev-relay-postgres\",\n        persistent=persistent,\n        launch_adminer=mev_params.launch_adminer,\n        min_cpu=POSTGRES_MIN_CPU,\n        max_cpu=POSTGRES_MAX_CPU,\n        min_memory=POSTGRES_MIN_MEMORY,\n        max_memory=POSTGRES_MAX_MEMORY,\n        node_selectors=node_selectors,\n        tolerations=tolerations,\n    )\n\n    network_name = NETWORK_ID_TO_NAME.get(network_id, network_id)\n\n    plan.print(\n        \"Waiting for builder CL '{0}' to be synced before starting MEV relay\".format(\n            builder_cl_service_name\n        )\n    )\n    plan.wait(\n        service_name=builder_cl_service_name,\n        recipe=GetHttpRequestRecipe(\n            endpoint=\"/eth/v1/node/syncing\",\n            port_id=constants.HTTP_PORT_ID,\n            extract={\"is_syncing\": \".data.is_syncing | tostring\"},\n        ),\n        field=\"extract.is_syncing\",\n        assertion=\"==\",\n        target_value=\"false\",\n        timeout=BUILDER_CL_WAIT_TIMEOUT,\n    )\n    plan.print(\"Builder CL is synced, starting MEV relay services\")\n\n    image = mev_params.mev_relay_image\n\n    env_vars = {\n        \"GENESIS_FORK_VERSION\": constants.GENESIS_FORK_VERSION,\n        \"BELLATRIX_FORK_VERSION\": constants.BELLATRIX_FORK_VERSION,\n        \"CAPELLA_FORK_VERSION\": constants.CAPELLA_FORK_VERSION,\n        \"DENEB_FORK_VERSION\": constants.DENEB_FORK_VERSION,\n        \"ELECTRA_FORK_VERSION\": constants.ELECTRA_FORK_VERSION,\n        \"FULU_FORK_VERSION\": constants.FULU_FORK_VERSION,\n        \"GENESIS_VALIDATORS_ROOT\": validator_root,\n        \"SEC_PER_SLOT\": str(network_params.seconds_per_slot),\n        \"SLOTS_PER_EPOCH\": str(32) if network_params.preset == \"mainnet\" else str(8),\n        \"LOG_LEVEL\": \"debug\",\n        \"DB_TABLE_PREFIX\": \"custom\",\n        \"ENABLE_BUILDER_CANCELLATIONS\": \"1\",\n    }\n\n    redis_url = \"{}:{}\".format(redis.hostname, redis.port_number)\n    postgres_url = postgres.url + \"?sslmode=disable\"\n    plan.add_service(\n        name=MEV_RELAY_HOUSEKEEPER,\n        config=ServiceConfig(\n            image=image,\n            cmd=[\n                \"housekeeper\",\n                \"--network\",\n                \"custom\",\n                \"--db\",\n                postgres_url,\n                \"--redis-uri\",\n                redis_url,\n                \"--beacon-uris\",\n                beacon_uris,\n            ]\n            + mev_params.mev_relay_housekeeper_extra_args,\n            env_vars=env_vars | mev_params.mev_relay_housekeeper_extra_env_vars,\n            min_cpu=RELAY_MIN_CPU,\n            max_cpu=RELAY_MAX_CPU,\n            min_memory=RELAY_MIN_MEMORY,\n            max_memory=RELAY_MAX_MEMORY,\n            node_selectors=node_selectors,\n            tolerations=tolerations,\n        ),\n    )\n\n    api = plan.add_service(\n        name=MEV_RELAY_ENDPOINT,\n        config=ServiceConfig(\n            image=image,\n            cmd=[\n                \"api\",\n                \"--network\",\n                \"custom\",\n                \"--db\",\n                postgres_url,\n                \"--secret-key\",\n                constants.DEFAULT_MEV_SECRET_KEY,\n                \"--listen-addr\",\n                \"0.0.0.0:{0}\".format(MEV_RELAY_ENDPOINT_PORT),\n                \"--redis-uri\",\n                redis_url,\n                \"--beacon-uris\",\n                beacon_uris,\n                \"--blocksim\",\n                blocksim_uri,\n                \"--pprof-listen-addr\",\n                \"0.0.0.0:{0}\".format(MEV_RELAY_PPROF_PORT),\n            ]\n            + mev_params.mev_relay_api_extra_args,\n            ports={\n                \"http\": PortSpec(\n                    number=MEV_RELAY_ENDPOINT_PORT, transport_protocol=\"TCP\"\n                ),\n                \"pprof\": PortSpec(\n                    number=MEV_RELAY_PPROF_PORT, transport_protocol=\"TCP\"\n                ),\n            },\n            public_ports=public_ports,\n            env_vars=env_vars | mev_params.mev_relay_api_extra_env_vars,\n            min_cpu=RELAY_MIN_CPU,\n            max_cpu=RELAY_MAX_CPU,\n            min_memory=RELAY_MIN_MEMORY,\n            max_memory=RELAY_MAX_MEMORY,\n            node_selectors=node_selectors,\n            tolerations=tolerations,\n        ),\n    )\n\n    public_ports = shared_utils.get_mev_public_port(\n        port_publisher,\n        constants.HTTP_PORT_ID,\n        index,\n        1,\n    )\n    plan.add_service(\n        name=MEV_RELAY_WEBSITE,\n        config=ServiceConfig(\n            image=image,\n            cmd=[\n                \"website\",\n                \"--network\",\n                \"custom\",\n                \"--db\",\n                postgres_url,\n                \"--listen-addr\",\n                \"0.0.0.0:{0}\".format(MEV_RELAY_WEBSITE_PORT),\n                \"--redis-uri\",\n                redis_url,\n                \"https://{0}@{1}\".format(\n                    constants.DEFAULT_MEV_PUBKEY, MEV_RELAY_ENDPOINT\n                ),\n                \"--show-config-details\",\n                \"--relay-url\",\n                \"http://{0}@{1}:{2}\".format(\n                    constants.DEFAULT_MEV_PUBKEY,\n                    api.ip_address,\n                    MEV_RELAY_ENDPOINT_PORT,\n                ),\n                \"--pubkey-override\",\n                constants.DEFAULT_MEV_PUBKEY,\n            ]\n            + mev_params.mev_relay_website_extra_args,\n            ports={\n                \"http\": PortSpec(\n                    number=MEV_RELAY_WEBSITE_PORT,\n                    transport_protocol=\"TCP\",\n                    application_protocol=\"http\",\n                )\n            },\n            public_ports=public_ports,\n            env_vars=env_vars | mev_params.mev_relay_website_extra_env_vars,\n            min_cpu=RELAY_MIN_CPU,\n            max_cpu=RELAY_MAX_CPU,\n            min_memory=RELAY_MIN_MEMORY,\n            max_memory=RELAY_MAX_MEMORY,\n            node_selectors=node_selectors,\n            tolerations=tolerations,\n        ),\n    )\n\n    return \"http://{0}@{1}:{2}\".format(\n        constants.DEFAULT_MEV_PUBKEY, api.ip_address, MEV_RELAY_ENDPOINT_PORT\n    )\n"
  },
  {
    "path": "src/mev/flashbots/mock_mev/mock_mev_launcher.star",
    "content": "constants = import_module(\"../../../package_io/constants.star\")\ninput_parser = import_module(\"../../../package_io/input_parser.star\")\nshared_utils = import_module(\"../../../shared_utils/shared_utils.star\")\n# Default image if none specified in mev_params\n\nMOCK_MEV_SERVICE_NAME = \"mock-mev\"\nMOCK_MEV_BUILDER_PORT = 8560\n\n# The min/max CPU/memory that rustic-builder can use\nMIN_CPU = 100\nMAX_CPU = 1000\nMIN_MEMORY = 128\nMAX_MEMORY = 1024\n\n\ndef launch_mock_mev(\n    plan,\n    el_uri,\n    beacon_uri,\n    jwt_file,\n    global_log_level,\n    global_node_selectors,\n    global_tolerations,\n    mev_params,\n):\n    tolerations = shared_utils.get_tolerations(global_tolerations=global_tolerations)\n    mock_builder = plan.add_service(\n        name=MOCK_MEV_SERVICE_NAME,\n        config=ServiceConfig(\n            image=mev_params.mock_mev_image,\n            ports={\n                \"rest\": PortSpec(\n                    number=MOCK_MEV_BUILDER_PORT, transport_protocol=\"TCP\"\n                ),\n            },\n            cmd=[\n                \"--execution-endpoint=http://{0}\".format(el_uri),\n                \"--beacon-node=http://{0}\".format(beacon_uri),\n                \"--jwt-secret=\" + constants.JWT_MOUNT_PATH_ON_CONTAINER,\n                \"--port={0}\".format(MOCK_MEV_BUILDER_PORT),\n                \"--address=0.0.0.0\",\n                \"--set-max-bid-value\",\n                \"--log-level={0}\".format(global_log_level),\n                \"--builder-secret-key=\" + constants.DEFAULT_MEV_SECRET_KEY[2:],\n            ],\n            files={\n                constants.JWT_MOUNTPOINT_ON_CLIENTS: jwt_file,\n            },\n            min_cpu=MIN_CPU,\n            max_cpu=MAX_CPU,\n            min_memory=MIN_MEMORY,\n            max_memory=MAX_MEMORY,\n            node_selectors=global_node_selectors,\n            tolerations=tolerations,\n        ),\n    )\n    return \"http://{0}@{1}:{2}\".format(\n        constants.DEFAULT_MEV_PUBKEY, mock_builder.ip_address, MOCK_MEV_BUILDER_PORT\n    )\n"
  },
  {
    "path": "src/mev/helix/helix_relay_launcher.star",
    "content": "postgres_module = import_module(\"github.com/kurtosis-tech/postgres-package/main.star\")\nconstants = import_module(\"../../package_io/constants.star\")\nshared_utils = import_module(\"../../shared_utils/shared_utils.star\")\ninput_parser = import_module(\"../../package_io/input_parser.star\")\nstatic_files = import_module(\"../../static_files/static_files.star\")\n\nHELIX_RELAY_NAME = \"helix-relay\"\n\nHTTP_PORT_ID = \"http\"\nENDPOINT_PORT_ID = \"endpoint\"\n\nHELIX_RELAY_CONFIG_FILENAME = \"config.yaml\"\nHELIX_RELAY_MOUNT_DIRPATH_ON_SERVICE = \"/config/\"\nHELIX_RELAY_FILES_ARTIFACT_NAME = \"helix-relay-config\"\n\nHELIX_RELAY_ENDPOINT_PORT = 4040\nHELIX_RELAY_WEBSITE_PORT = 9060\n\nUSED_PORTS = {\n    ENDPOINT_PORT_ID: shared_utils.new_port_spec(\n        HELIX_RELAY_ENDPOINT_PORT,\n        shared_utils.TCP_PROTOCOL,\n        shared_utils.HTTP_APPLICATION_PROTOCOL,\n    ),\n    HTTP_PORT_ID: shared_utils.new_port_spec(\n        HELIX_RELAY_WEBSITE_PORT,\n        shared_utils.TCP_PROTOCOL,\n        shared_utils.HTTP_APPLICATION_PROTOCOL,\n    ),\n}\n\n# The min/max CPU/memory that mev-relay can use\nRELAY_MIN_CPU = 500\nRELAY_MAX_CPU = 3000\nRELAY_MIN_MEMORY = 256\nRELAY_MAX_MEMORY = 4096\n\n# The min/max CPU/memory that postgres can use\nPOSTGRES_MIN_CPU = 10\nPOSTGRES_MAX_CPU = 1000\nPOSTGRES_MIN_MEMORY = 32\nPOSTGRES_MAX_MEMORY = 1024\n\n\ndef launch_helix_relay(\n    plan,\n    network_params,\n    mev_params,\n    beacon_uris,\n    genesis_validators_root,\n    genesis_timestamp,\n    blocksim_uri,\n    persistent,\n    port_publisher,\n    index,\n    global_node_selectors,\n    global_tolerations,\n    el_cl_genesis_data,\n    relay_image=None,\n):\n    tolerations = shared_utils.get_tolerations(global_tolerations=global_tolerations)\n    public_ports = {}\n    endpoint_public_port = shared_utils.get_mev_public_port(\n        port_publisher,\n        ENDPOINT_PORT_ID,\n        index,\n        0,\n    )\n    public_ports.update(endpoint_public_port)\n    website_public_port = shared_utils.get_mev_public_port(\n        port_publisher,\n        HTTP_PORT_ID,\n        index,\n        1,\n    )\n    public_ports.update(website_public_port)\n\n    node_selectors = global_node_selectors\n\n    postgres = postgres_module.run(\n        plan,\n        password=\"postgres\",\n        user=\"postgres\",\n        database=\"postgres\",\n        service_name=\"helix-relay-postgres\",\n        image=\"timescale/timescaledb:latest-pg15\",\n        persistent=persistent,\n        launch_adminer=mev_params.launch_adminer,\n        min_cpu=POSTGRES_MIN_CPU,\n        max_cpu=POSTGRES_MAX_CPU,\n        min_memory=POSTGRES_MIN_MEMORY,\n        max_memory=POSTGRES_MAX_MEMORY,\n        node_selectors=node_selectors,\n        tolerations=tolerations,\n    )\n\n    # Generate configuration file using template\n    helix_template_data = new_helix_relay_config_template_data(\n        network_params,\n        genesis_timestamp,\n        blocksim_uri,\n        beacon_uris,\n        genesis_validators_root,\n        postgres,\n    )\n\n    # Read the helix config template\n    helix_config_template = read_file(static_files.HELIX_RELAY_CONFIG_FILEPATH)\n    template_and_data = shared_utils.new_template_and_data(\n        helix_config_template, helix_template_data\n    )\n\n    # Prepare template data for rendering\n    template_and_data_by_rel_dest_filepath = {}\n    template_and_data_by_rel_dest_filepath[\n        HELIX_RELAY_CONFIG_FILENAME\n    ] = template_and_data\n\n    # Render the configuration file\n    config_files_artifact_name = plan.render_templates(\n        template_and_data_by_rel_dest_filepath, HELIX_RELAY_FILES_ARTIFACT_NAME\n    )\n\n    # Path where config file will be mounted in container\n    config_file_path = shared_utils.path_join(\n        HELIX_RELAY_MOUNT_DIRPATH_ON_SERVICE, HELIX_RELAY_CONFIG_FILENAME\n    )\n\n    env_vars = {\n        \"RELAY_KEY\": constants.DEFAULT_MEV_SECRET_KEY,\n    }\n\n    # Use provided relay_image if available, otherwise use mev_params.mev_relay_image\n    helix_image = relay_image if relay_image else mev_params.mev_relay_image\n\n    endpoint = plan.add_service(\n        name=HELIX_RELAY_NAME,\n        config=ServiceConfig(\n            image=helix_image,\n            cmd=[\"--config\", config_file_path],\n            files={\n                HELIX_RELAY_MOUNT_DIRPATH_ON_SERVICE: config_files_artifact_name,\n                constants.GENESIS_DATA_MOUNTPOINT_ON_CLIENTS: el_cl_genesis_data,\n            },\n            ports=USED_PORTS,\n            public_ports=public_ports,\n            env_vars=env_vars | mev_params.mev_relay_api_extra_env_vars,\n            min_cpu=RELAY_MIN_CPU,\n            max_cpu=RELAY_MAX_CPU,\n            min_memory=RELAY_MIN_MEMORY,\n            max_memory=RELAY_MAX_MEMORY,\n            node_selectors=node_selectors,\n            tolerations=tolerations,\n        ),\n    )\n\n    return \"http://{0}@{1}:{2}\".format(\n        constants.DEFAULT_MEV_PUBKEY, endpoint.ip_address, HELIX_RELAY_ENDPOINT_PORT\n    )\n\n\ndef new_helix_relay_config_template_data(\n    network_params,\n    genesis_timestamp,\n    blocksim_uri,\n    beacon_uris,\n    genesis_validators_root,\n    postgres,\n):\n    return {\n        \"NETWORK_NAME\": network_params.network,\n        \"GENESIS_TIME\": genesis_timestamp,\n        \"BLOCKSIM_URI\": blocksim_uri,\n        \"BEACON_URI\": beacon_uris,\n        \"GENESIS_VALIDATORS_ROOT\": genesis_validators_root,\n        \"POSTGRES_HOST_NAME\": postgres.service.name,\n        \"POSTGRES_PORT\": 5432,\n        \"POSTGRES_DB\": \"postgres\",\n        \"POSTGRES_USER\": \"postgres\",\n        \"POSTGRES_PASS\": \"postgres\",\n        \"HELIX_RELAY_ENDPOINT_PORT\": HELIX_RELAY_ENDPOINT_PORT,\n        \"HELIX_RELAY_WEBSITE_PORT\": HELIX_RELAY_WEBSITE_PORT,\n        \"HELIX_RELAY_ENDPOINT_URL\": \"helix-relay:{}\".format(HELIX_RELAY_ENDPOINT_PORT),\n        \"HELIX_RELAY_PUBKEY\": constants.DEFAULT_MEV_PUBKEY,\n        \"GENESIS_CONFIG_MOUNT_PATH_ON_CONTAINER\": constants.GENESIS_DATA_MOUNTPOINT_ON_CLIENTS,\n    }\n"
  },
  {
    "path": "src/mev/mev-rs/mev_boost/mev_boost_context.star",
    "content": "def new_mev_boost_context(private_ip_address, port):\n    return struct(\n        private_ip_address=private_ip_address,\n        port=port,\n    )\n\n\ndef mev_boost_endpoint(mev_boost_context):\n    return \"http://{0}:{1}\".format(\n        mev_boost_context.private_ip_address, mev_boost_context.port\n    )\n"
  },
  {
    "path": "src/mev/mev-rs/mev_boost/mev_boost_launcher.star",
    "content": "shared_utils = import_module(\"../../../shared_utils/shared_utils.star\")\nmev_boost_context_module = import_module(\"../mev_boost/mev_boost_context.star\")\ninput_parser = import_module(\"../../../package_io/input_parser.star\")\nstatic_files = import_module(\"../../../static_files/static_files.star\")\nconstants = import_module(\"../../../package_io/constants.star\")\n\nMEV_BOOST_CONFIG_FILENAME = \"config.toml\"\nMEV_BOOST_MOUNT_DIRPATH_ON_SERVICE = \"/config\"\nMEV_BOOST_FILES_ARTIFACT_NAME = \"mev-rs-mev-boost-config\"\n\nUSED_PORTS = {\n    \"http\": shared_utils.new_port_spec(\n        constants.MEV_BOOST_PORT, shared_utils.TCP_PROTOCOL\n    )\n}\n\n# The min/max CPU/memory that mev-boost can use\nMIN_CPU = 10\nMAX_CPU = 500\nMIN_MEMORY = 16\nMAX_MEMORY = 256\n\n\ndef launch(\n    plan,\n    mev_boost_launcher,\n    service_name,\n    network,\n    mev_params,\n    relays,\n    el_cl_genesis_data,\n    port_publisher,\n    index,\n    global_node_selectors,\n    global_tolerations,\n):\n    tolerations = shared_utils.get_tolerations(global_tolerations=global_tolerations)\n\n    public_ports = shared_utils.get_mev_public_port(\n        port_publisher,\n        constants.HTTP_PORT_ID,\n        index,\n        0,\n    )\n\n    network = (\n        network\n        if network in constants.PUBLIC_NETWORKS\n        else constants.GENESIS_DATA_MOUNTPOINT_ON_CLIENTS\n    )\n    image = mev_params.mev_boost_image\n    template_data = new_config_template_data(\n        network,\n        constants.MEV_BOOST_PORT,\n        relays,\n    )\n\n    mev_rs_boost_config_template = read_file(\n        static_files.MEV_RS_MEV_BOOST_CONFIG_FILEPATH\n    )\n\n    template_and_data = shared_utils.new_template_and_data(\n        mev_rs_boost_config_template, template_data\n    )\n\n    template_and_data_by_rel_dest_filepath = {}\n    template_and_data_by_rel_dest_filepath[\n        MEV_BOOST_CONFIG_FILENAME\n    ] = template_and_data\n\n    config_files_artifact_name = plan.render_templates(\n        template_and_data_by_rel_dest_filepath,\n        MEV_BOOST_FILES_ARTIFACT_NAME + service_name,\n    )\n\n    config_file_path = shared_utils.path_join(\n        MEV_BOOST_MOUNT_DIRPATH_ON_SERVICE, MEV_BOOST_CONFIG_FILENAME\n    )\n\n    config = get_config(\n        mev_boost_launcher,\n        image,\n        config_file_path,\n        config_files_artifact_name,\n        el_cl_genesis_data,\n        global_node_selectors,\n        tolerations,\n        public_ports,\n        index,\n    )\n\n    mev_boost_service = plan.add_service(service_name, config)\n\n    return mev_boost_context_module.new_mev_boost_context(\n        mev_boost_service.name, constants.MEV_BOOST_PORT\n    )\n\n\ndef get_config(\n    mev_boost_launcher,\n    image,\n    config_file_path,\n    config_file,\n    el_cl_genesis_data,\n    node_selectors,\n    tolerations,\n    public_ports,\n    participant_index,\n):\n    return ServiceConfig(\n        image=image,\n        ports=USED_PORTS,\n        public_ports=public_ports,\n        cmd=[\n            \"boost\",\n            config_file_path,\n        ],\n        files={\n            MEV_BOOST_MOUNT_DIRPATH_ON_SERVICE: config_file,\n            constants.GENESIS_DATA_MOUNTPOINT_ON_CLIENTS: el_cl_genesis_data,\n        },\n        min_cpu=MIN_CPU,\n        max_cpu=MAX_CPU,\n        min_memory=MIN_MEMORY,\n        max_memory=MAX_MEMORY,\n        node_selectors=node_selectors,\n        tolerations=tolerations,\n        labels={constants.NODE_INDEX_LABEL_KEY: str(participant_index + 1)},\n    )\n\n\ndef new_mev_boost_launcher(should_check_relay, relay_end_points):\n    return struct(\n        should_check_relay=should_check_relay, relay_end_points=relay_end_points\n    )\n\n\ndef new_config_template_data(network, port, relays):\n    return {\n        \"Network\": network,\n        \"Port\": port,\n        \"Relays\": relays,\n    }\n"
  },
  {
    "path": "src/mev/mev-rs/mev_builder/mev_builder_launcher.star",
    "content": "shared_utils = import_module(\"../../../shared_utils/shared_utils.star\")\ninput_parser = import_module(\"../../../package_io/input_parser.star\")\nstatic_files = import_module(\"../../../static_files/static_files.star\")\nconstants = import_module(\"../../../package_io/constants.star\")\nmev_rs_relay = import_module(\"../mev_relay/mev_relay_launcher.star\")\n\n# MEV Builder flags\n\nMEV_BUILDER_CONFIG_FILENAME = \"config.toml\"\nMEV_BUILDER_MOUNT_DIRPATH_ON_SERVICE = \"/config\"\nMEV_BUILDER_FILES_ARTIFACT_NAME = \"mev-rs-mev-builder-config\"\nMEV_FILE_PATH_ON_CONTAINER = (\n    MEV_BUILDER_MOUNT_DIRPATH_ON_SERVICE + MEV_BUILDER_CONFIG_FILENAME\n)\n\n\ndef new_builder_config(\n    plan,\n    service_name,\n    network,\n    fee_recipient,\n    mnemonic,\n    extra_data,\n    global_node_selectors,\n):\n    builder_template_data = new_builder_config_template_data(\n        network,\n        constants.DEFAULT_MEV_PUBKEY,\n        constants.DEFAULT_MEV_SECRET_KEY,\n        mnemonic,\n        fee_recipient,\n        extra_data,\n    )\n    mev_rs_builder_config_template = read_file(\n        static_files.MEV_RS_MEV_BUILDER_CONFIG_FILEPATH\n    )\n\n    template_and_data = shared_utils.new_template_and_data(\n        mev_rs_builder_config_template, builder_template_data\n    )\n\n    template_and_data_by_rel_dest_filepath = {}\n    template_and_data_by_rel_dest_filepath[\n        MEV_BUILDER_CONFIG_FILENAME\n    ] = template_and_data\n\n    config_files_artifact_name = plan.render_templates(\n        template_and_data_by_rel_dest_filepath, MEV_BUILDER_FILES_ARTIFACT_NAME\n    )\n\n    config_file_path = shared_utils.path_join(\n        MEV_BUILDER_MOUNT_DIRPATH_ON_SERVICE, MEV_BUILDER_CONFIG_FILENAME\n    )\n\n    return config_files_artifact_name\n\n\ndef new_builder_config_template_data(\n    network,\n    pubkey,\n    secret,\n    mnemonic,\n    fee_recipient,\n    extra_data,\n):\n    return {\n        \"Network\": network,\n        \"Relay\": \"mev-rs-relay\",\n        \"RelayPort\": mev_rs_relay.MEV_RELAY_ENDPOINT_PORT,\n        \"PublicKey\": pubkey,\n        \"SecretKey\": secret,\n        \"Mnemonic\": mnemonic,\n        \"FeeRecipient\": fee_recipient,\n        \"ExtraData\": extra_data,\n    }\n"
  },
  {
    "path": "src/mev/mev-rs/mev_relay/mev_relay_launcher.star",
    "content": "shared_utils = import_module(\"../../../shared_utils/shared_utils.star\")\ninput_parser = import_module(\"../../../package_io/input_parser.star\")\nstatic_files = import_module(\"../../../static_files/static_files.star\")\nconstants = import_module(\"../../../package_io/constants.star\")\n\nMEV_RELAY_CONFIG_FILENAME = \"config.toml\"\nMEV_RELAY_MOUNT_DIRPATH_ON_SERVICE = \"/config\"\nMEV_RELAY_FILES_ARTIFACT_NAME = \"mev-rs-relay-config\"\n\nMEV_RELAY_ENDPOINT_PORT = 28545\n\nUSED_PORTS = {\n    \"http\": shared_utils.new_port_spec(\n        MEV_RELAY_ENDPOINT_PORT,\n        \"TCP\",\n    )\n}\n\n# The min/max CPU/memory that mev-relay can use\nMIN_CPU = 10\nMAX_CPU = 500\nMIN_MEMORY = 16\nMAX_MEMORY = 256\n\n\ndef launch_mev_relay(\n    plan,\n    mev_params,\n    network,\n    beacon_uri,\n    el_cl_genesis_data,\n    port_publisher,\n    index,\n    global_node_selectors,\n    global_tolerations,\n):\n    tolerations = shared_utils.get_tolerations(global_tolerations=global_tolerations)\n    node_selectors = global_node_selectors\n    image = mev_params.mev_relay_image\n    network = (\n        network\n        if network in constants.PUBLIC_NETWORKS\n        else constants.GENESIS_DATA_MOUNTPOINT_ON_CLIENTS\n    )\n\n    public_ports = shared_utils.get_mev_public_port(\n        port_publisher,\n        constants.HTTP_PORT_ID,\n        index,\n        0,\n    )\n    relay_template_data = new_relay_config_template_data(\n        network,\n        MEV_RELAY_ENDPOINT_PORT,\n        beacon_uri,\n        constants.DEFAULT_MEV_PUBKEY,\n        constants.DEFAULT_MEV_SECRET_KEY,\n    )\n\n    mev_rs_relay_config_template = read_file(\n        static_files.MEV_RS_MEV_RELAY_CONFIG_FILEPATH\n    )\n\n    template_and_data = shared_utils.new_template_and_data(\n        mev_rs_relay_config_template, relay_template_data\n    )\n\n    template_and_data_by_rel_dest_filepath = {}\n    template_and_data_by_rel_dest_filepath[\n        MEV_RELAY_CONFIG_FILENAME\n    ] = template_and_data\n\n    config_files_artifact_name = plan.render_templates(\n        template_and_data_by_rel_dest_filepath, MEV_RELAY_FILES_ARTIFACT_NAME\n    )\n\n    config_file_path = shared_utils.path_join(\n        MEV_RELAY_MOUNT_DIRPATH_ON_SERVICE, MEV_RELAY_CONFIG_FILENAME\n    )\n\n    mev_relay_service = plan.add_service(\n        name=\"mev-rs-relay\",\n        config=ServiceConfig(\n            image=image,\n            cmd=[\n                \"relay\",\n                config_file_path,\n            ],\n            files={\n                MEV_RELAY_MOUNT_DIRPATH_ON_SERVICE: config_files_artifact_name,\n                constants.GENESIS_DATA_MOUNTPOINT_ON_CLIENTS: el_cl_genesis_data,\n            },\n            ports=USED_PORTS,\n            public_ports=public_ports,\n            min_cpu=MIN_CPU,\n            max_cpu=MAX_CPU,\n            min_memory=MIN_MEMORY,\n            max_memory=MAX_MEMORY,\n            node_selectors=node_selectors,\n            tolerations=tolerations,\n            env_vars={\"RUST_BACKTRACE\": \"1\"},\n        ),\n    )\n\n    return (\n        \"http://{0}@{1}:{2}\".format(\n            constants.DEFAULT_MEV_PUBKEY,\n            mev_relay_service.name,\n            MEV_RELAY_ENDPOINT_PORT,\n        ),\n        mev_relay_service.name,\n        MEV_RELAY_ENDPOINT_PORT,\n    )\n\n\ndef new_relay_config_template_data(network, port, beacon_uri, pubkey, secret):\n    return {\n        \"Network\": network,\n        \"Port\": port,\n        \"BeaconNodeURL\": beacon_uri,\n        \"PublicKey\": pubkey,\n        \"SecretKey\": secret,\n    }\n"
  },
  {
    "path": "src/network_launcher/devnet.star",
    "content": "shared_utils = import_module(\"../shared_utils/shared_utils.star\")\nel_cl_genesis_data = import_module(\n    \"../prelaunch_data_generator/el_cl_genesis/el_cl_genesis_data.star\"\n)\n\n\ndef launch(plan, network, repo, global_tolerations=[], global_node_selectors={}):\n    # We are running a devnet\n    url = shared_utils.calculate_devnet_url(network, repo)\n    el_cl_genesis_uuid = plan.upload_files(\n        src=url,\n        name=\"el_cl_genesis\",\n    )\n    el_cl_genesis_data_uuid = plan.run_sh(\n        name=\"move-genesis-data\",\n        description=\"Creating network configs\",\n        run=\"mkdir -p /network-configs/ && mv /opt/* /network-configs/\",\n        store=[StoreSpec(src=\"/network-configs/\", name=\"el_cl_genesis_data\")],\n        files={\"/opt\": el_cl_genesis_uuid},\n        tolerations=shared_utils.get_tolerations(global_tolerations=global_tolerations),\n        node_selectors=global_node_selectors,\n    )\n    genesis_validators_root = read_file(url + \"/genesis_validators_root.txt\")\n\n    el_cl_data = el_cl_genesis_data.new_el_cl_genesis_data(\n        el_cl_genesis_data_uuid.files_artifacts[0],\n        genesis_validators_root,\n    )\n    final_genesis_timestamp = shared_utils.read_genesis_timestamp_from_config(\n        plan, el_cl_genesis_data_uuid.files_artifacts[0]\n    )\n    network_id = shared_utils.read_genesis_network_id_from_config(\n        plan, el_cl_genesis_data_uuid.files_artifacts[0]\n    )\n    validator_data = None\n    return el_cl_data, final_genesis_timestamp, network_id, validator_data\n"
  },
  {
    "path": "src/network_launcher/ephemery.star",
    "content": "shared_utils = import_module(\"../shared_utils/shared_utils.star\")\nel_cl_genesis_data = import_module(\n    \"../prelaunch_data_generator/el_cl_genesis/el_cl_genesis_data.star\"\n)\n\n\ndef launch(plan, global_tolerations=[], global_node_selectors={}):\n    el_cl_genesis_data_uuid = plan.run_sh(\n        name=\"fetch-ephemery-genesis-data\",\n        description=\"Creating network configs\",\n        run=\"sh -c '\\\n            mkdir -p /network-configs/ ;\\\n            mkdir -p /ephemery-release ;\\\n            release=$(curl --silent https://api.github.com/repos/ephemery-testnet/ephemery-genesis/releases/latest | jq -r .tag_name) ;\\\n            curl -Lo network-config.tar.gz https://github.com/ephemery-testnet/ephemery-genesis/releases/download/$release/network-config.tar.gz ;\\\n            tar xzf network-config.tar.gz -C /ephemery-release ;\\\n            mv /ephemery-release/metadata/* /network-configs/ ;\\\n            cat /network-configs/genesis_validators_root.txt ;\\\n        '\",\n        store=[StoreSpec(src=\"/network-configs/\", name=\"el_cl_genesis_data\")],\n        tolerations=shared_utils.get_tolerations(global_tolerations=global_tolerations),\n        node_selectors=global_node_selectors,\n    )\n    genesis_validators_root = el_cl_genesis_data_uuid.output\n    el_cl_data = el_cl_genesis_data.new_el_cl_genesis_data(\n        el_cl_genesis_data_uuid.files_artifacts[0],\n        genesis_validators_root,\n    )\n    final_genesis_timestamp = shared_utils.read_genesis_timestamp_from_config(\n        plan, el_cl_genesis_data_uuid.files_artifacts[0]\n    )\n    network_id = shared_utils.read_genesis_network_id_from_config(\n        plan, el_cl_genesis_data_uuid.files_artifacts[0]\n    )\n    validator_data = None\n    return el_cl_data, final_genesis_timestamp, network_id, validator_data\n"
  },
  {
    "path": "src/network_launcher/kurtosis.star",
    "content": "shared_utils = import_module(\"../shared_utils/shared_utils.star\")\nvalidator_keystores = import_module(\n    \"../prelaunch_data_generator/validator_keystores/validator_keystore_generator.star\"\n)\n\nconstants = import_module(\"../package_io/constants.star\")\n\n# The time that the CL genesis generation step takes to complete, based off what we've seen\n# This is in seconds\nCL_GENESIS_DATA_GENERATION_TIME = 5\n\n# Each CL node takes about this time to start up and start processing blocks, so when we create the CL\n#  genesis data we need to set the genesis timestamp in the future so that nodes don't miss important slots\n# (e.g. Altair fork)\n# TODO(old) Make this client-specific (currently this is Nimbus)\n# This is in seconds\nCL_NODE_STARTUP_TIME = 5\n\n\ndef launch(\n    plan, network_params, args_with_right_defaults, parallel_keystore_generation\n):\n    num_participants = len(args_with_right_defaults.participants)\n    plan.print(\"Generating cl validator key stores\")\n    validator_data = None\n    if not parallel_keystore_generation:\n        validator_data = validator_keystores.generate_validator_keystores(\n            plan,\n            network_params.preregistered_validator_keys_mnemonic,\n            args_with_right_defaults.participants,\n            args_with_right_defaults.docker_cache_params,\n        )\n    else:\n        validator_data = validator_keystores.generate_validator_keystores_in_parallel(\n            plan,\n            network_params.preregistered_validator_keys_mnemonic,\n            args_with_right_defaults.participants,\n            args_with_right_defaults.docker_cache_params,\n        )\n\n    plan.print(json.indent(json.encode(validator_data)))\n\n    # We need to send the same genesis time to both the EL and the CL to ensure that timestamp based forking works as expected\n    # If genesis_time is specified (non-zero), use it; otherwise, derive it from genesis_delay\n    final_genesis_timestamp = (\n        str(network_params.genesis_time)\n        if network_params.genesis_time > 0\n        else shared_utils.get_final_genesis_timestamp(\n            plan,\n            network_params.genesis_delay\n            + CL_GENESIS_DATA_GENERATION_TIME\n            + num_participants * CL_NODE_STARTUP_TIME,\n        )\n    )\n\n    # if preregistered validator count is 0 (default) then calculate the total number of validators from the participants\n    total_number_of_validator_keys = network_params.preregistered_validator_count\n\n    if network_params.preregistered_validator_count == 0:\n        for participant in args_with_right_defaults.participants:\n            total_number_of_validator_keys += participant.validator_count\n\n    plan.print(\"Generating EL CL data\")\n\n    ethereum_genesis_generator_image = shared_utils.docker_cache_image_calc(\n        args_with_right_defaults.docker_cache_params,\n        args_with_right_defaults.ethereum_genesis_generator_params.image,\n    )\n\n    return (\n        total_number_of_validator_keys,\n        ethereum_genesis_generator_image,\n        final_genesis_timestamp,\n        validator_data,\n    )\n"
  },
  {
    "path": "src/network_launcher/public_network.star",
    "content": "shared_utils = import_module(\"../shared_utils/shared_utils.star\")\nel_cl_genesis_data = import_module(\n    \"../prelaunch_data_generator/el_cl_genesis/el_cl_genesis_data.star\"\n)\nconstants = import_module(\"../package_io/constants.star\")\ninput_parser = import_module(\"../package_io/input_parser.star\")\n\n\ndef launch(\n    plan, participants, network_params, global_tolerations, global_node_selectors\n):\n    if network_params.force_snapshot_sync:\n        # Fetch block data and determine block height\n        if network_params.shadowfork_block_height == \"latest\":\n            latest_block = plan.run_sh(\n                name=\"fetch-latest-block-data-public\",\n                description=\"Fetching the latest block data for public network\",\n                run=\"mkdir -p /blocks && \\\n                BASE_URL='\"\n                + network_params.network_sync_base_url\n                + network_params.network\n                + '\\' && \\\n                LATEST_BLOCK=$(curl -s \"${BASE_URL}/geth/latest\") && \\\n                echo \"Latest block number: $LATEST_BLOCK\" && \\\n                echo $LATEST_BLOCK > /blocks/block_height.txt',\n                store=[StoreSpec(src=\"/blocks\", name=\"latest\")],\n                tolerations=shared_utils.get_tolerations(\n                    global_tolerations=global_tolerations\n                ),\n                node_selectors=global_node_selectors,\n            )\n        else:\n            latest_block = plan.run_sh(\n                name=\"fetch-specific-block-data-public\",\n                description=\"Fetching block data for specific block\",\n                run=\"mkdir -p /blocks && \\\n                echo Specific block number: \"\n                + str(network_params.shadowfork_block_height)\n                + \" && echo \"\n                + str(network_params.shadowfork_block_height)\n                + \" > /blocks/block_height.txt\",\n                store=[StoreSpec(src=\"/blocks\", name=\"latest\")],\n                tolerations=shared_utils.get_tolerations(\n                    global_tolerations=global_tolerations\n                ),\n                node_selectors=global_node_selectors,\n            )\n\n        for index, participant in enumerate(participants):\n            tolerations = shared_utils.get_tolerations(\n                specific_container_tolerations=participant.el_tolerations,\n                participant_tolerations=participant.tolerations,\n                global_tolerations=global_tolerations,\n            )\n            node_selectors = input_parser.get_client_node_selectors(\n                participant.node_selectors,\n                global_node_selectors,\n            )\n\n            cl_type = participant.cl_type\n            el_type = participant.el_type\n\n            # Zero-pad the index using the calculated zfill value\n            index_str = shared_utils.zfill_custom(\n                index + 1, len(str(len(participants)))\n            )\n\n            el_service_name = \"el-{0}-{1}-{2}\".format(index_str, el_type, cl_type)\n            el_data = plan.add_service(\n                name=\"snapshot-{0}\".format(el_service_name),\n                config=ServiceConfig(\n                    image=\"alpine:3.19.1\",\n                    cmd=[\n                        \"apk add --no-cache curl tar zstd && \"\n                        + \"BLOCK_HEIGHT=$(cat /shared/block_height.txt) && \"\n                        + 'echo \"Using block height: $BLOCK_HEIGHT\" && '\n                        + \"curl -s -L \"\n                        + network_params.network_sync_base_url\n                        + network_params.network\n                        + \"/\"\n                        + el_type\n                        + \"/$BLOCK_HEIGHT/snapshot.tar.zst\"\n                        + \" | tar -I zstd -xvf - -C /data/\"\n                        + el_type\n                        + \"/execution-data\"\n                        + \" && touch /tmp/finished\"\n                        + \" && tail -f /dev/null\"\n                    ],\n                    entrypoint=[\"/bin/sh\", \"-c\"],\n                    files={\n                        \"/data/\"\n                        + el_type\n                        + \"/execution-data\": Directory(\n                            persistent_key=\"data-{0}\".format(el_service_name),\n                            size=constants.VOLUME_SIZE[network_params.network][\n                                el_type + \"_volume_size\"\n                            ],\n                        ),\n                        \"/shared\": \"latest\",\n                    },\n                    tolerations=tolerations,\n                    node_selectors=node_selectors,\n                ),\n            )\n        for index, participant in enumerate(participants):\n            cl_type = participant.cl_type\n            el_type = participant.el_type\n\n            # Zero-pad the index using the calculated zfill value\n            index_str = shared_utils.zfill_custom(\n                index + 1, len(str(len(participants)))\n            )\n\n            el_service_name = \"el-{0}-{1}-{2}\".format(index_str, el_type, cl_type)\n            plan.wait(\n                service_name=\"snapshot-{0}\".format(el_service_name),\n                recipe=ExecRecipe(command=[\"cat\", \"/tmp/finished\"]),\n                field=\"code\",\n                assertion=\"==\",\n                target_value=0,\n                interval=\"1s\",\n                timeout=\"6h\",  # 6 hours should be enough for the biggest network\n            )\n\n    fetch_osaka_time = plan.run_sh(\n        name=\"fetch-osaka-time\",\n        description=\"Fetching osaka time from genesis\",\n        run=\"mkdir -p /network-configs && \\\n            cd /network-configs && \\\n            BASE_URL=https://raw.githubusercontent.com/eth-clients/\"\n        + network_params.network\n        + \"/main/metadata && \\\n            curl -fsSL -o genesis.json \\\"$BASE_URL/genesis.json\\\" || echo \\\"genesis.json not found\\\" && \\\n            jq '.config.osakaTime' /network-configs/genesis.json | tr -d '\\n'\",\n        store=[StoreSpec(src=\"/network-configs/\", name=\"el_cl_genesis_data\")],\n        tolerations=shared_utils.get_tolerations(global_tolerations=global_tolerations),\n        node_selectors=global_node_selectors,\n    )\n    el_cl_data = el_cl_genesis_data.new_el_cl_genesis_data(\n        fetch_osaka_time.files_artifacts[0],\n        constants.GENESIS_VALIDATORS_ROOT[network_params.network],\n        fetch_osaka_time.output,\n    )\n    final_genesis_timestamp = constants.GENESIS_TIME[network_params.network]\n    network_id = constants.NETWORK_ID[network_params.network]\n    validator_data = None\n    return el_cl_data, final_genesis_timestamp, network_id, validator_data\n"
  },
  {
    "path": "src/network_launcher/shadowfork.star",
    "content": "shared_utils = import_module(\"../shared_utils/shared_utils.star\")\nconstants = import_module(\"../package_io/constants.star\")\ninput_parser = import_module(\"../package_io/input_parser.star\")\n\n\ndef shadowfork_prep(\n    plan,\n    network_params,\n    participants,\n    global_tolerations,\n    global_node_selectors,\n):\n    base_network = shared_utils.get_network_name(network_params.network)\n    # overload the network name to remove the shadowfork suffix\n    if constants.NETWORK_NAME.ephemery in base_network:\n        chain_id = plan.run_sh(\n            name=\"fetch-chain-id\",\n            description=\"Fetching the chain id\",\n            run=\"curl -s https://ephemery.dev/latest/config.yaml | yq .DEPOSIT_CHAIN_ID | tr -d '\\n'\",\n            image=constants.DEFAULT_YQ_IMAGE,\n            tolerations=shared_utils.get_tolerations(\n                global_tolerations=global_tolerations\n            ),\n            node_selectors=global_node_selectors,\n        )\n        network_id = chain_id.output\n    else:\n        network_id = constants.NETWORK_ID[\n            base_network\n        ]  # overload the network id to match the network name\n\n    # Fetch block data and determine block height\n    if network_params.shadowfork_block_height == \"latest\":\n        latest_block = plan.run_sh(\n            name=\"fetch-latest-block-data-sf\",\n            description=\"Fetching the latest block data\",\n            run=\"mkdir -p /shadowfork && \\\n            BASE_URL='\"\n            + network_params.network_sync_base_url\n            + base_network\n            + '\\' && \\\n            LATEST_BLOCK=$(curl -s \"${BASE_URL}/geth/latest\") && \\\n            echo \"Latest block number: $LATEST_BLOCK\" && \\\n            echo $LATEST_BLOCK > /shadowfork/block_height.txt && \\\n            URL=\"${BASE_URL}/geth/$LATEST_BLOCK/_snapshot_eth_getBlockByNumber.json\" && \\\n            echo \"Fetching from URL: $URL\" && \\\n            curl -s -f -o /shadowfork/latest_block.json \"$URL\" || { echo \"Curl failed with exit code $?\"; exit 1; } && \\\n            cat /shadowfork/latest_block.json',\n            store=[StoreSpec(src=\"/shadowfork\", name=\"latest_blocks\")],\n            tolerations=shared_utils.get_tolerations(\n                global_tolerations=global_tolerations\n            ),\n            node_selectors=global_node_selectors,\n        )\n    else:\n        latest_block = plan.run_sh(\n            name=\"fetch-block-data-sf\",\n            description=\"Fetching block data for specific block\",\n            run=\"mkdir -p /shadowfork && \\\n            BLOCK_HEIGHT='\"\n            + str(network_params.shadowfork_block_height)\n            + \"' && \\\n            echo $BLOCK_HEIGHT > /shadowfork/block_height.txt && \\\n            BASE_URL='\"\n            + network_params.network_sync_base_url\n            + base_network\n            + '\\' && \\\n            URL=\"${BASE_URL}/geth/$BLOCK_HEIGHT/_snapshot_eth_getBlockByNumber.json\" && \\\n            echo \"Fetching from URL: $URL\" && \\\n            curl -s -f -o /shadowfork/latest_block.json \"$URL\" || { echo \"Curl failed with exit code $?\"; exit 1; } && \\\n            cat /shadowfork/latest_block.json',\n            store=[StoreSpec(src=\"/shadowfork\", name=\"latest_blocks\")],\n            tolerations=shared_utils.get_tolerations(\n                global_tolerations=global_tolerations\n            ),\n            node_selectors=global_node_selectors,\n        )\n\n    for index, participant in enumerate(participants):\n        tolerations = shared_utils.get_tolerations(\n            specific_container_tolerations=participant.el_tolerations,\n            participant_tolerations=participant.tolerations,\n            global_tolerations=global_tolerations,\n        )\n        node_selectors = input_parser.get_client_node_selectors(\n            participant.node_selectors,\n            global_node_selectors,\n        )\n\n        cl_type = participant.cl_type\n        el_type = participant.el_type\n\n        # Zero-pad the index using the calculated zfill value\n        index_str = shared_utils.zfill_custom(index + 1, len(str(len(participants))))\n\n        el_service_name = \"el-{0}-{1}-{2}\".format(index_str, el_type, cl_type)\n        plan.add_service(\n            name=\"shadowfork-{0}\".format(el_service_name),\n            config=ServiceConfig(\n                image=\"alpine:3.19.1\",\n                cmd=[\n                    \"apk add --no-cache curl tar zstd && \"\n                    + \"BLOCK_HEIGHT=$(cat /shared/block_height.txt) && \"\n                    + 'echo \"Using block height: $BLOCK_HEIGHT\" && '\n                    + \"curl -s -L \"\n                    + network_params.network_sync_base_url\n                    + base_network\n                    + \"/\"\n                    + el_type\n                    + \"/$BLOCK_HEIGHT/snapshot.tar.zst\"\n                    + \" | tar -I zstd -xvf - -C /data/\"\n                    + el_type\n                    + \"/execution-data\"\n                    + \" && touch /tmp/finished\"\n                    + \" && tail -f /dev/null\"\n                ],\n                entrypoint=[\"/bin/sh\", \"-c\"],\n                files={\n                    \"/data/\"\n                    + el_type\n                    + \"/execution-data\": Directory(\n                        persistent_key=\"data-{0}\".format(el_service_name),\n                        size=constants.VOLUME_SIZE[base_network][\n                            el_type + \"_volume_size\"\n                        ],\n                    ),\n                    \"/shared\": \"latest_blocks\",\n                },\n                tolerations=tolerations,\n                node_selectors=node_selectors,\n            ),\n        )\n    for index, participant in enumerate(participants):\n        cl_type = participant.cl_type\n        el_type = participant.el_type\n\n        # Zero-pad the index using the calculated zfill value\n        index_str = shared_utils.zfill_custom(index + 1, len(str(len(participants))))\n\n        el_service_name = \"el-{0}-{1}-{2}\".format(index_str, el_type, cl_type)\n        plan.wait(\n            service_name=\"shadowfork-{0}\".format(el_service_name),\n            recipe=ExecRecipe(command=[\"cat\", \"/tmp/finished\"]),\n            field=\"code\",\n            assertion=\"==\",\n            target_value=0,\n            interval=\"1s\",\n            timeout=\"6h\",  # 6 hours should be enough for the biggest network\n        )\n    return latest_block, network_id\n"
  },
  {
    "path": "src/nginx/nginx_launcher.star",
    "content": "shared_utils = import_module(\"../shared_utils/shared_utils.star\")\nstatic_files = import_module(\"../static_files/static_files.star\")\nconstants = import_module(\"../package_io/constants.star\")\ninput_parser = import_module(\"../package_io/input_parser.star\")\nSERVICE_NAME = \"nginx\"\nHTTP_PORT_ID = \"http\"\nHTTP_PORT_NUMBER = 80\nNGINX_CONFIG_FILENAME = \"index.html\"\nNGINX_ENR_FILENAME = \"boot_enr.yaml\"\nNGINX_ENODE_FILENAME = \"bootnode.txt\"\nNGINX_ENR_LIST_FILENAME = \"bootstrap_nodes.txt\"\n\nNGINX_CONFIG_MOUNT_DIRPATH_ON_SERVICE = \"/usr/share/nginx/html/\"\n\nIMAGE_NAME = \"nginx:latest\"\n# The min/max CPU/memory that nginx can use\nMIN_CPU = 100\nMAX_CPU = 300\nMIN_MEMORY = 128\nMAX_MEMORY = 256\n\nUSED_PORTS = {\n    HTTP_PORT_ID: shared_utils.new_port_spec(\n        HTTP_PORT_NUMBER,\n        shared_utils.TCP_PROTOCOL,\n        shared_utils.HTTP_APPLICATION_PROTOCOL,\n    )\n}\n\n\ndef launch_nginx(\n    plan,\n    el_cl_genesis_data,\n    nginx_port,\n    participant_contexts,\n    participant_configs,\n    port_publisher,\n    index,\n    global_node_selectors,\n    global_tolerations,\n    docker_cache_params,\n):\n    tolerations = shared_utils.get_tolerations(global_tolerations=global_tolerations)\n\n    config_files_artifact_name = plan.upload_files(\n        src=static_files.NGINX_CONFIG_FILEPATH, name=\"nginx-config\"\n    )\n\n    public_ports = shared_utils.get_additional_service_standard_public_port(\n        port_publisher,\n        constants.HTTP_PORT_ID,\n        index,\n        0,\n    )\n\n    all_cl_client_info = []\n    all_el_client_info = []\n    for index, participant in enumerate(participant_contexts):\n        _, cl_client, el_client, _ = shared_utils.get_client_names(\n            participant, index, participant_contexts, participant_configs\n        )\n        all_cl_client_info.append(new_cl_client_info(cl_client.enr))\n        all_el_client_info.append(new_el_client_info(el_client.enode))\n\n    template_data = new_config_template_data(\n        all_cl_client_info,\n        all_el_client_info,\n    )\n\n    enr_template_and_data = shared_utils.new_template_and_data(\n        read_file(static_files.NGINX_ENR_FILEPATH),\n        template_data,\n    )\n\n    enr_list_template_and_data = shared_utils.new_template_and_data(\n        read_file(static_files.NGINX_ENR_LIST_FILEPATH),\n        template_data,\n    )\n\n    enode_template_and_data = shared_utils.new_template_and_data(\n        read_file(static_files.NGINX_ENODE_FILEPATH),\n        template_data,\n    )\n\n    template_and_data_by_rel_dest_filepath = {}\n    template_and_data_by_rel_dest_filepath[NGINX_ENR_FILENAME] = enr_template_and_data\n    template_and_data_by_rel_dest_filepath[\n        NGINX_ENR_LIST_FILENAME\n    ] = enr_list_template_and_data\n    template_and_data_by_rel_dest_filepath[\n        NGINX_ENODE_FILENAME\n    ] = enode_template_and_data\n\n    bootstrap_info_files_artifact_name = plan.render_templates(\n        template_and_data_by_rel_dest_filepath, \"nginx-bootstrap-info\"\n    )\n\n    if nginx_port != None:\n        public_ports = {\n            HTTP_PORT_ID: shared_utils.new_port_spec(\n                nginx_port, shared_utils.TCP_PROTOCOL\n            )\n        }\n\n    config = get_config(\n        config_files_artifact_name,\n        el_cl_genesis_data,\n        public_ports,\n        bootstrap_info_files_artifact_name,\n        global_node_selectors,\n        tolerations,\n        docker_cache_params,\n    )\n\n    plan.add_service(SERVICE_NAME, config)\n\n\ndef get_config(\n    config_files_artifact_name,\n    el_cl_genesis_data,\n    public_ports,\n    bootstrap_info_files_artifact_name,\n    node_selectors,\n    tolerations,\n    docker_cache_params,\n):\n    files = {\n        constants.GENESIS_DATA_MOUNTPOINT_ON_CLIENTS: el_cl_genesis_data,\n        constants.GENESIS_DATA_MOUNTPOINT_ON_CLIENTS\n        + \"/boot\": bootstrap_info_files_artifact_name,\n        NGINX_CONFIG_MOUNT_DIRPATH_ON_SERVICE: config_files_artifact_name,\n    }\n\n    cmd = [\n        \"mv\",\n        \"/network-configs/boot/\" + NGINX_ENR_FILENAME,\n        \"/network-configs/\" + NGINX_ENR_FILENAME,\n        \"&&\",\n        \"mv\",\n        \"/network-configs/boot/\" + NGINX_ENODE_FILENAME,\n        \"/network-configs/\" + NGINX_ENODE_FILENAME,\n        \"&&\",\n        \"mv\",\n        \"/network-configs/boot/\" + NGINX_ENR_LIST_FILENAME,\n        \"/network-configs/\" + NGINX_ENR_LIST_FILENAME,\n        \"&&\",\n        \"cp -R /network-configs /usr/share/nginx/html/\",\n        \"&&\",\n        \"tar\",\n        \"-czvf\",\n        \"/usr/share/nginx/html/network-config.tar\",\n        \"-C\",\n        \"/network-configs/\",\n        \".\",\n        \"&&\",\n        'nginx -g \"daemon off;\"',\n    ]\n\n    cmd_str = \" \".join(cmd)\n\n    return ServiceConfig(\n        image=shared_utils.docker_cache_image_calc(\n            docker_cache_params,\n            IMAGE_NAME,\n        ),\n        ports=USED_PORTS,\n        public_ports=public_ports,\n        cmd=[cmd_str],\n        entrypoint=[\"sh\", \"-c\"],\n        files=files,\n        min_cpu=MIN_CPU,\n        max_cpu=MAX_CPU,\n        min_memory=MIN_MEMORY,\n        max_memory=MAX_MEMORY,\n        node_selectors=node_selectors,\n        tolerations=tolerations,\n    )\n\n\ndef new_config_template_data(cl_client, el_client):\n    return {\n        \"CLClient\": cl_client,\n        \"ELClient\": el_client,\n    }\n\n\ndef new_cl_client_info(enr):\n    return {\n        \"Enr\": enr,\n    }\n\n\ndef new_el_client_info(enode):\n    return {\n        \"Enode\": enode,\n    }\n"
  },
  {
    "path": "src/node_metrics_info.star",
    "content": "# this is a dictionary as this will get serialized to JSON\ndef new_node_metrics_info(\n    name,\n    path,\n    url,\n    config=None,\n):\n    return {\n        \"name\": name,\n        \"path\": path,\n        \"url\": url,\n        \"config\": config,\n    }\n"
  },
  {
    "path": "src/package_io/constants.star",
    "content": "EL_TYPE = struct(\n    geth=\"geth\",\n    erigon=\"erigon\",\n    nethermind=\"nethermind\",\n    besu=\"besu\",\n    reth=\"reth\",\n    reth_builder=\"reth-builder\",\n    ethereumjs=\"ethereumjs\",\n    nimbus=\"nimbus\",\n    ethrex=\"ethrex\",\n    dummy=\"dummy\",\n)\n\nCL_TYPE = struct(\n    lighthouse=\"lighthouse\",\n    teku=\"teku\",\n    nimbus=\"nimbus\",\n    prysm=\"prysm\",\n    lodestar=\"lodestar\",\n    grandine=\"grandine\",\n    consensoor=\"consensoor\",\n    caplin=\"caplin\",\n)\n\nVC_TYPE = struct(\n    lighthouse=\"lighthouse\",\n    lodestar=\"lodestar\",\n    nimbus=\"nimbus\",\n    prysm=\"prysm\",\n    teku=\"teku\",\n    vero=\"vero\",\n    grandine=\"grandine\",\n    consensoor=\"consensoor\",\n)\n\nREMOTE_SIGNER_TYPE = struct(web3signer=\"web3signer\")\n\nGLOBAL_LOG_LEVEL = struct(\n    info=\"info\",\n    error=\"error\",\n    warn=\"warn\",\n    debug=\"debug\",\n    trace=\"trace\",\n    custom=\"custom\",\n)\n\nCLIENT_TYPES = struct(\n    el=\"execution\",\n    cl=\"beacon\",\n    validator=\"validator\",\n    remote_signer=\"remote-signer\",\n)\n\nTCP_DISCOVERY_PORT_ID = \"tcp-discovery\"\nUDP_DISCOVERY_PORT_ID = \"udp-discovery\"\nQUIC_DISCOVERY_PORT_ID = \"quic-discovery\"\nRPC_PORT_ID = \"rpc\"\nWS_RPC_PORT_ID = \"ws-rpc\"\nWS_PORT_ID = \"ws\"\nHTTP_PORT_ID = \"http\"\nTORRENT_PORT_ID = \"torrent\"\nPROFILING_PORT_ID = \"profiling\"\nVALIDATOR_HTTP_PORT_ID = \"http-validator\"\nMETRICS_PORT_ID = \"metrics\"\nENGINE_RPC_PORT_ID = \"engine-rpc\"\nENGINE_WS_PORT_ID = \"engine-ws\"\nDEBUG_PORT_ID = \"debug\"\nADMIN_PORT_ID = \"admin\"\nRBUILDER_PORT_ID = \"rbuilder-rpc\"\nRBUILDER_METRICS_PORT_ID = \"rbuilder-metric\"\nLITTLE_BIGTABLE_PORT_ID = \"littlebigtable\"\nVALIDATOR_GRPC_PORT_ID = \"grpc\"\n\nVALIDATING_REWARDS_ACCOUNT = \"0x8943545177806ED17B9F23F0a21ee5948eCaa776\"\nMAX_ENR_ENTRIES = 20\nMAX_ENODE_ENTRIES = 20\nMIN_PEERS = 0\nGENESIS_VALIDATORS_ROOT_PLACEHOLDER = \"GENESIS_VALIDATORS_ROOT_PLACEHOLDER\"\n\nARCHIVE_MODE = True\n\nGENESIS_DATA_MOUNTPOINT_ON_CLIENTS = \"/network-configs\"\nGENESIS_CONFIG_MOUNT_PATH_ON_CONTAINER = GENESIS_DATA_MOUNTPOINT_ON_CLIENTS\n\nVALIDATOR_KEYS_DIRPATH_ON_SERVICE_CONTAINER = \"/validator-keys\"\n\nJWT_MOUNTPOINT_ON_CLIENTS = \"/jwt\"\nJWT_MOUNT_PATH_ON_CONTAINER = JWT_MOUNTPOINT_ON_CLIENTS + \"/jwtsecret\"\n\nNODE_KEY_MOUNTPOINT_ON_CLIENTS = \"/peerdas-node-keys\"\n\nKEYMANAGER_MOUNT_PATH_ON_CLIENTS = \"/keymanager\"\nKEYMANAGER_MOUNT_PATH_ON_CONTAINER = (\n    KEYMANAGER_MOUNT_PATH_ON_CLIENTS + \"/keymanager.txt\"\n)\n\nMOCK_MEV_TYPE = \"mock\"\nFLASHBOTS_MEV_TYPE = \"flashbots\"\nMEV_RS_MEV_TYPE = \"mev-rs\"\nCOMMIT_BOOST_MEV_TYPE = \"commit-boost\"\nHELIX_MEV_TYPE = \"helix\"\nBUILDOOR_MEV_TYPE = \"buildoor\"\nDEFAULT_DORA_IMAGE = \"ethpandaops/dora:latest\"\nDEFAULT_CHECKPOINTZ_IMAGE = \"ethpandaops/checkpointz:latest\"\nDEFAULT_SPAMOOR_IMAGE = \"ethpandaops/spamoor:latest\"\nDEFAULT_SLASHOOR_IMAGE = \"ethpandaops/slashoor:latest\"\nDEFAULT_ASSERTOOR_IMAGE = \"ethpandaops/assertoor:latest\"\nDEFAULT_SNOOPER_IMAGE = \"ethpandaops/rpc-snooper:latest\"\nDEFAULT_BOOTNODOOR_IMAGE = \"ethpandaops/bootnodoor:latest\"\nDEFAULT_ETHEREUM_GENESIS_GENERATOR_IMAGE = (\n    \"ethpandaops/ethereum-genesis-generator:6.0.5\"\n)\nDEFAULT_YQ_IMAGE = \"linuxserver/yq\"\nDEFAULT_FLASHBOTS_RELAY_IMAGE = \"ethpandaops/mev-boost-relay:main\"\nDEFAULT_FLASHBOTS_BUILDER_IMAGE = \"ethpandaops/reth-rbuilder:develop\"\nDEFAULT_FLASHBOTS_MEV_BOOST_IMAGE = \"ethpandaops/mev-boost:develop\"\nDEFAULT_MEV_RS_IMAGE = \"ethpandaops/mev-rs:main\"\nDEFAULT_MEV_RS_IMAGE_MINIMAL = \"ethpandaops/mev-rs:main-minimal\"\nDEFAULT_COMMIT_BOOST_MEV_BOOST_IMAGE = \"ghcr.io/commit-boost/pbs:latest\"\nDEFAULT_MOCK_MEV_IMAGE = \"ethpandaops/rustic-builder:main\"\nDEFAULT_BUILDOOR_IMAGE = \"ethpandaops/buildoor:main\"\nDEFAULT_HELIX_RELAY_IMAGE = \"ghcr.io/gattaca-com/helix-relay:main\"\nDEFAULT_ZKBOOST_IMAGE = \"ghcr.io/eth-act/zkboost/zkboost:latest\"\nDEFAULT_MEV_PUBKEY = \"0xa55c1285d84ba83a5ad26420cd5ad3091e49c55a813eee651cd467db38a8c8e63192f47955e9376f6b42f6d190571cb5\"\nDEFAULT_MEV_SECRET_KEY = (\n    \"0x607a11b45a7219cc61a3d9c5fd08c7eebd602a6a19a977f8d3771d5711a550f2\"\n)\nMEV_BOOST_SERVICE_NAME_PREFIX = \"mev-boost\"\nCOMMIT_BOOST_SERVICE_NAME_PREFIX = \"commit-boost\"\nMEV_BOOST_PORT = 18550\nDEFAULT_MNEMONIC = \"giant issue aisle success illegal bike spike question tent bar rely arctic volcano long crawl hungry vocal artwork sniff fantasy very lucky have athlete\"\n\nPRIVATE_IP_ADDRESS_PLACEHOLDER = \"KURTOSIS_IP_ADDR_PLACEHOLDER\"\n\nGENESIS_FORK_VERSION = \"0x10000038\"\nALTAIR_FORK_VERSION = \"0x20000038\"\nBELLATRIX_FORK_VERSION = \"0x30000038\"\nCAPELLA_FORK_VERSION = \"0x40000038\"\nDENEB_FORK_VERSION = \"0x50000038\"\nELECTRA_FORK_VERSION = \"0x60000038\"\nFULU_FORK_VERSION = \"0x70000038\"\nGLOAS_FORK_VERSION = \"0x80000038\"\nHEZE_FORK_VERSION = \"0x90000038\"\n\nFAR_FUTURE_EPOCH = 18446744073709551615\n\nMAX_LABEL_LENGTH = 63\n\nCONTAINER_REGISTRY = struct(\n    dockerhub=\"/\",\n    ghcr=\"ghcr.io\",\n    gcr=\"gcr.io\",\n)\n\nNETWORK_NAME = struct(\n    mainnet=\"mainnet\",\n    sepolia=\"sepolia\",\n    holesky=\"holesky\",\n    hoodi=\"hoodi\",\n    ephemery=\"ephemery\",\n    kurtosis=\"kurtosis\",\n    verkle=\"verkle\",\n    shadowfork=\"shadowfork\",\n)\n\nPUBLIC_NETWORKS = (\n    \"mainnet\",\n    \"sepolia\",\n    \"holesky\",\n    \"hoodi\",\n)\n\nNETWORK_ID = {\n    \"mainnet\": \"1\",\n    \"sepolia\": \"11155111\",\n    \"holesky\": \"17000\",\n    \"hoodi\": \"560048\",\n}\n\nCHECKPOINT_SYNC_URL = {\n    \"mainnet\": \"https://beaconstate.info\",\n    \"ephemery\": \"https://checkpoint-sync.ephemery.ethpandaops.io/\",\n    \"sepolia\": \"https://checkpoint-sync.sepolia.ethpandaops.io/\",\n    \"holesky\": \"https://checkpoint-sync.holesky.ethpandaops.io/\",\n    \"hoodi\": \"https://checkpoint-sync.hoodi.ethpandaops.io/\",\n}\n\nGENESIS_VALIDATORS_ROOT = {\n    \"mainnet\": \"0x4b363db94e286120d76eb905340fdd4e54bfe9f06bf33ff6cf5ad27f511bfe95\",\n    \"sepolia\": \"0xd8ea171f3c94aea21ebc42a1ed61052acf3f9209c00e4efbaaddac09ed9b8078\",\n    \"holesky\": \"0x9143aa7c615a7f7115e2b6aac319c03529df8242ae705fba9df39b79c59fa8b1\",\n    \"hoodi\": \"0x212f13fc4df078b6cb7db228f1c8307566dcecf900867401a92023d7ba99cb5f\",\n}\n\nDEPOSIT_CONTRACT_ADDRESS = {\n    \"mainnet\": \"0x00000000219ab540356cBB839Cbe05303d7705Fa\",\n    \"sepolia\": \"0x7f02C3E3c98b133055B8B348B2Ac625669Ed295D\",\n    \"holesky\": \"0x4242424242424242424242424242424242424242\",\n    \"ephemery\": \"0x00000000219ab540356cBB839Cbe05303d7705Fa\",\n    \"hoodi\": \"0x00000000219ab540356cBB839Cbe05303d7705Fa\",\n}\n\nGENESIS_TIME = {\n    \"mainnet\": 1606824023,\n    \"sepolia\": 1655733600,\n    \"holesky\": 1695902400,\n    \"hoodi\": 1742213400,\n}\n\nVOLUME_SIZE = {\n    \"mainnet\": {\n        \"geth_volume_size\": 1000000,  # 1TB\n        \"erigon_volume_size\": 3000000,  # 3TB\n        \"nethermind_volume_size\": 1000000,  # 1TB\n        \"besu_volume_size\": 1000000,  # 1TB\n        \"reth_volume_size\": 3000000,  # 3TB\n        \"reth_builder_volume_size\": 3000000,  # 3TB\n        \"ethereumjs_volume_size\": 1000000,  # 1TB\n        \"nimbus_eth1_volume_size\": 1000000,  # 1TB\n        \"prysm_volume_size\": 500000,  # 500GB\n        \"lighthouse_volume_size\": 500000,  # 500GB\n        \"teku_volume_size\": 500000,  # 500GB\n        \"nimbus_volume_size\": 500000,  # 500GB\n        \"lodestar_volume_size\": 500000,  # 500GB\n        \"grandine_volume_size\": 500000,  # 500GB\n        \"ethrex_volume_size\": 500000,  # 500GB\n    },\n    \"sepolia\": {\n        \"geth_volume_size\": 300000,  # 300GB\n        \"erigon_volume_size\": 500000,  # 500GB\n        \"nethermind_volume_size\": 300000,  # 300GB\n        \"besu_volume_size\": 300000,  # 300GB\n        \"reth_volume_size\": 500000,  # 500GB\n        \"reth_builder_volume_size\": 500000,  # 500GB\n        \"ethereumjs_volume_size\": 300000,  # 300GB\n        \"nimbus_eth1_volume_size\": 300000,  # 300GB\n        \"prysm_volume_size\": 150000,  # 150GB\n        \"lighthouse_volume_size\": 150000,  # 150GB\n        \"teku_volume_size\": 150000,  # 150GB\n        \"nimbus_volume_size\": 150000,  # 150GB\n        \"lodestar_volume_size\": 150000,  # 150GB\n        \"grandine_volume_size\": 150000,  # 150GB\n        \"ethrex_volume_size\": 150000,  # 150GB\n    },\n    \"holesky\": {\n        \"geth_volume_size\": 100000,  # 100GB\n        \"erigon_volume_size\": 200000,  # 200GB\n        \"nethermind_volume_size\": 100000,  # 100GB\n        \"besu_volume_size\": 100000,  # 100GB\n        \"reth_volume_size\": 200000,  # 200GB\n        \"reth_builder_volume_size\": 200000,  # 200GB\n        \"ethereumjs_volume_size\": 100000,  # 100GB\n        \"nimbus_eth1_volume_size\": 100000,  # 100GB\n        \"prysm_volume_size\": 100000,  # 100GB\n        \"lighthouse_volume_size\": 100000,  # 100GB\n        \"teku_volume_size\": 100000,  # 100GB\n        \"nimbus_volume_size\": 100000,  # 100GB\n        \"lodestar_volume_size\": 100000,  # 100GB\n        \"grandine_volume_size\": 100000,  # 100GB\n        \"ethrex_volume_size\": 100000,  # 100GB\n    },\n    \"devnets\": {\n        \"geth_volume_size\": 100000,  # 100GB\n        \"erigon_volume_size\": 200000,  # 200GB\n        \"nethermind_volume_size\": 100000,  # 100GB\n        \"besu_volume_size\": 100000,  # 100GB\n        \"reth_volume_size\": 200000,  # 200GB\n        \"reth_builder_volume_size\": 200000,  # 200GB\n        \"ethereumjs_volume_size\": 100000,  # 100GB\n        \"nimbus_eth1_volume_size\": 100000,  # 100GB\n        \"prysm_volume_size\": 100000,  # 100GB\n        \"lighthouse_volume_size\": 100000,  # 100GB\n        \"teku_volume_size\": 100000,  # 100GB\n        \"nimbus_volume_size\": 100000,  # 100GB\n        \"lodestar_volume_size\": 100000,  # 100GB\n        \"grandine_volume_size\": 100000,  # 100GB\n        \"ethrex_volume_size\": 100000,  # 100GB\n    },\n    \"ephemery\": {\n        \"geth_volume_size\": 5000,  # 5GB\n        \"erigon_volume_size\": 3000,  # 3GB\n        \"nethermind_volume_size\": 3000,  # 3GB\n        \"besu_volume_size\": 3000,  # 3GB\n        \"reth_volume_size\": 3000,  # 3GB\n        \"reth_builder_volume_size\": 3000,  # 3GB\n        \"ethereumjs_volume_size\": 3000,  # 3GB\n        \"nimbus_eth1_volume_size\": 3000,  # 3GB\n        \"prysm_volume_size\": 1000,  # 1GB\n        \"lighthouse_volume_size\": 1000,  # 1GB\n        \"teku_volume_size\": 1000,  # 1GB\n        \"nimbus_volume_size\": 1000,  # 1GB\n        \"lodestar_volume_size\": 1000,  # 1GB\n        \"grandine_volume_size\": 1000,  # 1GB\n        \"ethrex_volume_size\": 1000,  # 1GB\n    },\n    \"kurtosis\": {\n        \"geth_volume_size\": 5000,  # 5GB\n        \"erigon_volume_size\": 3000,  # 3GB\n        \"nethermind_volume_size\": 3000,  # 3GB\n        \"besu_volume_size\": 3000,  # 3GB\n        \"reth_volume_size\": 3000,  # 3GB\n        \"reth_builder_volume_size\": 3000,  # 3GB\n        \"ethereumjs_volume_size\": 3000,  # 3GB\n        \"nimbus_eth1_volume_size\": 3000,  # 3GB\n        \"prysm_volume_size\": 1000,  # 1GB\n        \"lighthouse_volume_size\": 1000,  # 1GB\n        \"teku_volume_size\": 1000,  # 1GB\n        \"nimbus_volume_size\": 1000,  # 1GB\n        \"lodestar_volume_size\": 1000,  # 1GB\n        \"grandine_volume_size\": 1000,  # 1GB\n        \"ethrex_volume_size\": 1000,  # 1GB\n    },\n    \"hoodi\": {\n        \"geth_volume_size\": 100000,  # 100GB\n        \"erigon_volume_size\": 200000,  # 200GB\n        \"nethermind_volume_size\": 100000,  # 100GB\n        \"besu_volume_size\": 100000,  # 100GB\n        \"reth_volume_size\": 300000,  # 300GB\n        \"reth_builder_volume_size\": 300000,  # 300GB\n        \"ethereumjs_volume_size\": 100000,  # 100GB\n        \"nimbus_eth1_volume_size\": 100000,  # 100GB\n        \"prysm_volume_size\": 100000,  # 100GB\n        \"lighthouse_volume_size\": 100000,  # 100GB\n        \"teku_volume_size\": 100000,  # 100GB\n        \"nimbus_volume_size\": 100000,  # 100GB\n        \"lodestar_volume_size\": 100000,  # 100GB\n        \"grandine_volume_size\": 100000,  # 100GB\n        \"ethrex_volume_size\": 100000,  # 100GB\n    },\n}\n# Language mapping for client implementations\nCLIENT_LANGUAGES = {\n    # Execution Layer (EL) clients\n    \"geth\": \"go\",\n    \"erigon\": \"go\",\n    \"nethermind\": \"csharp\",\n    \"besu\": \"java\",\n    \"reth\": \"rust\",\n    \"reth-builder\": \"rust\",\n    \"ethereumjs\": \"javascript\",\n    \"nimbus\": \"nim\",\n    \"dummy\": \"rust\",\n    # Consensus Layer (CL) clients\n    \"lighthouse\": \"rust\",\n    \"teku\": \"java\",\n    \"prysm\": \"go\",\n    \"lodestar\": \"typescript\",\n    \"grandine\": \"rust\",\n    # Validator Clients (VC) - inherit from CL clients\n    \"vero\": \"python\",\n    # Remote Signers\n    \"web3signer\": \"java\",\n}\n\n# Label key constant for client language\nCLIENT_LANGUAGE_LABEL_KEY = \"ethereum-package.client-language\"\n\n# Label key constant for node index\nNODE_INDEX_LABEL_KEY = \"ethereum-package.node-index\"\n\nVOLUME_SIZE[\"mainnet-shadowfork\"] = VOLUME_SIZE[\"mainnet\"]\nVOLUME_SIZE[\"sepolia-shadowfork\"] = VOLUME_SIZE[\"sepolia\"]\nVOLUME_SIZE[\"holesky-shadowfork\"] = VOLUME_SIZE[\"holesky\"]\nVOLUME_SIZE[\"hoodi-shadowfork\"] = VOLUME_SIZE[\"hoodi\"]\n"
  },
  {
    "path": "src/package_io/input_parser.star",
    "content": "constants = import_module(\"./constants.star\")\nshared_utils = import_module(\"../shared_utils/shared_utils.star\")\ngenesis_constants = import_module(\n    \"../prelaunch_data_generator/genesis_constants/genesis_constants.star\"\n)\n\nsanity_check = import_module(\"./sanity_check.star\")\n\nDEFAULT_EL_IMAGES = {\n    \"geth\": \"ethereum/client-go:latest\",\n    \"erigon\": \"erigontech/erigon:latest\",\n    \"nethermind\": \"nethermind/nethermind:latest\",\n    \"besu\": \"hyperledger/besu:latest\",\n    \"reth\": \"ghcr.io/paradigmxyz/reth\",\n    \"ethereumjs\": \"ethpandaops/ethereumjs:master\",\n    \"nimbus\": \"statusim/nimbus-eth1:master\",\n    \"ethrex\": \"ghcr.io/lambdaclass/ethrex:latest\",\n    \"dummy\": \"ethpandaops/dummy-el:master\",\n}\n\nDEFAULT_CL_IMAGES = {\n    \"lighthouse\": \"sigp/lighthouse:latest\",\n    \"teku\": \"consensys/teku:latest\",\n    \"nimbus\": \"statusim/nimbus-eth2:multiarch-latest\",\n    \"prysm\": \"offchainlabs/prysm-beacon-chain:stable\",\n    \"lodestar\": \"chainsafe/lodestar:latest\",\n    \"grandine\": \"sifrai/grandine:stable\",\n    \"consensoor\": \"ethpandaops/consensoor:main\",\n    \"caplin\": \"ethpandaops/caplin:main\",\n}\n\nDEFAULT_CL_IMAGES_MINIMAL = {\n    \"lighthouse\": \"ethpandaops/lighthouse:unstable\",\n    \"teku\": \"ethpandaops/teku:master\",\n    \"nimbus\": \"ethpandaops/nimbus-eth2:unstable-minimal\",\n    \"prysm\": \"ethpandaops/prysm-beacon-chain:develop-minimal\",\n    \"lodestar\": \"ethpandaops/lodestar:unstable\",\n    \"grandine\": \"ethpandaops/grandine:develop-minimal\",\n    \"consensoor\": \"ethpandaops/consensoor:main\",\n    \"caplin\": \"ethpandaops/caplin:main\",\n}\n\nDEFAULT_VC_IMAGES = {\n    \"lighthouse\": \"sigp/lighthouse:latest\",\n    \"lodestar\": \"chainsafe/lodestar:latest\",\n    \"nimbus\": \"statusim/nimbus-validator-client:multiarch-latest\",\n    \"prysm\": \"offchainlabs/prysm-validator:stable\",\n    \"teku\": \"consensys/teku:latest\",\n    \"grandine\": \"sifrai/grandine:stable\",\n    \"vero\": \"ghcr.io/serenita-org/vero:latest\",\n    \"consensoor\": \"ethpandaops/consensoor:main\",\n}\n\nDEFAULT_VC_IMAGES_MINIMAL = {\n    \"lighthouse\": \"ethpandaops/lighthouse:unstable\",\n    \"lodestar\": \"ethpandaops/lodestar:unstable\",\n    \"nimbus\": \"ethpandaops/nimbus-validator-client:unstable-minimal\",\n    \"prysm\": \"ethpandaops/prysm-validator:develop-minimal\",\n    \"teku\": \"ethpandaops/teku:master\",\n    \"grandine\": \"ethpandaops/grandine:develop-minimal\",\n    \"vero\": \"ghcr.io/serenita-org/vero:latest\",\n    \"consensoor\": \"ethpandaops/consensoor:main\",\n}\n\nDEFAULT_REMOTE_SIGNER_IMAGES = {\n    \"web3signer\": \"consensys/web3signer:latest\",\n}\n\n# MEV Params\nMEV_BOOST_PORT = 18550\n\nDEFAULT_ADDITIONAL_SERVICES = []\n\nATTR_TO_BE_SKIPPED_AT_ROOT = (\n    \"network_params\",\n    \"participants\",\n    \"mev_params\",\n    \"blockscout_params\",\n    \"dora_params\",\n    \"checkpointz_params\",\n    \"docker_cache_params\",\n    \"assertoor_params\",\n    \"prometheus_params\",\n    \"grafana_params\",\n    \"tempo_params\",\n    \"tx_fuzz_params\",\n    \"rakoon_params\",\n    \"custom_flood_params\",\n    \"xatu_sentry_params\",\n    \"port_publisher\",\n    \"spamoor_params\",\n    \"snooper_params\",\n    \"slashoor_params\",\n    \"bootnodoor_params\",\n    \"mempool_bridge_params\",\n    \"zkboost_params\",\n    \"buildoor_params\",\n    \"ethereum_genesis_generator_params\",\n)\n\n\ndef input_parser(plan, input_args):\n    sanity_check.sanity_check(plan, input_args)\n    result = parse_network_params(plan, input_args)\n    # add default eth2 input params\n    result[\"blockscout_params\"] = get_default_blockscout_params()\n    result[\"dora_params\"] = get_default_dora_params()\n    result[\"checkpointz_params\"] = get_default_checkpointz_params()\n    result[\"docker_cache_params\"] = get_default_docker_cache_params()\n    result[\"mev_params\"] = get_default_mev_params(\n        result.get(\"mev_type\"), result[\"network_params\"][\"preset\"]\n    )\n    if (\n        result[\"network_params\"][\"network\"] == constants.NETWORK_NAME.kurtosis\n        or constants.NETWORK_NAME.shadowfork in result[\"network_params\"][\"network\"]\n    ):\n        result[\"additional_services\"] = DEFAULT_ADDITIONAL_SERVICES\n    else:\n        result[\"additional_services\"] = []\n    result[\"tx_fuzz_params\"] = get_default_tx_fuzz_params()\n    result[\"rakoon_params\"] = get_default_rakoon_params()\n    result[\"custom_flood_params\"] = get_default_custom_flood_params()\n    result[\"disable_peer_scoring\"] = False\n    result[\"grafana_params\"] = get_default_grafana_params()\n    result[\"assertoor_params\"] = get_default_assertoor_params()\n    result[\"prometheus_params\"] = get_default_prometheus_params()\n    result[\"tempo_params\"] = get_default_tempo_params()\n    result[\"xatu_sentry_params\"] = get_default_xatu_sentry_params()\n    result[\"persistent\"] = False\n    result[\"parallel_keystore_generation\"] = False\n    result[\"global_tolerations\"] = []\n    result[\"global_node_selectors\"] = {}\n    result[\"port_publisher\"] = get_port_publisher_params(\"default\")\n    result[\"snooper_params\"] = get_default_snooper_params()\n    result[\"spamoor_params\"] = get_default_spamoor_params()\n    result[\"slashoor_params\"] = get_default_slashoor_params()\n    result[\"mempool_bridge_params\"] = get_default_mempool_bridge_params()\n    result[\"zkboost_params\"] = get_default_zkboost_params()\n    result[\"buildoor_params\"] = get_default_buildoor_params()\n\n    if constants.NETWORK_NAME.shadowfork in result[\"network_params\"][\"network\"]:\n        shadow_base = result[\"network_params\"][\"network\"].split(\"-shadowfork\")[0]\n        result[\"network_params\"][\n            \"deposit_contract_address\"\n        ] = constants.DEPOSIT_CONTRACT_ADDRESS[shadow_base]\n\n    if constants.NETWORK_NAME.shadowfork in result[\"network_params\"][\"network\"]:\n        shadow_base = result[\"network_params\"][\"network\"].split(\"-shadowfork\")[0]\n        result[\"network_params\"][\n            \"deposit_contract_address\"\n        ] = constants.DEPOSIT_CONTRACT_ADDRESS[shadow_base]\n\n    for attr in input_args:\n        value = input_args[attr]\n        # if its inserted we use the value inserted\n        if attr not in ATTR_TO_BE_SKIPPED_AT_ROOT and attr in input_args:\n            result[attr] = value\n        # custom eth2 attributes config\n        elif attr == \"blockscout_params\":\n            for sub_attr in input_args[\"blockscout_params\"]:\n                sub_value = input_args[\"blockscout_params\"][sub_attr]\n                result[\"blockscout_params\"][sub_attr] = sub_value\n        elif attr == \"dora_params\":\n            for sub_attr in input_args[\"dora_params\"]:\n                sub_value = input_args[\"dora_params\"][sub_attr]\n                result[\"dora_params\"][sub_attr] = sub_value\n        elif attr == \"docker_cache_params\":\n            for sub_attr in input_args[\"docker_cache_params\"]:\n                sub_value = input_args[\"docker_cache_params\"][sub_attr]\n                result[\"docker_cache_params\"][sub_attr] = sub_value\n        elif attr == \"mev_params\":\n            for sub_attr in input_args[\"mev_params\"]:\n                sub_value = input_args[\"mev_params\"][sub_attr]\n                result[\"mev_params\"][sub_attr] = sub_value\n        elif attr == \"tx_fuzz_params\":\n            for sub_attr in input_args[\"tx_fuzz_params\"]:\n                sub_value = input_args[\"tx_fuzz_params\"][sub_attr]\n                result[\"tx_fuzz_params\"][sub_attr] = sub_value\n        elif attr == \"rakoon_params\":\n            for sub_attr in input_args[\"rakoon_params\"]:\n                sub_value = input_args[\"rakoon_params\"][sub_attr]\n                result[\"rakoon_params\"][sub_attr] = sub_value\n        elif attr == \"custom_flood_params\":\n            for sub_attr in input_args[\"custom_flood_params\"]:\n                sub_value = input_args[\"custom_flood_params\"][sub_attr]\n                result[\"custom_flood_params\"][sub_attr] = sub_value\n        elif attr == \"assertoor_params\":\n            for sub_attr in input_args[\"assertoor_params\"]:\n                sub_value = input_args[\"assertoor_params\"][sub_attr]\n                result[\"assertoor_params\"][sub_attr] = sub_value\n        elif attr == \"prometheus_params\":\n            for sub_attr in input_args[\"prometheus_params\"]:\n                sub_value = input_args[\"prometheus_params\"][sub_attr]\n                result[\"prometheus_params\"][sub_attr] = sub_value\n        elif attr == \"grafana_params\":\n            for sub_attr in input_args[\"grafana_params\"]:\n                sub_value = input_args[\"grafana_params\"][sub_attr]\n                result[\"grafana_params\"][sub_attr] = sub_value\n        elif attr == \"tempo_params\":\n            for sub_attr in input_args[\"tempo_params\"]:\n                sub_value = input_args[\"tempo_params\"][sub_attr]\n                result[\"tempo_params\"][sub_attr] = sub_value\n        elif attr == \"xatu_sentry_params\":\n            for sub_attr in input_args[\"xatu_sentry_params\"]:\n                sub_value = input_args[\"xatu_sentry_params\"][sub_attr]\n                result[\"xatu_sentry_params\"][sub_attr] = sub_value\n        elif attr == \"port_publisher\":\n            result[\"port_publisher\"] = get_port_publisher_params(\"user\", input_args)\n        elif attr == \"snooper_params\":\n            for sub_attr in input_args[\"snooper_params\"]:\n                sub_value = input_args[\"snooper_params\"][sub_attr]\n                result[\"snooper_params\"][sub_attr] = sub_value\n        elif attr == \"spamoor_params\":\n            for sub_attr in input_args[\"spamoor_params\"]:\n                sub_value = input_args[\"spamoor_params\"][sub_attr]\n                result[\"spamoor_params\"][sub_attr] = sub_value\n        elif attr == \"slashoor_params\":\n            for sub_attr in input_args[\"slashoor_params\"]:\n                sub_value = input_args[\"slashoor_params\"][sub_attr]\n                result[\"slashoor_params\"][sub_attr] = sub_value\n        elif attr == \"mempool_bridge_params\":\n            for sub_attr in input_args[\"mempool_bridge_params\"]:\n                sub_value = input_args[\"mempool_bridge_params\"][sub_attr]\n                result[\"mempool_bridge_params\"][sub_attr] = sub_value\n        elif attr == \"bootnodoor_params\":\n            for sub_attr in input_args[\"bootnodoor_params\"]:\n                sub_value = input_args[\"bootnodoor_params\"][sub_attr]\n                result[\"bootnodoor_params\"][sub_attr] = sub_value\n        elif attr == \"ethereum_genesis_generator_params\":\n            for sub_attr in input_args[\"ethereum_genesis_generator_params\"]:\n                sub_value = input_args[\"ethereum_genesis_generator_params\"][sub_attr]\n                result[\"ethereum_genesis_generator_params\"][sub_attr] = sub_value\n        elif attr == \"checkpointz_params\":\n            for sub_attr in input_args[\"checkpointz_params\"]:\n                sub_value = input_args[\"checkpointz_params\"][sub_attr]\n                result[\"checkpointz_params\"][sub_attr] = sub_value\n        elif attr == \"zkboost_params\":\n            for sub_attr in input_args[\"zkboost_params\"]:\n                sub_value = input_args[\"zkboost_params\"][sub_attr]\n                result[\"zkboost_params\"][sub_attr] = sub_value\n        elif attr == \"buildoor_params\":\n            for sub_attr in input_args[\"buildoor_params\"]:\n                sub_value = input_args[\"buildoor_params\"][sub_attr]\n                result[\"buildoor_params\"][sub_attr] = sub_value\n\n    if result.get(\"snooper_enabled\"):\n        plan.print(\n            \"DEPRECATION WARNING: 'snooper_enabled' is deprecated, use 'snooper_params.enabled' instead\"\n        )\n        result[\"snooper_params\"][\"enabled\"] = True\n\n    if result.get(\"disable_peer_scoring\"):\n        result = enrich_disable_peer_scoring(result)\n\n    if result.get(\"mev_type\") in (\n        constants.MOCK_MEV_TYPE,\n        constants.FLASHBOTS_MEV_TYPE,\n        constants.MEV_RS_MEV_TYPE,\n        constants.COMMIT_BOOST_MEV_TYPE,\n        constants.HELIX_MEV_TYPE,\n        constants.BUILDOOR_MEV_TYPE,\n    ):\n        result = enrich_mev_extra_params(\n            result,\n            constants.MEV_BOOST_SERVICE_NAME_PREFIX,\n            constants.MEV_BOOST_PORT,\n            result.get(\"mev_type\"),\n        )\n    elif result.get(\"mev_type\") == None:\n        pass\n    else:\n        fail(\n            \"Unsupported MEV type: {0}, please use 'mock', 'flashbots', 'mev-rs', 'commit-boost', 'helix' or 'buildoor' type\".format(\n                result.get(\"mev_type\")\n            )\n        )\n\n    if (\n        result[\"mev_params\"].get(\"mev_builder_subsidy\") != 0\n        and result[\"network_params\"].get(\"prefunded_accounts\") == {}\n    ):\n        fail(\n            'mev_builder_subsidy is not 0 but prefunded_accounts is empty, please provide a prefunded account for the builder. Example: prefunded_accounts: \\'{\"0xb9e79D19f651a941757b35830232E7EFC77E1c79\": {\"balance\": \"100000ETH\"}}\\''\n        )\n\n    if result[\"network_params\"].get(\"force_snapshot_sync\") and not result[\"persistent\"]:\n        fail(\n            \"network_params.force_snapshot_sync is enabled but persistent is false, please set persistent to true, otherwise the snapshot won't be able to be kept for the run\"\n        )\n    if \"shadowfork\" in result[\"network_params\"][\"network\"] and not result[\"persistent\"]:\n        fail(\n            \"shadowfork networks require persistent to be true, otherwise the snapshot won't be able to be kept for the run\"\n        )\n\n    # Check for shadowfork + archive mode and unsupported client + archive mode combinations\n    is_shadowfork = \"shadowfork\" in result[\"network_params\"][\"network\"]\n    unsupported_archive_clients = [\"dummy\", \"ethrex\", \"ethereumjs\", \"nimbus\"]\n\n    for idx, participant in enumerate(result[\"participants\"]):\n        el_type = participant[\"el_type\"]\n        el_storage_type = participant[\"el_storage_type\"]\n\n        # Check if shadowfork is enabled with archive mode\n        if is_shadowfork and el_storage_type == \"archive\":\n            fail(\n                \"Participant {0} (el_type={1}): Archive mode (el_storage_type='archive') is not supported with shadowfork networks. Shadowfork fetches an existing database which may have a different storage type.\".format(\n                    idx, el_type\n                )\n            )\n\n        # Check if client doesn't support archive mode\n        if el_type in unsupported_archive_clients and el_storage_type == \"archive\":\n            fail(\n                \"Participant {0}: {1} does not support archive mode (el_storage_type='archive'). Please remove the el_storage_type setting or use a different EL client.\".format(\n                    idx, el_type\n                )\n            )\n\n    if result[\"docker_cache_params\"][\"enabled\"]:\n        docker_cache_image_override(plan, result)\n    else:\n        plan.print(\"Docker cache is disabled\")\n\n    # Handle global nat_exit_ip setting - if set, apply to all service groups\n    if result[\"port_publisher\"][\"nat_exit_ip\"] != \"KURTOSIS_IP_ADDR_PLACEHOLDER\":\n        global_nat_exit_ip = result[\"port_publisher\"][\"nat_exit_ip\"]\n        if global_nat_exit_ip == \"auto\":\n            global_nat_exit_ip = get_public_ip(\n                plan, result[\"global_tolerations\"], result[\"global_node_selectors\"]\n            )\n            result[\"port_publisher\"][\"nat_exit_ip\"] = global_nat_exit_ip\n\n        # Set all service groups to use the global value\n        for service_group in [\n            \"el\",\n            \"cl\",\n            \"vc\",\n            \"remote_signer\",\n            \"additional_services\",\n            \"mev\",\n            \"other\",\n        ]:\n            result[\"port_publisher\"][service_group][\"nat_exit_ip\"] = global_nat_exit_ip\n    else:\n        # Auto-detect public IP for each service group that has nat_exit_ip set to \"auto\"\n        public_ip = None\n        for service_group in [\n            \"el\",\n            \"cl\",\n            \"vc\",\n            \"remote_signer\",\n            \"additional_services\",\n            \"mev\",\n            \"other\",\n        ]:\n            if result[\"port_publisher\"][service_group][\"nat_exit_ip\"] == \"auto\":\n                if public_ip == None:\n                    public_ip = get_public_ip(\n                        plan,\n                        result[\"global_tolerations\"],\n                        result[\"global_node_selectors\"],\n                    )\n                result[\"port_publisher\"][service_group][\"nat_exit_ip\"] = public_ip\n\n    if \"prometheus_grafana\" in result[\"additional_services\"]:\n        plan.print(\n            \"prometheus_grafana in no longer supported, please use 'prometheus' and 'grafana' instead in the additional_services field\"\n        )\n        if (\n            \"grafana\" in result[\"additional_services\"]\n            or \"prometheus\" in result[\"additional_services\"]\n        ):\n            fail(\n                \"Please do not define 'grafana' or 'prometheus' in the additional_services field when 'prometheus_grafana' is used to launch both\"\n            )\n\n    if (\n        \"mev_type\" == constants.MOCK_MEV_TYPE\n        and input_args[\"participants\"][0][\"cl_type\"] != constants.CL_TYPE.lighthouse\n    ):\n        fail(\n            \"Mock mev is only supported if the first participant is lighthouse client, please use a different client or set mev_type to 'flashbots', 'mev-rs' or 'commit-boost' or make the first participant lighthouse\"\n        )\n\n    if (\n        result[\"network_params\"][\"bpo_1_epoch\"]\n        < result[\"network_params\"][\"fulu_fork_epoch\"]\n    ):\n        result[\"network_params\"][\"bpo_1_epoch\"] = result[\"network_params\"][\n            \"fulu_fork_epoch\"\n        ]\n        plan.print(\n            \"BPO 1 epoch adjusted to Fulu epoch {0}\".format(\n                result[\"network_params\"][\"fulu_fork_epoch\"]\n            )\n        )\n    if (\n        result[\"network_params\"][\"bpo_2_epoch\"]\n        < result[\"network_params\"][\"bpo_1_epoch\"]\n    ):\n        result[\"network_params\"][\"bpo_2_epoch\"] = result[\"network_params\"][\n            \"bpo_1_epoch\"\n        ]\n        plan.print(\n            \"BPO 2 epoch adjusted to BPO 1 epoch {0}\".format(\n                result[\"network_params\"][\"bpo_1_epoch\"]\n            )\n        )\n    if (\n        result[\"network_params\"][\"bpo_3_epoch\"]\n        < result[\"network_params\"][\"bpo_2_epoch\"]\n    ):\n        result[\"network_params\"][\"bpo_3_epoch\"] = result[\"network_params\"][\n            \"bpo_2_epoch\"\n        ]\n        plan.print(\n            \"BPO 3 epoch adjusted to BPO 2 epoch {0}\".format(\n                result[\"network_params\"][\"bpo_2_epoch\"]\n            )\n        )\n    if (\n        result[\"network_params\"][\"bpo_4_epoch\"]\n        < result[\"network_params\"][\"bpo_3_epoch\"]\n    ):\n        result[\"network_params\"][\"bpo_4_epoch\"] = result[\"network_params\"][\n            \"bpo_3_epoch\"\n        ]\n        plan.print(\n            \"BPO 4 epoch adjusted to BPO 3 epoch {0}\".format(\n                result[\"network_params\"][\"bpo_3_epoch\"]\n            )\n        )\n    if (\n        result[\"network_params\"][\"bpo_5_epoch\"]\n        < result[\"network_params\"][\"bpo_4_epoch\"]\n    ):\n        result[\"network_params\"][\"bpo_5_epoch\"] = result[\"network_params\"][\n            \"bpo_4_epoch\"\n        ]\n        plan.print(\n            \"BPO 5 epoch adjusted to BPO 4 epoch {0}\".format(\n                result[\"network_params\"][\"bpo_4_epoch\"]\n            )\n        )\n\n    if result[\"network_params\"][\"fulu_fork_epoch\"] != constants.FAR_FUTURE_EPOCH:\n        has_supernodes = False\n        has_node_with_128_plus_validators = False\n        num_perfect_peerdas_participants = 0\n        for participant in result[\"participants\"]:\n            num_perfect_peerdas_participants += 1\n            if participant.get(\"supernode\", False):\n                has_supernodes = True\n            if participant.get(\"validator_count\", 0) >= 128:\n                has_node_with_128_plus_validators = True\n\n        if result[\"network_params\"][\"perfect_peerdas_enabled\"]:\n            if num_perfect_peerdas_participants < 16:\n                fail(\n                    \"perfect_peerdas_enabled is true (this is a unique test if you don't know what it does, consider removing it) but the number of participants ({0}) is less than 16. Please set the number of participants to at least 16.\".format(\n                        str(num_perfect_peerdas_participants)\n                    )\n                )\n\n        if (\n            not has_supernodes\n            and not has_node_with_128_plus_validators\n            and not result[\"network_params\"][\"perfect_peerdas_enabled\"]\n            and (\n                result[\"network_params\"][\"network\"] == constants.NETWORK_NAME.kurtosis\n                or \"shadowfork\" in result[\"network_params\"][\"network\"]\n            )\n        ):\n            fail(\n                \"Fulu fork is enabled (epoch: {0}) but no supernodes are configured, no nodes have 128 or more validators, and perfect_peerdas_enabled is not enabled. Either configure a supernode, ensure at least one node has 128+ validators, or enable perfect_peerdas_enabled in network_params with 16 participants.\".format(\n                    str(result[\"network_params\"][\"fulu_fork_epoch\"])\n                )\n            )\n\n    if \"zkboost\" in result[\"additional_services\"]:\n        # Inject default mock zkvm if none configured.\n        if len(result[\"zkboost_params\"][\"zkvms\"]) == 0:\n            result[\"zkboost_params\"][\"zkvms\"] = [\n                {\n                    \"kind\": \"mock\",\n                    \"proof_type\": \"reth-zisk\",\n                    \"mock_proving_time\": {\n                        \"kind\": \"random\",\n                        \"min_ms\": 2000,\n                        \"max_ms\": 8000,\n                    },\n                    \"mock_proof_size\": 128 << 10,\n                },\n            ]\n        if \"RUST_LOG\" not in result[\"zkboost_params\"][\"env\"]:\n            result[\"zkboost_params\"][\"env\"][\"RUST_LOG\"] = \"info,zkboost=debug\"\n\n        has_non_dummy_el = False\n        for participant in result[\"participants\"]:\n            if participant[\"el_type\"] != \"dummy\":\n                has_non_dummy_el = True\n        if not has_non_dummy_el:\n            fail(\n                \"zkboost is enabled but all participants are using dummy EL. At least one participant must use a real EL client (geth, reth, nethermind, etc.) to produce blocks.\"\n            )\n\n        for idx, instance in enumerate(result[\"zkboost_params\"][\"instances\"]):\n            el_idx = instance.get(\"el_participant_index\", 0)\n            if el_idx >= len(result[\"participants\"]):\n                fail(\n                    \"zkboost_params.instances[{0}]: el_participant_index {1} is out of range, only {2} participants exist\".format(\n                        idx, el_idx, len(result[\"participants\"])\n                    )\n                )\n\n        # Validate zkvm configurations\n        valid_proof_types = [\n            \"ethrex-risc0\",\n            \"ethrex-sp1\",\n            \"ethrex-zisk\",\n            \"reth-openvm\",\n            \"reth-risc0\",\n            \"reth-sp1\",\n            \"reth-zisk\",\n        ]\n        configured_proof_types = []\n        for idx, zkvm in enumerate(result[\"zkboost_params\"][\"zkvms\"]):\n            kind = zkvm.get(\"kind\")\n            proof_type = zkvm.get(\"proof_type\")\n\n            if kind not in [\"mock\", \"ere\", \"external\"]:\n                fail(\n                    \"zkboost_params.zkvms[{0}]: unsupported kind '{1}', please use 'mock', 'ere', or 'external'\".format(\n                        idx, kind\n                    )\n                )\n\n            if proof_type not in valid_proof_types:\n                fail(\n                    \"zkboost_params.zkvms[{0}]: unsupported proof_type '{1}', please use one of: {2}\".format(\n                        idx, proof_type, \", \".join(valid_proof_types)\n                    )\n                )\n\n            if proof_type in configured_proof_types:\n                fail(\n                    \"zkboost_params.zkvms[{0}]: duplicate proof_type '{1}'\".format(\n                        idx, proof_type\n                    )\n                )\n            configured_proof_types.append(proof_type)\n\n            proof_timeout = zkvm.get(\"proof_timeout_secs\", 12)\n            if proof_timeout <= 0:\n                fail(\n                    \"zkboost_params.zkvms[{0}]: proof_timeout_secs must be > 0, got {1}\".format(\n                        idx, proof_timeout\n                    )\n                )\n\n            if kind == \"external\":\n                if zkvm.get(\"endpoint\", \"\") == \"\":\n                    fail(\n                        \"zkboost_params.zkvms[{0}]: external zkvm requires 'endpoint'\".format(\n                            idx\n                        )\n                    )\n\n            if kind == \"mock\":\n                mock_proving_time = zkvm.get(\"mock_proving_time\")\n                if mock_proving_time != None:\n                    pt_kind = mock_proving_time.get(\"kind\", \"constant\")\n                    if pt_kind not in [\"constant\", \"random\", \"linear\"]:\n                        fail(\n                            \"zkboost_params.zkvms[{0}]: unsupported mock_proving_time kind '{1}', please use 'constant', 'random' or 'linear'\".format(\n                                idx, pt_kind\n                            )\n                        )\n                    if pt_kind == \"random\":\n                        min_ms = mock_proving_time.get(\"min_ms\", 0)\n                        max_ms = mock_proving_time.get(\"max_ms\", 0)\n                        if min_ms > max_ms:\n                            fail(\n                                \"zkboost_params.zkvms[{0}]: mock_proving_time random min_ms ({1}) must be <= max_ms ({2})\".format(\n                                    idx, min_ms, max_ms\n                                )\n                            )\n\n                mock_proof_size = zkvm.get(\"mock_proof_size\", 128 << 10)\n                if mock_proof_size < 32:\n                    fail(\n                        \"zkboost_params.zkvms[{0}]: mock_proof_size must be >= 32, got {1}\".format(\n                            idx, mock_proof_size\n                        )\n                    )\n\n        _validate_ere_gpu_config(result[\"zkboost_params\"][\"zkvms\"])\n\n    if (\n        \"bootnodoor\" not in result[\"additional_services\"]\n        and result[\"participants\"][0][\"el_type\"] == \"dummy\"\n    ):\n        fail(\n            \"First participant cannot use dummy EL without bootnodoor enabled. The first participant acts as the bootnode for the network. Either enable bootnodoor in additional_services or use a real EL client (geth, reth, nethermind, etc.) for the first participant.\"\n        )\n\n    if (\n        \"mempool_bridge\" in result[\"additional_services\"]\n        and result[\"network_params\"][\"network\"] not in constants.PUBLIC_NETWORKS\n        and constants.NETWORK_NAME.shadowfork not in result[\"network_params\"][\"network\"]\n    ):\n        fail(\n            \"Mempool bridge is enabled but network is not mainnet, sepolia, hoodi or shadowfork, please set network to mainnet, sepolia, hoodi or shadowfork\"\n        )\n\n    return struct(\n        participants=[\n            struct(\n                el_type=participant[\"el_type\"],\n                el_image=participant[\"el_image\"],\n                el_binary_path=participant[\"el_binary_path\"],\n                el_log_level=participant[\"el_log_level\"],\n                el_storage_type=participant[\"el_storage_type\"],\n                el_volume_size=participant[\"el_volume_size\"],\n                el_extra_params=participant[\"el_extra_params\"],\n                el_extra_mounts=participant[\"el_extra_mounts\"],\n                el_devices=participant[\"el_devices\"],\n                el_extra_env_vars=participant[\"el_extra_env_vars\"],\n                el_extra_labels=participant[\"el_extra_labels\"],\n                el_tolerations=participant[\"el_tolerations\"],\n                cl_type=participant[\"cl_type\"],\n                cl_image=participant[\"cl_image\"],\n                cl_binary_path=participant[\"cl_binary_path\"],\n                cl_log_level=participant[\"cl_log_level\"],\n                cl_volume_size=participant[\"cl_volume_size\"],\n                cl_extra_env_vars=participant[\"cl_extra_env_vars\"],\n                cl_tolerations=participant[\"cl_tolerations\"],\n                use_separate_vc=participant[\"use_separate_vc\"],\n                vc_type=participant[\"vc_type\"],\n                vc_image=participant[\"vc_image\"],\n                vc_binary_path=participant[\"vc_binary_path\"],\n                vc_log_level=participant[\"vc_log_level\"],\n                vc_tolerations=participant[\"vc_tolerations\"],\n                cl_extra_params=participant[\"cl_extra_params\"],\n                cl_extra_mounts=participant[\"cl_extra_mounts\"],\n                cl_devices=participant[\"cl_devices\"],\n                cl_extra_labels=participant[\"cl_extra_labels\"],\n                vc_extra_params=participant[\"vc_extra_params\"],\n                vc_extra_mounts=participant[\"vc_extra_mounts\"],\n                vc_devices=participant[\"vc_devices\"],\n                vc_extra_env_vars=participant[\"vc_extra_env_vars\"],\n                vc_extra_labels=participant[\"vc_extra_labels\"],\n                use_remote_signer=participant[\"use_remote_signer\"],\n                remote_signer_type=participant[\"remote_signer_type\"],\n                remote_signer_image=participant[\"remote_signer_image\"],\n                remote_signer_tolerations=participant[\"remote_signer_tolerations\"],\n                remote_signer_extra_env_vars=participant[\n                    \"remote_signer_extra_env_vars\"\n                ],\n                remote_signer_extra_params=participant[\"remote_signer_extra_params\"],\n                remote_signer_extra_labels=participant[\"remote_signer_extra_labels\"],\n                builder_network_params=participant[\"builder_network_params\"],\n                supernode=participant[\"supernode\"],\n                el_min_cpu=participant[\"el_min_cpu\"],\n                el_max_cpu=participant[\"el_max_cpu\"],\n                el_min_mem=participant[\"el_min_mem\"],\n                el_max_mem=participant[\"el_max_mem\"],\n                el_force_restart=participant[\"el_force_restart\"],\n                cl_min_cpu=participant[\"cl_min_cpu\"],\n                cl_max_cpu=participant[\"cl_max_cpu\"],\n                cl_min_mem=participant[\"cl_min_mem\"],\n                cl_max_mem=participant[\"cl_max_mem\"],\n                cl_force_restart=participant[\"cl_force_restart\"],\n                vc_min_cpu=participant[\"vc_min_cpu\"],\n                vc_max_cpu=participant[\"vc_max_cpu\"],\n                vc_min_mem=participant[\"vc_min_mem\"],\n                vc_max_mem=participant[\"vc_max_mem\"],\n                vc_force_restart=participant[\"vc_force_restart\"],\n                remote_signer_min_cpu=participant[\"remote_signer_min_cpu\"],\n                remote_signer_max_cpu=participant[\"remote_signer_max_cpu\"],\n                remote_signer_min_mem=participant[\"remote_signer_min_mem\"],\n                remote_signer_max_mem=participant[\"remote_signer_max_mem\"],\n                validator_count=participant[\"validator_count\"],\n                tolerations=participant[\"tolerations\"],\n                node_selectors=participant[\"node_selectors\"],\n                snooper_enabled=participant[\"snooper_enabled\"],\n                count=participant[\"count\"],\n                ethereum_metrics_exporter_enabled=participant[\n                    \"ethereum_metrics_exporter_enabled\"\n                ],\n                xatu_sentry_enabled=participant[\"xatu_sentry_enabled\"],\n                prometheus_config=struct(\n                    scrape_interval=participant[\"prometheus_config\"][\"scrape_interval\"],\n                    labels=participant[\"prometheus_config\"][\"labels\"],\n                ),\n                blobber_enabled=participant[\"blobber_enabled\"],\n                blobber_extra_params=participant[\"blobber_extra_params\"],\n                blobber_image=participant[\"blobber_image\"],\n                keymanager_enabled=participant[\"keymanager_enabled\"],\n                vc_beacon_node_indices=participant[\"vc_beacon_node_indices\"],\n                checkpoint_sync_enabled=participant[\"checkpoint_sync_enabled\"],\n                skip_start=participant[\"skip_start\"],\n            )\n            for participant in result[\"participants\"]\n        ],\n        network_params=struct(\n            preregistered_validator_keys_mnemonic=result[\"network_params\"][\n                \"preregistered_validator_keys_mnemonic\"\n            ],\n            preregistered_validator_count=result[\"network_params\"][\n                \"preregistered_validator_count\"\n            ],\n            num_validator_keys_per_node=result[\"network_params\"][\n                \"num_validator_keys_per_node\"\n            ],\n            network_id=result[\"network_params\"][\"network_id\"],\n            deposit_contract_address=result[\"network_params\"][\n                \"deposit_contract_address\"\n            ],\n            seconds_per_slot=result[\"network_params\"][\"seconds_per_slot\"],\n            slot_duration_ms=result[\"network_params\"][\"slot_duration_ms\"],\n            genesis_delay=result[\"network_params\"][\"genesis_delay\"],\n            genesis_time=result[\"network_params\"][\"genesis_time\"],\n            genesis_gaslimit=result[\"network_params\"][\"genesis_gaslimit\"],\n            max_per_epoch_activation_churn_limit=result[\"network_params\"][\n                \"max_per_epoch_activation_churn_limit\"\n            ],\n            churn_limit_quotient=result[\"network_params\"][\"churn_limit_quotient\"],\n            confirmation_byzantine_threshold=result[\"network_params\"][\n                \"confirmation_byzantine_threshold\"\n            ],\n            ejection_balance=result[\"network_params\"][\"ejection_balance\"],\n            eth1_follow_distance=result[\"network_params\"][\"eth1_follow_distance\"],\n            altair_fork_epoch=result[\"network_params\"][\"altair_fork_epoch\"],\n            bellatrix_fork_epoch=result[\"network_params\"][\"bellatrix_fork_epoch\"],\n            capella_fork_epoch=result[\"network_params\"][\"capella_fork_epoch\"],\n            deneb_fork_epoch=result[\"network_params\"][\"deneb_fork_epoch\"],\n            electra_fork_epoch=result[\"network_params\"][\"electra_fork_epoch\"],\n            fulu_fork_epoch=result[\"network_params\"][\"fulu_fork_epoch\"],\n            gloas_fork_epoch=result[\"network_params\"][\"gloas_fork_epoch\"],\n            heze_fork_epoch=result[\"network_params\"][\"heze_fork_epoch\"],\n            network=result[\"network_params\"][\"network\"],\n            min_validator_withdrawability_delay=result[\"network_params\"][\n                \"min_validator_withdrawability_delay\"\n            ],\n            min_builder_withdrawability_delay=result[\"network_params\"][\n                \"min_builder_withdrawability_delay\"\n            ],\n            shard_committee_period=result[\"network_params\"][\"shard_committee_period\"],\n            attestation_due_bps_gloas=result[\"network_params\"][\n                \"attestation_due_bps_gloas\"\n            ],\n            aggregate_due_bps_gloas=result[\"network_params\"][\"aggregate_due_bps_gloas\"],\n            sync_message_due_bps_gloas=result[\"network_params\"][\n                \"sync_message_due_bps_gloas\"\n            ],\n            contribution_due_bps_gloas=result[\"network_params\"][\n                \"contribution_due_bps_gloas\"\n            ],\n            payload_attestation_due_bps=result[\"network_params\"][\n                \"payload_attestation_due_bps\"\n            ],\n            view_freeze_cutoff_bps=result[\"network_params\"][\"view_freeze_cutoff_bps\"],\n            inclusion_list_submission_due_bps=result[\"network_params\"][\n                \"inclusion_list_submission_due_bps\"\n            ],\n            proposer_inclusion_list_cutoff_bps=result[\"network_params\"][\n                \"proposer_inclusion_list_cutoff_bps\"\n            ],\n            network_sync_base_url=result[\"network_params\"][\"network_sync_base_url\"],\n            force_snapshot_sync=result[\"network_params\"][\"force_snapshot_sync\"],\n            shadowfork_block_height=result[\"network_params\"][\"shadowfork_block_height\"],\n            samples_per_slot=result[\"network_params\"][\"samples_per_slot\"],\n            custody_requirement=result[\"network_params\"][\"custody_requirement\"],\n            max_blobs_per_block_electra=result[\"network_params\"][\n                \"max_blobs_per_block_electra\"\n            ],\n            target_blobs_per_block_electra=result[\"network_params\"][\n                \"target_blobs_per_block_electra\"\n            ],\n            max_request_blocks_deneb=result[\"network_params\"][\n                \"max_request_blocks_deneb\"\n            ],\n            base_fee_update_fraction_electra=result[\"network_params\"][\n                \"base_fee_update_fraction_electra\"\n            ],\n            bpo_1_epoch=result[\"network_params\"][\"bpo_1_epoch\"],\n            bpo_1_max_blobs=result[\"network_params\"][\"bpo_1_max_blobs\"],\n            bpo_1_target_blobs=result[\"network_params\"][\"bpo_1_target_blobs\"],\n            bpo_1_base_fee_update_fraction=result[\"network_params\"][\n                \"bpo_1_base_fee_update_fraction\"\n            ],\n            bpo_2_epoch=result[\"network_params\"][\"bpo_2_epoch\"],\n            bpo_2_max_blobs=result[\"network_params\"][\"bpo_2_max_blobs\"],\n            bpo_2_target_blobs=result[\"network_params\"][\"bpo_2_target_blobs\"],\n            bpo_2_base_fee_update_fraction=result[\"network_params\"][\n                \"bpo_2_base_fee_update_fraction\"\n            ],\n            bpo_3_epoch=result[\"network_params\"][\"bpo_3_epoch\"],\n            bpo_3_max_blobs=result[\"network_params\"][\"bpo_3_max_blobs\"],\n            bpo_3_target_blobs=result[\"network_params\"][\"bpo_3_target_blobs\"],\n            bpo_3_base_fee_update_fraction=result[\"network_params\"][\n                \"bpo_3_base_fee_update_fraction\"\n            ],\n            bpo_4_epoch=result[\"network_params\"][\"bpo_4_epoch\"],\n            bpo_4_max_blobs=result[\"network_params\"][\"bpo_4_max_blobs\"],\n            bpo_4_target_blobs=result[\"network_params\"][\"bpo_4_target_blobs\"],\n            bpo_4_base_fee_update_fraction=result[\"network_params\"][\n                \"bpo_4_base_fee_update_fraction\"\n            ],\n            bpo_5_epoch=result[\"network_params\"][\"bpo_5_epoch\"],\n            bpo_5_max_blobs=result[\"network_params\"][\"bpo_5_max_blobs\"],\n            bpo_5_target_blobs=result[\"network_params\"][\"bpo_5_target_blobs\"],\n            bpo_5_base_fee_update_fraction=result[\"network_params\"][\n                \"bpo_5_base_fee_update_fraction\"\n            ],\n            preset=result[\"network_params\"][\"preset\"],\n            additional_preloaded_contracts=result[\"network_params\"][\n                \"additional_preloaded_contracts\"\n            ],\n            additional_mnemonics=result[\"network_params\"][\"additional_mnemonics\"],\n            builder_count=result[\"network_params\"][\"builder_count\"],\n            builder_balance=result[\"network_params\"][\"builder_balance\"],\n            devnet_repo=result[\"network_params\"][\"devnet_repo\"],\n            prefunded_accounts=result[\"network_params\"][\"prefunded_accounts\"],\n            max_payload_size=result[\"network_params\"][\"max_payload_size\"],\n            perfect_peerdas_enabled=result[\"network_params\"][\"perfect_peerdas_enabled\"],\n            gas_limit=result[\"network_params\"][\"gas_limit\"],\n            withdrawal_type=result[\"network_params\"][\"withdrawal_type\"],\n            withdrawal_address=result[\"network_params\"][\"withdrawal_address\"],\n            validator_balance=result[\"network_params\"][\"validator_balance\"],\n            min_epochs_for_data_column_sidecars_requests=result[\"network_params\"][\n                \"min_epochs_for_data_column_sidecars_requests\"\n            ],\n        ),\n        mev_params=struct(\n            mev_relay_image=result[\"mev_params\"][\"mev_relay_image\"],\n            mev_builder_image=result[\"mev_params\"][\"mev_builder_image\"],\n            mev_builder_cl_image=result[\"mev_params\"][\"mev_builder_cl_image\"],\n            mev_builder_extra_data=result[\"mev_params\"][\"mev_builder_extra_data\"],\n            mev_builder_subsidy=result[\"mev_params\"][\"mev_builder_subsidy\"],\n            mev_boost_image=result[\"mev_params\"][\"mev_boost_image\"],\n            mev_boost_args=result[\"mev_params\"][\"mev_boost_args\"],\n            mev_relay_api_extra_args=result[\"mev_params\"][\"mev_relay_api_extra_args\"],\n            mev_relay_api_extra_env_vars=result[\"mev_params\"][\n                \"mev_relay_api_extra_env_vars\"\n            ],\n            mev_relay_housekeeper_extra_args=result[\"mev_params\"][\n                \"mev_relay_housekeeper_extra_args\"\n            ],\n            mev_relay_housekeeper_extra_env_vars=result[\"mev_params\"][\n                \"mev_relay_housekeeper_extra_env_vars\"\n            ],\n            mev_relay_website_extra_args=result[\"mev_params\"][\n                \"mev_relay_website_extra_args\"\n            ],\n            mev_relay_website_extra_env_vars=result[\"mev_params\"][\n                \"mev_relay_website_extra_env_vars\"\n            ],\n            mev_builder_extra_args=result[\"mev_params\"][\"mev_builder_extra_args\"],\n            mev_builder_cl_extra_params=result[\"mev_params\"][\n                \"mev_builder_cl_extra_params\"\n            ],\n            mev_builder_prometheus_config=result[\"mev_params\"][\n                \"mev_builder_prometheus_config\"\n            ],\n            mock_mev_image=result[\"mev_params\"][\"mock_mev_image\"],\n            launch_adminer=result[\"mev_params\"][\"launch_adminer\"],\n            run_multiple_relays=result[\"mev_params\"][\"run_multiple_relays\"],\n            helix_relay_image=result[\"mev_params\"][\"helix_relay_image\"],\n            commit_boost_config=result[\"mev_params\"].get(\"commit_boost_config\", \"\"),\n        )\n        if result[\"mev_params\"]\n        else None,\n        blockscout_params=struct(\n            image=result[\"blockscout_params\"][\"image\"],\n            verif_image=result[\"blockscout_params\"][\"verif_image\"],\n            frontend_image=result[\"blockscout_params\"][\"frontend_image\"],\n            env=result[\"blockscout_params\"][\"env\"],\n        ),\n        checkpointz_params=struct(\n            image=result[\"checkpointz_params\"][\"image\"],\n        ),\n        dora_params=struct(\n            image=result[\"dora_params\"][\"image\"],\n            env=result[\"dora_params\"][\"env\"],\n        ),\n        docker_cache_params=struct(\n            enabled=result[\"docker_cache_params\"][\"enabled\"],\n            url=result[\"docker_cache_params\"][\"url\"],\n            dockerhub_prefix=result[\"docker_cache_params\"][\"dockerhub_prefix\"],\n            github_prefix=result[\"docker_cache_params\"][\"github_prefix\"],\n            google_prefix=result[\"docker_cache_params\"][\"google_prefix\"],\n        ),\n        tx_fuzz_params=struct(\n            image=result[\"tx_fuzz_params\"][\"image\"],\n            tx_fuzz_extra_args=result[\"tx_fuzz_params\"][\"tx_fuzz_extra_args\"],\n        ),\n        rakoon_params=struct(\n            image=result[\"rakoon_params\"][\"image\"],\n            tx_type=result[\"rakoon_params\"][\"tx_type\"],\n            workers=result[\"rakoon_params\"][\"workers\"],\n            batch_size=result[\"rakoon_params\"][\"batch_size\"],\n            seed=result[\"rakoon_params\"][\"seed\"],\n            fuzzing=result[\"rakoon_params\"][\"fuzzing\"],\n            poll_interval=result[\"rakoon_params\"][\"poll_interval\"],\n            extra_args=result[\"rakoon_params\"][\"extra_args\"],\n        ),\n        prometheus_params=struct(\n            storage_tsdb_retention_time=result[\"prometheus_params\"][\n                \"storage_tsdb_retention_time\"\n            ],\n            storage_tsdb_retention_size=result[\"prometheus_params\"][\n                \"storage_tsdb_retention_size\"\n            ],\n            min_cpu=result[\"prometheus_params\"][\"min_cpu\"],\n            max_cpu=result[\"prometheus_params\"][\"max_cpu\"],\n            min_mem=result[\"prometheus_params\"][\"min_mem\"],\n            max_mem=result[\"prometheus_params\"][\"max_mem\"],\n            image=result[\"prometheus_params\"][\"image\"],\n        ),\n        grafana_params=struct(\n            additional_dashboards=result[\"grafana_params\"][\"additional_dashboards\"],\n            min_cpu=result[\"grafana_params\"][\"min_cpu\"],\n            max_cpu=result[\"grafana_params\"][\"max_cpu\"],\n            min_mem=result[\"grafana_params\"][\"min_mem\"],\n            max_mem=result[\"grafana_params\"][\"max_mem\"],\n            image=result[\"grafana_params\"][\"image\"],\n        ),\n        tempo_params=struct(\n            min_cpu=result[\"tempo_params\"][\"min_cpu\"],\n            max_cpu=result[\"tempo_params\"][\"max_cpu\"],\n            min_mem=result[\"tempo_params\"][\"min_mem\"],\n            max_mem=result[\"tempo_params\"][\"max_mem\"],\n            image=result[\"tempo_params\"][\"image\"],\n        ),\n        apache_port=result[\"apache_port\"],\n        nginx_port=result[\"nginx_port\"],\n        assertoor_params=struct(\n            image=result[\"assertoor_params\"][\"image\"],\n            run_stability_check=result[\"assertoor_params\"][\"run_stability_check\"],\n            run_block_proposal_check=result[\"assertoor_params\"][\n                \"run_block_proposal_check\"\n            ],\n            run_lifecycle_test=result[\"assertoor_params\"][\"run_lifecycle_test\"],\n            run_transaction_test=result[\"assertoor_params\"][\"run_transaction_test\"],\n            run_blob_transaction_test=result[\"assertoor_params\"][\n                \"run_blob_transaction_test\"\n            ],\n            run_opcodes_transaction_test=result[\"assertoor_params\"][\n                \"run_opcodes_transaction_test\"\n            ],\n            tests=result[\"assertoor_params\"][\"tests\"],\n        ),\n        custom_flood_params=struct(\n            interval_between_transactions=result[\"custom_flood_params\"][\n                \"interval_between_transactions\"\n            ],\n        ),\n        spamoor_params=struct(\n            image=result[\"spamoor_params\"][\"image\"],\n            min_cpu=result[\"spamoor_params\"][\"min_cpu\"],\n            max_cpu=result[\"spamoor_params\"][\"max_cpu\"],\n            min_mem=result[\"spamoor_params\"][\"min_mem\"],\n            max_mem=result[\"spamoor_params\"][\"max_mem\"],\n            spammers=result[\"spamoor_params\"][\"spammers\"],\n            extra_args=result[\"spamoor_params\"][\"extra_args\"],\n        ),\n        slashoor_params=struct(\n            image=result[\"slashoor_params\"][\"image\"],\n            min_cpu=result[\"slashoor_params\"][\"min_cpu\"],\n            max_cpu=result[\"slashoor_params\"][\"max_cpu\"],\n            min_mem=result[\"slashoor_params\"][\"min_mem\"],\n            max_mem=result[\"slashoor_params\"][\"max_mem\"],\n            extra_args=result[\"slashoor_params\"][\"extra_args\"],\n            log_level=result[\"slashoor_params\"][\"log_level\"],\n            beacon_timeout=result[\"slashoor_params\"][\"beacon_timeout\"],\n            max_epochs_to_keep=result[\"slashoor_params\"][\"max_epochs_to_keep\"],\n            detector_enabled=result[\"slashoor_params\"][\"detector_enabled\"],\n            proposer_enabled=result[\"slashoor_params\"][\"proposer_enabled\"],\n            submitter_enabled=result[\"slashoor_params\"][\"submitter_enabled\"],\n            submitter_dry_run=result[\"slashoor_params\"][\"submitter_dry_run\"],\n            dora_enabled=result[\"slashoor_params\"][\"dora_enabled\"],\n            dora_url=result[\"slashoor_params\"][\"dora_url\"],\n            dora_scan_on_startup=result[\"slashoor_params\"][\"dora_scan_on_startup\"],\n            backfill_slots=result[\"slashoor_params\"][\"backfill_slots\"],\n        ),\n        mempool_bridge_params=struct(\n            image=result[\"mempool_bridge_params\"][\"image\"],\n            source_enodes=result[\"mempool_bridge_params\"][\"source_enodes\"],\n            mode=result[\"mempool_bridge_params\"][\"mode\"],\n            log_level=result[\"mempool_bridge_params\"][\"log_level\"],\n            send_concurrency=result[\"mempool_bridge_params\"][\"send_concurrency\"],\n            polling_interval=result[\"mempool_bridge_params\"][\"polling_interval\"],\n            retry_interval=result[\"mempool_bridge_params\"][\"retry_interval\"],\n        ),\n        additional_services=result[\"additional_services\"],\n        wait_for_finalization=result[\"wait_for_finalization\"],\n        global_log_level=result[\"global_log_level\"],\n        mev_type=result[\"mev_type\"],\n        snooper_enabled=result[\"snooper_enabled\"],\n        snooper_params=struct(\n            enabled=result[\"snooper_params\"][\"enabled\"],\n            image=result[\"snooper_params\"][\"image\"],\n            extra_args=result[\"snooper_params\"][\"extra_args\"],\n            extra_env_vars=result[\"snooper_params\"][\"extra_env_vars\"],\n        ),\n        ethereum_metrics_exporter_enabled=result[\"ethereum_metrics_exporter_enabled\"],\n        xatu_sentry_enabled=result[\"xatu_sentry_enabled\"],\n        parallel_keystore_generation=result[\"parallel_keystore_generation\"],\n        disable_peer_scoring=result[\"disable_peer_scoring\"],\n        persistent=result[\"persistent\"],\n        xatu_sentry_params=struct(\n            xatu_sentry_image=result[\"xatu_sentry_params\"][\"xatu_sentry_image\"],\n            xatu_server_addr=result[\"xatu_sentry_params\"][\"xatu_server_addr\"],\n            xatu_server_headers=result[\"xatu_sentry_params\"][\"xatu_server_headers\"],\n            beacon_subscriptions=result[\"xatu_sentry_params\"][\"beacon_subscriptions\"],\n            xatu_server_tls=result[\"xatu_sentry_params\"][\"xatu_server_tls\"],\n        ),\n        global_tolerations=result[\"global_tolerations\"],\n        global_node_selectors=result[\"global_node_selectors\"],\n        keymanager_enabled=result[\"keymanager_enabled\"],\n        extra_files=result.get(\"extra_files\", {}),\n        checkpoint_sync_enabled=result[\"checkpoint_sync_enabled\"],\n        checkpoint_sync_url=result[\"checkpoint_sync_url\"],\n        ethereum_genesis_generator_params=struct(\n            image=result[\"ethereum_genesis_generator_params\"][\"image\"],\n            extra_env=result[\"ethereum_genesis_generator_params\"][\"extra_env\"],\n        ),\n        port_publisher=struct(\n            nat_exit_ip=result[\"port_publisher\"][\"nat_exit_ip\"],\n            cl_enabled=result[\"port_publisher\"][\"cl\"][\"enabled\"],\n            cl_public_port_start=result[\"port_publisher\"][\"cl\"][\"public_port_start\"],\n            cl_nat_exit_ip=result[\"port_publisher\"][\"cl\"][\"nat_exit_ip\"],\n            el_enabled=result[\"port_publisher\"][\"el\"][\"enabled\"],\n            el_public_port_start=result[\"port_publisher\"][\"el\"][\"public_port_start\"],\n            el_nat_exit_ip=result[\"port_publisher\"][\"el\"][\"nat_exit_ip\"],\n            vc_enabled=result[\"port_publisher\"][\"vc\"][\"enabled\"],\n            vc_public_port_start=result[\"port_publisher\"][\"vc\"][\"public_port_start\"],\n            vc_nat_exit_ip=result[\"port_publisher\"][\"vc\"][\"nat_exit_ip\"],\n            remote_signer_enabled=result[\"port_publisher\"][\"remote_signer\"][\"enabled\"],\n            remote_signer_public_port_start=result[\"port_publisher\"][\"remote_signer\"][\n                \"public_port_start\"\n            ],\n            remote_signer_nat_exit_ip=result[\"port_publisher\"][\"remote_signer\"][\n                \"nat_exit_ip\"\n            ],\n            additional_services_enabled=result[\"port_publisher\"][\"additional_services\"][\n                \"enabled\"\n            ],\n            additional_services_public_port_start=result[\"port_publisher\"][\n                \"additional_services\"\n            ][\"public_port_start\"],\n            additional_services_nat_exit_ip=result[\"port_publisher\"][\n                \"additional_services\"\n            ][\"nat_exit_ip\"],\n            mev_enabled=result[\"port_publisher\"][\"mev\"][\"enabled\"],\n            mev_public_port_start=result[\"port_publisher\"][\"mev\"][\"public_port_start\"],\n            mev_nat_exit_ip=result[\"port_publisher\"][\"mev\"][\"nat_exit_ip\"],\n            other_enabled=result[\"port_publisher\"][\"other\"][\"enabled\"],\n            other_public_port_start=result[\"port_publisher\"][\"other\"][\n                \"public_port_start\"\n            ],\n            other_nat_exit_ip=result[\"port_publisher\"][\"other\"][\"nat_exit_ip\"],\n        ),\n        bootnodoor_params=struct(\n            image=result[\"bootnodoor_params\"][\"image\"],\n            min_cpu=result[\"bootnodoor_params\"][\"min_cpu\"],\n            max_cpu=result[\"bootnodoor_params\"][\"max_cpu\"],\n            min_mem=result[\"bootnodoor_params\"][\"min_mem\"],\n            max_mem=result[\"bootnodoor_params\"][\"max_mem\"],\n            extra_args=result[\"bootnodoor_params\"][\"extra_args\"],\n        ),\n        zkboost_params=struct(\n            image=result[\"zkboost_params\"][\"image\"],\n            dashboard_enabled=\"grafana\" in result[\"additional_services\"]\n            or \"prometheus_grafana\" in result[\"additional_services\"],\n            instances=result[\"zkboost_params\"][\"instances\"],\n            zkvms=result[\"zkboost_params\"][\"zkvms\"],\n            env=result[\"zkboost_params\"][\"env\"],\n        ),\n        buildoor_params=struct(\n            image=result[\"buildoor_params\"][\"image\"],\n            extra_args=result[\"buildoor_params\"][\"extra_args\"],\n            builder_api=result[\"buildoor_params\"][\"builder_api\"],\n            epbs_builder=result[\"buildoor_params\"][\"epbs_builder\"],\n        ),\n    )\n\n\ndef _validate_ere_gpu_config(zkvms):\n    \"\"\"Validate that at most one ere zkvm uses gpu.count without gpu.device_ids.\"\"\"\n    services_using_count = []\n    for zkvm in zkvms:\n        if zkvm.get(\"kind\") != \"ere\":\n            continue\n        gpu_cfg = zkvm.get(\"gpu\", {})\n        count = gpu_cfg.get(\"count\", 0)\n        device_ids = gpu_cfg.get(\"device_ids\", [])\n        if count > 0 and len(device_ids) == 0:\n            services_using_count.append(zkvm[\"proof_type\"])\n\n    if len(services_using_count) > 1:\n        fail(\n            \"Multiple ere services specify gpu.count without gpu.device_ids: [{0}]. \".format(\n                \", \".join(services_using_count)\n            )\n            + \"Docker assigns GPUs from the same pool when gpu.count is used, so all services \"\n            + \"requesting GPUs this way will receive the same device(s). \"\n            + \"Use gpu.device_ids to explicitly assign distinct GPU(s) to each service instead \"\n            + '(e.g. gpu: {{device_ids: [\"0\"]}} and gpu: {{device_ids: [\"1\"]}}).'\n        )\n\n\ndef parse_network_params(plan, input_args):\n    result = default_input_args(input_args)\n    if input_args.get(\"network_params\", {}).get(\"preset\") == \"minimal\":\n        result[\"network_params\"] = default_minimal_network_params()\n\n    # Ensure we handle matrix participants before standard participants are handled.\n    if \"participants_matrix\" in input_args:\n        participants = []\n\n        el_matrix = []\n        if \"el\" in input_args[\"participants_matrix\"]:\n            el_matrix = input_args[\"participants_matrix\"][\"el\"]\n        cl_matrix = []\n        if \"cl\" in input_args[\"participants_matrix\"]:\n            cl_matrix = input_args[\"participants_matrix\"][\"cl\"]\n        vc_matrix = []\n        if \"vc\" in input_args[\"participants_matrix\"]:\n            vc_matrix = input_args[\"participants_matrix\"][\"vc\"]\n        count = input_args[\"participants_matrix\"].get(\"count\", 1)\n\n        for el in el_matrix:\n            for cl in cl_matrix:\n                for vc in vc_matrix if vc_matrix else [{}]:\n                    for _ in range(count):\n                        participant = {k: v for k, v in el.items()}\n                        for k, v in cl.items():\n                            participant[k] = v\n                        for k, v in vc.items():\n                            participant[k] = v\n                        participants.append(participant)\n\n        if \"participants\" in input_args:\n            input_args[\"participants\"].extend(participants)\n        else:\n            input_args[\"participants\"] = participants\n\n    for attr in input_args:\n        value = input_args[attr]\n        # if its inserted we use the value inserted\n        if attr not in ATTR_TO_BE_SKIPPED_AT_ROOT:\n            result[attr] = value\n        elif attr == \"network_params\":\n            for sub_attr in input_args[\"network_params\"]:\n                sub_value = input_args[\"network_params\"][sub_attr]\n                result[\"network_params\"][sub_attr] = sub_value\n\n            # Apply 2/3 ratio for BPO max and target blobs\n            for bpo_num in range(1, 6):  # BPO 1 through 5\n                max_key = \"bpo_{}_max_blobs\".format(bpo_num)\n                target_key = \"bpo_{}_target_blobs\".format(bpo_num)\n\n                # If only max is set (non-zero), calculate target as 2/3 of max (rounded)\n                if result[\"network_params\"].get(max_key) and not result[\n                    \"network_params\"\n                ].get(target_key):\n                    result[\"network_params\"][target_key] = int(\n                        result[\"network_params\"][max_key] * 2.0 / 3.0 + 0.5\n                    )\n                # If only target is set (non-zero), calculate max as target * 3/2 (rounded)\n                elif result[\"network_params\"].get(target_key) and not result[\n                    \"network_params\"\n                ].get(max_key):\n                    result[\"network_params\"][max_key] = int(\n                        result[\"network_params\"][target_key] * 3.0 / 2.0 + 0.5\n                    )\n                # If both are set or both are 0, don't override\n\n        elif attr == \"participants\":\n            participants = []\n            for participant in input_args[\"participants\"]:\n                new_participant = default_participant()\n                for sub_attr, sub_value in participant.items():\n                    # if the value is set in input we set it in participant\n                    new_participant[sub_attr] = sub_value\n                for _ in range(0, new_participant[\"count\"]):\n                    participant_copy = deep_copy_participant(new_participant)\n                    participants.append(participant_copy)\n            result[\"participants\"] = participants\n\n    if \"snooper_params\" in input_args:\n        for sub_attr in input_args[\"snooper_params\"]:\n            result[\"snooper_params\"][sub_attr] = input_args[\"snooper_params\"][sub_attr]\n\n    total_participant_count = 0\n    actual_num_validators = 0\n    # validation of the above defaults\n    for index, participant in enumerate(result[\"participants\"]):\n        el_type = participant[\"el_type\"]\n        cl_type = participant[\"cl_type\"]\n        vc_type = participant[\"vc_type\"]\n        remote_signer_type = participant[\"remote_signer_type\"]\n\n        if (\n            cl_type in (constants.CL_TYPE.nimbus)\n            and (result[\"network_params\"][\"seconds_per_slot\"] < 12)\n            and result[\"network_params\"][\"preset\"] == \"mainnet\"\n        ):\n            fail(\n                \"nimbus can't be run with slot times below 12 seconds with \"\n                + result[\"network_params\"][\"preset\"]\n                + \" preset\"\n            )\n\n        if (\n            cl_type in (constants.CL_TYPE.nimbus)\n            and (result[\"network_params\"][\"seconds_per_slot\"] != 6)\n            and result[\"network_params\"][\"preset\"] == \"minimal\"\n        ):\n            fail(\n                \"nimbus can't be run with slot times different than 6 seconds with \"\n                + result[\"network_params\"][\"preset\"]\n                + \" preset\"\n            )\n\n        el_image = participant[\"el_image\"]\n        if el_image == \"\":\n            # Get devnet-modified images if network contains 'devnet'\n            effective_el_images = get_devnet_modified_images(\n                result[\"network_params\"][\"network\"], DEFAULT_EL_IMAGES\n            )\n            default_image = effective_el_images.get(el_type, \"\")\n            if default_image == \"\":\n                fail(\n                    \"{0} received an empty image name and we don't have a default for it\".format(\n                        el_type\n                    )\n                )\n            participant[\"el_image\"] = default_image\n\n        cl_image = participant[\"cl_image\"]\n        if cl_image == \"\":\n            if result[\"network_params\"][\"preset\"] == \"minimal\":\n                # Get devnet-modified images if network contains 'devnet'\n                effective_cl_images = get_devnet_modified_images(\n                    result[\"network_params\"][\"network\"], DEFAULT_CL_IMAGES_MINIMAL\n                )\n                default_image = effective_cl_images.get(cl_type, \"\")\n            else:\n                # Get devnet-modified images if network contains 'devnet'\n                effective_cl_images = get_devnet_modified_images(\n                    result[\"network_params\"][\"network\"], DEFAULT_CL_IMAGES\n                )\n                default_image = effective_cl_images.get(cl_type, \"\")\n            if default_image == \"\":\n                fail(\n                    \"{0} received an empty image name and we don't have a default for it\".format(\n                        cl_type\n                    )\n                )\n            participant[\"cl_image\"] = default_image\n\n        if participant[\"use_separate_vc\"] == None:\n            # Default to false for CL clients that can run validator clients\n            # in the same process.\n            if (\n                cl_type\n                in (\n                    constants.CL_TYPE.nimbus,\n                    constants.CL_TYPE.teku,\n                    constants.CL_TYPE.grandine,\n                )\n                and vc_type == \"\"\n            ):\n                participant[\"use_separate_vc\"] = False\n            else:\n                participant[\"use_separate_vc\"] = True\n\n        if participant[\"use_remote_signer\"] and not participant[\"use_separate_vc\"]:\n            fail(\"`use_remote_signer` requires `use_separate_vc`\")\n\n        if vc_type == \"\":\n            # Caplin doesn't include a built-in VC, default to lighthouse\n            if cl_type == constants.CL_TYPE.caplin:\n                vc_type = \"lighthouse\"\n            else:\n                vc_type = cl_type\n            participant[\"vc_type\"] = vc_type\n\n        vc_image = participant[\"vc_image\"]\n        if vc_image == \"\":\n            if cl_image == \"\" or vc_type != cl_type:\n                # If the validator client image is also empty, default to the image for the chosen CL client\n                if result[\"network_params\"][\"preset\"] == \"minimal\":\n                    # Get devnet-modified images if network contains 'devnet'\n                    effective_vc_images = get_devnet_modified_images(\n                        result[\"network_params\"][\"network\"], DEFAULT_VC_IMAGES_MINIMAL\n                    )\n                    default_image = effective_vc_images.get(vc_type, \"\")\n                else:\n                    # Get devnet-modified images if network contains 'devnet'\n                    effective_vc_images = get_devnet_modified_images(\n                        result[\"network_params\"][\"network\"], DEFAULT_VC_IMAGES\n                    )\n                    default_image = effective_vc_images.get(vc_type, \"\")\n            else:\n                if cl_type == \"prysm\":\n                    default_image = cl_image.replace(\"beacon-chain\", \"validator\")\n                elif cl_type == \"nimbus\":\n                    default_image = cl_image.replace(\n                        \"nimbus-eth2\", \"nimbus-validator-client\"\n                    )\n                else:\n                    default_image = cl_image\n            if default_image == \"\":\n                fail(\n                    \"{0} received an empty image name and we don't have a default for it\".format(\n                        vc_type\n                    )\n                )\n            participant[\"vc_image\"] = default_image\n\n        remote_signer_image = participant[\"remote_signer_image\"]\n        if remote_signer_image == \"\":\n            participant[\"remote_signer_image\"] = DEFAULT_REMOTE_SIGNER_IMAGES.get(\n                remote_signer_type, \"\"\n            )\n\n        snooper_enabled = participant[\"snooper_enabled\"]\n        if snooper_enabled == None:\n            participant[\"snooper_enabled\"] = (\n                result[\"snooper_enabled\"] or result[\"snooper_params\"][\"enabled\"]\n            )\n\n        keymanager_enabled = participant[\"keymanager_enabled\"]\n        if keymanager_enabled == None:\n            participant[\"keymanager_enabled\"] = result[\"keymanager_enabled\"]\n\n        ethereum_metrics_exporter_enabled = participant[\n            \"ethereum_metrics_exporter_enabled\"\n        ]\n        if ethereum_metrics_exporter_enabled == None:\n            participant[\"ethereum_metrics_exporter_enabled\"] = result[\n                \"ethereum_metrics_exporter_enabled\"\n            ]\n\n        xatu_sentry_enabled = participant[\"xatu_sentry_enabled\"]\n        if xatu_sentry_enabled == None:\n            participant[\"xatu_sentry_enabled\"] = result[\"xatu_sentry_enabled\"]\n\n        blobber_enabled = participant[\"blobber_enabled\"]\n        if blobber_enabled:\n            # lighthouse, lodestar, prysm, and grandine support blobber\n            if participant[\"cl_type\"] not in [\n                constants.CL_TYPE.lighthouse,\n                constants.CL_TYPE.lodestar,\n                constants.CL_TYPE.prysm,\n                constants.CL_TYPE.grandine,\n            ]:\n                fail(\n                    \"blobber is not supported for {0} client\".format(\n                        participant[\"cl_type\"]\n                    )\n                )\n\n        validator_count = participant[\"validator_count\"]\n        if validator_count == None:\n            participant[\"validator_count\"] = result[\"network_params\"][\n                \"num_validator_keys_per_node\"\n            ]\n\n        actual_num_validators += participant[\"validator_count\"]\n\n        cl_extra_params = participant.get(\"cl_extra_params\", [])\n        participant[\"cl_extra_params\"] = cl_extra_params\n\n        vc_extra_params = participant.get(\"vc_extra_params\", [])\n        participant[\"vc_extra_params\"] = vc_extra_params\n\n        remote_signer_extra_params = participant.get(\"remote_signer_extra_params\", [])\n        participant[\"remote_signer_extra_params\"] = remote_signer_extra_params\n\n        total_participant_count += participant[\"count\"]\n\n    if total_participant_count == 1:\n        for index, participant in enumerate(result[\"participants\"]):\n            # If there is only one participant, we run lodestar as a single node mode\n            if participant[\"cl_type\"] == constants.CL_TYPE.lodestar:\n                participant[\"cl_extra_params\"].append(\"--sync.isSingleNode\")\n                participant[\"cl_extra_params\"].append(\n                    \"--network.allowPublishToZeroPeers\"\n                )\n\n    if result[\"network_params\"][\"network_id\"].strip() == \"\":\n        fail(\"network_id is empty or spaces it needs to be of non zero length\")\n\n    if result[\"network_params\"][\"deposit_contract_address\"].strip() == \"\":\n        fail(\n            \"deposit_contract_address is empty or spaces it needs to be of non zero length\"\n        )\n\n    if (\n        result[\"network_params\"][\"network\"] == \"kurtosis\"\n        or constants.NETWORK_NAME.shadowfork in result[\"network_params\"][\"network\"]\n    ):\n        if (\n            result[\"network_params\"][\"preregistered_validator_keys_mnemonic\"].strip()\n            == \"\"\n        ):\n            fail(\n                \"preregistered_validator_keys_mnemonic is empty or spaces it needs to be of non zero length\"\n            )\n\n    if result[\"network_params\"][\"seconds_per_slot\"] == 0:\n        fail(\"seconds_per_slot is 0 needs to be > 0 \")\n\n    seconds_per_slot = result[\"network_params\"][\"seconds_per_slot\"]\n    slot_duration_ms = result[\"network_params\"][\"slot_duration_ms\"]\n    preset = result[\"network_params\"][\"preset\"]\n\n    if preset == \"minimal\":\n        seconds_per_slot_is_set = seconds_per_slot != 6\n        slot_duration_ms_is_set = slot_duration_ms != 6000\n    else:\n        seconds_per_slot_is_set = seconds_per_slot != 12\n        slot_duration_ms_is_set = slot_duration_ms != 12000\n\n    # Apply validation logic based on your requirements:\n    # One set 8/12000 -> 8/8000\n    # Both set incorrectly -> fail\n    if seconds_per_slot_is_set and not slot_duration_ms_is_set:\n        result[\"network_params\"][\"slot_duration_ms\"] = seconds_per_slot * 1000\n    elif not seconds_per_slot_is_set and slot_duration_ms_is_set:\n        result[\"network_params\"][\"seconds_per_slot\"] = int(slot_duration_ms / 1000)\n    else:\n        expected_slot_duration_ms = seconds_per_slot * 1000\n        if slot_duration_ms != expected_slot_duration_ms:\n            fail(\n                \"seconds_per_slot ({0}) and slot_duration_ms ({1}) are inconsistent. Expected slot_duration_ms to be {2}. Use the same value for both, or only define one of them.\".format(\n                    seconds_per_slot, slot_duration_ms, expected_slot_duration_ms\n                )\n            )\n\n    if (\n        result[\"network_params\"][\"network\"] != constants.NETWORK_NAME.kurtosis\n        and constants.NETWORK_NAME.shadowfork not in result[\"network_params\"][\"network\"]\n    ):\n        for participant in result[\"participants\"]:\n            participant[\"validator_count\"] = 0\n\n    if result[\"network_params\"][\"preset\"] not in [\"mainnet\", \"minimal\"]:\n        fail(\n            \"preset \"\n            + result[\"network_params\"][\"preset\"]\n            + \" is not supported, it can only be mainnet or minimal\"\n        )\n\n    if result[\"network_params\"][\"builder_count\"] > 0:\n        if result[\"network_params\"][\"gloas_fork_epoch\"] != 0:\n            fail(\n                \"builder_count is {0} but gloas_fork_epoch is {1}. Builders are only supported when gloas_fork_epoch is 0 (GLOAS at genesis).\".format(\n                    result[\"network_params\"][\"builder_count\"],\n                    result[\"network_params\"][\"gloas_fork_epoch\"],\n                )\n            )\n        builder_mnemonic_entry = {\n            \"mnemonic\": constants.DEFAULT_MNEMONIC,\n            \"start\": actual_num_validators,\n            \"count\": result[\"network_params\"][\"builder_count\"],\n            \"wd_prefix\": \"0x03\",\n            \"wd_address\": result[\"network_params\"][\"withdrawal_address\"],\n        }\n        if result[\"network_params\"][\"builder_balance\"] > 0:\n            builder_mnemonic_entry[\"balance\"] = int(\n                result[\"network_params\"][\"builder_balance\"] * 1000000000\n            )\n        result[\"network_params\"][\"additional_mnemonics\"] = result[\"network_params\"][\n            \"additional_mnemonics\"\n        ] + [builder_mnemonic_entry]\n\n    return result\n\n\ndef get_client_log_level_or_default(\n    participant_log_level, global_log_level, client_log_levels\n):\n    log_level = client_log_levels.get(participant_log_level, \"\")\n    if log_level == \"\":\n        log_level = client_log_levels.get(global_log_level, \"\")\n        if log_level == \"\":\n            fail(\n                \"No participant log level defined, and the client log level has no mapping for global log level '{0}'\".format(\n                    global_log_level\n                )\n            )\n    return log_level\n\n\ndef get_client_node_selectors(participant_node_selectors, global_node_selectors):\n    node_selectors = {}\n    node_selectors = participant_node_selectors if participant_node_selectors else {}\n    if node_selectors == {}:\n        node_selectors = global_node_selectors if global_node_selectors else {}\n\n    return node_selectors\n\n\ndef default_input_args(input_args):\n    network_params = default_network_params()\n    if \"participants_matrix\" not in input_args:\n        participants = [default_participant()]\n    else:\n        participants = []\n\n    participants_matrix = []\n\n    if (\n        \"network_params\" in input_args\n        and \"network\" in input_args[\"network_params\"]\n        and (\n            input_args[\"network_params\"][\"network\"] in constants.PUBLIC_NETWORKS\n            or input_args[\"network_params\"][\"network\"]\n            == constants.NETWORK_NAME.ephemery\n            or \"devnet\" in input_args[\"network_params\"][\"network\"]\n        )\n    ):\n        checkpoint_sync_enabled = True\n    else:\n        checkpoint_sync_enabled = False\n\n    return {\n        \"participants\": participants,\n        \"participants_matrix\": participants_matrix,\n        \"network_params\": network_params,\n        \"extra_files\": {},\n        \"wait_for_finalization\": False,\n        \"global_log_level\": \"info\",\n        \"snooper_enabled\": False,\n        \"ethereum_metrics_exporter_enabled\": False,\n        \"parallel_keystore_generation\": False,\n        \"disable_peer_scoring\": False,\n        \"persistent\": False,\n        \"mev_type\": None,\n        \"xatu_sentry_enabled\": False,\n        \"apache_port\": None,\n        \"nginx_port\": None,\n        \"global_tolerations\": [],\n        \"global_node_selectors\": {},\n        \"use_remote_signer\": False,\n        \"keymanager_enabled\": False,\n        \"checkpoint_sync_enabled\": checkpoint_sync_enabled,\n        \"checkpoint_sync_url\": \"\",\n        \"ethereum_genesis_generator_params\": get_default_ethereum_genesis_generator_params(),\n        \"port_publisher\": {\n            \"nat_exit_ip\": constants.PRIVATE_IP_ADDRESS_PLACEHOLDER,\n            \"public_port_start\": None,\n        },\n        \"snooper_params\": get_default_snooper_params(),\n        \"spamoor_params\": get_default_spamoor_params(),\n        \"bootnodoor_params\": get_default_bootnodoor_params(),\n    }\n\n\ndef default_network_params():\n    return {\n        \"network\": \"kurtosis\",\n        \"network_id\": \"3151908\",\n        \"deposit_contract_address\": \"0x00000000219ab540356cBB839Cbe05303d7705Fa\",\n        \"seconds_per_slot\": 12,\n        \"slot_duration_ms\": 12000,\n        \"num_validator_keys_per_node\": 128,\n        \"preregistered_validator_keys_mnemonic\": constants.DEFAULT_MNEMONIC,\n        \"preregistered_validator_count\": 0,\n        \"genesis_delay\": 20,\n        \"genesis_time\": 0,\n        \"genesis_gaslimit\": 60000000,\n        \"max_per_epoch_activation_churn_limit\": 8,\n        \"churn_limit_quotient\": 65536,\n        \"confirmation_byzantine_threshold\": 25,\n        \"ejection_balance\": 16000000000,\n        \"eth1_follow_distance\": 2048,\n        \"min_validator_withdrawability_delay\": 256,\n        \"min_builder_withdrawability_delay\": 64,\n        \"shard_committee_period\": 256,\n        \"attestation_due_bps_gloas\": 2500,\n        \"aggregate_due_bps_gloas\": 5000,\n        \"sync_message_due_bps_gloas\": 2500,\n        \"contribution_due_bps_gloas\": 5000,\n        \"payload_attestation_due_bps\": 7500,\n        \"view_freeze_cutoff_bps\": 7500,\n        \"inclusion_list_submission_due_bps\": 6667,\n        \"proposer_inclusion_list_cutoff_bps\": 9167,\n        \"altair_fork_epoch\": 0,\n        \"bellatrix_fork_epoch\": 0,\n        \"capella_fork_epoch\": 0,\n        \"deneb_fork_epoch\": 0,\n        \"electra_fork_epoch\": 0,\n        \"fulu_fork_epoch\": 0,\n        \"gloas_fork_epoch\": constants.FAR_FUTURE_EPOCH,\n        \"heze_fork_epoch\": constants.FAR_FUTURE_EPOCH,\n        \"network_sync_base_url\": \"https://snapshots.ethpandaops.io/\",\n        \"force_snapshot_sync\": False,\n        \"shadowfork_block_height\": \"latest\",\n        \"samples_per_slot\": 8,\n        \"custody_requirement\": 4,\n        \"max_blobs_per_block_electra\": 9,\n        \"target_blobs_per_block_electra\": 6,\n        \"max_request_blocks_deneb\": 128,\n        \"base_fee_update_fraction_electra\": 5007716,\n        \"preset\": \"mainnet\",\n        \"additional_preloaded_contracts\": {},\n        \"additional_mnemonics\": [],\n        \"devnet_repo\": \"ethpandaops\",\n        \"prefunded_accounts\": {},\n        \"max_payload_size\": 10485760,\n        \"perfect_peerdas_enabled\": False,\n        \"gas_limit\": 0,\n        \"bpo_1_epoch\": 0,\n        \"bpo_1_max_blobs\": 15,\n        \"bpo_1_target_blobs\": 10,\n        \"bpo_1_base_fee_update_fraction\": 8346193,\n        \"bpo_2_epoch\": 18446744073709551615,\n        \"bpo_2_max_blobs\": 21,\n        \"bpo_2_target_blobs\": 14,\n        \"bpo_2_base_fee_update_fraction\": 11684671,\n        \"bpo_3_epoch\": 18446744073709551615,\n        \"bpo_3_max_blobs\": 0,\n        \"bpo_3_target_blobs\": 0,\n        \"bpo_3_base_fee_update_fraction\": 0,\n        \"bpo_4_epoch\": 18446744073709551615,\n        \"bpo_4_max_blobs\": 0,\n        \"bpo_4_target_blobs\": 0,\n        \"bpo_4_base_fee_update_fraction\": 0,\n        \"bpo_5_epoch\": 18446744073709551615,\n        \"bpo_5_max_blobs\": 0,\n        \"bpo_5_target_blobs\": 0,\n        \"bpo_5_base_fee_update_fraction\": 0,\n        \"withdrawal_type\": \"0x00\",\n        \"withdrawal_address\": \"0x8943545177806ED17B9F23F0a21ee5948eCaa776\",\n        \"validator_balance\": 32,\n        \"min_epochs_for_data_column_sidecars_requests\": 4096,\n        \"builder_count\": 0,\n        \"builder_balance\": 100,\n    }\n\n\ndef default_minimal_network_params():\n    return {\n        \"network\": \"kurtosis\",\n        \"network_id\": \"3151908\",\n        \"deposit_contract_address\": \"0x00000000219ab540356cBB839Cbe05303d7705Fa\",\n        \"seconds_per_slot\": 6,\n        \"slot_duration_ms\": 6000,\n        \"num_validator_keys_per_node\": 128,\n        \"preregistered_validator_keys_mnemonic\": constants.DEFAULT_MNEMONIC,\n        \"preregistered_validator_count\": 0,\n        \"genesis_delay\": 20,\n        \"genesis_time\": 0,\n        \"genesis_gaslimit\": 60000000,\n        \"max_per_epoch_activation_churn_limit\": 4,\n        \"churn_limit_quotient\": 32,\n        \"confirmation_byzantine_threshold\": 25,\n        \"ejection_balance\": 16000000000,\n        \"eth1_follow_distance\": 16,\n        \"min_validator_withdrawability_delay\": 256,\n        \"min_builder_withdrawability_delay\": 2,\n        \"shard_committee_period\": 64,\n        \"attestation_due_bps_gloas\": 2500,\n        \"aggregate_due_bps_gloas\": 5000,\n        \"sync_message_due_bps_gloas\": 2500,\n        \"contribution_due_bps_gloas\": 5000,\n        \"payload_attestation_due_bps\": 7500,\n        \"view_freeze_cutoff_bps\": 7500,\n        \"inclusion_list_submission_due_bps\": 6667,\n        \"proposer_inclusion_list_cutoff_bps\": 9167,\n        \"altair_fork_epoch\": 0,\n        \"bellatrix_fork_epoch\": 0,\n        \"capella_fork_epoch\": 0,\n        \"deneb_fork_epoch\": 0,\n        \"electra_fork_epoch\": 0,\n        \"fulu_fork_epoch\": 0,\n        \"gloas_fork_epoch\": constants.FAR_FUTURE_EPOCH,\n        \"heze_fork_epoch\": constants.FAR_FUTURE_EPOCH,\n        \"network_sync_base_url\": \"https://snapshots.ethpandaops.io/\",\n        \"force_snapshot_sync\": False,\n        \"shadowfork_block_height\": \"latest\",\n        \"samples_per_slot\": 8,\n        \"custody_requirement\": 4,\n        \"max_blobs_per_block_electra\": 9,\n        \"target_blobs_per_block_electra\": 6,\n        \"max_request_blocks_deneb\": 128,\n        \"base_fee_update_fraction_electra\": 5007716,\n        \"preset\": \"minimal\",\n        \"additional_preloaded_contracts\": {},\n        \"additional_mnemonics\": [],\n        \"devnet_repo\": \"ethpandaops\",\n        \"prefunded_accounts\": {},\n        \"max_payload_size\": 10485760,\n        \"perfect_peerdas_enabled\": False,\n        \"gas_limit\": 0,\n        \"bpo_1_epoch\": 0,\n        \"bpo_1_max_blobs\": 15,\n        \"bpo_1_target_blobs\": 10,\n        \"bpo_1_base_fee_update_fraction\": 8346193,\n        \"bpo_2_epoch\": 18446744073709551615,\n        \"bpo_2_max_blobs\": 21,\n        \"bpo_2_target_blobs\": 14,\n        \"bpo_2_base_fee_update_fraction\": 11684671,\n        \"bpo_3_epoch\": 18446744073709551615,\n        \"bpo_3_max_blobs\": 0,\n        \"bpo_3_target_blobs\": 0,\n        \"bpo_3_base_fee_update_fraction\": 0,\n        \"bpo_4_epoch\": 18446744073709551615,\n        \"bpo_4_max_blobs\": 0,\n        \"bpo_4_target_blobs\": 0,\n        \"bpo_4_base_fee_update_fraction\": 0,\n        \"bpo_5_epoch\": 18446744073709551615,\n        \"bpo_5_max_blobs\": 0,\n        \"bpo_5_target_blobs\": 0,\n        \"bpo_5_base_fee_update_fraction\": 0,\n        \"withdrawal_type\": \"0x00\",\n        \"withdrawal_address\": \"0x8943545177806ED17B9F23F0a21ee5948eCaa776\",\n        \"validator_balance\": 32,\n        \"min_epochs_for_data_column_sidecars_requests\": 4096,\n        \"builder_count\": 0,\n        \"builder_balance\": 100,\n    }\n\n\ndef default_participant():\n    return {\n        \"el_type\": \"geth\",\n        \"el_image\": \"\",\n        \"el_binary_path\": \"\",\n        \"el_log_level\": \"\",\n        \"el_storage_type\": \"\",\n        \"el_extra_env_vars\": {},\n        \"el_extra_labels\": {},\n        \"el_extra_params\": [],\n        \"el_extra_mounts\": {},\n        \"el_devices\": [],\n        \"el_tolerations\": [],\n        \"el_volume_size\": 0,\n        \"el_min_cpu\": 0,\n        \"el_max_cpu\": 0,\n        \"el_min_mem\": 0,\n        \"el_max_mem\": 0,\n        \"el_force_restart\": False,\n        \"cl_type\": \"lighthouse\",\n        \"cl_image\": \"\",\n        \"cl_binary_path\": \"\",\n        \"cl_log_level\": \"\",\n        \"cl_extra_env_vars\": {},\n        \"cl_extra_labels\": {},\n        \"cl_extra_params\": [],\n        \"cl_extra_mounts\": {},\n        \"cl_devices\": [],\n        \"cl_tolerations\": [],\n        \"cl_volume_size\": 0,\n        \"cl_min_cpu\": 0,\n        \"cl_max_cpu\": 0,\n        \"cl_min_mem\": 0,\n        \"cl_max_mem\": 0,\n        \"cl_force_restart\": False,\n        \"supernode\": False,\n        \"use_separate_vc\": None,\n        \"vc_type\": \"\",\n        \"vc_image\": \"\",\n        \"vc_binary_path\": \"\",\n        \"vc_log_level\": \"\",\n        \"vc_extra_env_vars\": {},\n        \"vc_extra_labels\": {},\n        \"vc_extra_params\": [],\n        \"vc_extra_mounts\": {},\n        \"vc_devices\": [],\n        \"vc_tolerations\": [],\n        \"vc_min_cpu\": 0,\n        \"vc_max_cpu\": 0,\n        \"vc_min_mem\": 0,\n        \"vc_max_mem\": 0,\n        \"vc_force_restart\": False,\n        \"use_remote_signer\": None,\n        \"remote_signer_type\": \"web3signer\",\n        \"remote_signer_image\": \"\",\n        \"remote_signer_extra_env_vars\": {},\n        \"remote_signer_extra_labels\": {},\n        \"remote_signer_extra_params\": [],\n        \"remote_signer_tolerations\": [],\n        \"remote_signer_min_cpu\": 0,\n        \"remote_signer_max_cpu\": 0,\n        \"remote_signer_min_mem\": 0,\n        \"remote_signer_max_mem\": 0,\n        \"validator_count\": None,\n        \"node_selectors\": {},\n        \"tolerations\": [],\n        \"count\": 1,\n        \"snooper_enabled\": None,\n        \"ethereum_metrics_exporter_enabled\": None,\n        \"xatu_sentry_enabled\": None,\n        \"prometheus_config\": {\n            \"scrape_interval\": \"15s\",\n            \"labels\": None,\n        },\n        \"blobber_enabled\": False,\n        \"blobber_extra_params\": [],\n        \"blobber_image\": \"ethpandaops/blobber:latest\",\n        \"builder_network_params\": None,\n        \"keymanager_enabled\": None,\n        \"vc_beacon_node_indices\": None,\n        \"checkpoint_sync_enabled\": None,\n        \"skip_start\": False,\n    }\n\n\ndef get_default_blockscout_params():\n    return {\n        \"image\": \"ghcr.io/blockscout/blockscout:latest\",\n        \"verif_image\": \"ghcr.io/blockscout/smart-contract-verifier:latest\",\n        \"frontend_image\": \"ghcr.io/blockscout/frontend:latest\",\n        \"env\": {},\n    }\n\n\ndef get_default_dora_params():\n    return {\n        \"image\": constants.DEFAULT_DORA_IMAGE,\n        \"env\": {},\n    }\n\n\ndef get_default_checkpointz_params():\n    return {\n        \"image\": constants.DEFAULT_CHECKPOINTZ_IMAGE,\n    }\n\n\ndef get_default_docker_cache_params():\n    return {\n        \"enabled\": False,\n        \"url\": \"\",\n        \"dockerhub_prefix\": \"/dh/\",\n        \"github_prefix\": \"/gh/\",\n        \"google_prefix\": \"/gcr/\",\n    }\n\n\ndef get_default_mev_params(mev_type, preset):\n    mev_relay_image = constants.DEFAULT_FLASHBOTS_RELAY_IMAGE\n    mev_builder_image = constants.DEFAULT_FLASHBOTS_BUILDER_IMAGE\n    if preset == \"minimal\":\n        mev_builder_cl_image = DEFAULT_CL_IMAGES_MINIMAL[constants.CL_TYPE.lighthouse]\n    else:\n        mev_builder_cl_image = DEFAULT_CL_IMAGES[constants.CL_TYPE.lighthouse]\n    mev_builder_extra_data = None\n    mev_builder_subsidy = 0\n    mev_boost_image = constants.DEFAULT_FLASHBOTS_MEV_BOOST_IMAGE\n    mev_boost_args = [\"mev-boost\", \"--relay-check\"]\n    mev_relay_api_extra_args = []\n    mev_relay_api_extra_env_vars = {}\n    mev_relay_housekeeper_extra_args = []\n    mev_relay_housekeeper_extra_env_vars = {}\n    mev_relay_website_extra_args = []\n    mev_relay_website_extra_env_vars = {}\n    mev_builder_extra_args = []\n    mev_builder_cl_extra_params = []\n    launch_adminer = False\n    mev_builder_prometheus_config = {\n        \"scrape_interval\": \"15s\",\n        \"labels\": None,\n        \"storage_tsdb_retention_time\": \"1d\",\n        \"storage_tsdb_retention_size\": \"512MB\",\n        \"min_cpu\": 10,\n        \"max_cpu\": 1000,\n        \"min_mem\": 128,\n        \"max_mem\": 2048,\n    }\n\n    if mev_type == constants.MEV_RS_MEV_TYPE:\n        if preset == \"minimal\":\n            mev_relay_image = constants.DEFAULT_MEV_RS_IMAGE_MINIMAL\n            mev_builder_image = constants.DEFAULT_MEV_RS_IMAGE_MINIMAL\n            mev_builder_cl_image = DEFAULT_CL_IMAGES_MINIMAL[\n                constants.CL_TYPE.lighthouse\n            ]\n            mev_boost_image = constants.DEFAULT_MEV_RS_IMAGE_MINIMAL\n        else:\n            mev_relay_image = constants.DEFAULT_MEV_RS_IMAGE\n            mev_builder_image = constants.DEFAULT_MEV_RS_IMAGE\n            mev_builder_cl_image = DEFAULT_CL_IMAGES[constants.CL_TYPE.lighthouse]\n            mev_boost_image = constants.DEFAULT_MEV_RS_IMAGE\n        mev_builder_extra_data = \"0x68656C6C6F20776F726C640A\"  # \"hello world\\n\"\n        mev_builder_extra_args = [\"--mev-builder-config=\" + \"/config/config.toml\"]\n\n    if mev_type == constants.COMMIT_BOOST_MEV_TYPE:\n        mev_relay_image = constants.DEFAULT_FLASHBOTS_RELAY_IMAGE\n        mev_builder_image = constants.DEFAULT_FLASHBOTS_BUILDER_IMAGE\n        mev_boost_image = constants.DEFAULT_COMMIT_BOOST_MEV_BOOST_IMAGE\n        mev_builder_cl_image = DEFAULT_CL_IMAGES[constants.CL_TYPE.lighthouse]\n        mev_builder_extra_data = (\n            \"0x436F6D6D69742D426F6F737420F09F93BB\"  # Commit-Boost 📻\n        )\n\n    if mev_type == constants.MOCK_MEV_TYPE:\n        mev_builder_image = constants.DEFAULT_MOCK_MEV_IMAGE\n        mev_boost_image = constants.DEFAULT_FLASHBOTS_MEV_BOOST_IMAGE\n\n    if mev_type == constants.HELIX_MEV_TYPE:\n        mev_relay_image = constants.DEFAULT_HELIX_RELAY_IMAGE\n        mev_builder_image = constants.DEFAULT_FLASHBOTS_BUILDER_IMAGE\n        mev_boost_image = constants.DEFAULT_FLASHBOTS_MEV_BOOST_IMAGE\n        mev_builder_cl_image = DEFAULT_CL_IMAGES[constants.CL_TYPE.lighthouse]\n        mev_builder_extra_data = \"0x48656C6978\"  # \"Helix\" in hex\n\n    return {\n        \"mev_relay_image\": mev_relay_image,\n        \"mev_builder_image\": mev_builder_image,\n        \"mock_mev_image\": mev_builder_image\n        if mev_type == constants.MOCK_MEV_TYPE\n        else None,\n        \"mev_builder_subsidy\": mev_builder_subsidy,\n        \"mev_builder_cl_image\": mev_builder_cl_image,\n        \"mev_builder_extra_data\": mev_builder_extra_data,\n        \"mev_builder_extra_args\": mev_builder_extra_args,\n        \"mev_builder_cl_extra_params\": mev_builder_cl_extra_params,\n        \"mev_boost_image\": mev_boost_image,\n        \"mev_boost_args\": mev_boost_args,\n        \"mev_relay_api_extra_args\": mev_relay_api_extra_args,\n        \"mev_relay_api_extra_env_vars\": mev_relay_api_extra_env_vars,\n        \"mev_relay_housekeeper_extra_args\": mev_relay_housekeeper_extra_args,\n        \"mev_relay_housekeeper_extra_env_vars\": mev_relay_housekeeper_extra_env_vars,\n        \"mev_relay_website_extra_args\": mev_relay_website_extra_args,\n        \"mev_relay_website_extra_env_vars\": mev_relay_website_extra_env_vars,\n        \"mev_builder_prometheus_config\": mev_builder_prometheus_config,\n        \"launch_adminer\": launch_adminer,\n        \"run_multiple_relays\": False,\n        \"helix_relay_image\": constants.DEFAULT_HELIX_RELAY_IMAGE,\n        \"commit_boost_config\": \"\",\n    }\n\n\ndef get_default_tx_fuzz_params():\n    return {\n        \"image\": \"ethpandaops/tx-fuzz:master\",\n        \"tx_fuzz_extra_args\": [],\n    }\n\n\ndef get_default_rakoon_params():\n    return {\n        \"image\": \"ethpandaops/fuzztools:main\",\n        \"tx_type\": \"eip7702\",\n        \"workers\": 50,\n        \"batch_size\": 100,\n        \"seed\": \"\",\n        \"fuzzing\": True,\n        \"poll_interval\": \"\",\n        \"extra_args\": [],\n    }\n\n\ndef get_default_assertoor_params():\n    return {\n        \"image\": constants.DEFAULT_ASSERTOOR_IMAGE,\n        \"run_stability_check\": False,\n        \"run_block_proposal_check\": False,\n        \"run_lifecycle_test\": False,\n        \"run_transaction_test\": False,\n        \"run_blob_transaction_test\": False,\n        \"run_opcodes_transaction_test\": False,\n        \"tests\": [],\n    }\n\n\ndef get_default_prometheus_params():\n    return {\n        \"storage_tsdb_retention_time\": \"1d\",\n        \"storage_tsdb_retention_size\": \"512MB\",\n        \"min_cpu\": 10,\n        \"max_cpu\": 1000,\n        \"min_mem\": 128,\n        \"max_mem\": 2048,\n        \"image\": \"prom/prometheus:v3.2.1\",\n    }\n\n\ndef get_default_grafana_params():\n    return {\n        \"additional_dashboards\": [],\n        \"min_cpu\": 10,\n        \"max_cpu\": 1000,\n        \"min_mem\": 128,\n        \"max_mem\": 2048,\n        \"image\": \"grafana/grafana:latest\",\n    }\n\n\ndef get_default_tempo_params():\n    return {\n        \"min_cpu\": 10,\n        \"max_cpu\": 1000,\n        \"min_mem\": 128,\n        \"max_mem\": 2048,\n        \"image\": \"grafana/tempo:latest\",\n    }\n\n\ndef get_default_xatu_sentry_params():\n    return {\n        \"xatu_sentry_image\": \"ethpandaops/xatu:latest\",\n        \"xatu_server_addr\": \"localhost:8080\",\n        \"xatu_server_headers\": {},\n        \"xatu_server_tls\": False,\n        \"beacon_subscriptions\": [\n            \"attestation\",\n            \"single_attestation\",\n            \"block\",\n            \"block_gossip\",\n            \"chain_reorg\",\n            \"finalized_checkpoint\",\n            \"head\",\n            \"voluntary_exit\",\n            \"contribution_and_proof\",\n            \"blob_sidecar\",\n            \"data_column_sidecar\",\n        ],\n    }\n\n\ndef get_default_snooper_params():\n    return {\n        \"enabled\": False,\n        \"image\": constants.DEFAULT_SNOOPER_IMAGE,\n        \"extra_args\": [],\n        \"extra_env_vars\": {},\n    }\n\n\ndef get_default_spamoor_params():\n    return {\n        \"image\": constants.DEFAULT_SPAMOOR_IMAGE,\n        \"min_cpu\": 100,\n        \"max_cpu\": 2000,\n        \"min_mem\": 100,\n        \"max_mem\": 800,\n        \"extra_args\": [],\n        \"spammers\": [\n            # default spammers\n            {\n                \"name\": \"EOA Spammer (Kurtosis Package)\",\n                \"description\": \"200 type-2 eoa transactions per slot, gas limit 20 gwei\",\n                \"scenario\": \"eoatx\",\n                \"config\": {\n                    \"throughput\": 200,\n                    \"max_pending\": 400,\n                    \"max_wallets\": 200,\n                    \"base_fee\": 20,\n                },\n            },\n            {\n                \"name\": \"Blob Spammer (Kurtosis Package)\",\n                \"description\": \"3 type-4 blob transactions per slot with 1-2 sidecars each, gas/blobgas limit 20 gwei\",\n                \"scenario\": \"blob-combined\",\n                \"config\": {\n                    \"throughput\": 6,\n                    \"sidecars\": 2,\n                    \"max_pending\": 6,\n                    \"max_wallets\": 20,\n                    \"base_fee\": 20,\n                    \"blob_fee\": 20,\n                },\n            },\n        ],\n    }\n\n\ndef get_default_slashoor_params():\n    return {\n        \"image\": constants.DEFAULT_SLASHOOR_IMAGE,\n        \"min_cpu\": 100,\n        \"max_cpu\": 1000,\n        \"min_mem\": 128,\n        \"max_mem\": 512,\n        \"extra_args\": [],\n        \"log_level\": \"info\",\n        \"beacon_timeout\": \"30s\",\n        \"max_epochs_to_keep\": 54000,\n        \"detector_enabled\": True,\n        \"proposer_enabled\": True,\n        \"submitter_enabled\": True,\n        \"submitter_dry_run\": False,\n        \"dora_enabled\": True,\n        \"dora_url\": \"\",\n        \"dora_scan_on_startup\": True,\n        \"backfill_slots\": 64,\n    }\n\n\ndef get_default_custom_flood_params():\n    # this is a simple script that increases the balance of the coinbase address at a cadence\n    return {\"interval_between_transactions\": 1}\n\n\ndef get_default_mempool_bridge_params():\n    return {\n        \"image\": \"ethpandaops/mempool-bridge:latest\",\n        \"source_enodes\": [],\n        \"mode\": \"p2p\",\n        \"log_level\": \"\",\n        \"send_concurrency\": 10,\n        \"polling_interval\": \"10s\",\n        \"retry_interval\": \"30s\",\n    }\n\n\ndef get_default_bootnodoor_params():\n    return {\n        \"image\": constants.DEFAULT_BOOTNODOOR_IMAGE,\n        \"min_cpu\": 100,\n        \"max_cpu\": 1000,\n        \"min_mem\": 128,\n        \"max_mem\": 512,\n        \"extra_args\": [],\n    }\n\n\ndef get_default_zkboost_params():\n    return {\n        \"image\": constants.DEFAULT_ZKBOOST_IMAGE,\n        \"instances\": [{\"name\": \"zkboost\", \"el_participant_index\": 0}],\n        \"zkvms\": [],\n        \"env\": {},\n    }\n\n\ndef get_default_buildoor_params():\n    return {\n        \"image\": constants.DEFAULT_BUILDOOR_IMAGE,\n        \"extra_args\": [],\n        \"builder_api\": True,\n        \"epbs_builder\": True,\n    }\n\n\ndef get_port_publisher_params(parameter_type, input_args=None):\n    port_publisher_parameters = {\n        \"nat_exit_ip\": \"KURTOSIS_IP_ADDR_PLACEHOLDER\",\n        \"el\": {\n            \"enabled\": False,\n            \"public_port_start\": 32000,\n            \"nat_exit_ip\": \"KURTOSIS_IP_ADDR_PLACEHOLDER\",\n        },\n        \"cl\": {\n            \"enabled\": False,\n            \"public_port_start\": 33000,\n            \"nat_exit_ip\": \"KURTOSIS_IP_ADDR_PLACEHOLDER\",\n        },\n        \"vc\": {\n            \"enabled\": False,\n            \"public_port_start\": 34000,\n            \"nat_exit_ip\": \"KURTOSIS_IP_ADDR_PLACEHOLDER\",\n        },\n        \"remote_signer\": {\n            \"enabled\": False,\n            \"public_port_start\": 35000,\n            \"nat_exit_ip\": \"KURTOSIS_IP_ADDR_PLACEHOLDER\",\n        },\n        \"additional_services\": {\n            \"enabled\": False,\n            \"public_port_start\": 36000,\n            \"nat_exit_ip\": \"KURTOSIS_IP_ADDR_PLACEHOLDER\",\n        },\n        \"mev\": {\n            \"enabled\": False,\n            \"public_port_start\": 37000,\n            \"nat_exit_ip\": \"KURTOSIS_IP_ADDR_PLACEHOLDER\",\n        },\n        \"other\": {\n            \"enabled\": False,\n            \"public_port_start\": 38000,\n            \"nat_exit_ip\": \"KURTOSIS_IP_ADDR_PLACEHOLDER\",\n        },\n    }\n    if parameter_type == \"default\":\n        return port_publisher_parameters\n    else:\n        for setting in input_args[\"port_publisher\"]:\n            if setting == \"nat_exit_ip\":\n                # Handle global nat_exit_ip setting\n                nat_exit_ip_value = input_args[\"port_publisher\"][setting]\n                port_publisher_parameters[setting] = nat_exit_ip_value\n            else:\n                # Handle service group settings\n                for sub_setting in input_args[\"port_publisher\"][setting]:\n                    sub_setting_value = input_args[\"port_publisher\"][setting][\n                        sub_setting\n                    ]\n                    port_publisher_parameters[setting][sub_setting] = sub_setting_value\n        return port_publisher_parameters\n\n\ndef enrich_disable_peer_scoring(parsed_arguments_dict):\n    for index, participant in enumerate(parsed_arguments_dict[\"participants\"]):\n        if participant[\"cl_type\"] == \"lighthouse\":\n            participant[\"cl_extra_params\"].append(\"--disable-peer-scoring\")\n        if participant[\"cl_type\"] == \"prysm\":\n            participant[\"cl_extra_params\"].append(\"--disable-peer-scorer\")\n        if participant[\"cl_type\"] == \"teku\":\n            participant[\"cl_extra_params\"].append(\"--Xp2p-gossip-scoring-enabled\")\n        if participant[\"cl_type\"] == \"lodestar\":\n            participant[\"cl_extra_params\"].append(\"--disablePeerScoring\")\n        if participant[\"cl_type\"] == \"grandine\":\n            participant[\"cl_extra_params\"].append(\"--disable-peer-scoring\")\n    return parsed_arguments_dict\n\n\n# TODO perhaps clean this up into a map\ndef enrich_mev_extra_params(parsed_arguments_dict, mev_prefix, mev_port, mev_type):\n    for index, participant in enumerate(parsed_arguments_dict[\"participants\"]):\n        index_str = shared_utils.zfill_custom(\n            index + 1, len(str(len(parsed_arguments_dict[\"participants\"])))\n        )\n\n        if mev_type == constants.COMMIT_BOOST_MEV_TYPE:\n            prefix = constants.COMMIT_BOOST_SERVICE_NAME_PREFIX\n        else:\n            prefix = constants.MEV_BOOST_SERVICE_NAME_PREFIX\n\n        mev_url = \"http://{0}-{1}-{2}-{3}:{4}\".format(\n            prefix,\n            index_str,\n            participant[\"cl_type\"],\n            participant[\"el_type\"],\n            mev_port,\n        )\n\n        if participant[\"cl_type\"] == \"lighthouse\":\n            participant[\"cl_extra_params\"].append(\"--builder={0}\".format(mev_url))\n        if participant[\"vc_type\"] == \"lighthouse\":\n            if (\n                parsed_arguments_dict[\"network_params\"][\"gas_limit\"] == 0\n            ):  # if the gas limit is set we already enable builder-proposals\n                participant[\"vc_extra_params\"].append(\"--builder-proposals\")\n        if participant[\"cl_type\"] == \"lodestar\":\n            participant[\"cl_extra_params\"].append(\"--builder\")\n            participant[\"cl_extra_params\"].append(\"--builder.urls={0}\".format(mev_url))\n        if participant[\"vc_type\"] == \"lodestar\":\n            participant[\"vc_extra_params\"].append(\"--builder\")\n        if participant[\"cl_type\"] == \"nimbus\":\n            participant[\"cl_extra_params\"].append(\"--payload-builder=true\")\n            participant[\"cl_extra_params\"].append(\n                \"--payload-builder-url={0}\".format(mev_url)\n            )\n        if participant[\"vc_type\"] == \"nimbus\":\n            participant[\"vc_extra_params\"].append(\"--payload-builder=true\")\n        if participant[\"cl_type\"] == \"teku\":\n            participant[\"cl_extra_params\"].append(\n                \"--builder-endpoint={0}\".format(mev_url)\n            )\n            participant[\"cl_extra_params\"].append(\n                \"--validators-builder-registration-default-enabled=true\"\n            )\n        if participant[\"vc_type\"] == \"teku\":\n            participant[\"vc_extra_params\"].append(\n                \"--validators-builder-registration-default-enabled=true\"\n            )\n        if participant[\"cl_type\"] == \"prysm\":\n            participant[\"cl_extra_params\"].append(\n                \"--http-mev-relay={0}\".format(mev_url)\n            )\n        if participant[\"vc_type\"] == \"prysm\":\n            participant[\"vc_extra_params\"].append(\"--enable-builder\")\n        if participant[\"cl_type\"] == \"grandine\":\n            participant[\"cl_extra_params\"].append(\"--builder-url={0}\".format(mev_url))\n\n        if participant[\"vc_type\"] == \"vero\":\n            participant[\"vc_extra_params\"].append(\"--use-external-builder\")\n\n    num_participants = len(parsed_arguments_dict[\"participants\"])\n    index_str = shared_utils.zfill_custom(\n        num_participants + 1, len(str(num_participants + 1))\n    )\n    if (\n        mev_type == constants.FLASHBOTS_MEV_TYPE\n        or mev_type == constants.COMMIT_BOOST_MEV_TYPE\n        or mev_type == constants.HELIX_MEV_TYPE\n    ):\n        mev_participant = default_participant()\n        mev_participant[\"el_type\"] = \"reth-builder\"\n        mev_participant.update(\n            {\n                \"el_image\": parsed_arguments_dict[\"mev_params\"][\"mev_builder_image\"],\n                \"cl_image\": parsed_arguments_dict[\"mev_params\"][\"mev_builder_cl_image\"],\n                \"cl_log_level\": parsed_arguments_dict[\"global_log_level\"],\n                \"cl_extra_params\": [\n                    \"--always-prepare-payload\",\n                    \"--prepare-payload-lookahead\",\n                    \"8000\",\n                    \"--disable-peer-scoring\",\n                    \"--supernode\",\n                ]\n                + parsed_arguments_dict[\"mev_params\"][\"mev_builder_cl_extra_params\"],\n                \"el_extra_params\": parsed_arguments_dict[\"mev_params\"][\n                    \"mev_builder_extra_args\"\n                ],\n                \"validator_count\": 0,\n                \"prometheus_config\": parsed_arguments_dict[\"mev_params\"][\n                    \"mev_builder_prometheus_config\"\n                ],\n            }\n        )\n\n        parsed_arguments_dict[\"participants\"].append(mev_participant)\n\n    if mev_type == constants.MEV_RS_MEV_TYPE:\n        mev_participant = default_participant()\n        mev_participant[\"el_type\"] = \"reth-builder\"\n        mev_participant.update(\n            {\n                \"el_image\": parsed_arguments_dict[\"mev_params\"][\"mev_builder_image\"],\n                \"cl_image\": parsed_arguments_dict[\"mev_params\"][\"mev_builder_cl_image\"],\n                \"cl_log_level\": parsed_arguments_dict[\"global_log_level\"],\n                \"cl_extra_params\": [\n                    \"--always-prepare-payload\",\n                    \"--prepare-payload-lookahead\",\n                    \"8000\",\n                    \"--disable-peer-scoring\",\n                ]\n                + parsed_arguments_dict[\"mev_params\"][\"mev_builder_cl_extra_params\"],\n                \"el_extra_params\": parsed_arguments_dict[\"mev_params\"][\n                    \"mev_builder_extra_args\"\n                ],\n                \"validator_count\": 0,\n            }\n        )\n        parsed_arguments_dict[\"participants\"].append(mev_participant)\n    if mev_type == constants.MOCK_MEV_TYPE:\n        parsed_arguments_dict[\"mev_params\"][\"mock_mev_image\"] = parsed_arguments_dict[\n            \"mev_params\"\n        ][\"mock_mev_image\"]\n    return parsed_arguments_dict\n\n\ndef deep_copy_participant(participant):\n    part = {}\n    for k, v in participant.items():\n        if type(v) == type([]):\n            part[k] = list(v)\n        else:\n            part[k] = v\n    return part\n\n\ndef get_public_ip(plan, global_tolerations=[], global_node_selectors={}):\n    response = plan.run_sh(\n        name=\"get-public-ip\",\n        description=\"Get the public IP address of the current machine\",\n        run=\"curl -s https://ident.me\",\n        tolerations=shared_utils.get_tolerations(global_tolerations=global_tolerations),\n        node_selectors=global_node_selectors,\n    )\n    return response.output\n\n\ndef docker_cache_image_override(plan, result):\n    plan.print(\"Docker cache is enabled, overriding image urls\")\n    participant_overridable_image = [\n        \"el_image\",\n        \"cl_image\",\n        \"vc_image\",\n        \"remote_signer_image\",\n        \"blobber_image\",\n    ]\n    tooling_overridable_image = [\n        \"dora_params.image\",\n        \"assertoor_params.image\",\n        \"mev_params.mev_relay_image\",\n        \"mev_params.mev_builder_image\",\n        \"mev_params.mev_builder_cl_image\",\n        \"mev_params.mev_boost_image\",\n        \"mev_params.mock_mev_image\",\n        \"xatu_sentry_params.xatu_sentry_image\",\n        \"tx_fuzz_params.image\",\n        \"rakoon_params.image\",\n        \"prometheus_params.image\",\n        \"grafana_params.image\",\n        \"tempo_params.image\",\n        \"spamoor_params.image\",\n        \"ethereum_genesis_generator_params.image\",\n    ]\n\n    if result[\"docker_cache_params\"][\"url\"] == \"\":\n        fail(\n            \"docker_cache_params.url is empty or spaces, please provide a valid docker cache url, or disable the docker cache\"\n        )\n    for index, participant in enumerate(result[\"participants\"]):\n        for images in participant_overridable_image:\n            if result[\"docker_cache_params\"][\"url\"] in participant[images]:\n                break\n            elif constants.CONTAINER_REGISTRY.ghcr in participant[images]:\n                participant[images] = (\n                    result[\"docker_cache_params\"][\"url\"]\n                    + result[\"docker_cache_params\"][\"github_prefix\"]\n                    + \"/\".join(participant[images].split(\"/\")[1:])\n                )\n            elif constants.CONTAINER_REGISTRY.gcr in participant[images]:\n                participant[images] = (\n                    result[\"docker_cache_params\"][\"url\"]\n                    + result[\"docker_cache_params\"][\"google_prefix\"]\n                    + \"/\".join(participant[images].split(\"/\")[1:])\n                )\n            elif participant[images].startswith(\"ethpandaops/\"):\n                # Handle ethpandaops images (including devnet-modified ones)\n                participant[images] = (\n                    result[\"docker_cache_params\"][\"url\"]\n                    + result[\"docker_cache_params\"][\"dockerhub_prefix\"]\n                    + participant[images]\n                )\n            elif constants.CONTAINER_REGISTRY.dockerhub in participant[images]:\n                participant[images] = (\n                    result[\"docker_cache_params\"][\"url\"]\n                    + result[\"docker_cache_params\"][\"dockerhub_prefix\"]\n                    + participant[images]\n                )\n            else:\n                plan.print(\n                    \"Using local client image instead of docker cache for {0} for participant {1}\".format(\n                        images, index + 1\n                    )\n                )\n\n    for tooling_image_key in tooling_overridable_image:\n        image_parts = tooling_image_key.split(\".\")\n        if (\n            result[image_parts[0]][image_parts[1]] != None\n            and result[\"docker_cache_params\"][\"url\"]\n            in result[image_parts[0]][image_parts[1]]\n        ):\n            break\n        elif (\n            result[image_parts[0]][image_parts[1]] != None\n            and constants.CONTAINER_REGISTRY.ghcr\n            in result[image_parts[0]][image_parts[1]]\n        ):\n            result[image_parts[0]][image_parts[1]] = (\n                result[\"docker_cache_params\"][\"url\"]\n                + result[\"docker_cache_params\"][\"github_prefix\"]\n                + \"/\".join(result[image_parts[0]][image_parts[1]].split(\"/\")[1:])\n            )\n        elif (\n            result[image_parts[0]][image_parts[1]] != None\n            and constants.CONTAINER_REGISTRY.gcr\n            in result[image_parts[0]][image_parts[1]]\n        ):\n            result[image_parts[0]][image_parts[1]] = (\n                result[\"docker_cache_params\"][\"url\"]\n                + result[\"docker_cache_params\"][\"google_prefix\"]\n                + \"/\".join(result[image_parts[0]][image_parts[1]].split(\"/\")[1:])\n            )\n        elif (\n            result[image_parts[0]][image_parts[1]] != None\n            and constants.CONTAINER_REGISTRY.dockerhub\n            in result[image_parts[0]][image_parts[1]]\n        ):\n            result[image_parts[0]][image_parts[1]] = (\n                result[\"docker_cache_params\"][\"url\"]\n                + result[\"docker_cache_params\"][\"dockerhub_prefix\"]\n                + result[image_parts[0]][image_parts[1]]\n            )\n        else:\n            plan.print(\n                \"Using local tooling image instead of docker cache for {0}\".format(\n                    tooling_image_key\n                )\n            )\n\n\ndef get_default_ethereum_genesis_generator_params():\n    return {\n        \"image\": constants.DEFAULT_ETHEREUM_GENESIS_GENERATOR_IMAGE,\n        \"extra_env\": {},\n    }\n\n\ndef get_devnet_image_tag(network_name, original_image):\n    if \"devnet\" not in network_name:\n        return original_image\n\n    # For devnet networks, convert all client images to ethpandaops\n    if \"/\" in original_image:\n        # Extract just the image name (everything after the last /)\n        image_name_with_tag = original_image.split(\"/\")[-1]\n        if \":\" in image_name_with_tag:\n            image_name = image_name_with_tag.split(\":\")[0]\n        else:\n            image_name = image_name_with_tag\n\n        # Special case: ethereum/client-go should become ethpandaops/geth\n        if image_name == \"client-go\":\n            image_name = \"geth\"\n        # Special case: gcr.io/offchainlabs/prysm/beacon-chain should become ethpandaops/prysm-beacon-chain\n        elif image_name == \"beacon-chain\" and \"prysm\" in original_image:\n            image_name = \"prysm-beacon-chain\"\n        # Special case: gcr.io/offchainlabs/prysm/validator should become ethpandaops/prysm-validator\n        elif image_name == \"validator\" and \"prysm\" in original_image:\n            image_name = \"prysm-validator\"\n\n        return \"ethpandaops/{0}:{1}\".format(image_name, network_name)\n    else:\n        # Handle edge case where there's no registry prefix\n        if \":\" in original_image:\n            image_name = original_image.split(\":\")[0]\n        else:\n            image_name = original_image\n        return \"ethpandaops/{0}:{1}\".format(image_name, network_name)\n\n\nDEVNET_EXCLUDED_CLIENTS = {\n    \"teku\": \"ethpandaops/teku:master\",\n    \"besu\": \"ethpandaops/besu:main\",\n}\n\n\ndef get_devnet_modified_images(network_name, default_images):\n    if \"devnet\" not in network_name:\n        return default_images\n\n    modified_images = {}\n    for client_type, image in default_images.items():\n        if client_type in DEVNET_EXCLUDED_CLIENTS:\n            modified_images[client_type] = DEVNET_EXCLUDED_CLIENTS[client_type]\n        else:\n            modified_images[client_type] = get_devnet_image_tag(network_name, image)\n\n    return modified_images\n"
  },
  {
    "path": "src/package_io/sanity_check.star",
    "content": "PARTICIPANT_CATEGORIES = {\n    \"participants\": [\n        \"el_type\",\n        \"el_image\",\n        \"el_binary_path\",\n        \"el_log_level\",\n        \"el_storage_type\",\n        \"el_extra_env_vars\",\n        \"el_extra_labels\",\n        \"el_extra_params\",\n        \"el_extra_mounts\",\n        \"el_devices\",\n        \"el_tolerations\",\n        \"el_volume_size\",\n        \"el_min_cpu\",\n        \"el_max_cpu\",\n        \"el_min_mem\",\n        \"el_max_mem\",\n        \"el_force_restart\",\n        \"cl_type\",\n        \"cl_image\",\n        \"cl_binary_path\",\n        \"cl_log_level\",\n        \"cl_extra_env_vars\",\n        \"cl_extra_labels\",\n        \"cl_extra_params\",\n        \"cl_extra_mounts\",\n        \"cl_devices\",\n        \"cl_tolerations\",\n        \"cl_volume_size\",\n        \"cl_min_cpu\",\n        \"cl_max_cpu\",\n        \"cl_min_mem\",\n        \"cl_max_mem\",\n        \"cl_force_restart\",\n        \"supernode\",\n        \"use_separate_vc\",\n        \"vc_type\",\n        \"vc_image\",\n        \"vc_binary_path\",\n        \"vc_log_level\",\n        \"vc_extra_env_vars\",\n        \"vc_extra_labels\",\n        \"vc_extra_params\",\n        \"vc_extra_mounts\",\n        \"vc_devices\",\n        \"vc_tolerations\",\n        \"vc_min_cpu\",\n        \"vc_max_cpu\",\n        \"vc_min_mem\",\n        \"vc_max_mem\",\n        \"vc_force_restart\",\n        \"validator_count\",\n        \"use_remote_signer\",\n        \"remote_signer_type\",\n        \"remote_signer_image\",\n        \"remote_signer_extra_env_vars\",\n        \"remote_signer_extra_labels\",\n        \"remote_signer_extra_params\",\n        \"remote_signer_tolerations\",\n        \"remote_signer_min_cpu\",\n        \"remote_signer_max_cpu\",\n        \"remote_signer_min_mem\",\n        \"remote_signer_max_mem\",\n        \"node_selectors\",\n        \"tolerations\",\n        \"count\",\n        \"snooper_enabled\",\n        \"ethereum_metrics_exporter_enabled\",\n        \"xatu_sentry_enabled\",\n        \"prometheus_config\",\n        \"blobber_enabled\",\n        \"blobber_extra_params\",\n        \"blobber_image\",\n        \"builder_network_params\",\n        \"keymanager_enabled\",\n        \"vc_beacon_node_indices\",\n        \"checkpoint_sync_enabled\",\n        \"skip_start\",\n    ],\n}\n\nPARTICIPANT_MATRIX_PARAMS = {\n    \"participants_matrix\": {\n        \"el\": [\n            \"el_type\",\n            \"el_image\",\n            \"el_binary_path\",\n            \"el_log_level\",\n            \"el_storage_type\",\n            \"el_extra_env_vars\",\n            \"el_extra_labels\",\n            \"el_extra_params\",\n            \"el_extra_mounts\",\n            \"el_devices\",\n            \"el_tolerations\",\n            \"el_volume_size\",\n            \"el_min_cpu\",\n            \"el_max_cpu\",\n            \"el_min_mem\",\n            \"el_max_mem\",\n            \"el_force_restart\",\n        ],\n        \"cl\": [\n            \"cl_type\",\n            \"cl_image\",\n            \"cl_binary_path\",\n            \"cl_log_level\",\n            \"cl_extra_env_vars\",\n            \"cl_extra_labels\",\n            \"cl_extra_params\",\n            \"cl_extra_mounts\",\n            \"cl_devices\",\n            \"cl_tolerations\",\n            \"cl_volume_size\",\n            \"cl_min_cpu\",\n            \"cl_max_cpu\",\n            \"cl_min_mem\",\n            \"cl_max_mem\",\n            \"use_separate_vc\",\n            \"vc_type\",\n            \"vc_image\",\n            \"vc_binary_path\",\n            \"vc_log_level\",\n            \"vc_extra_env_vars\",\n            \"vc_extra_labels\",\n            \"vc_extra_params\",\n            \"vc_extra_mounts\",\n            \"vc_tolerations\",\n            \"vc_min_cpu\",\n            \"vc_max_cpu\",\n            \"vc_min_mem\",\n            \"vc_max_mem\",\n            \"vc_force_restart\",\n            \"validator_count\",\n            \"count\",\n            \"supernode\",\n            \"vc_beacon_node_indices\",\n            \"checkpoint_sync_enabled\",\n            \"cl_force_restart\",\n        ],\n        \"vc\": [\n            \"vc_type\",\n            \"vc_image\",\n            \"vc_binary_path\",\n            \"vc_log_level\",\n            \"vc_extra_env_vars\",\n            \"vc_extra_labels\",\n            \"vc_extra_params\",\n            \"vc_extra_mounts\",\n            \"vc_devices\",\n            \"vc_tolerations\",\n            \"vc_min_cpu\",\n            \"vc_max_cpu\",\n            \"vc_min_mem\",\n            \"vc_max_mem\",\n            \"vc_force_restart\",\n            \"validator_count\",\n        ],\n        \"remote_signer\": [\n            \"remote_signer_type\",\n            \"remote_signer_image\",\n            \"remote_signer_extra_env_vars\",\n            \"remote_signer_extra_labels\",\n            \"remote_signer_extra_params\",\n            \"remote_signer_tolerations\",\n            \"remote_signer_min_cpu\",\n            \"remote_signer_max_cpu\",\n            \"remote_signer_min_mem\",\n            \"remote_signer_max_mem\",\n        ],\n        \"count\": [],\n    },\n}\n\nPORT_PUBLISHER_PARAMS = {\n    \"port_publisher\": {\n        \"el\": [\n            \"enabled\",\n            \"public_port_start\",\n            \"nat_exit_ip\",\n        ],\n        \"cl\": [\n            \"enabled\",\n            \"public_port_start\",\n            \"nat_exit_ip\",\n        ],\n        \"vc\": [\n            \"enabled\",\n            \"public_port_start\",\n            \"nat_exit_ip\",\n        ],\n        \"remote_signer\": [\n            \"enabled\",\n            \"public_port_start\",\n            \"nat_exit_ip\",\n        ],\n        \"additional_services\": [\n            \"enabled\",\n            \"public_port_start\",\n            \"nat_exit_ip\",\n        ],\n        \"mev\": [\n            \"enabled\",\n            \"public_port_start\",\n            \"nat_exit_ip\",\n        ],\n        \"other\": [\n            \"enabled\",\n            \"public_port_start\",\n            \"nat_exit_ip\",\n        ],\n    },\n}\n\nSUBCATEGORY_PARAMS = {\n    \"network_params\": [\n        \"network\",\n        \"network_id\",\n        \"deposit_contract_address\",\n        \"seconds_per_slot\",\n        \"slot_duration_ms\",\n        \"num_validator_keys_per_node\",\n        \"preregistered_validator_keys_mnemonic\",\n        \"preregistered_validator_count\",\n        \"genesis_delay\",\n        \"genesis_time\",\n        \"genesis_gaslimit\",\n        \"max_per_epoch_activation_churn_limit\",\n        \"churn_limit_quotient\",\n        \"confirmation_byzantine_threshold\",\n        \"ejection_balance\",\n        \"eth1_follow_distance\",\n        \"min_validator_withdrawability_delay\",\n        \"min_builder_withdrawability_delay\",\n        \"shard_committee_period\",\n        \"attestation_due_bps_gloas\",\n        \"aggregate_due_bps_gloas\",\n        \"sync_message_due_bps_gloas\",\n        \"contribution_due_bps_gloas\",\n        \"payload_attestation_due_bps\",\n        \"view_freeze_cutoff_bps\",\n        \"inclusion_list_submission_due_bps\",\n        \"proposer_inclusion_list_cutoff_bps\",\n        \"altair_fork_epoch\",\n        \"bellatrix_fork_epoch\",\n        \"capella_fork_epoch\",\n        \"deneb_fork_epoch\",\n        \"electra_fork_epoch\",\n        \"fulu_fork_epoch\",\n        \"gloas_fork_epoch\",\n        \"heze_fork_epoch\",\n        \"network_sync_base_url\",\n        \"force_snapshot_sync\",\n        \"shadowfork_block_height\",\n        \"samples_per_slot\",\n        \"custody_requirement\",\n        \"max_blobs_per_block_electra\",\n        \"target_blobs_per_block_electra\",\n        \"max_request_blocks_deneb\",\n        \"base_fee_update_fraction_electra\",\n        \"preset\",\n        \"additional_preloaded_contracts\",\n        \"additional_mnemonics\",\n        \"devnet_repo\",\n        \"prefunded_accounts\",\n        \"max_payload_size\",\n        \"perfect_peerdas_enabled\",\n        \"gas_limit\",\n        \"bpo_1_epoch\",\n        \"bpo_1_max_blobs\",\n        \"bpo_1_target_blobs\",\n        \"bpo_1_base_fee_update_fraction\",\n        \"bpo_2_epoch\",\n        \"bpo_2_max_blobs\",\n        \"bpo_2_target_blobs\",\n        \"bpo_2_base_fee_update_fraction\",\n        \"bpo_3_epoch\",\n        \"bpo_3_max_blobs\",\n        \"bpo_3_target_blobs\",\n        \"bpo_3_base_fee_update_fraction\",\n        \"bpo_4_epoch\",\n        \"bpo_4_max_blobs\",\n        \"bpo_4_target_blobs\",\n        \"bpo_4_base_fee_update_fraction\",\n        \"bpo_5_epoch\",\n        \"bpo_5_max_blobs\",\n        \"bpo_5_target_blobs\",\n        \"bpo_5_base_fee_update_fraction\",\n        \"withdrawal_type\",\n        \"withdrawal_address\",\n        \"validator_balance\",\n        \"min_epochs_for_data_column_sidecars_requests\",\n        \"builder_count\",\n        \"builder_balance\",\n    ],\n    \"blockscout_params\": [\"image\", \"verif_image\", \"frontend_image\", \"env\"],\n    \"dora_params\": [\n        \"image\",\n        \"env\",\n    ],\n    \"checkpointz_params\": [\n        \"image\",\n    ],\n    \"docker_cache_params\": [\n        \"enabled\",\n        \"url\",\n        \"dockerhub_prefix\",\n        \"github_prefix\",\n        \"google_prefix\",\n    ],\n    \"tx_fuzz_params\": [\n        \"image\",\n        \"tx_fuzz_extra_args\",\n    ],\n    \"rakoon_params\": [\n        \"image\",\n        \"tx_type\",\n        \"workers\",\n        \"batch_size\",\n        \"seed\",\n        \"fuzzing\",\n        \"poll_interval\",\n        \"extra_args\",\n    ],\n    \"prometheus_params\": [\n        \"min_cpu\",\n        \"max_cpu\",\n        \"min_mem\",\n        \"max_mem\",\n        \"storage_tsdb_retention_time\",\n        \"storage_tsdb_retention_size\",\n        \"image\",\n    ],\n    \"grafana_params\": [\n        \"additional_dashboards\",\n        \"min_cpu\",\n        \"max_cpu\",\n        \"min_mem\",\n        \"max_mem\",\n        \"image\",\n    ],\n    \"tempo_params\": [\n        \"min_cpu\",\n        \"max_cpu\",\n        \"min_mem\",\n        \"max_mem\",\n        \"image\",\n    ],\n    \"assertoor_params\": [\n        \"image\",\n        \"run_stability_check\",\n        \"run_block_proposal_check\",\n        \"run_transaction_test\",\n        \"run_blob_transaction_test\",\n        \"run_opcodes_transaction_test\",\n        \"run_lifecycle_test\",\n        \"tests\",\n    ],\n    \"mev_params\": [\n        \"mev_relay_image\",\n        \"mev_builder_image\",\n        \"mev_builder_cl_image\",\n        \"mev_builder_cl_extra_params\",\n        \"mev_builder_subsidy\",\n        \"mev_boost_image\",\n        \"mev_boost_args\",\n        \"mev_relay_api_extra_args\",\n        \"mev_relay_api_extra_env_vars\",\n        \"mev_relay_housekeeper_extra_args\",\n        \"mev_relay_housekeeper_extra_env_vars\",\n        \"mev_relay_website_extra_args\",\n        \"mev_relay_website_extra_env_vars\",\n        \"mev_builder_extra_args\",\n        \"mev_builder_prometheus_config\",\n        \"custom_flood_params\",\n        \"mock_mev_image\",\n        \"launch_adminer\",\n        \"run_multiple_relays\",\n        \"helix_relay_image\",\n        \"commit_boost_config\",\n    ],\n    \"xatu_sentry_params\": [\n        \"xatu_sentry_image\",\n        \"xatu_server_addr\",\n        \"xatu_server_tls\",\n        \"xatu_server_headers\",\n        \"beacon_subscriptions\",\n    ],\n    \"snooper_params\": [\n        \"enabled\",\n        \"image\",\n        \"extra_args\",\n        \"extra_env_vars\",\n    ],\n    \"spamoor_params\": [\n        \"image\",\n        \"min_cpu\",\n        \"max_cpu\",\n        \"min_mem\",\n        \"max_mem\",\n        \"extra_args\",\n        \"spammers\",\n    ],\n    \"slashoor_params\": [\n        \"image\",\n        \"min_cpu\",\n        \"max_cpu\",\n        \"min_mem\",\n        \"max_mem\",\n        \"extra_args\",\n        \"log_level\",\n        \"beacon_timeout\",\n        \"max_epochs_to_keep\",\n        \"detector_enabled\",\n        \"proposer_enabled\",\n        \"submitter_enabled\",\n        \"submitter_dry_run\",\n        \"dora_enabled\",\n        \"dora_url\",\n        \"dora_scan_on_startup\",\n        \"backfill_slots\",\n    ],\n    \"mempool_bridge_params\": [\n        \"image\",\n        \"source_enodes\",\n        \"mode\",\n        \"log_level\",\n        \"send_concurrency\",\n        \"polling_interval\",\n        \"retry_interval\",\n    ],\n    \"ethereum_genesis_generator_params\": [\n        \"image\",\n        \"extra_env\",\n    ],\n    \"bootnodoor_params\": [\n        \"image\",\n        \"min_cpu\",\n        \"max_cpu\",\n        \"min_mem\",\n        \"max_mem\",\n        \"extra_args\",\n    ],\n    \"zkboost_params\": [\n        \"image\",\n        \"instances\",\n        \"zkvms\",\n        \"env\",\n    ],\n    \"buildoor_params\": [\n        \"image\",\n        \"extra_args\",\n        \"builder_api\",\n        \"epbs_builder\",\n    ],\n}\n\nADDITIONAL_SERVICES_PARAMS = [\n    \"bootnodoor\",\n    \"assertoor\",\n    \"broadcaster\",\n    \"tx_fuzz\",\n    \"custom_flood\",\n    \"forkmon\",\n    \"blockscout\",\n    \"dora\",\n    \"checkpointz\",\n    \"full_beaconchain_explorer\",\n    \"prometheus_grafana\",\n    \"prometheus\",\n    \"grafana\",\n    \"tempo\",\n    \"blobscan\",\n    \"dugtrio\",\n    \"blutgang\",\n    \"erpc\",\n    \"forky\",\n    \"apache\",\n    \"nginx\",\n    \"tracoor\",\n    \"mempool_bridge\",\n    \"rakoon\",\n    \"slashoor\",\n    \"spamoor\",\n    \"zkboost\",\n]\n\nADDITIONAL_CATEGORY_PARAMS = {\n    \"wait_for_finalization\": \"\",\n    \"global_log_level\": \"\",\n    \"snooper_enabled\": \"\",\n    \"ethereum_metrics_exporter_enabled\": \"\",\n    \"parallel_keystore_generation\": \"\",\n    \"disable_peer_scoring\": \"\",\n    \"persistent\": \"\",\n    \"mev_type\": \"\",\n    \"xatu_sentry_enabled\": \"\",\n    \"apache_port\": \"\",\n    \"nginx_port\": \"\",\n    \"global_tolerations\": \"\",\n    \"global_node_selectors\": \"\",\n    \"keymanager_enabled\": \"\",\n    \"checkpoint_sync_enabled\": \"\",\n    \"checkpoint_sync_url\": \"\",\n}\n\n\ndef deep_validate_params(plan, input_args, category, allowed_params):\n    if category in input_args:\n        for item in input_args[category]:\n            for param in item.keys():\n                if param not in allowed_params:\n                    fail(\n                        \"Invalid parameter {0} for {1}. Allowed fields: {2}\".format(\n                            param, category, allowed_params\n                        )\n                    )\n\n\ndef validate_params(plan, input_args, category, allowed_params):\n    if category in input_args:\n        for param in input_args[category].keys():\n            if param not in allowed_params:\n                fail(\n                    \"Invalid parameter {0} for {1}. Allowed fields: {2}\".format(\n                        param, category, allowed_params\n                    )\n                )\n\n\ndef validate_nested_params(\n    plan, input_args, category, nested_param_definition, special_keys=None\n):\n    if category not in input_args:\n        return\n\n    special_keys = special_keys or []\n    allowed_top_level_keys = list(nested_param_definition.keys()) + special_keys\n\n    # Validate top-level keys\n    for param in input_args[category].keys():\n        if param not in allowed_top_level_keys:\n            fail(\n                \"Invalid parameter {0} for {1}, allowed fields: {2}\".format(\n                    param, category, allowed_top_level_keys\n                )\n            )\n\n    # Validate nested parameters\n    for sub_param in input_args[category]:\n        if sub_param not in special_keys and sub_param in nested_param_definition:\n            validate_params(\n                plan,\n                input_args[category],\n                sub_param,\n                nested_param_definition[sub_param],\n            )\n\n\ndef sanity_check(plan, input_args):\n    # Checks participants\n    deep_validate_params(\n        plan, input_args, \"participants\", PARTICIPANT_CATEGORIES[\"participants\"]\n    )\n    # Checks participants_matrix (uses original logic for arrays of objects)\n    if \"participants_matrix\" in input_args:\n        for sub_matrix_participant in input_args[\"participants_matrix\"]:\n            if (\n                sub_matrix_participant\n                not in PARTICIPANT_MATRIX_PARAMS[\"participants_matrix\"]\n            ):\n                fail(\n                    \"Invalid parameter {0} for participants_matrix, allowed fields: {1}\".format(\n                        sub_matrix_participant,\n                        PARTICIPANT_MATRIX_PARAMS[\"participants_matrix\"].keys(),\n                    )\n                )\n            elif sub_matrix_participant == \"count\":\n                if type(input_args[\"participants_matrix\"][\"count\"]) != \"int\":\n                    fail(\"participants_matrix count must be an integer\")\n            else:\n                deep_validate_params(\n                    plan,\n                    input_args[\"participants_matrix\"],\n                    sub_matrix_participant,\n                    PARTICIPANT_MATRIX_PARAMS[\"participants_matrix\"][\n                        sub_matrix_participant\n                    ],\n                )\n\n    # Checks port_publisher (uses new generic validation for key-value mappings)\n    validate_nested_params(\n        plan,\n        input_args,\n        \"port_publisher\",\n        PORT_PUBLISHER_PARAMS[\"port_publisher\"],\n        [\"nat_exit_ip\"],\n    )\n\n    # Checks additional services\n    if \"additional_services\" in input_args:\n        for additional_services in input_args[\"additional_services\"]:\n            if additional_services not in ADDITIONAL_SERVICES_PARAMS:\n                fail(\n                    \"Invalid additional_services {0}, allowed fields: {1}\".format(\n                        additional_services, ADDITIONAL_SERVICES_PARAMS\n                    )\n                )\n\n    # Checks subcategories\n    for subcategories in SUBCATEGORY_PARAMS.keys():\n        validate_params(\n            plan, input_args, subcategories, SUBCATEGORY_PARAMS[subcategories]\n        )\n    # Checks everything else\n    for param in input_args.keys():\n        combined_root_params = (\n            PARTICIPANT_CATEGORIES.keys()\n            + PARTICIPANT_MATRIX_PARAMS.keys()\n            + PORT_PUBLISHER_PARAMS.keys()\n            + SUBCATEGORY_PARAMS.keys()\n            + ADDITIONAL_CATEGORY_PARAMS.keys()\n        )\n        combined_root_params.append(\"additional_services\")\n        combined_root_params.append(\"extra_files\")\n\n        if param not in combined_root_params:\n            fail(\n                \"Invalid parameter {0}, allowed fields {1}\".format(\n                    param, combined_root_params\n                )\n            )\n\n    # If everything passes, print a message\n    plan.print(\"Sanity check passed\")\n"
  },
  {
    "path": "src/participant.star",
    "content": "def new_participant(\n    el_type,\n    cl_type,\n    vc_type,\n    remote_signer_type,\n    el_context,\n    cl_context,\n    vc_context,\n    remote_signer_context,\n    snooper_el_engine_context,\n    snooper_beacon_context,\n    snooper_el_rpc_context,\n    ethereum_metrics_exporter_context,\n    xatu_sentry_context,\n):\n    return struct(\n        el_type=el_type,\n        cl_type=cl_type,\n        vc_type=vc_type,\n        remote_signer_type=remote_signer_type,\n        el_context=el_context,\n        cl_context=cl_context,\n        vc_context=vc_context,\n        remote_signer_context=remote_signer_context,\n        snooper_el_engine_context=snooper_el_engine_context,\n        snooper_beacon_context=snooper_beacon_context,\n        snooper_el_rpc_context=snooper_el_rpc_context,\n        ethereum_metrics_exporter_context=ethereum_metrics_exporter_context,\n        xatu_sentry_context=xatu_sentry_context,\n    )\n"
  },
  {
    "path": "src/participant_network.star",
    "content": "el_cl_genesis_data_generator = import_module(\n    \"./prelaunch_data_generator/el_cl_genesis/el_cl_genesis_generator.star\"\n)\n\ninput_parser = import_module(\"./package_io/input_parser.star\")\nshared_utils = import_module(\"./shared_utils/shared_utils.star\")\nstatic_files = import_module(\"./static_files/static_files.star\")\nconstants = import_module(\"./package_io/constants.star\")\n\nethereum_metrics_exporter = import_module(\n    \"./ethereum_metrics_exporter/ethereum_metrics_exporter_launcher.star\"\n)\n\nparticipant_module = import_module(\"./participant.star\")\n\nxatu_sentry = import_module(\"./xatu_sentry/xatu_sentry_launcher.star\")\nlaunch_ephemery = import_module(\"./network_launcher/ephemery.star\")\nlaunch_public_network = import_module(\"./network_launcher/public_network.star\")\nlaunch_devnet = import_module(\"./network_launcher/devnet.star\")\nlaunch_kurtosis = import_module(\"./network_launcher/kurtosis.star\")\nlaunch_shadowfork = import_module(\"./network_launcher/shadowfork.star\")\n\nel_client_launcher = import_module(\"./el/el_launcher.star\")\ncl_client_launcher = import_module(\"./cl/cl_launcher.star\")\nvc = import_module(\"./vc/vc_launcher.star\")\nvc_shared = import_module(\"./vc/shared.star\")\nvc_context_l = import_module(\"./vc/vc_context.star\")\nnode_metrics = import_module(\"./node_metrics_info.star\")\nremote_signer = import_module(\"./remote_signer/remote_signer_launcher.star\")\n\nbeacon_snooper = import_module(\"./snooper/snooper_beacon_launcher.star\")\nsnooper_el_launcher = import_module(\"./snooper/snooper_el_launcher.star\")\nblobber_launcher = import_module(\"./blobber/blobber_launcher.star\")\ncl_context_module = import_module(\"./cl/cl_context.star\")\nbootnodoor_launcher = import_module(\"./bootnodoor/bootnodoor_launcher.star\")\n\n\ndef launch_participant_network(\n    plan,\n    args_with_right_defaults,\n    network_params,\n    jwt_file,\n    keymanager_file,\n    persistent,\n    xatu_sentry_params,\n    global_tolerations,\n    global_node_selectors,\n    keymanager_enabled,\n    parallel_keystore_generation,\n    extra_files_artifacts,\n    tempo_otlp_grpc_url,\n    backend,\n):\n    network_id = network_params.network_id\n    num_participants = len(args_with_right_defaults.participants)\n    total_number_of_validator_keys = 0\n    latest_block = \"\"\n    global_other_index = 0\n    if (\n        network_params.network == constants.NETWORK_NAME.kurtosis\n        or constants.NETWORK_NAME.shadowfork in network_params.network\n    ):\n        if (\n            constants.NETWORK_NAME.shadowfork in network_params.network\n        ):  # shadowfork requires some preparation\n            latest_block, network_id = launch_shadowfork.shadowfork_prep(\n                plan,\n                network_params,\n                args_with_right_defaults.participants,\n                global_tolerations,\n                global_node_selectors,\n            )\n\n        # We are running a kurtosis or shadowfork network\n        (\n            total_number_of_validator_keys,\n            ethereum_genesis_generator_image,\n            final_genesis_timestamp,\n            validator_data,\n        ) = launch_kurtosis.launch(\n            plan, network_params, args_with_right_defaults, parallel_keystore_generation\n        )\n\n        el_cl_genesis_config_template = read_file(\n            static_files.EL_CL_GENESIS_GENERATION_CONFIG_TEMPLATE_FILEPATH\n        )\n\n        el_cl_genesis_additional_contracts_template = read_file(\n            static_files.EL_CL_GENESIS_ADDITIONAL_CONTRACTS_TEMPLATE_FILEPATH\n        )\n\n        el_cl_data = el_cl_genesis_data_generator.generate_el_cl_genesis_data(\n            plan,\n            ethereum_genesis_generator_image,\n            args_with_right_defaults.ethereum_genesis_generator_params,\n            el_cl_genesis_config_template,\n            el_cl_genesis_additional_contracts_template,\n            final_genesis_timestamp,\n            network_params,\n            total_number_of_validator_keys,\n            latest_block.files_artifacts[0] if latest_block != \"\" else \"\",\n            global_tolerations,\n            global_node_selectors,\n        )\n    elif network_params.network == constants.NETWORK_NAME.ephemery:\n        # We are running an ephemery network\n        (\n            el_cl_data,\n            final_genesis_timestamp,\n            network_id,\n            validator_data,\n        ) = launch_ephemery.launch(plan, global_tolerations, global_node_selectors)\n    elif (\n        network_params.network in constants.PUBLIC_NETWORKS\n        and network_params.network != constants.NETWORK_NAME.ephemery\n    ):\n        # We are running a public network\n        (\n            el_cl_data,\n            final_genesis_timestamp,\n            network_id,\n            validator_data,\n        ) = launch_public_network.launch(\n            plan,\n            args_with_right_defaults.participants,\n            network_params,\n            global_tolerations,\n            global_node_selectors,\n        )\n    else:\n        # We are running a devnet\n        (\n            el_cl_data,\n            final_genesis_timestamp,\n            network_id,\n            validator_data,\n        ) = launch_devnet.launch(\n            plan,\n            network_params.network,\n            network_params.devnet_repo,\n            global_tolerations,\n            global_node_selectors,\n        )\n\n    # Launch bootnodoor if configured\n    bootnodoor_enr = None\n    bootnodoor_enode = None\n    if \"bootnodoor\" in args_with_right_defaults.additional_services:\n        plan.print(\"Launching bootnodoor as bootnode service\")\n        args_with_right_defaults.additional_services.remove(\"bootnodoor\")\n        bootnodoor_enr, bootnodoor_enode = bootnodoor_launcher.launch_bootnodoor(\n            plan,\n            args_with_right_defaults.bootnodoor_params,\n            el_cl_data,\n            network_params,\n            global_node_selectors,\n            global_tolerations,\n            args_with_right_defaults.docker_cache_params,\n        )\n        plan.print(\"Bootnodoor launched with ENR: {0}\".format(bootnodoor_enr))\n        plan.print(\"Bootnodoor launched with ENODE: {0}\".format(bootnodoor_enode))\n\n    # Upload binary artifacts when both binary_path and force_restart are enabled\n    binary_artifacts = {}\n    for index, participant in enumerate(args_with_right_defaults.participants):\n        participant_binaries = {}\n        for bin_type, bin_path, force_restart in [\n            (\"el\", participant.el_binary_path, participant.el_force_restart),\n            (\"cl\", participant.cl_binary_path, participant.cl_force_restart),\n            (\"vc\", participant.vc_binary_path, participant.vc_force_restart),\n        ]:\n            if bin_path and force_restart:\n                participant_binaries[bin_type] = struct(\n                    artifact=plan.upload_files(\n                        src=\"../\" + bin_path,\n                        name=\"{0}-binary-{1}\".format(bin_type, index + 1),\n                    ),\n                    filename=bin_path.split(\"/\")[-1],\n                )\n        if participant_binaries:\n            binary_artifacts[index] = participant_binaries\n\n    # Launch all execution layer clients\n    all_el_contexts = el_client_launcher.launch(\n        plan,\n        network_params,\n        el_cl_data,\n        jwt_file,\n        args_with_right_defaults.participants,\n        args_with_right_defaults.global_log_level,\n        global_node_selectors,\n        global_tolerations,\n        persistent,\n        network_id,\n        num_participants,\n        args_with_right_defaults.port_publisher,\n        args_with_right_defaults.mev_type,\n        args_with_right_defaults.mev_params,\n        extra_files_artifacts,\n        bootnodoor_enode,\n        binary_artifacts,\n    )\n\n    # Launch all consensus layer clients\n    prysm_password_relative_filepath = (\n        validator_data.prysm_password_relative_filepath\n        if total_number_of_validator_keys > 0\n        else None\n    )\n    prysm_password_artifact_uuid = (\n        validator_data.prysm_password_artifact_uuid\n        if total_number_of_validator_keys > 0\n        else None\n    )\n\n    (\n        all_cl_contexts,\n        all_snooper_el_engine_contexts,\n        preregistered_validator_keys_for_nodes,\n        global_other_index,\n        blobber_configs_with_contexts,\n    ) = cl_client_launcher.launch(\n        plan,\n        network_params,\n        el_cl_data,\n        jwt_file,\n        keymanager_file,\n        args_with_right_defaults,\n        all_el_contexts,\n        global_node_selectors,\n        global_tolerations,\n        persistent,\n        tempo_otlp_grpc_url,\n        num_participants,\n        validator_data,\n        prysm_password_relative_filepath,\n        prysm_password_artifact_uuid,\n        global_other_index,\n        extra_files_artifacts,\n        backend,\n        bootnodoor_enr,\n        binary_artifacts,\n    )\n\n    # Stop beacon nodes for participants with skip_start enabled\n    for index, participant in enumerate(args_with_right_defaults.participants):\n        if participant.skip_start:\n            cl_context = all_cl_contexts[index]\n            plan.print(\n                \"Stopping beacon node {0} due to skip_start flag\".format(\n                    cl_context.beacon_service_name\n                )\n            )\n            plan.stop_service(cl_context.beacon_service_name)\n\n    # Launch all blobbers after all CLs are up\n    cl_context_to_blobber_url = {}\n    if len(blobber_configs_with_contexts) > 0:\n        plan.print(\"Launching blobbers for CL clients that have them enabled\")\n        for config in blobber_configs_with_contexts:\n            blobber = blobber_launcher.launch(\n                plan,\n                config.blobber_config.service_name,\n                config.blobber_config.node_keystore_files,\n                config.blobber_config.beacon_http_url,\n                config.participant,\n                config.blobber_config.node_selectors,\n                global_tolerations,\n            )\n\n            # Store the blobber URL mapping\n            blobber_http_url = \"http://{0}:{1}\".format(\n                blobber.dns_name, blobber.port_num\n            )\n            cl_context_to_blobber_url[\n                config.cl_context.beacon_service_name\n            ] = blobber_http_url\n\n    # Helper function to get cl_context with blobber URL if available\n    def get_cl_context_with_blobber_url(cl_context):\n        beacon_service_name = cl_context.beacon_service_name\n        effective_beacon_url = cl_context_to_blobber_url.get(\n            beacon_service_name, cl_context.beacon_http_url\n        )\n\n        if effective_beacon_url == cl_context.beacon_http_url:\n            # No blobber, return original context\n            return cl_context\n\n        # Create a new cl_context with the blobber URL\n        return cl_context_module.new_cl_context(\n            client_name=cl_context.client_name,\n            enr=cl_context.enr,\n            ip_addr=cl_context.ip_addr,\n            http_port=cl_context.http_port,\n            beacon_http_url=effective_beacon_url,\n            cl_nodes_metrics_info=cl_context.cl_nodes_metrics_info,\n            beacon_service_name=cl_context.beacon_service_name,\n            beacon_grpc_url=cl_context.beacon_grpc_url,\n            multiaddr=cl_context.multiaddr,\n            peer_id=cl_context.peer_id,\n            snooper_enabled=cl_context.snooper_enabled,\n            snooper_el_engine_context=cl_context.snooper_el_engine_context,\n            validator_keystore_files_artifact_uuid=cl_context.validator_keystore_files_artifact_uuid,\n            supernode=cl_context.supernode,\n        )\n\n    ethereum_metrics_exporter_context = None\n    all_ethereum_metrics_exporter_contexts = []\n    all_xatu_sentry_contexts = []\n    all_vc_contexts = []\n    all_remote_signer_contexts = []\n    all_snooper_beacon_contexts = []\n    all_snooper_el_rpc_contexts = []\n    # Some CL clients cannot run validator clients in the same process and need\n    # a separate validator client\n    _cls_that_need_separate_vc = [\n        constants.CL_TYPE.prysm,\n        constants.CL_TYPE.lodestar,\n        constants.CL_TYPE.lighthouse,\n    ]\n\n    current_vc_index = 0\n    if not args_with_right_defaults.participants:\n        fail(\"No participants configured\")\n\n    vc_service_configs = {}\n    vc_service_info = {}\n    for index, participant in enumerate(args_with_right_defaults.participants):\n        el_type = participant.el_type\n        cl_type = participant.cl_type\n        vc_type = participant.vc_type\n        remote_signer_type = participant.remote_signer_type\n        index_str = shared_utils.zfill_custom(\n            index + 1, len(str(len(args_with_right_defaults.participants)))\n        )\n        el_context = all_el_contexts[index] if index < len(all_el_contexts) else None\n        cl_context = all_cl_contexts[index] if index < len(all_cl_contexts) else None\n\n        node_selectors = input_parser.get_client_node_selectors(\n            participant.node_selectors,\n            global_node_selectors,\n        )\n        if participant.ethereum_metrics_exporter_enabled:\n            pair_name = \"{0}-{1}-{2}\".format(index_str, cl_type, el_type)\n\n            ethereum_metrics_exporter_service_name = (\n                \"ethereum-metrics-exporter-{0}\".format(pair_name)\n            )\n\n            ethereum_metrics_exporter_context = ethereum_metrics_exporter.launch(\n                plan,\n                pair_name,\n                ethereum_metrics_exporter_service_name,\n                el_context,\n                get_cl_context_with_blobber_url(cl_context),\n                node_selectors,\n                global_tolerations,\n                args_with_right_defaults.port_publisher,\n                global_other_index,\n                args_with_right_defaults.docker_cache_params,\n                persistent,\n            )\n            global_other_index += 1\n            plan.print(\n                \"Successfully added {0} ethereum metrics exporter participants\".format(\n                    ethereum_metrics_exporter_context\n                )\n            )\n\n            all_ethereum_metrics_exporter_contexts.append(\n                ethereum_metrics_exporter_context\n            )\n\n            xatu_sentry_context = None\n\n        if participant.xatu_sentry_enabled:\n            pair_name = \"{0}-{1}-{2}\".format(index_str, cl_type, el_type)\n\n            xatu_sentry_service_name = \"xatu-sentry-{0}\".format(pair_name)\n\n            xatu_sentry_context = xatu_sentry.launch(\n                plan,\n                xatu_sentry_service_name,\n                get_cl_context_with_blobber_url(cl_context),\n                xatu_sentry_params,\n                network_params,\n                pair_name,\n                node_selectors,\n                global_tolerations,\n            )\n            plan.print(\n                \"Successfully added {0} xatu sentry participants\".format(\n                    xatu_sentry_context\n                )\n            )\n\n            all_xatu_sentry_contexts.append(xatu_sentry_context)\n\n        # Create snooper RPC context for all participants if snooper is enabled\n        snooper_el_rpc_context = None\n        if participant.snooper_enabled:\n            snooper_service_name = \"snooper-rpc-{0}-{1}\".format(\n                index_str,\n                el_type,\n            )\n            snooper_el_rpc_context = snooper_el_launcher.launch_snooper(\n                plan,\n                snooper_service_name,\n                el_context,\n                node_selectors,\n                global_tolerations,\n                args_with_right_defaults.port_publisher,\n                global_other_index,\n                args_with_right_defaults.docker_cache_params,\n                args_with_right_defaults.snooper_params,\n            )\n            global_other_index += 1\n            plan.print(\n                \"Successfully added {0} snooper RPC participants\".format(\n                    snooper_el_rpc_context\n                )\n            )\n\n        all_snooper_el_rpc_contexts.append(snooper_el_rpc_context)\n        plan.print(\"Successfully added {0} CL participants\".format(num_participants))\n\n        plan.print(\"Start adding validators for participant #{0}\".format(index_str))\n        if participant.use_separate_vc == None:\n            # This should only be the case for the MEV participant,\n            # the regular participants default to False/True\n            all_vc_contexts.append(None)\n            all_remote_signer_contexts.append(None)\n            all_snooper_beacon_contexts.append(None)\n            continue\n\n        if cl_type in _cls_that_need_separate_vc and not participant.use_separate_vc:\n            fail(\"{0} needs a separate validator client!\".format(cl_type))\n\n        if not participant.use_separate_vc:\n            all_vc_contexts.append(None)\n            all_remote_signer_contexts.append(None)\n            all_snooper_beacon_contexts.append(None)\n            continue\n\n        plan.print(\n            \"Using separate validator client for participant #{0}\".format(index_str)\n        )\n\n        vc_keystores = None\n        if participant.validator_count != 0:\n            vc_keystores = preregistered_validator_keys_for_nodes[index]\n\n        vc_context = None\n        remote_signer_context = None\n        snooper_beacon_context = None\n        snooper_el_rpc_context = None\n\n        if participant.snooper_enabled:\n            snooper_service_name = \"snooper-beacon-{0}-{1}-{2}\".format(\n                index_str,\n                cl_type,\n                vc_type,\n            )\n            snooper_beacon_context = beacon_snooper.launch(\n                plan,\n                snooper_service_name,\n                get_cl_context_with_blobber_url(cl_context),\n                node_selectors,\n                global_tolerations,\n                args_with_right_defaults.port_publisher,\n                global_other_index,\n                args_with_right_defaults.docker_cache_params,\n                args_with_right_defaults.snooper_params,\n            )\n            plan.print(\n                \"Successfully added {0} snooper participants\".format(\n                    snooper_beacon_context\n                )\n            )\n            global_other_index += 1\n\n        all_snooper_beacon_contexts.append(snooper_beacon_context)\n\n        full_name = (\n            \"{0}-{1}-{2}-{3}\".format(\n                index_str,\n                el_type,\n                cl_type,\n                vc_type,\n            )\n            if participant.cl_type != participant.vc_type\n            else \"{0}-{1}-{2}\".format(\n                index_str,\n                el_type,\n                cl_type,\n            )\n        )\n\n        if participant.use_remote_signer:\n            remote_signer_context = remote_signer.launch(\n                plan=plan,\n                launcher=remote_signer.new_remote_signer_launcher(\n                    el_cl_genesis_data=el_cl_data\n                ),\n                service_name=\"signer-{0}\".format(full_name),\n                remote_signer_type=remote_signer_type,\n                image=participant.remote_signer_image,\n                full_name=\"{0}-remote_signer\".format(full_name),\n                vc_type=vc_type,\n                node_keystore_files=vc_keystores,\n                participant=participant,\n                global_tolerations=global_tolerations,\n                node_selectors=node_selectors,\n                port_publisher=args_with_right_defaults.port_publisher,\n                remote_signer_index=current_vc_index,\n            )\n\n        all_remote_signer_contexts.append(remote_signer_context)\n        if remote_signer_context and remote_signer_context.metrics_info:\n            remote_signer_context.metrics_info[\"config\"] = participant.prometheus_config\n\n        service_name = \"vc-{0}\".format(full_name)\n        vc_binary_artifact = binary_artifacts.get(index, {}).get(\"vc\", None)\n        vc_service_config = vc.get_vc_config(\n            plan=plan,\n            launcher=vc.new_vc_launcher(el_cl_genesis_data=el_cl_data),\n            keymanager_file=keymanager_file,\n            service_name=service_name,\n            vc_type=vc_type,\n            image=participant.vc_image,\n            global_log_level=args_with_right_defaults.global_log_level,\n            cl_context=get_cl_context_with_blobber_url(cl_context),\n            all_cl_contexts=all_cl_contexts,\n            el_context=el_context,\n            remote_signer_context=remote_signer_context,\n            full_name=full_name,\n            snooper_enabled=participant.snooper_enabled,\n            snooper_beacon_context=snooper_beacon_context,\n            node_keystore_files=vc_keystores,\n            participant=participant,\n            prysm_password_relative_filepath=prysm_password_relative_filepath,\n            prysm_password_artifact_uuid=prysm_password_artifact_uuid,\n            global_tolerations=global_tolerations,\n            node_selectors=node_selectors,\n            network_params=network_params,\n            port_publisher=args_with_right_defaults.port_publisher,\n            vc_index=current_vc_index,\n            extra_files_artifacts=extra_files_artifacts,\n            tempo_otlp_grpc_url=tempo_otlp_grpc_url,\n            vc_binary_artifact=vc_binary_artifact,\n        )\n        if vc_service_config == None:\n            continue\n\n        vc_service_configs[service_name] = vc_service_config\n        vc_service_info[service_name] = {\n            \"client_name\": vc_type,\n            \"participant_index\": index,\n            \"participant\": participant,\n        }\n        current_vc_index += 1\n\n    # add vc's in parallel to speed package execution\n    vc_services = shared_utils.add_services_with_force_restart(\n        plan, vc_service_configs, vc_service_info, \"vc_force_restart\"\n    )\n\n    # Create VC contexts ordered by participant index\n    vc_contexts_temp = {}\n    for vc_service_name, vc_service in vc_services.items():\n        vc_context = vc.get_vc_context(\n            plan,\n            vc_service_name,\n            vc_service,\n            vc_service_info[vc_service_name][\"client_name\"],\n        )\n\n        participant_index = vc_service_info[vc_service_name][\"participant_index\"]\n        if vc_context and vc_context.metrics_info:\n            vc_context.metrics_info[\"config\"] = args_with_right_defaults.participants[\n                participant_index\n            ].prometheus_config\n\n        vc_contexts_temp[participant_index] = vc_context\n\n    # Convert to ordered list\n    all_vc_contexts = []\n    for i in range(len(args_with_right_defaults.participants)):\n        if i in vc_contexts_temp:\n            all_vc_contexts.append(vc_contexts_temp[i])\n        else:\n            all_vc_contexts.append(None)\n\n    all_participants = []\n    for index, participant in enumerate(args_with_right_defaults.participants):\n        el_type = participant.el_type\n        cl_type = participant.cl_type\n        vc_type = participant.vc_type\n        remote_signer_type = participant.remote_signer_type\n        snooper_el_engine_context = None\n        snooper_beacon_context = None\n        snooper_el_rpc_context = None\n\n        el_context = all_el_contexts[index] if index < len(all_el_contexts) else None\n        cl_context = all_cl_contexts[index] if index < len(all_cl_contexts) else None\n        vc_context = all_vc_contexts[index] if index < len(all_vc_contexts) else None\n\n        remote_signer_context = (\n            all_remote_signer_contexts[index]\n            if index < len(all_remote_signer_contexts)\n            else None\n        )\n\n        if participant.snooper_enabled:\n            snooper_el_engine_context = (\n                all_snooper_el_engine_contexts[index]\n                if index < len(all_snooper_el_engine_contexts)\n                else None\n            )\n            snooper_beacon_context = (\n                all_snooper_beacon_contexts[index]\n                if index < len(all_snooper_beacon_contexts)\n                else None\n            )\n            snooper_el_rpc_context = (\n                all_snooper_el_rpc_contexts[index]\n                if index < len(all_snooper_el_rpc_contexts)\n                else None\n            )\n\n        ethereum_metrics_exporter_context = None\n\n        if participant.ethereum_metrics_exporter_enabled:\n            ethereum_metrics_exporter_context = all_ethereum_metrics_exporter_contexts[\n                index\n            ]\n        xatu_sentry_context = None\n\n        if participant.xatu_sentry_enabled and index < len(all_xatu_sentry_contexts):\n            xatu_sentry_context = all_xatu_sentry_contexts[index]\n\n        participant_entry = participant_module.new_participant(\n            el_type,\n            cl_type,\n            vc_type,\n            remote_signer_type,\n            el_context,\n            cl_context,\n            vc_context,\n            remote_signer_context,\n            snooper_el_engine_context,\n            snooper_beacon_context,\n            snooper_el_rpc_context,\n            ethereum_metrics_exporter_context,\n            xatu_sentry_context,\n        )\n\n        all_participants.append(participant_entry)\n\n    return (\n        all_participants,\n        final_genesis_timestamp,\n        el_cl_data.genesis_validators_root,\n        el_cl_data.files_artifact_uuid,\n        network_id,\n        el_cl_data.osaka_time,\n        el_cl_data.shadowfork_block_height,\n    )\n"
  },
  {
    "path": "src/prefunded_accounts/get_prefunded_accounts.star",
    "content": "new_prefunded_account = import_module(\n    \"../prelaunch_data_generator/genesis_constants/genesis_constants.star\"\n)\nshared_utils = import_module(\"../shared_utils/shared_utils.star\")\n\nIMAGE = \"wealdtech/ethereal:latest\"\n\n\ndef get_accounts(\n    plan, mnemonic, num_of_keys=21, global_tolerations=[], global_node_selectors={}\n):\n    PRE_FUNDED_ACCOUNTS = []\n    plan.print(\"mnemonic: {0}\".format(mnemonic))\n    for current_key in range(num_of_keys):\n        private_key_service_name = \"run-ethereal-private-key-{0}\".format(current_key)\n        eth_address_service_name = \"run-ethereal-eth-address-{0}\".format(current_key)\n\n        private_key = plan.run_sh(\n            name=private_key_service_name,\n            image=IMAGE,\n            description=\"Running ethereal to derive private keys of key {0}\".format(\n                current_key\n            ),\n            run=\"private_key=$(/app/ethereal hd keys --seed=\\\"{0}\\\" --path=\\\"m/44'/60'/0'/0/{1}\\\" | awk '/Private key/{{print substr($NF, 3)}}'); echo -n $private_key\".format(\n                mnemonic, current_key\n            ),\n            tolerations=shared_utils.get_tolerations(\n                global_tolerations=global_tolerations\n            ),\n            node_selectors=global_node_selectors,\n        )\n        eth_address = plan.run_sh(\n            name=eth_address_service_name,\n            image=IMAGE,\n            description=\"Running ethereal to derive eth address of key {0}\".format(\n                current_key\n            ),\n            run=\"eth_addr=$(/app/ethereal hd keys --seed=\\\"{0}\\\" --path=\\\"m/44'/60'/0'/0/{1}\\\" | awk '/Ethereum address/{{print $NF}}'); echo -n $eth_addr\".format(\n                mnemonic, current_key\n            ),\n            tolerations=shared_utils.get_tolerations(\n                global_tolerations=global_tolerations\n            ),\n            node_selectors=global_node_selectors,\n        )\n\n        PRE_FUNDED_ACCOUNTS.append(\n            new_prefunded_account.new_prefunded_account(\n                eth_address.output, private_key.output\n            )\n        )\n\n    plan.print(\"PRE_FUNDED_ACCOUNTS: {0}\".format(PRE_FUNDED_ACCOUNTS))\n\n    return PRE_FUNDED_ACCOUNTS\n"
  },
  {
    "path": "src/prelaunch_data_generator/el_cl_genesis/el_cl_genesis_data.star",
    "content": "def new_el_cl_genesis_data(\n    files_artifact_uuid,\n    genesis_validators_root,\n    osaka_time=\"\",\n    shadowfork_block_height=\"\",\n):\n    return struct(\n        files_artifact_uuid=files_artifact_uuid,\n        genesis_validators_root=genesis_validators_root,\n        osaka_time=osaka_time,\n        shadowfork_block_height=shadowfork_block_height,\n    )\n"
  },
  {
    "path": "src/prelaunch_data_generator/el_cl_genesis/el_cl_genesis_generator.star",
    "content": "shared_utils = import_module(\"../../shared_utils/shared_utils.star\")\ninput_parser = import_module(\"../../package_io/input_parser.star\")\n\nel_cl_genesis_data = import_module(\"./el_cl_genesis_data.star\")\n\nconstants = import_module(\"../../package_io/constants.star\")\n\nGENESIS_VALUES_PATH = \"/opt\"\nGENESIS_VALUES_FILENAME = \"values.env\"\nGENESIS_CONTRACTS_FILENAME = \"additional-contracts.json\"\nSHADOWFORK_FILEPATH = \"/shadowfork\"\n\n\ndef generate_el_cl_genesis_data(\n    plan,\n    image,\n    genesis_generator_params,\n    genesis_generation_config_yml_template,\n    genesis_additional_contracts_yml_template,\n    genesis_unix_timestamp,\n    network_params,\n    total_num_validator_keys_to_preregister,\n    latest_block,\n    global_tolerations=[],\n    global_node_selectors={},\n):\n    files = {}\n    shadowfork_file = \"\"\n    tolerations = shared_utils.get_tolerations(global_tolerations=global_tolerations)\n    if latest_block != \"\":\n        files[SHADOWFORK_FILEPATH] = latest_block\n        shadowfork_file = SHADOWFORK_FILEPATH + \"/latest_block.json\"\n\n    template_data = new_env_file_for_el_cl_genesis_data(\n        genesis_unix_timestamp,\n        total_num_validator_keys_to_preregister,\n        shadowfork_file,\n        network_params,\n        genesis_generator_params.extra_env,\n    )\n    genesis_generation_template = shared_utils.new_template_and_data(\n        genesis_generation_config_yml_template, template_data\n    )\n\n    additional_contracts_template_data = (\n        new_additionsl_contracts_file_for_el_cl_genesis_data(\n            network_params,\n        )\n    )\n    additional_contracts_template = shared_utils.new_template_and_data(\n        genesis_additional_contracts_yml_template, additional_contracts_template_data\n    )\n\n    genesis_values_and_dest_filepath = {}\n\n    genesis_values_and_dest_filepath[\n        GENESIS_VALUES_FILENAME\n    ] = genesis_generation_template\n\n    genesis_values_and_dest_filepath[\n        GENESIS_CONTRACTS_FILENAME\n    ] = additional_contracts_template\n\n    genesis_generation_config_artifact_name = plan.render_templates(\n        genesis_values_and_dest_filepath, \"genesis-el-cl-env-file\"\n    )\n\n    files[GENESIS_VALUES_PATH] = genesis_generation_config_artifact_name\n\n    genesis = plan.run_sh(\n        name=\"run-generate-genesis\",\n        description=\"Creating genesis\",\n        run=\"cp /opt/values.env /config/values.env && ./entrypoint.sh all && mkdir /network-configs && mv /data/metadata/* /network-configs/ && mv /data/parsed /network-configs/parsed\",\n        image=image,\n        files=files,\n        store=[\n            StoreSpec(src=\"/network-configs/\", name=\"el_cl_genesis_data\"),\n            StoreSpec(\n                src=\"/network-configs/genesis_validators_root.txt\",\n                name=\"genesis_validators_root\",\n            ),\n        ],\n        wait=None,\n        tolerations=shared_utils.get_tolerations(global_tolerations=global_tolerations),\n        node_selectors=global_node_selectors,\n    )\n\n    genesis_validators_root = plan.run_sh(\n        name=\"read-genesis-validators-root\",\n        description=\"Reading genesis validators root\",\n        run=\"cat /data/genesis_validators_root.txt\",\n        files={\"/data\": genesis.files_artifacts[1]},\n        wait=None,\n        tolerations=shared_utils.get_tolerations(global_tolerations=global_tolerations),\n        node_selectors=global_node_selectors,\n    )\n    osaka_time = \"\"\n    osaka_time = plan.run_sh(\n        name=\"read-osaka-time\",\n        description=\"Reading osaka time from genesis\",\n        run=\"jq '.config.osakaTime' /data/genesis.json | tr -d '\\n'\",\n        files={\"/data\": genesis.files_artifacts[0]},\n        tolerations=shared_utils.get_tolerations(global_tolerations=global_tolerations),\n        node_selectors=global_node_selectors,\n    )\n\n    shadowfork_block_height = \"\"\n    if latest_block != \"\":\n        block_height_result = plan.run_sh(\n            name=\"read-shadowfork-block-height\",\n            description=\"Reading shadowfork block height from latest_block.json\",\n            run=\"printf '%d' $(jq -r '.result.number' /shadowfork/latest_block.json | tr -d '\\n')\",\n            files={\"/shadowfork\": latest_block},\n            tolerations=tolerations,\n            node_selectors=global_node_selectors,\n        )\n        shadowfork_block_height = block_height_result.output\n        plan.print(\"Shadowfork block height: {0}\".format(shadowfork_block_height))\n\n    result = el_cl_genesis_data.new_el_cl_genesis_data(\n        genesis.files_artifacts[0],\n        genesis_validators_root.output,\n        osaka_time.output,\n        shadowfork_block_height,\n    )\n\n    return result\n\n\ndef new_env_file_for_el_cl_genesis_data(\n    genesis_unix_timestamp,\n    total_num_validator_keys_to_preregister,\n    shadowfork_file,\n    network_params,\n    extra_env,\n):\n    extra_env_safe = {}\n    for k, v in extra_env.items():\n        extra_env_safe[k] = json.encode(v)\n\n    return {\n        \"UnixTimestamp\": genesis_unix_timestamp,\n        \"NetworkId\": constants.NETWORK_ID[network_params.network.split(\"-\")[0]]\n        if shadowfork_file\n        else network_params.network_id,  # This will override the network_id if shadowfork_file is present. If you want to use the network_id, please ensure that you don't use \"shadowfork\" in the network name.\n        \"DepositContractAddress\": network_params.deposit_contract_address,\n        \"SecondsPerSlot\": network_params.seconds_per_slot,\n        \"SlotDurationMs\": network_params.slot_duration_ms,\n        \"PreregisteredValidatorKeysMnemonic\": network_params.preregistered_validator_keys_mnemonic,\n        \"NumValidatorKeysToPreregister\": total_num_validator_keys_to_preregister,\n        \"GenesisDelay\": 0,  # This delay is already precaculated in the final_genesis_timestamp\n        \"GenesisGasLimit\": network_params.genesis_gaslimit,\n        \"MaxPerEpochActivationChurnLimit\": network_params.max_per_epoch_activation_churn_limit,\n        \"ChurnLimitQuotient\": network_params.churn_limit_quotient,\n        \"ConfirmationByzantineThreshold\": network_params.confirmation_byzantine_threshold,\n        \"EjectionBalance\": network_params.ejection_balance,\n        \"Eth1FollowDistance\": network_params.eth1_follow_distance,\n        \"AltairForkEpoch\": \"{0}\".format(network_params.altair_fork_epoch),\n        \"BellatrixForkEpoch\": \"{0}\".format(network_params.bellatrix_fork_epoch),\n        \"CapellaForkEpoch\": \"{0}\".format(network_params.capella_fork_epoch),\n        \"DenebForkEpoch\": \"{0}\".format(network_params.deneb_fork_epoch),\n        \"ElectraForkEpoch\": \"{0}\".format(network_params.electra_fork_epoch),\n        \"FuluForkEpoch\": \"{0}\".format(network_params.fulu_fork_epoch),\n        \"GloasForkEpoch\": \"{0}\".format(network_params.gloas_fork_epoch),\n        \"HezeForkEpoch\": \"{0}\".format(network_params.heze_fork_epoch),\n        \"GenesisForkVersion\": constants.GENESIS_FORK_VERSION,\n        \"AltairForkVersion\": constants.ALTAIR_FORK_VERSION,\n        \"BellatrixForkVersion\": constants.BELLATRIX_FORK_VERSION,\n        \"CapellaForkVersion\": constants.CAPELLA_FORK_VERSION,\n        \"DenebForkVersion\": constants.DENEB_FORK_VERSION,\n        \"ElectraForkVersion\": constants.ELECTRA_FORK_VERSION,\n        \"FuluForkVersion\": constants.FULU_FORK_VERSION,\n        \"GloasForkVersion\": constants.GLOAS_FORK_VERSION,\n        \"HezeForkVersion\": constants.HEZE_FORK_VERSION,\n        \"ShadowForkFile\": shadowfork_file,\n        \"AdditionalValidatorMnemonics\": get_additional_mnemonics_json(network_params),\n        \"MinValidatorWithdrawabilityDelay\": network_params.min_validator_withdrawability_delay,\n        \"MinBuilderWithdrawabilityDelay\": network_params.min_builder_withdrawability_delay,\n        \"ShardCommitteePeriod\": network_params.shard_committee_period,\n        \"AttestationDueBpsGloas\": network_params.attestation_due_bps_gloas,\n        \"AggregateDueBpsGloas\": network_params.aggregate_due_bps_gloas,\n        \"SyncMessageDueBpsGloas\": network_params.sync_message_due_bps_gloas,\n        \"ContributionDueBpsGloas\": network_params.contribution_due_bps_gloas,\n        \"PayloadAttestationDueBps\": network_params.payload_attestation_due_bps,\n        \"ViewFreezeCutoffBps\": network_params.view_freeze_cutoff_bps,\n        \"InclusionListSubmissionDueBps\": network_params.inclusion_list_submission_due_bps,\n        \"ProposerInclusionListCutoffBps\": network_params.proposer_inclusion_list_cutoff_bps,\n        \"SamplesPerSlot\": network_params.samples_per_slot,\n        \"CustodyRequirement\": network_params.custody_requirement,\n        \"MaxBlobsPerBlockElectra\": network_params.max_blobs_per_block_electra,\n        \"TargetBlobsPerBlockElectra\": network_params.target_blobs_per_block_electra,\n        \"MaxRequestBlocksDeneb\": network_params.max_request_blocks_deneb,\n        \"BaseFeeUpdateFractionElectra\": network_params.base_fee_update_fraction_electra,\n        \"Preset\": network_params.preset,\n        \"AdditionalPreloadedContractsFile\": GENESIS_VALUES_PATH\n        + \"/\"\n        + GENESIS_CONTRACTS_FILENAME,\n        \"PrefundedAccounts\": json.encode(network_params.prefunded_accounts),\n        \"MaxPayloadSize\": network_params.max_payload_size,\n        \"Bpo1Epoch\": \"{0}\".format(network_params.bpo_1_epoch),\n        \"Bpo1MaxBlobs\": network_params.bpo_1_max_blobs,\n        \"Bpo1TargetBlobs\": network_params.bpo_1_target_blobs,\n        \"Bpo1BaseFeeUpdateFraction\": network_params.bpo_1_base_fee_update_fraction,\n        \"Bpo2Epoch\": \"{0}\".format(network_params.bpo_2_epoch),\n        \"Bpo2MaxBlobs\": network_params.bpo_2_max_blobs,\n        \"Bpo2TargetBlobs\": network_params.bpo_2_target_blobs,\n        \"Bpo2BaseFeeUpdateFraction\": network_params.bpo_2_base_fee_update_fraction,\n        \"Bpo3Epoch\": \"{0}\".format(network_params.bpo_3_epoch),\n        \"Bpo3MaxBlobs\": network_params.bpo_3_max_blobs,\n        \"Bpo3TargetBlobs\": network_params.bpo_3_target_blobs,\n        \"Bpo3BaseFeeUpdateFraction\": network_params.bpo_3_base_fee_update_fraction,\n        \"Bpo4Epoch\": \"{0}\".format(network_params.bpo_4_epoch),\n        \"Bpo4MaxBlobs\": network_params.bpo_4_max_blobs,\n        \"Bpo4TargetBlobs\": network_params.bpo_4_target_blobs,\n        \"Bpo4BaseFeeUpdateFraction\": network_params.bpo_4_base_fee_update_fraction,\n        \"Bpo5Epoch\": \"{0}\".format(network_params.bpo_5_epoch),\n        \"Bpo5MaxBlobs\": network_params.bpo_5_max_blobs,\n        \"Bpo5TargetBlobs\": network_params.bpo_5_target_blobs,\n        \"Bpo5BaseFeeUpdateFraction\": network_params.bpo_5_base_fee_update_fraction,\n        \"WithdrawalType\": \"{0}\".format(network_params.withdrawal_type),\n        \"WithdrawalAddress\": network_params.withdrawal_address,\n        \"ValidatorBalance\": int(network_params.validator_balance * 1000000000),\n        \"BuilderCount\": network_params.builder_count,\n        \"BuilderBalance\": int(network_params.builder_balance * 1000000000)\n        if network_params.builder_balance > 0\n        else 0,\n        \"MinEpochsForDataColumnSidecarsRequests\": network_params.min_epochs_for_data_column_sidecars_requests,\n        \"ExtraEnvVars\": extra_env_safe,\n    }\n\n\ndef new_additionsl_contracts_file_for_el_cl_genesis_data(\n    network_params,\n):\n    additional_contracts_json = network_params.additional_preloaded_contracts\n    if type(additional_contracts_json) != \"string\":\n        additional_contracts_json = json.encode(additional_contracts_json)\n\n    return {\n        \"AdditionalPreloadedContracts\": additional_contracts_json,\n    }\n\n\ndef get_additional_mnemonics_json(\n    network_params,\n):\n    additional_mnemonics_json = network_params.additional_mnemonics\n    if type(additional_mnemonics_json) == \"string\":\n        # re-encode json to trim whitespaces and newlines\n        additional_mnemonics_json = json.decode(additional_mnemonics_json)\n\n    additional_mnemonics_json = json.encode(json.encode(additional_mnemonics_json))\n\n    return additional_mnemonics_json\n"
  },
  {
    "path": "src/prelaunch_data_generator/genesis_constants/genesis_constants.star",
    "content": "def new_prefunded_account(address, private_key):\n    return struct(address=address, private_key=private_key)\n\n\n# This information was generated by:\n#  1) https://iancoleman.io/bip39/\n#  2) Enter the mnemonic (unless you use the default)\n#  3) Copying the pubkey/priv key outputted information\nPRE_FUNDED_ACCOUNTS = [\n    # m/44'/60'/0'/0/0\n    new_prefunded_account(\n        \"0x8943545177806ED17B9F23F0a21ee5948eCaa776\",\n        \"bcdf20249abf0ed6d944c0288fad489e33f66b3960d9e6229c1cd214ed3bbe31\",\n    ),\n    # m/44'/60'/0'/0/1\n    new_prefunded_account(\n        \"0xE25583099BA105D9ec0A67f5Ae86D90e50036425\",\n        \"39725efee3fb28614de3bacaffe4cc4bd8c436257e2c8bb887c4b5c4be45e76d\",\n    ),\n    # m/44'/60'/0'/0/2\n    new_prefunded_account(\n        \"0x614561D2d143621E126e87831AEF287678B442b8\",\n        \"53321db7c1e331d93a11a41d16f004d7ff63972ec8ec7c25db329728ceeb1710\",\n    ),\n    # m/44'/60'/0'/0/3\n    new_prefunded_account(\n        \"0xf93Ee4Cf8c6c40b329b0c0626F28333c132CF241\",\n        \"ab63b23eb7941c1251757e24b3d2350d2bc05c3c388d06f8fe6feafefb1e8c70\",\n    ),\n    # m/44'/60'/0'/0/4\n    new_prefunded_account(\n        \"0x802dCbE1B1A97554B4F50DB5119E37E8e7336417\",\n        \"5d2344259f42259f82d2c140aa66102ba89b57b4883ee441a8b312622bd42491\",\n    ),\n    # m/44'/60'/0'/0/5\n    new_prefunded_account(\n        \"0xAe95d8DA9244C37CaC0a3e16BA966a8e852Bb6D6\",\n        \"27515f805127bebad2fb9b183508bdacb8c763da16f54e0678b16e8f28ef3fff\",\n    ),\n    # m/44'/60'/0'/0/6\n    new_prefunded_account(\n        \"0x2c57d1CFC6d5f8E4182a56b4cf75421472eBAEa4\",\n        \"7ff1a4c1d57e5e784d327c4c7651e952350bc271f156afb3d00d20f5ef924856\",\n    ),\n    # m/44'/60'/0'/0/7\n    new_prefunded_account(\n        \"0x741bFE4802cE1C4b5b00F9Df2F5f179A1C89171A\",\n        \"3a91003acaf4c21b3953d94fa4a6db694fa69e5242b2e37be05dd82761058899\",\n    ),\n    # m/44'/60'/0'/0/8\n    new_prefunded_account(\n        \"0xc3913d4D8bAb4914328651C2EAE817C8b78E1f4c\",\n        \"bb1d0f125b4fb2bb173c318cdead45468474ca71474e2247776b2b4c0fa2d3f5\",\n    ),\n    # m/44'/60'/0'/0/9\n    new_prefunded_account(\n        \"0x65D08a056c17Ae13370565B04cF77D2AfA1cB9FA\",\n        \"850643a0224065ecce3882673c21f56bcf6eef86274cc21cadff15930b59fc8c\",\n    ),\n    # m/44'/60'/0'/0/10\n    new_prefunded_account(\n        \"0x3e95dFbBaF6B348396E6674C7871546dCC568e56\",\n        \"94eb3102993b41ec55c241060f47daa0f6372e2e3ad7e91612ae36c364042e44\",\n    ),\n    # m/44'/60'/0'/0/11\n    new_prefunded_account(\n        \"0x5918b2e647464d4743601a865753e64C8059Dc4F\",\n        \"daf15504c22a352648a71ef2926334fe040ac1d5005019e09f6c979808024dc7\",\n    ),\n    # m/44'/60'/0'/0/12\n    new_prefunded_account(\n        \"0x589A698b7b7dA0Bec545177D3963A2741105C7C9\",\n        \"eaba42282ad33c8ef2524f07277c03a776d98ae19f581990ce75becb7cfa1c23\",\n    ),\n    # m/44'/60'/0'/0/13\n    new_prefunded_account(\n        \"0x4d1CB4eB7969f8806E2CaAc0cbbB71f88C8ec413\",\n        \"3fd98b5187bf6526734efaa644ffbb4e3670d66f5d0268ce0323ec09124bff61\",\n    ),\n    # m/44'/60'/0'/0/14\n    new_prefunded_account(\n        \"0xF5504cE2BcC52614F121aff9b93b2001d92715CA\",\n        \"5288e2f440c7f0cb61a9be8afdeb4295f786383f96f5e35eb0c94ef103996b64\",\n    ),\n    # m/44'/60'/0'/0/15\n    new_prefunded_account(\n        \"0xF61E98E7D47aB884C244E39E031978E33162ff4b\",\n        \"f296c7802555da2a5a662be70e078cbd38b44f96f8615ae529da41122ce8db05\",\n    ),\n    # m/44'/60'/0'/0/16\n    new_prefunded_account(\n        \"0xf1424826861ffbbD25405F5145B5E50d0F1bFc90\",\n        \"bf3beef3bd999ba9f2451e06936f0423cd62b815c9233dd3bc90f7e02a1e8673\",\n    ),\n    # m/44'/60'/0'/0/17\n    new_prefunded_account(\n        \"0xfDCe42116f541fc8f7b0776e2B30832bD5621C85\",\n        \"6ecadc396415970e91293726c3f5775225440ea0844ae5616135fd10d66b5954\",\n    ),\n    # m/44'/60'/0'/0/18\n    new_prefunded_account(\n        \"0xD9211042f35968820A3407ac3d80C725f8F75c14\",\n        \"a492823c3e193d6c595f37a18e3c06650cf4c74558cc818b16130b293716106f\",\n    ),\n    # m/44'/60'/0'/0/19\n    new_prefunded_account(\n        \"0xD8F3183DEF51A987222D845be228e0Bbb932C222\",\n        \"c5114526e042343c6d1899cad05e1c00ba588314de9b96929914ee0df18d46b2\",\n    ),\n    # m/44'/60'/0'/0/20\n    new_prefunded_account(\n        \"0xafF0CA253b97e54440965855cec0A8a2E2399896\",\n        \"04b9f63ecf84210c5366c66d68fa1f5da1fa4f634fad6dfc86178e4d79ff9e59\",\n    ),\n]\n"
  },
  {
    "path": "src/prelaunch_data_generator/validator_keystores/generate_keystores_result.star",
    "content": "# Package object containing information about the keystores that were generated for validators\n# during genesis creation\ndef new_generate_keystores_result(\n    prysm_password_artifact_uuid, prysm_password_relative_filepath, per_node_keystores\n):\n    return struct(\n        # Files artifact UUID where the Prysm password is stored\n        prysm_password_artifact_uuid=prysm_password_artifact_uuid,\n        # Relative to root of files artifact\n        prysm_password_relative_filepath=prysm_password_relative_filepath,\n        # Contains keystores-per-client-type for each node in the network\n        per_node_keystores=per_node_keystores,\n    )\n"
  },
  {
    "path": "src/prelaunch_data_generator/validator_keystores/keystore_files.star",
    "content": "# One of these will be created per node we're trying to start\ndef new_keystore_files(\n    files_artifact_uuid,\n    raw_root_dirpath,\n    raw_keys_relative_dirpath,\n    raw_secrets_relative_dirpath,\n    nimbus_keys_relative_dirpath,\n    prysm_relative_dirpath,\n    teku_keys_relative_dirpath,\n    teku_secrets_relative_dirpath,\n):\n    return struct(\n        files_artifact_uuid=files_artifact_uuid,\n        # ------------ All directories below are relative to the root of the files artifact ----------------\n        raw_root_dirpath=raw_root_dirpath,\n        raw_keys_relative_dirpath=raw_keys_relative_dirpath,\n        raw_secrets_relative_dirpath=raw_secrets_relative_dirpath,\n        nimbus_keys_relative_dirpath=nimbus_keys_relative_dirpath,\n        prysm_relative_dirpath=prysm_relative_dirpath,\n        teku_keys_relative_dirpath=teku_keys_relative_dirpath,\n        teku_secrets_relative_dirpath=teku_secrets_relative_dirpath,\n    )\n"
  },
  {
    "path": "src/prelaunch_data_generator/validator_keystores/validator_keystore_generator.star",
    "content": "shared_utils = import_module(\"../../shared_utils/shared_utils.star\")\nkeystore_files_module = import_module(\"./keystore_files.star\")\nkeystores_result = import_module(\"./generate_keystores_result.star\")\n\nNODE_KEYSTORES_OUTPUT_DIRPATH_FORMAT_STR = \"/node-{0}-keystores{1}/\"\n\n# Prysm keystores are encrypted with a password\nPRYSM_PASSWORD = \"password\"\nPRYSM_PASSWORD_FILEPATH_ON_GENERATOR = \"/tmp/prysm-password.txt\"\n\nKEYSTORES_GENERATION_TOOL_NAME = \"/app/eth2-val-tools\"\n\nETH_VAL_TOOLS_IMAGE = \"protolambda/eth2-val-tools:latest\"\n\nSUCCESSFUL_EXEC_CMD_EXIT_CODE = 0\n\nRAW_KEYS_DIRNAME = \"keys\"\nRAW_SECRETS_DIRNAME = \"secrets\"\n\nNIMBUS_KEYS_DIRNAME = \"nimbus-keys\"\nPRYSM_DIRNAME = \"prysm\"\n\nTEKU_KEYS_DIRNAME = \"teku-keys\"\nTEKU_SECRETS_DIRNAME = \"teku-secrets\"\n\nKEYSTORE_GENERATION_FINISHED_FILEPATH_FORMAT = \"/tmp/keystores_generated-{0}-{1}\"\n\nSERVICE_NAME_PREFIX = \"validator-key-generation-\"\n\nENTRYPOINT_ARGS = [\n    \"sleep\",\n    \"99999\",\n]\n\n\n# Launches a prelaunch data generator IMAGE, for use in various of the genesis generation\ndef launch_prelaunch_data_generator(\n    plan,\n    files_artifact_mountpoints,\n    service_name_suffix,\n    docker_cache_params,\n):\n    config = get_config(files_artifact_mountpoints, docker_cache_params)\n\n    service_name = \"{0}{1}\".format(\n        SERVICE_NAME_PREFIX,\n        service_name_suffix,\n    )\n    plan.add_service(service_name, config)\n\n    return service_name\n\n\ndef launch_prelaunch_data_generator_parallel(\n    plan, files_artifact_mountpoints, service_name_suffixes, docker_cache_params\n):\n    config = get_config(files_artifact_mountpoints, docker_cache_params)\n    service_names = [\n        \"{0}{1}\".format(\n            SERVICE_NAME_PREFIX,\n            service_name_suffix,\n        )\n        for service_name_suffix in service_name_suffixes\n    ]\n    services_to_add = {service_name: config for service_name in service_names}\n    plan.add_services(services_to_add)\n    return service_names\n\n\ndef get_config(files_artifact_mountpoints, docker_cache_params):\n    return ServiceConfig(\n        image=shared_utils.docker_cache_image_calc(\n            docker_cache_params,\n            ETH_VAL_TOOLS_IMAGE,\n        ),\n        entrypoint=ENTRYPOINT_ARGS,\n        files=files_artifact_mountpoints,\n    )\n\n\n# Generates keystores for the given number of nodes from the given mnemonic, where each keystore contains approximately\n#\n# \tnum_keys / num_nodes keys\ndef generate_validator_keystores(plan, mnemonic, participants, docker_cache_params):\n    service_name = launch_prelaunch_data_generator(\n        plan, {}, \"cl-validator-keystore\", docker_cache_params\n    )\n\n    all_output_dirpaths = []\n    all_sub_command_strs = []\n    running_total_validator_count = 0\n\n    for idx, participant in enumerate(participants):\n        output_dirpath = NODE_KEYSTORES_OUTPUT_DIRPATH_FORMAT_STR.format(idx, \"\")\n        if participant.validator_count == 0:\n            all_output_dirpaths.append(output_dirpath)\n            continue\n\n        start_index = running_total_validator_count\n        stop_index = start_index + participant.validator_count\n\n        generate_keystores_cmd = '{0} keystores --insecure --prysm-pass {1} --out-loc {2} --source-mnemonic \"{3}\" --source-min {4} --source-max {5}'.format(\n            KEYSTORES_GENERATION_TOOL_NAME,\n            PRYSM_PASSWORD,\n            output_dirpath,\n            mnemonic,\n            start_index,\n            stop_index,\n        )\n        all_output_dirpaths.append(output_dirpath)\n        all_sub_command_strs.append(generate_keystores_cmd)\n\n        teku_permissions_cmd = \"chmod 0777 -R \" + output_dirpath + TEKU_KEYS_DIRNAME\n        raw_secret_permissions_cmd = (\n            \"chmod 0600 -R \" + output_dirpath + RAW_SECRETS_DIRNAME\n        )\n        all_sub_command_strs.append(teku_permissions_cmd)\n        all_sub_command_strs.append(raw_secret_permissions_cmd)\n\n        running_total_validator_count += participant.validator_count\n\n    command_str = \" && \".join(all_sub_command_strs)\n\n    command_result = plan.exec(\n        service_name=service_name,\n        description=\"Generating keystores\",\n        recipe=ExecRecipe(command=[\"sh\", \"-c\", command_str]),\n    )\n    plan.verify(command_result[\"code\"], \"==\", SUCCESSFUL_EXEC_CMD_EXIT_CODE)\n\n    # Store outputs into files artifacts\n    keystore_files = []\n    running_total_validator_count = 0\n    for idx, participant in enumerate(participants):\n        if participant.validator_count == 0:\n            keystore_files.append(None)\n            continue\n\n        output_dirpath = NODE_KEYSTORES_OUTPUT_DIRPATH_FORMAT_STR.format(idx, \"\")\n        padded_idx = shared_utils.zfill_custom(idx + 1, len(str(len(participants))))\n        keystore_start_index = running_total_validator_count\n        keystore_stop_index = (\n            running_total_validator_count + participant.validator_count\n        )\n\n        artifact_name = \"{0}-{1}-{2}-{3}-{4}\".format(\n            padded_idx,\n            participant.cl_type,\n            participant.el_type,\n            keystore_start_index,\n            keystore_stop_index - 1,\n        )\n        artifact_name = plan.store_service_files(\n            service_name,\n            output_dirpath,\n            name=artifact_name,\n            depends_on=command_result[\"output\"],\n        )\n\n        base_dirname_in_artifact = shared_utils.path_base(output_dirpath)\n        to_add = keystore_files_module.new_keystore_files(\n            artifact_name,\n            shared_utils.path_join(base_dirname_in_artifact),\n            shared_utils.path_join(base_dirname_in_artifact, RAW_KEYS_DIRNAME),\n            shared_utils.path_join(base_dirname_in_artifact, RAW_SECRETS_DIRNAME),\n            shared_utils.path_join(base_dirname_in_artifact, NIMBUS_KEYS_DIRNAME),\n            shared_utils.path_join(base_dirname_in_artifact, PRYSM_DIRNAME),\n            shared_utils.path_join(base_dirname_in_artifact, TEKU_KEYS_DIRNAME),\n            shared_utils.path_join(base_dirname_in_artifact, TEKU_SECRETS_DIRNAME),\n        )\n\n        keystore_files.append(to_add)\n\n        running_total_validator_count += participant.validator_count\n\n    write_prysm_password_file_cmd = [\n        \"sh\",\n        \"-c\",\n        \"echo '{0}' > {1}\".format(\n            PRYSM_PASSWORD,\n            PRYSM_PASSWORD_FILEPATH_ON_GENERATOR,\n        ),\n    ]\n    write_prysm_password_file_cmd_result = plan.exec(\n        service_name=service_name,\n        description=\"Storing prysm password in a file\",\n        recipe=ExecRecipe(command=write_prysm_password_file_cmd),\n    )\n    plan.verify(\n        write_prysm_password_file_cmd_result[\"code\"],\n        \"==\",\n        SUCCESSFUL_EXEC_CMD_EXIT_CODE,\n    )\n\n    prysm_password_artifact_name = plan.store_service_files(\n        service_name,\n        PRYSM_PASSWORD_FILEPATH_ON_GENERATOR,\n        name=\"prysm-password\",\n        depends_on=write_prysm_password_file_cmd_result[\"output\"],\n    )\n\n    result = keystores_result.new_generate_keystores_result(\n        prysm_password_artifact_name,\n        shared_utils.path_base(PRYSM_PASSWORD_FILEPATH_ON_GENERATOR),\n        keystore_files,\n    )\n\n    return result\n\n\n# this is like above but runs things in parallel - for large networks that run on k8s or gigantic dockers\ndef generate_validator_keystores_in_parallel(\n    plan, mnemonic, participants, docker_cache_params\n):\n    service_names = launch_prelaunch_data_generator_parallel(\n        plan,\n        {},\n        [\"cl-validator-keystore-\" + str(idx) for idx in range(0, len(participants))],\n        docker_cache_params,\n    )\n    all_output_dirpaths = []\n    all_generation_commands = []\n    finished_files_to_verify = []\n    running_total_validator_count = 0\n    for idx, participant in enumerate(participants):\n        output_dirpath = NODE_KEYSTORES_OUTPUT_DIRPATH_FORMAT_STR.format(idx, \"\")\n        if participant.validator_count == 0:\n            all_generation_commands.append(None)\n            all_output_dirpaths.append(None)\n            finished_files_to_verify.append(None)\n            continue\n        start_index = running_total_validator_count\n        running_total_validator_count += participant.validator_count\n        stop_index = start_index + participant.validator_count\n        generation_finished_filepath = (\n            KEYSTORE_GENERATION_FINISHED_FILEPATH_FORMAT.format(start_index, stop_index)\n        )\n        finished_files_to_verify.append(generation_finished_filepath)\n\n        generate_keystores_cmd = 'nohup {0} keystores --insecure --prysm-pass {1} --out-loc {2} --source-mnemonic \"{3}\" --source-min {4} --source-max {5} && touch {6}'.format(\n            KEYSTORES_GENERATION_TOOL_NAME,\n            PRYSM_PASSWORD,\n            output_dirpath,\n            mnemonic,\n            start_index,\n            stop_index,\n            generation_finished_filepath,\n        )\n        teku_permissions_cmd = (\n            \" && chmod 777 -R \" + output_dirpath + \"/\" + TEKU_KEYS_DIRNAME\n        )\n        raw_secret_permissions_cmd = (\n            \" && chmod 0600 -R \" + output_dirpath + \"/\" + RAW_SECRETS_DIRNAME\n        )\n        generate_keystores_cmd += teku_permissions_cmd\n        generate_keystores_cmd += raw_secret_permissions_cmd\n        all_generation_commands.append(generate_keystores_cmd)\n        all_output_dirpaths.append(output_dirpath)\n\n    # spin up all jobs\n    for idx in range(0, len(participants)):\n        service_name = service_names[idx]\n        generation_command = all_generation_commands[idx]\n        if generation_command == None:\n            # no generation command as validator count is 0\n            continue\n        plan.exec(\n            service_name=service_name,\n            description=\"Generating keystore for participant \" + str(idx),\n            recipe=ExecRecipe(\n                command=[\"sh\", \"-c\", generation_command + \" >/dev/null 2>&1 &\"]\n            ),\n        )\n\n    # verify that files got created\n    for idx in range(0, len(participants)):\n        service_name = service_names[idx]\n        output_dirpath = all_output_dirpaths[idx]\n        if output_dirpath == None:\n            # no output dir path as validator count is 0\n            continue\n        generation_finished_filepath = finished_files_to_verify[idx]\n        verification_command = [\"ls\", generation_finished_filepath]\n        plan.wait(\n            recipe=ExecRecipe(command=verification_command),\n            service_name=service_name,\n            field=\"code\",\n            assertion=\"==\",\n            target_value=0,\n            timeout=\"5m\",\n            interval=\"0.5s\",\n        )\n\n    # Store outputs into files artifacts\n    keystore_files = []\n    running_total_validator_count = 0\n    for idx, participant in enumerate(participants):\n        output_dirpath = all_output_dirpaths[idx]\n        if participant.validator_count == 0:\n            keystore_files.append(None)\n            continue\n        service_name = service_names[idx]\n\n        padded_idx = shared_utils.zfill_custom(idx + 1, len(str(len(participants))))\n        keystore_start_index = running_total_validator_count\n        running_total_validator_count += participant.validator_count\n        keystore_stop_index = (keystore_start_index + participant.validator_count) - 1\n        artifact_name = \"{0}-{1}-{2}-{3}-{4}\".format(\n            padded_idx,\n            participant.cl_type,\n            participant.el_type,\n            keystore_start_index,\n            keystore_stop_index,\n        )\n        artifact_name = plan.store_service_files(\n            service_name, output_dirpath, name=artifact_name\n        )\n\n        # This is necessary because the way Kurtosis currently implements artifact-storing is\n        base_dirname_in_artifact = shared_utils.path_base(output_dirpath)\n        to_add = keystore_files_module.new_keystore_files(\n            artifact_name,\n            shared_utils.path_join(base_dirname_in_artifact),\n            shared_utils.path_join(base_dirname_in_artifact, RAW_KEYS_DIRNAME),\n            shared_utils.path_join(base_dirname_in_artifact, RAW_SECRETS_DIRNAME),\n            shared_utils.path_join(base_dirname_in_artifact, NIMBUS_KEYS_DIRNAME),\n            shared_utils.path_join(base_dirname_in_artifact, PRYSM_DIRNAME),\n            shared_utils.path_join(base_dirname_in_artifact, TEKU_KEYS_DIRNAME),\n            shared_utils.path_join(base_dirname_in_artifact, TEKU_SECRETS_DIRNAME),\n        )\n\n        keystore_files.append(to_add)\n\n    write_prysm_password_file_cmd = [\n        \"sh\",\n        \"-c\",\n        \"echo '{0}' > {1}\".format(\n            PRYSM_PASSWORD,\n            PRYSM_PASSWORD_FILEPATH_ON_GENERATOR,\n        ),\n    ]\n    write_prysm_password_file_cmd_result = plan.exec(\n        service_name=service_names[0],\n        description=\"Storing prysm password in a file\",\n        recipe=ExecRecipe(command=write_prysm_password_file_cmd),\n    )\n    plan.verify(\n        write_prysm_password_file_cmd_result[\"code\"],\n        \"==\",\n        SUCCESSFUL_EXEC_CMD_EXIT_CODE,\n    )\n\n    prysm_password_artifact_name = plan.store_service_files(\n        service_names[0], PRYSM_PASSWORD_FILEPATH_ON_GENERATOR, name=\"prysm-password\"\n    )\n\n    result = keystores_result.new_generate_keystores_result(\n        prysm_password_artifact_name,\n        shared_utils.path_base(PRYSM_PASSWORD_FILEPATH_ON_GENERATOR),\n        keystore_files,\n    )\n\n    # we don't cleanup the containers as its a costly operation\n    return result\n"
  },
  {
    "path": "src/prelaunch_data_generator/validator_keystores/validator_ranges_generator.star",
    "content": "VALIDATOR_RANGES_FILE_NAME = \"validator-ranges.yaml\"\nshared_utils = import_module(\"../../shared_utils/shared_utils.star\")\n\n\ndef generate_validator_ranges(\n    plan,\n    config_template,\n    participant_contexts,\n    participant_configs,\n):\n    data = []\n    running_total_validator_count = 0\n    for index, participant in enumerate(participant_contexts):\n        full_name, _, _, _ = shared_utils.get_client_names(\n            participant, index, participant_contexts, participant_configs\n        )\n        participant = participant_configs[index]\n        if participant.validator_count == 0:\n            continue\n        start_index = running_total_validator_count\n        running_total_validator_count += participant.validator_count\n        end_index = start_index + participant.validator_count - 1\n        data.append(\n            {\n                \"ClientName\": full_name,\n                \"Range\": \"{0}-{1}\".format(start_index, end_index),\n            }\n        )\n\n    template_data = {\"Data\": data}\n\n    template_and_data_by_rel_dest_filepath = {}\n    template_and_data_by_rel_dest_filepath[\n        VALIDATOR_RANGES_FILE_NAME\n    ] = shared_utils.new_template_and_data(config_template, template_data)\n\n    VALIDATOR_RANGES_ARTIFACT_NAME = plan.render_templates(\n        template_and_data_by_rel_dest_filepath, \"validator-ranges\"\n    )\n"
  },
  {
    "path": "src/prometheus/prometheus_launcher.star",
    "content": "shared_utils = import_module(\"../shared_utils/shared_utils.star\")\nprometheus = import_module(\"github.com/kurtosis-tech/prometheus-package/main.star\")\nconstants = import_module(\"../package_io/constants.star\")\n\nEXECUTION_CLIENT_TYPE = \"execution\"\nBEACON_CLIENT_TYPE = \"beacon\"\nVC_TYPE = \"validator\"\nREMOTE_SIGNER_TYPE = \"remote-signer\"\n\nMETRICS_INFO_NAME_KEY = \"name\"\nMETRICS_INFO_URL_KEY = \"url\"\nMETRICS_INFO_PATH_KEY = \"path\"\nMETRICS_INFO_ADDITIONAL_CONFIG_KEY = \"config\"\n\nPROMETHEUS_DEFAULT_SCRAPE_INTERVAL = \"15s\"\n\n\ndef launch_prometheus(\n    plan,\n    el_contexts,\n    cl_contexts,\n    vc_contexts,\n    network_params,\n    remote_signer_contexts,\n    additional_metrics_jobs,\n    ethereum_metrics_exporter_contexts,\n    xatu_sentry_contexts,\n    global_node_selectors,\n    prometheus_params,\n    port_publisher,\n    index,\n):\n    metrics_jobs = get_metrics_jobs(\n        el_contexts,\n        cl_contexts,\n        vc_contexts,\n        network_params,\n        remote_signer_contexts,\n        additional_metrics_jobs,\n        ethereum_metrics_exporter_contexts,\n        xatu_sentry_contexts,\n    )\n\n    public_ports = shared_utils.get_additional_service_standard_public_port(\n        port_publisher,\n        constants.HTTP_PORT_ID,\n        index,\n        0,\n    )\n\n    prometheus_url = prometheus.run(\n        plan,\n        metrics_jobs,\n        \"prometheus\",\n        min_cpu=prometheus_params.min_cpu,\n        max_cpu=prometheus_params.max_cpu,\n        min_memory=prometheus_params.min_mem,\n        max_memory=prometheus_params.max_mem,\n        node_selectors=global_node_selectors,\n        storage_tsdb_retention_time=prometheus_params.storage_tsdb_retention_time,\n        storage_tsdb_retention_size=prometheus_params.storage_tsdb_retention_size,\n        image=prometheus_params.image,\n        public_ports=public_ports,\n    )\n\n    return prometheus_url\n\n\ndef get_metrics_jobs(\n    el_contexts,\n    cl_contexts,\n    vc_contexts,\n    network_params,\n    remote_signer_contexts,\n    additional_metrics_jobs,\n    ethereum_metrics_exporter_contexts,\n    xatu_sentry_contexts,\n):\n    metrics_jobs = []\n    # Adding execution clients metrics jobs\n    for context in el_contexts:\n        if len(context.el_metrics_info) >= 1 and context.el_metrics_info[0] != None:\n            execution_metrics_info = context.el_metrics_info[0]\n            scrape_interval = PROMETHEUS_DEFAULT_SCRAPE_INTERVAL\n            labels = {\n                \"service\": context.service_name,\n                \"client_type\": EXECUTION_CLIENT_TYPE,\n                \"client_name\": context.client_name,\n            }\n            additional_config = execution_metrics_info[\n                METRICS_INFO_ADDITIONAL_CONFIG_KEY\n            ]\n            if additional_config != None:\n                if additional_config.labels != None:\n                    labels.update(additional_config.labels)\n                if (\n                    additional_config.scrape_interval != None\n                    and additional_config.scrape_interval != \"\"\n                ):\n                    scrape_interval = additional_config.scrape_interval\n            metrics_jobs.append(\n                new_metrics_job(\n                    job_name=execution_metrics_info[METRICS_INFO_NAME_KEY],\n                    endpoint=execution_metrics_info[METRICS_INFO_URL_KEY],\n                    metrics_path=execution_metrics_info[METRICS_INFO_PATH_KEY],\n                    labels=labels,\n                    scrape_interval=scrape_interval,\n                )\n            )\n    # Adding consensus clients metrics jobs\n    for context in cl_contexts:\n        if (\n            len(context.cl_nodes_metrics_info) >= 1\n            and context.cl_nodes_metrics_info[0] != None\n        ):\n            # Adding beacon node metrics\n            beacon_metrics_info = context.cl_nodes_metrics_info[0]\n            scrape_interval = PROMETHEUS_DEFAULT_SCRAPE_INTERVAL\n            labels = {\n                \"service\": context.beacon_service_name,\n                \"client_type\": BEACON_CLIENT_TYPE,\n                \"client_name\": context.client_name,\n                \"supernode\": str(context.supernode),\n            }\n            additional_config = beacon_metrics_info[METRICS_INFO_ADDITIONAL_CONFIG_KEY]\n            if additional_config != None:\n                if additional_config.labels != None:\n                    labels.update(additional_config.labels)\n                if (\n                    additional_config.scrape_interval != None\n                    and additional_config.scrape_interval != \"\"\n                ):\n                    scrape_interval = additional_config.scrape_interval\n            metrics_jobs.append(\n                new_metrics_job(\n                    job_name=beacon_metrics_info[METRICS_INFO_NAME_KEY],\n                    endpoint=beacon_metrics_info[METRICS_INFO_URL_KEY],\n                    metrics_path=beacon_metrics_info[METRICS_INFO_PATH_KEY],\n                    labels=labels,\n                    scrape_interval=scrape_interval,\n                )\n            )\n\n    # Adding validator clients metrics jobs\n    for context in vc_contexts:\n        if context == None:\n            continue\n        metrics_info = context.metrics_info\n\n        scrape_interval = PROMETHEUS_DEFAULT_SCRAPE_INTERVAL\n        labels = {\n            \"service\": context.service_name,\n            \"client_type\": VC_TYPE,\n            \"client_name\": context.client_name,\n        }\n\n        metrics_jobs.append(\n            new_metrics_job(\n                job_name=metrics_info[METRICS_INFO_NAME_KEY],\n                endpoint=metrics_info[METRICS_INFO_URL_KEY],\n                metrics_path=metrics_info[METRICS_INFO_PATH_KEY],\n                labels=labels,\n                scrape_interval=scrape_interval,\n            )\n        )\n\n    # Adding validator clients metrics jobs\n    for context in remote_signer_contexts:\n        if context == None:\n            continue\n        metrics_info = context.metrics_info\n\n        scrape_interval = PROMETHEUS_DEFAULT_SCRAPE_INTERVAL\n        labels = {\n            \"service\": context.service_name,\n            \"client_type\": REMOTE_SIGNER_TYPE,\n            \"client_name\": context.client_name,\n        }\n\n        metrics_jobs.append(\n            new_metrics_job(\n                job_name=metrics_info[METRICS_INFO_NAME_KEY],\n                endpoint=metrics_info[METRICS_INFO_URL_KEY],\n                metrics_path=metrics_info[METRICS_INFO_PATH_KEY],\n                labels=labels,\n                scrape_interval=scrape_interval,\n            )\n        )\n\n    # Adding ethereum-metrics-exporter metrics jobs\n    for context in ethereum_metrics_exporter_contexts:\n        if context != None:\n            metrics_jobs.append(\n                new_metrics_job(\n                    job_name=\"ethereum-metrics-exporter-{0}\".format(context.pair_name),\n                    endpoint=\"{}:{}\".format(\n                        context.ip_addr,\n                        context.metrics_port_num,\n                    ),\n                    metrics_path=\"/metrics\",\n                    labels={\n                        \"instance\": context.pair_name,\n                        \"consensus_client\": context.cl_name,\n                        \"execution_client\": context.el_name,\n                        \"network\": network_params.network,\n                        \"testnet\": network_params.network,\n                        \"chain_id\": \"{0}\".format(\n                            network_params.network_id\n                            if network_params.network == constants.NETWORK_NAME.kurtosis\n                            else constants.NETWORK_ID[network_params.network]\n                        ),\n                    },\n                )\n            )\n    # Adding Xatu Sentry metrics jobs\n    for context in xatu_sentry_contexts:\n        if context != None:\n            metrics_jobs.append(\n                new_metrics_job(\n                    job_name=\"xatu-sentry-{0}\".format(context.pair_name),\n                    endpoint=\"{}:{}\".format(\n                        context.ip_addr,\n                        context.metrics_port_num,\n                    ),\n                    metrics_path=\"/metrics\",\n                    labels={\n                        \"pair\": context.pair_name,\n                    },\n                )\n            )\n\n    # Adding additional metrics jobs\n    for job in additional_metrics_jobs:\n        if job == None:\n            continue\n        metrics_jobs.append(job)\n\n    return metrics_jobs\n\n\ndef new_metrics_job(\n    job_name,\n    endpoint,\n    metrics_path,\n    labels,\n    scrape_interval=PROMETHEUS_DEFAULT_SCRAPE_INTERVAL,\n):\n    return {\n        \"Name\": job_name,\n        \"Endpoint\": endpoint,\n        \"MetricsPath\": metrics_path,\n        \"Labels\": labels,\n        \"ScrapeInterval\": scrape_interval,\n    }\n"
  },
  {
    "path": "src/rakoon/rakoon.star",
    "content": "shared_utils = import_module(\"../shared_utils/shared_utils.star\")\ninput_parser = import_module(\"../package_io/input_parser.star\")\nSERVICE_NAME = \"rakoon\"\n\n# The min/max CPU/memory that rakoon can use\nMIN_CPU = 100\nMAX_CPU = 1000\nMIN_MEMORY = 100\nMAX_MEMORY = 500\n\n# Rakoon uses prefunded account index 14\nPREFUNDED_ACCOUNT_INDEX = 14\n\n\ndef launch_rakoon(\n    plan,\n    prefunded_addresses,\n    el_uri,\n    rakoon_params,\n    genesis_delay,\n    global_node_selectors,\n    global_tolerations,\n):\n    tolerations = shared_utils.get_tolerations(global_tolerations=global_tolerations)\n\n    config = get_config(\n        prefunded_addresses,\n        el_uri,\n        rakoon_params,\n        genesis_delay,\n        global_node_selectors,\n        tolerations,\n    )\n    plan.add_service(SERVICE_NAME, config)\n\n\ndef get_config(\n    prefunded_addresses,\n    el_uri,\n    rakoon_params,\n    genesis_delay,\n    node_selectors,\n    tolerations,\n):\n    start_delay = genesis_delay + 10\n    cmd = [\n        \"rakoon\",\n        \"--key={0}\".format(prefunded_addresses[PREFUNDED_ACCOUNT_INDEX].private_key),\n        \"--url={0}\".format(el_uri),\n        \"--tx-type={0}\".format(rakoon_params.tx_type),\n        \"--workers={0}\".format(rakoon_params.workers),\n        \"--batch-size={0}\".format(rakoon_params.batch_size),\n        \"--start-delay={0}\".format(start_delay),\n    ]\n\n    # Add optional parameters if configured\n    if rakoon_params.seed != \"\":\n        cmd.append(\"--seed={0}\".format(rakoon_params.seed))\n\n    if rakoon_params.fuzzing:\n        cmd.append(\"--fuzzing\")\n\n    if rakoon_params.poll_interval != \"\":\n        cmd.append(\"--poll-interval={0}\".format(rakoon_params.poll_interval))\n\n    # Add any extra user-provided arguments\n    if len(rakoon_params.extra_args) > 0:\n        cmd.extend([param for param in rakoon_params.extra_args])\n\n    return ServiceConfig(\n        image=rakoon_params.image,\n        cmd=cmd,\n        min_cpu=MIN_CPU,\n        max_cpu=MAX_CPU,\n        min_memory=MIN_MEMORY,\n        max_memory=MAX_MEMORY,\n        node_selectors=node_selectors,\n        tolerations=tolerations,\n    )\n"
  },
  {
    "path": "src/remote_signer/remote_signer_context.star",
    "content": "def new_remote_signer_context(\n    http_url,\n    client_name,\n    service_name,\n    metrics_info,\n):\n    return struct(\n        http_url=http_url,\n        client_name=client_name,\n        service_name=service_name,\n        metrics_info=metrics_info,\n    )\n"
  },
  {
    "path": "src/remote_signer/remote_signer_launcher.star",
    "content": "constants = import_module(\"../package_io/constants.star\")\ninput_parser = import_module(\"../package_io/input_parser.star\")\nnode_metrics = import_module(\"../node_metrics_info.star\")\nremote_signer_context = import_module(\"./remote_signer_context.star\")\nshared_utils = import_module(\"../shared_utils/shared_utils.star\")\n\nREMOTE_SIGNER_KEYS_MOUNTPOINT = \"/keystores\"\n\nREMOTE_SIGNER_HTTP_PORT_NUM = 9000\nREMOTE_SIGNER_HTTP_PORT_ID = \"http\"\nREMOTE_SIGNER_METRICS_PORT_NUM = 9001\nREMOTE_SIGNER_METRICS_PORT_ID = \"metrics\"\n\nMETRICS_PATH = \"/metrics\"\n\nREMOTE_SIGNER_USED_PORTS = {\n    REMOTE_SIGNER_HTTP_PORT_ID: shared_utils.new_port_spec(\n        REMOTE_SIGNER_HTTP_PORT_NUM,\n        shared_utils.TCP_PROTOCOL,\n        shared_utils.HTTP_APPLICATION_PROTOCOL,\n    ),\n    REMOTE_SIGNER_METRICS_PORT_ID: shared_utils.new_port_spec(\n        REMOTE_SIGNER_METRICS_PORT_NUM,\n        shared_utils.TCP_PROTOCOL,\n        shared_utils.HTTP_APPLICATION_PROTOCOL,\n    ),\n}\n\n# The min/max CPU/memory that the remote signer can use\nMIN_CPU = 50\nMAX_CPU = 300\nMIN_MEMORY = 128\nMAX_MEMORY = 1024\n\n\ndef launch(\n    plan,\n    launcher,\n    service_name,\n    remote_signer_type,\n    image,\n    full_name,\n    vc_type,\n    node_keystore_files,\n    participant,\n    global_tolerations,\n    node_selectors,\n    port_publisher,\n    remote_signer_index,\n):\n    tolerations = shared_utils.get_tolerations(\n        specific_container_tolerations=participant.remote_signer_tolerations,\n        participant_tolerations=participant.tolerations,\n        global_tolerations=global_tolerations,\n    )\n\n    config = get_config(\n        participant=participant,\n        el_cl_genesis_data=launcher.el_cl_genesis_data,\n        image=image,\n        vc_type=vc_type,\n        node_keystore_files=node_keystore_files,\n        tolerations=tolerations,\n        node_selectors=node_selectors,\n        port_publisher=port_publisher,\n        remote_signer_index=remote_signer_index,\n    )\n\n    remote_signer_service = plan.add_service(service_name, config)\n\n    remote_signer_http_port = remote_signer_service.ports[REMOTE_SIGNER_HTTP_PORT_ID]\n    remote_signer_http_url = \"http://{0}:{1}\".format(\n        remote_signer_service.name, remote_signer_http_port.number\n    )\n\n    remote_signer_metrics_port = remote_signer_service.ports[\n        REMOTE_SIGNER_METRICS_PORT_ID\n    ]\n    validator_metrics_url = \"{0}:{1}\".format(\n        remote_signer_service.name, remote_signer_metrics_port.number\n    )\n    remote_signer_node_metrics_info = node_metrics.new_node_metrics_info(\n        service_name, METRICS_PATH, validator_metrics_url\n    )\n\n    return remote_signer_context.new_remote_signer_context(\n        http_url=remote_signer_http_url,\n        client_name=remote_signer_type,\n        service_name=service_name,\n        metrics_info=remote_signer_node_metrics_info,\n    )\n\n\ndef get_config(\n    participant,\n    el_cl_genesis_data,\n    image,\n    vc_type,\n    node_keystore_files,\n    tolerations,\n    node_selectors,\n    port_publisher,\n    remote_signer_index,\n):\n    validator_keys_dirpath = \"\"\n    if node_keystore_files != None:\n        validator_keys_dirpath = shared_utils.path_join(\n            REMOTE_SIGNER_KEYS_MOUNTPOINT,\n            node_keystore_files.teku_keys_relative_dirpath,\n        )\n        validator_secrets_dirpath = shared_utils.path_join(\n            REMOTE_SIGNER_KEYS_MOUNTPOINT,\n            node_keystore_files.teku_secrets_relative_dirpath,\n        )\n\n    cmd = [\n        \"--http-listen-port={0}\".format(REMOTE_SIGNER_HTTP_PORT_NUM),\n        \"--http-host-allowlist=*\",\n        \"--metrics-enabled=true\",\n        \"--metrics-host-allowlist=*\",\n        \"--metrics-host=0.0.0.0\",\n        \"--metrics-port={0}\".format(REMOTE_SIGNER_METRICS_PORT_NUM),\n        \"eth2\",\n        \"--network=\"\n        + constants.GENESIS_CONFIG_MOUNT_PATH_ON_CONTAINER\n        + \"/config.yaml\",\n        \"--keystores-path=\" + validator_keys_dirpath,\n        \"--keystores-passwords-path=\" + validator_secrets_dirpath,\n        # slashing protection would require a postgres DB, applying DB migrations ...\n        \"--slashing-protection-enabled=false\",\n    ]\n\n    if len(participant.remote_signer_extra_params) > 0:\n        # this is a repeated<proto type>, we convert it into Starlark\n        cmd.extend([param for param in participant.remote_signer_extra_params])\n\n    files = {\n        constants.GENESIS_DATA_MOUNTPOINT_ON_CLIENTS: el_cl_genesis_data.files_artifact_uuid,\n        REMOTE_SIGNER_KEYS_MOUNTPOINT: node_keystore_files.files_artifact_uuid,\n    }\n\n    public_ports = {}\n    if port_publisher.remote_signer_enabled:\n        public_ports_for_component = shared_utils.get_public_ports_for_component(\n            \"remote-signer\", port_publisher, remote_signer_index\n        )\n        public_port_assignments = {\n            constants.METRICS_PORT_ID: public_ports_for_component[0]\n        }\n        public_ports = shared_utils.get_port_specs(public_port_assignments)\n\n    ports = {}\n    ports.update(REMOTE_SIGNER_USED_PORTS)\n\n    config_args = {\n        \"image\": image,\n        \"ports\": ports,\n        \"public_ports\": public_ports,\n        \"publish_udp\": port_publisher.remote_signer_enabled,\n        \"cmd\": cmd,\n        \"files\": files,\n        \"env_vars\": participant.remote_signer_extra_env_vars,\n        \"labels\": shared_utils.label_maker(\n            client=constants.REMOTE_SIGNER_TYPE.web3signer,\n            client_type=constants.CLIENT_TYPES.remote_signer,\n            image=image,\n            connected_client=vc_type,\n            extra_labels=participant.remote_signer_extra_labels\n            | {constants.NODE_INDEX_LABEL_KEY: str(remote_signer_index + 1)},\n            supernode=participant.supernode,\n        ),\n        \"tolerations\": tolerations,\n        \"node_selectors\": node_selectors,\n    }\n\n    if participant.remote_signer_min_cpu > 0:\n        config_args[\"min_cpu\"] = participant.remote_signer_min_cpu\n    if participant.remote_signer_max_cpu > 0:\n        config_args[\"max_cpu\"] = participant.remote_signer_max_cpu\n    if participant.remote_signer_min_mem > 0:\n        config_args[\"min_memory\"] = participant.remote_signer_min_mem\n    if participant.remote_signer_max_mem > 0:\n        config_args[\"max_memory\"] = participant.remote_signer_max_mem\n\n    return ServiceConfig(**config_args)\n\n\ndef new_remote_signer_launcher(el_cl_genesis_data):\n    return struct(el_cl_genesis_data=el_cl_genesis_data)\n"
  },
  {
    "path": "src/shared_utils/shared_utils.star",
    "content": "constants = import_module(\"../package_io/constants.star\")\n\nTCP_PROTOCOL = \"TCP\"\nUDP_PROTOCOL = \"UDP\"\nHTTP_APPLICATION_PROTOCOL = \"http\"\nWS_APPLICATION_PROTOCOL = \"ws\"\nNOT_PROVIDED_APPLICATION_PROTOCOL = \"\"\nNOT_PROVIDED_WAIT = \"not-provided-wait\"\n\nMAX_PORTS_PER_CL_NODE = 7\nMAX_PORTS_PER_EL_NODE = 7\nMAX_PORTS_PER_VC_NODE = 3\nMAX_PORTS_PER_REMOTE_SIGNER_NODE = 2\nMAX_PORTS_PER_ADDITIONAL_SERVICE = 2\nMAX_PORTS_PER_MEV_NODE = 2\nMAX_PORTS_PER_OTHER_NODE = 1\n\n\ndef new_template_and_data(template, template_data_json):\n    return struct(template=template, data=template_data_json)\n\n\ndef path_join(*args):\n    joined_path = \"/\".join(args)\n    return joined_path.replace(\"//\", \"/\")\n\n\ndef path_base(path):\n    split_path = path.split(\"/\")\n    return split_path[-1]\n\n\ndef path_dir(path):\n    split_path = path.split(\"/\")\n    if len(split_path) <= 1:\n        return \".\"\n    split_path = split_path[:-1]\n    return \"/\".join(split_path) or \"/\"\n\n\ndef new_port_spec(\n    number,\n    transport_protocol,\n    application_protocol=NOT_PROVIDED_APPLICATION_PROTOCOL,\n    wait=NOT_PROVIDED_WAIT,\n):\n    if wait == NOT_PROVIDED_WAIT:\n        return PortSpec(\n            number=number,\n            transport_protocol=transport_protocol,\n            application_protocol=application_protocol,\n        )\n\n    return PortSpec(\n        number=number,\n        transport_protocol=transport_protocol,\n        application_protocol=application_protocol,\n        wait=wait,\n    )\n\n\ndef read_file_from_service(plan, service_name, filename):\n    output = plan.exec(\n        service_name=service_name,\n        description=\"Reading {} from {}\".format(filename, service_name),\n        recipe=ExecRecipe(\n            command=[\"/bin/sh\", \"-c\", \"cat {} | tr -d '\\n'\".format(filename)]\n        ),\n    )\n    return output[\"output\"]\n\n\ndef zfill_custom(value, width):\n    return (\"0\" * (width - len(str(value)))) + str(value)\n\n\ndef label_maker(\n    client, client_type, image, connected_client, extra_labels, supernode=False\n):\n    # Extract sha256 hash if present\n    sha256 = \"\"\n    if \"@sha256:\" in image:\n        sha256 = image.split(\"@sha256:\")[-1][:8]\n\n    # Create the labels dictionary\n    labels = {\n        \"ethereum-package.client\": client,\n        \"ethereum-package.client-type\": client_type,\n        \"ethereum-package.client-image\": ensure_alphanumeric_bounds(\n            image.replace(\"/\", \"-\").replace(\":\", \"_\").replace(\".\", \"-\").split(\"@\")[0]\n        ),  # drop the sha256 part of the image from the label\n        \"ethereum-package.sha256\": sha256,\n        \"ethereum-package.connected-client\": connected_client,\n    }\n\n    if supernode:\n        labels[\"ethereum-package.supernode\"] = str(supernode)\n\n    # Automatically add client language label if client is known\n    if client in constants.CLIENT_LANGUAGES:\n        labels[constants.CLIENT_LANGUAGE_LABEL_KEY] = constants.CLIENT_LANGUAGES[client]\n\n    # Add extra_labels to the labels dictionary\n    labels.update(extra_labels)\n\n    return labels\n\n\ndef get_devnet_enodes(plan, filename):\n    enode_list = plan.run_sh(\n        description=\"Getting devnet enodes\",\n        files={constants.GENESIS_DATA_MOUNTPOINT_ON_CLIENTS: filename},\n        wait=None,\n        run=\"cat /network-configs/enodes.txt | tr -d ' ' | tr '\\n' ',' | sed 's/,$//'\",\n    )\n    return enode_list.output\n\n\ndef get_devnet_enrs_list(plan, filename):\n    enr_list = plan.run_sh(\n        description=\"Creating devnet enrs list\",\n        files={constants.GENESIS_DATA_MOUNTPOINT_ON_CLIENTS: filename},\n        wait=None,\n        run=\"cat /network-configs/bootstrap_nodes.txt | tr -d ' ' | tr '\\n' ',' | sed 's/,$//'\",\n    )\n    return enr_list.output\n\n\ndef read_genesis_timestamp_from_config(plan, filename):\n    value = plan.run_sh(\n        description=\"Reading genesis timestamp from config\",\n        files={constants.GENESIS_DATA_MOUNTPOINT_ON_CLIENTS: filename},\n        wait=None,\n        image=constants.DEFAULT_YQ_IMAGE,\n        run=\"MIN_GENESIS_TIME=$(cat /network-configs/config.yaml | yq .MIN_GENESIS_TIME | tr -d '\\n') && \\\n            GENESIS_DELAY=$(cat /network-configs/config.yaml | yq .GENESIS_DELAY | tr -d '\\n') && \\\n            echo -n $((MIN_GENESIS_TIME + GENESIS_DELAY))\",\n    )\n    return value.output\n\n\ndef read_genesis_network_id_from_config(plan, filename):\n    value = plan.run_sh(\n        description=\"Reading genesis network id from config\",\n        files={constants.GENESIS_DATA_MOUNTPOINT_ON_CLIENTS: filename},\n        wait=None,\n        image=constants.DEFAULT_YQ_IMAGE,\n        run=\"cat /network-configs/config.yaml | yq .DEPOSIT_NETWORK_ID | tr -d '\\n'\",\n    )\n    return value.output\n\n\ndef get_network_name(network):\n    network_name = network\n    if (\n        network != constants.NETWORK_NAME.kurtosis\n        and network != constants.NETWORK_NAME.ephemery\n        and constants.NETWORK_NAME.shadowfork not in network\n        and network not in constants.PUBLIC_NETWORKS\n    ):\n        network_name = \"devnets\"\n\n    if constants.NETWORK_NAME.shadowfork in network:\n        network_name = network.split(\"-shadowfork\")[0]\n\n    return network_name\n\n\n# this is a python procedure so that Kurtosis can do idempotent runs\n# time.now() runs everytime bringing non determinism\n# note that the timestamp it returns is a string\ndef get_final_genesis_timestamp(plan, padding):\n    result = plan.run_sh(\n        description=\"Getting final genesis timestamp\",\n        name=\"read-genesis-timestamp\",\n        run=\"echo -n $(($(date +%s) + \" + str(padding) + \"))\",\n        store=[StoreSpec(src=\"/tmp\", name=\"final-genesis-timestamp\")],\n    )\n    return result.output\n\n\ndef calculate_devnet_url(network, repo):\n    sf_suffix_mapping = {\"hsf\": \"-hsf-\", \"gsf\": \"-gsf-\", \"ssf\": \"-ssf-\"}\n    shadowfork = \"sf-\" in network\n\n    if shadowfork:\n        for suffix, delimiter in sf_suffix_mapping.items():\n            if delimiter in network:\n                network_parts = network.split(delimiter, 1)\n                network_type = suffix\n    else:\n        network_parts = network.split(\"-devnet-\", 1)\n        network_type = \"devnet\"\n\n    devnet_name, devnet_number = network_parts[0], network_parts[1]\n    devnet_category = devnet_name.split(\"-\")[0]\n    devnet_subname = (\n        devnet_name.split(\"-\")[1] + \"-\" if len(devnet_name.split(\"-\")) > 1 else \"\"\n    )\n\n    return \"github.com/{0}/{1}-devnets/network-configs/{2}{3}-{4}/metadata\".format(\n        repo, devnet_category, devnet_subname, network_type, devnet_number\n    )\n\n\ndef get_client_names(participant, index, participant_contexts, participant_configs):\n    index_str = zfill_custom(index + 1, len(str(len(participant_contexts))))\n    participant_config = participant_configs[index]\n    cl_client = participant.cl_context\n    el_client = participant.el_context\n    vc_client = participant.vc_context\n    full_name = (\n        \"{0}-{1}-{2}\".format(index_str, el_client.client_name, cl_client.client_name)\n        + \"-{0}\".format(vc_client.client_name)\n        if vc_client != None and cl_client.client_name != vc_client.client_name\n        else \"{0}-{1}-{2}\".format(\n            index_str, el_client.client_name, cl_client.client_name\n        )\n    )\n    return full_name, cl_client, el_client, participant_config\n\n\ndef get_public_ports_for_component(\n    component, port_publisher_params, participant_index=None\n):\n    public_port_range = ()\n    if component == \"cl\":\n        public_port_range = __get_port_range(\n            port_publisher_params.cl_public_port_start,\n            MAX_PORTS_PER_CL_NODE,\n            participant_index,\n        )\n    elif component == \"el\":\n        public_port_range = __get_port_range(\n            port_publisher_params.el_public_port_start,\n            MAX_PORTS_PER_EL_NODE,\n            participant_index,\n        )\n    elif component == \"vc\":\n        public_port_range = __get_port_range(\n            port_publisher_params.vc_public_port_start,\n            MAX_PORTS_PER_VC_NODE,\n            participant_index,\n        )\n    elif component == \"remote-signer\":\n        public_port_range = __get_port_range(\n            port_publisher_params.remote_signer_public_port_start,\n            MAX_PORTS_PER_REMOTE_SIGNER_NODE,\n            participant_index,\n        )\n    elif component == \"additional_services\":\n        public_port_range = __get_port_range(\n            port_publisher_params.additional_services_public_port_start,\n            MAX_PORTS_PER_ADDITIONAL_SERVICE,\n            participant_index,\n        )\n    elif component == \"mev\":\n        public_port_range = __get_port_range(\n            port_publisher_params.mev_public_port_start,\n            MAX_PORTS_PER_MEV_NODE,\n            participant_index,\n        )\n    elif component == \"other\":\n        public_port_range = __get_port_range(\n            port_publisher_params.other_public_port_start,\n            MAX_PORTS_PER_OTHER_NODE,\n            participant_index,\n        )\n    return [port for port in range(public_port_range[0], public_port_range[1], 1)]\n\n\ndef __get_port_range(port_start, max_ports_per_component, participant_index):\n    if participant_index == 0:\n        public_port_start = port_start\n        public_port_end = public_port_start + max_ports_per_component\n    else:\n        public_port_start = port_start + (max_ports_per_component * participant_index)\n        public_port_end = public_port_start + max_ports_per_component\n    return (public_port_start, public_port_end)\n\n\ndef get_port_specs(port_assignments, wait=NOT_PROVIDED_WAIT):\n    ports = {}\n    for port_id, port in port_assignments.items():\n        if port_id in [\n            constants.TCP_DISCOVERY_PORT_ID,\n            constants.RPC_PORT_ID,\n            constants.ENGINE_RPC_PORT_ID,\n            constants.ENGINE_WS_PORT_ID,\n            constants.WS_RPC_PORT_ID,\n            constants.LITTLE_BIGTABLE_PORT_ID,\n            constants.WS_PORT_ID,\n            constants.PROFILING_PORT_ID,\n        ]:\n            ports.update({port_id: new_port_spec(port, TCP_PROTOCOL, wait=wait)})\n        elif port_id in [\n            constants.UDP_DISCOVERY_PORT_ID,\n            constants.QUIC_DISCOVERY_PORT_ID,\n            constants.TORRENT_PORT_ID,\n        ]:\n            ports.update({port_id: new_port_spec(port, UDP_PROTOCOL, wait=wait)})\n        elif port_id == constants.DEBUG_PORT_ID:\n            ports.update(\n                {\n                    port_id: new_port_spec(\n                        port, TCP_PROTOCOL, WS_APPLICATION_PROTOCOL, wait=None\n                    )\n                }\n            )\n        elif port_id in [\n            constants.HTTP_PORT_ID,\n            constants.METRICS_PORT_ID,\n            constants.VALIDATOR_HTTP_PORT_ID,\n            constants.ADMIN_PORT_ID,\n            constants.VALIDATOR_GRPC_PORT_ID,\n            constants.RBUILDER_PORT_ID,\n            constants.RBUILDER_METRICS_PORT_ID,\n        ]:\n            ports.update(\n                {\n                    port_id: new_port_spec(\n                        port, TCP_PROTOCOL, HTTP_APPLICATION_PROTOCOL, wait=wait\n                    )\n                }\n            )\n        else:\n            fail(\"Unknown port id: {}\".format(port_id))\n    return ports\n\n\ndef get_additional_service_standard_public_port(\n    port_publisher, port_id, additional_service_index, port_index\n):\n    public_ports = {}\n    if port_publisher.additional_services_enabled:\n        public_ports_for_component = get_public_ports_for_component(\n            \"additional_services\", port_publisher, additional_service_index\n        )\n        public_ports = get_port_specs({port_id: public_ports_for_component[port_index]})\n    return public_ports\n\n\ndef get_mev_public_port(port_publisher, port_id, additional_service_index, port_index):\n    public_ports = {}\n    if port_publisher.mev_enabled:\n        public_ports_for_component = get_public_ports_for_component(\n            \"mev\", port_publisher, additional_service_index\n        )\n        public_ports = get_port_specs({port_id: public_ports_for_component[port_index]})\n    return public_ports\n\n\ndef get_other_public_port(\n    port_publisher, port_id, additional_service_index, port_index\n):\n    public_ports = {}\n    if port_publisher.other_enabled:\n        public_ports_for_component = get_public_ports_for_component(\n            \"other\", port_publisher, additional_service_index\n        )\n        public_ports = get_port_specs({port_id: public_ports_for_component[port_index]})\n    return public_ports\n\n\ndef get_cpu_mem_resource_limits(\n    min_cpu, max_cpu, min_mem, max_mem, volume_size, network_name, client_type\n):\n    min_cpu = int(min_cpu) if int(min_cpu) > 0 else 0\n    max_cpu = int(max_cpu) if int(max_cpu) > 0 else 0\n    min_mem = int(min_mem) if int(min_mem) > 0 else 0\n    max_mem = int(max_mem) if int(max_mem) > 0 else 0\n    volume_size = (\n        int(volume_size)\n        if int(volume_size) > 0\n        else constants.VOLUME_SIZE[network_name][client_type + \"_volume_size\"]\n    )\n    return min_cpu, max_cpu, min_mem, max_mem, volume_size\n\n\ndef docker_cache_image_calc(docker_cache_params, image):\n    if docker_cache_params.enabled:\n        if docker_cache_params.url in image:\n            return image\n        if constants.CONTAINER_REGISTRY.ghcr in image:\n            return (\n                docker_cache_params.url\n                + docker_cache_params.github_prefix\n                + \"/\".join(image.split(\"/\")[1:])\n            )\n        elif constants.CONTAINER_REGISTRY.gcr in image:\n            return (\n                docker_cache_params.url\n                + docker_cache_params.gcr_prefix\n                + \"/\".join(image.split(\"/\")[1:])\n            )\n        elif constants.CONTAINER_REGISTRY.dockerhub in image:\n            return (\n                docker_cache_params.url + docker_cache_params.dockerhub_prefix + image\n            )\n\n    return image\n\n\ndef is_alphanumeric(c):\n    return (\"a\" <= c and c <= \"z\") or (\"A\" <= c and c <= \"Z\") or (\"0\" <= c and c <= \"9\")\n\n\ndef ensure_alphanumeric_bounds(s):\n    # Trim from the start\n    start = 0\n    for i in range(len(s)):\n        if is_alphanumeric(s[i]):\n            start = i\n            break\n\n    # Trim from the end\n    end = len(s)\n    for i in range(len(s) - 1, -1, -1):\n        if is_alphanumeric(s[i]):\n            end = i + 1\n            break\n\n    return s[start:end]\n\n\ndef process_extra_mounts(plan, extra_mounts, extra_files_artifacts={}):\n    \"\"\"\n    Process extra mounts by resolving extra_files references ONLY.\n\n    Args:\n        plan: The Kurtosis plan object\n        extra_mounts: Dictionary where keys are mount paths and values are extra_file names\n        extra_files_artifacts: Dictionary of extra files artifacts from extra_files\n\n    Returns:\n        Dictionary where keys are mount paths and values are artifact names/objects\n    \"\"\"\n    if not extra_mounts:\n        return {}\n\n    processed_mounts = {}\n    for mount_path, source in extra_mounts.items():\n        # Non-string values (Files artifacts or other objects) - use directly\n        if type(source) != \"string\":\n            processed_mounts[mount_path] = source\n            continue\n\n        # Source MUST be an extra_files reference\n        if source not in extra_files_artifacts:\n            fail(\n                \"Mount source '\"\n                + source\n                + \"' not found in extra_files. All extra_mounts must reference files defined in extra_files.\"\n            )\n\n        processed_mounts[mount_path] = extra_files_artifacts[source]\n\n    return processed_mounts\n\n\ndef get_tolerations(\n    specific_container_tolerations=[], participant_tolerations=[], global_tolerations=[]\n):\n    toleration_list = []\n    tolerations = []\n    tolerations = (\n        specific_container_tolerations if specific_container_tolerations else []\n    )\n    if not tolerations:\n        tolerations = participant_tolerations if participant_tolerations else []\n        if not tolerations:\n            tolerations = global_tolerations if global_tolerations else []\n    if tolerations != []:\n        for toleration_data in tolerations:\n            if toleration_data.get(\"toleration_seconds\"):\n                toleration_list.append(\n                    Toleration(\n                        key=toleration_data.get(\"key\", \"\"),\n                        value=toleration_data.get(\"value\", \"\"),\n                        operator=toleration_data.get(\"operator\", \"\"),\n                        effect=toleration_data.get(\"effect\", \"\"),\n                        toleration_seconds=toleration_data.get(\"toleration_seconds\"),\n                    )\n                )\n            else:\n                toleration_list.append(\n                    Toleration(\n                        key=toleration_data.get(\"key\", \"\"),\n                        value=toleration_data.get(\"value\", \"\"),\n                        operator=toleration_data.get(\"operator\", \"\"),\n                        effect=toleration_data.get(\"effect\", \"\"),\n                    )\n                )\n    return toleration_list\n\n\ndef add_services_with_force_restart(\n    plan, service_configs, participant_info, force_restart_attr\n):\n    force_restart_names = [\n        name\n        for name in service_configs.keys()\n        if getattr(participant_info[name][\"participant\"], force_restart_attr, False)\n        == True\n    ]\n\n    regular_configs = {\n        k: v for k, v in service_configs.items() if k not in force_restart_names\n    }\n\n    services = {}\n    if len(regular_configs) > 0:\n        services = plan.add_services(regular_configs)\n\n    for service_name in force_restart_names:\n        services[service_name] = plan.add_service(\n            service_name, service_configs[service_name], force_update=True\n        )\n\n    return services\n"
  },
  {
    "path": "src/slashoor/slashoor_launcher.star",
    "content": "shared_utils = import_module(\"../shared_utils/shared_utils.star\")\nconstants = import_module(\"../package_io/constants.star\")\n\nSERVICE_NAME = \"slashoor\"\n\nSLASHOOR_CONFIG_FILENAME = \"config.yaml\"\nSLASHOOR_CONFIG_MOUNT_DIRPATH_ON_SERVICE = \"/config\"\n\n\ndef launch_slashoor(\n    plan,\n    config_template,\n    participant_contexts,\n    participant_configs,\n    slashoor_params,\n    global_node_selectors,\n    global_tolerations,\n    network_params,\n    additional_services,\n):\n    tolerations = shared_utils.get_tolerations(global_tolerations=global_tolerations)\n\n    beacon_endpoints = []\n    for index, participant in enumerate(participant_contexts):\n        beacon_http_url = participant.cl_context.beacon_http_url\n        beacon_endpoints.append(beacon_http_url)\n\n    dora_url = get_dora_url(slashoor_params, network_params, additional_services)\n\n    template_data = new_config_template_data(\n        beacon_endpoints,\n        slashoor_params,\n        dora_url,\n    )\n\n    template_and_data = shared_utils.new_template_and_data(\n        config_template, template_data\n    )\n    template_and_data_by_rel_dest_filepath = {\n        SLASHOOR_CONFIG_FILENAME: template_and_data,\n    }\n\n    config_files_artifact_name = plan.render_templates(\n        template_and_data_by_rel_dest_filepath, \"slashoor-config\"\n    )\n\n    config = get_config(\n        plan,\n        config_files_artifact_name,\n        slashoor_params,\n        global_node_selectors,\n        tolerations,\n    )\n    plan.add_service(SERVICE_NAME, config)\n\n\ndef get_config(\n    plan,\n    config_files_artifact_name,\n    slashoor_params,\n    node_selectors,\n    tolerations,\n):\n    config_file_path = shared_utils.path_join(\n        SLASHOOR_CONFIG_MOUNT_DIRPATH_ON_SERVICE,\n        SLASHOOR_CONFIG_FILENAME,\n    )\n\n    cmd = [\n        \"--config={}\".format(config_file_path),\n    ]\n\n    if slashoor_params.log_level:\n        cmd.append(\"--log-level={}\".format(slashoor_params.log_level))\n\n    for extra_arg in slashoor_params.extra_args:\n        cmd.append(extra_arg)\n\n    return ServiceConfig(\n        image=slashoor_params.image,\n        cmd=cmd,\n        min_cpu=slashoor_params.min_cpu,\n        max_cpu=slashoor_params.max_cpu,\n        min_memory=slashoor_params.min_mem,\n        max_memory=slashoor_params.max_mem,\n        node_selectors=node_selectors,\n        tolerations=tolerations,\n        files={\n            SLASHOOR_CONFIG_MOUNT_DIRPATH_ON_SERVICE: config_files_artifact_name,\n        },\n    )\n\n\ndef new_config_template_data(\n    beacon_endpoints,\n    slashoor_params,\n    dora_url,\n):\n    return {\n        \"BeaconEndpoints\": beacon_endpoints,\n        \"BeaconTimeout\": slashoor_params.beacon_timeout,\n        \"MaxEpochsToKeep\": slashoor_params.max_epochs_to_keep,\n        \"BackfillSlots\": slashoor_params.backfill_slots,\n        \"DetectorEnabled\": slashoor_params.detector_enabled,\n        \"ProposerEnabled\": slashoor_params.proposer_enabled,\n        \"SubmitterEnabled\": slashoor_params.submitter_enabled,\n        \"SubmitterDryRun\": slashoor_params.submitter_dry_run,\n        \"DoraEnabled\": slashoor_params.dora_enabled,\n        \"DoraURL\": dora_url,\n        \"DoraScanOnStartup\": slashoor_params.dora_scan_on_startup,\n    }\n\n\ndef get_dora_url(slashoor_params, network_params, additional_services):\n    if slashoor_params.dora_url:\n        return slashoor_params.dora_url\n\n    if \"dora\" in additional_services:\n        return \"http://dora:8080\"\n\n    network = network_params.network\n    if network in constants.PUBLIC_NETWORKS or \"devnet\" in network:\n        return \"https://dora.{}.ethpandaops.io\".format(network)\n\n    return \"\"\n"
  },
  {
    "path": "src/snooper/snooper_beacon_context.star",
    "content": "def new_snooper_beacon_client_context(ip_addr, beacon_rpc_port_num, dns_name):\n    return struct(\n        ip_addr=ip_addr,\n        beacon_rpc_port_num=beacon_rpc_port_num,\n        dns_name=dns_name,\n    )\n"
  },
  {
    "path": "src/snooper/snooper_beacon_launcher.star",
    "content": "shared_utils = import_module(\"../shared_utils/shared_utils.star\")\nconstants = import_module(\"../package_io/constants.star\")\ninput_parser = import_module(\"../package_io/input_parser.star\")\ncl_context = import_module(\"../cl/cl_context.star\")\nsnooper_beacon_context = import_module(\"../snooper/snooper_beacon_context.star\")\n\nSNOOPER_BEACON_RPC_PORT_NUM = 8562\nSNOOPER_BEACON_RPC_PORT_ID = \"http\"\nSNOOPER_BINARY_COMMAND = \"./json_rpc_snoop\"\n\nSNOOPER_USED_PORTS = {\n    SNOOPER_BEACON_RPC_PORT_ID: shared_utils.new_port_spec(\n        SNOOPER_BEACON_RPC_PORT_NUM, shared_utils.TCP_PROTOCOL, wait=\"5s\"\n    ),\n}\n\n# The min/max CPU/memory that snooper can use\nMIN_CPU = 10\nMAX_CPU = 100\nMIN_MEMORY = 10\nMAX_MEMORY = 600\n\n\ndef launch(\n    plan,\n    service_name,\n    cl_context,\n    node_selectors,\n    global_tolerations,\n    port_publisher,\n    global_other_index,\n    docker_cache_params,\n    snooper_params,\n):\n    tolerations = shared_utils.get_tolerations(global_tolerations=global_tolerations)\n\n    snooper_service_name = \"{0}\".format(service_name)\n\n    public_ports = shared_utils.get_other_public_port(\n        port_publisher,\n        SNOOPER_BEACON_RPC_PORT_ID,\n        global_other_index,\n        0,\n    )\n\n    snooper_config = get_config(\n        service_name,\n        cl_context,\n        node_selectors,\n        tolerations,\n        docker_cache_params,\n        public_ports,\n        snooper_params,\n    )\n\n    snooper_service = plan.add_service(snooper_service_name, snooper_config)\n    snooper_http_port = snooper_service.ports[SNOOPER_BEACON_RPC_PORT_ID]\n    return snooper_beacon_context.new_snooper_beacon_client_context(\n        snooper_service.ip_address,\n        SNOOPER_BEACON_RPC_PORT_NUM,\n        snooper_service.name,\n    )\n\n\ndef get_config(\n    service_name,\n    cl_context,\n    node_selectors,\n    tolerations,\n    docker_cache_params,\n    public_ports,\n    snooper_params,\n):\n    image = (\n        snooper_params.image\n        if snooper_params.image\n        else constants.DEFAULT_SNOOPER_IMAGE\n    )\n\n    beacon_rpc_port_num = \"{0}\".format(\n        cl_context.beacon_http_url,\n    )\n    cmd = [\n        SNOOPER_BINARY_COMMAND,\n        \"-b=0.0.0.0\",\n        \"-p={0}\".format(SNOOPER_BEACON_RPC_PORT_NUM),\n        \"{0}\".format(beacon_rpc_port_num),\n    ] + snooper_params.extra_args\n\n    env_vars = (\n        dict(snooper_params.extra_env_vars) if snooper_params.extra_env_vars else {}\n    )\n\n    return ServiceConfig(\n        image=shared_utils.docker_cache_image_calc(docker_cache_params, image),\n        ports=SNOOPER_USED_PORTS,\n        public_ports=public_ports,\n        cmd=cmd,\n        env_vars=env_vars,\n        min_cpu=MIN_CPU,\n        max_cpu=MAX_CPU,\n        min_memory=MIN_MEMORY,\n        max_memory=MAX_MEMORY,\n        node_selectors=node_selectors,\n        tolerations=tolerations,\n    )\n"
  },
  {
    "path": "src/snooper/snooper_el_context.star",
    "content": "def new_snooper_el_client_context(ip_addr, engine_rpc_port_num, rpc_port_num, dns_name):\n    return struct(\n        ip_addr=ip_addr,\n        engine_rpc_port_num=engine_rpc_port_num,\n        rpc_port_num=rpc_port_num,\n        dns_name=dns_name,\n    )\n"
  },
  {
    "path": "src/snooper/snooper_el_launcher.star",
    "content": "shared_utils = import_module(\"../shared_utils/shared_utils.star\")\nconstants = import_module(\"../package_io/constants.star\")\ninput_parser = import_module(\"../package_io/input_parser.star\")\nel_context = import_module(\"../el/el_context.star\")\nsnooper_el_engine_context = import_module(\"../snooper/snooper_el_context.star\")\n\nSNOOPER_ENGINE_RPC_PORT_NUM = 8561\nSNOOPER_EL_ENGINE_RPC_PORT_ID = \"engine-rpc\"\nSNOOPER_EL_RPC_PORT_NUM = 8562\nSNOOPER_EL_RPC_PORT_ID = \"http\"\nSNOOPER_BINARY_COMMAND = \"./json_rpc_snoop\"\n\n# The min/max CPU/memory that snooper can use\nMIN_CPU = 10\nMAX_CPU = 100\nMIN_MEMORY = 10\nMAX_MEMORY = 600\n\n\ndef launch_snooper(\n    plan,\n    service_name,\n    el_context,\n    node_selectors,\n    global_tolerations,\n    port_publisher,\n    global_other_index,\n    docker_cache_params,\n    snooper_params,\n):\n    tolerations = shared_utils.get_tolerations(global_tolerations=global_tolerations)\n\n    snooper_service_name = \"{0}\".format(service_name)\n\n    if \"engine\" in snooper_service_name:\n        snooper_used_ports = {\n            SNOOPER_EL_ENGINE_RPC_PORT_ID: shared_utils.new_port_spec(\n                SNOOPER_ENGINE_RPC_PORT_NUM, shared_utils.TCP_PROTOCOL, wait=\"5s\"\n            ),\n        }\n        public_ports = shared_utils.get_other_public_port(\n            port_publisher,\n            SNOOPER_EL_ENGINE_RPC_PORT_ID,\n            global_other_index,\n            0,\n        )\n    else:\n        snooper_used_ports = {\n            SNOOPER_EL_RPC_PORT_ID: shared_utils.new_port_spec(\n                SNOOPER_EL_RPC_PORT_NUM, shared_utils.TCP_PROTOCOL, wait=\"5s\"\n            ),\n        }\n        public_ports = shared_utils.get_other_public_port(\n            port_publisher,\n            SNOOPER_EL_RPC_PORT_ID,\n            global_other_index,\n            0,\n        )\n\n    snooper_config = get_config(\n        service_name,\n        el_context,\n        node_selectors,\n        tolerations,\n        docker_cache_params,\n        snooper_used_ports,\n        public_ports,\n        snooper_params,\n    )\n\n    snooper_service = plan.add_service(snooper_service_name, snooper_config)\n    return snooper_el_engine_context.new_snooper_el_client_context(\n        snooper_service.ip_address,\n        SNOOPER_ENGINE_RPC_PORT_NUM,\n        SNOOPER_EL_RPC_PORT_NUM,\n        snooper_service.name,\n    )\n\n\ndef get_config(\n    service_name,\n    el_context,\n    node_selectors,\n    tolerations,\n    docker_cache_params,\n    snooper_used_ports,\n    public_ports,\n    snooper_params,\n):\n    image = (\n        snooper_params.image\n        if snooper_params.image\n        else constants.DEFAULT_SNOOPER_IMAGE\n    )\n\n    engine_port_num = \"http://{0}:{1}\".format(\n        el_context.ip_addr,\n        el_context.engine_rpc_port_num,\n    )\n    rpc_port_num = \"http://{0}:{1}\".format(\n        el_context.ip_addr,\n        el_context.rpc_port_num,\n    )\n    cmd = [\n        SNOOPER_BINARY_COMMAND,\n        \"-b=0.0.0.0\",\n        \"-p={0}\".format(\n            SNOOPER_ENGINE_RPC_PORT_NUM\n            if \"engine\" in service_name\n            else SNOOPER_EL_RPC_PORT_NUM\n        ),\n        \"{0}\".format(engine_port_num if \"engine\" in service_name else rpc_port_num),\n    ] + snooper_params.extra_args\n\n    env_vars = (\n        dict(snooper_params.extra_env_vars) if snooper_params.extra_env_vars else {}\n    )\n\n    return ServiceConfig(\n        image=shared_utils.docker_cache_image_calc(docker_cache_params, image),\n        ports=snooper_used_ports,\n        public_ports=public_ports,\n        cmd=cmd,\n        env_vars=env_vars,\n        min_cpu=MIN_CPU,\n        max_cpu=MAX_CPU,\n        min_memory=MIN_MEMORY,\n        max_memory=MAX_MEMORY,\n        node_selectors=node_selectors,\n        tolerations=tolerations,\n    )\n"
  },
  {
    "path": "src/spamoor/spamoor.star",
    "content": "shared_utils = import_module(\"../shared_utils/shared_utils.star\")\nconstants = import_module(\"../package_io/constants.star\")\ninput_parser = import_module(\"../package_io/input_parser.star\")\nSERVICE_NAME = \"spamoor\"\n\nHTTP_PORT_ID = \"http\"\nHTTP_PORT_NUMBER = 8080\n\nSPAMOOR_CONFIG_FILENAME = \"startup-spammers.yaml\"\nSPAMOOR_HOSTS_FILENAME = \"rpc-hosts.txt\"\n\nSPAMOOR_CONFIG_MOUNT_DIRPATH_ON_SERVICE = \"/config\"\n\nUSED_PORTS = {\n    HTTP_PORT_ID: shared_utils.new_port_spec(\n        HTTP_PORT_NUMBER,\n        shared_utils.TCP_PROTOCOL,\n        shared_utils.HTTP_APPLICATION_PROTOCOL,\n    )\n}\n\n\ndef launch_spamoor(\n    plan,\n    config_template,\n    hosts_template,\n    prefunded_addresses,\n    participant_contexts,\n    participant_configs,\n    spamoor_params,\n    global_node_selectors,\n    global_tolerations,\n    network_params,\n    port_publisher,\n    additional_service_index,\n    osaka_time,\n):\n    tolerations = shared_utils.get_tolerations(global_tolerations=global_tolerations)\n\n    spammers = []\n\n    for index, spammer in enumerate(spamoor_params.spammers):\n        if (osaka_time != \"\") and \"blob\" in spammer[\"scenario\"]:\n            if \"config\" not in spammer:\n                spammer[\"config\"] = {}\n            spammer[\"config\"][\"fulu_activation\"] = osaka_time\n\n        spammers.append(spammer)\n\n    for index, participant in enumerate(participant_contexts):\n        (\n            full_name,\n            cl_client,\n            el_client,\n            participant_config,\n        ) = shared_utils.get_client_names(\n            participant, index, participant_contexts, participant_configs\n        )\n\n        if \"builder\" in full_name:\n            spammers.append(\n                {\n                    \"scenario\": \"uniswap-swaps\",\n                    \"name\": \"Uniswap Swaps\",\n                    \"config\": {\n                        \"throughput\": 100,\n                        \"max_pending\": 200,\n                        \"max_wallets\": 200,\n                        \"client_group\": \"mevbuilder\",\n                        \"deploy_client_group\": \"default\",\n                    },\n                }\n            )\n\n    template_and_data_by_rel_dest_filepath = {}\n\n    config_template_data = new_config_template_data(spammers)\n    config_template_and_data = shared_utils.new_template_and_data(\n        config_template, config_template_data\n    )\n    template_and_data_by_rel_dest_filepath[\n        SPAMOOR_CONFIG_FILENAME\n    ] = config_template_and_data\n\n    hosts_template_data = new_hosts_template_data(\n        participant_contexts, participant_configs\n    )\n    hosts_template_and_data = shared_utils.new_template_and_data(\n        hosts_template, hosts_template_data\n    )\n    template_and_data_by_rel_dest_filepath[\n        SPAMOOR_HOSTS_FILENAME\n    ] = hosts_template_and_data\n\n    config_files_artifact_name = plan.render_templates(\n        template_and_data_by_rel_dest_filepath, \"spamoor-config\"\n    )\n\n    config = get_config(\n        plan,\n        config_files_artifact_name,\n        prefunded_addresses,\n        spamoor_params,\n        global_node_selectors,\n        tolerations,\n        network_params,\n        port_publisher,\n        additional_service_index,\n    )\n    plan.add_service(SERVICE_NAME, config)\n\n\ndef get_config(\n    plan,\n    config_files_artifact_name,\n    prefunded_addresses,\n    spamoor_params,\n    node_selectors,\n    tolerations,\n    network_params,\n    port_publisher,\n    additional_service_index,\n):\n    config_file_path = shared_utils.path_join(\n        SPAMOOR_CONFIG_MOUNT_DIRPATH_ON_SERVICE,\n        SPAMOOR_CONFIG_FILENAME,\n    )\n\n    hosts_file_path = shared_utils.path_join(\n        SPAMOOR_CONFIG_MOUNT_DIRPATH_ON_SERVICE,\n        SPAMOOR_HOSTS_FILENAME,\n    )\n\n    cmd = [\n        \"--privkey={}\".format(prefunded_addresses[13].private_key),\n        \"--rpchost-file={}\".format(hosts_file_path),\n        \"--startup-spammer={}\".format(config_file_path),\n    ]\n\n    public_ports = shared_utils.get_additional_service_standard_public_port(\n        port_publisher,\n        constants.HTTP_PORT_ID,\n        additional_service_index,\n        0,\n    )\n\n    for index, extra_arg in enumerate(spamoor_params.extra_args):\n        cmd.append(extra_arg)\n\n    return ServiceConfig(\n        image=spamoor_params.image,\n        entrypoint=[\"./spamoor-daemon\"],\n        cmd=cmd,\n        ports=USED_PORTS,\n        public_ports=public_ports,\n        min_cpu=spamoor_params.min_cpu,\n        max_cpu=spamoor_params.max_cpu,\n        min_memory=spamoor_params.min_mem,\n        max_memory=spamoor_params.max_mem,\n        node_selectors=node_selectors,\n        tolerations=tolerations,\n        files={\n            SPAMOOR_CONFIG_MOUNT_DIRPATH_ON_SERVICE: config_files_artifact_name,\n        },\n    )\n\n\ndef new_config_template_data(\n    startup_spammer,\n):\n    startup_spammer_json = []\n    for index, spammer in enumerate(startup_spammer):\n        if \"name\" not in spammer:\n            spammer[\"name\"] = \"kurtosis-{0}\".format(index)\n        startup_spammer_json.append(json.encode(spammer))\n\n    return {\n        \"StartupSpammer\": startup_spammer_json,\n    }\n\n\ndef new_hosts_template_data(\n    participant_contexts,\n    participant_configs,\n):\n    rpchosts = []\n    for index, participant in enumerate(participant_contexts):\n        (\n            full_name,\n            cl_client,\n            el_client,\n            participant_config,\n        ) = shared_utils.get_client_names(\n            participant, index, participant_contexts, participant_configs\n        )\n        if participant.snooper_el_rpc_context:\n            rpchost = \"http://{0}:{1}\".format(\n                participant.snooper_el_rpc_context.ip_addr,\n                participant.snooper_el_rpc_context.rpc_port_num,\n            )\n        else:\n            rpchost = \"http://{0}:{1}\".format(\n                el_client.ip_addr,\n                el_client.rpc_port_num,\n            )\n\n        index_str = shared_utils.zfill_custom(\n            index + 1, len(str(len(participant_contexts)))\n        )\n        rpchost = (\n            \"group({0},{1},{2})name({3})\".format(\n                index_str,\n                cl_client.client_name,\n                el_client.client_name,\n                full_name,\n            )\n            + rpchost\n        )\n\n        if \"builder\" in full_name:\n            rpchost = \"group(mevbuilder)\" + rpchost\n\n        rpchosts.append(rpchost)\n\n    return {\n        \"RPCHosts\": rpchosts,\n    }\n"
  },
  {
    "path": "src/static_files/static_files.star",
    "content": "# The path on the module container where static files are housed\nSTATIC_FILES_DIRPATH = \"/static_files\"\n\n# EL_CL Genesis config\nEL_CL_GENESIS_GENERATION_CONFIG_TEMPLATE_FILEPATH = (\n    STATIC_FILES_DIRPATH + \"/genesis-generation-config/el-cl/values.env.tmpl\"\n)\nEL_CL_GENESIS_ADDITIONAL_CONTRACTS_TEMPLATE_FILEPATH = (\n    STATIC_FILES_DIRPATH\n    + \"/genesis-generation-config/el-cl/additional-contracts.json.tmpl\"\n)\n\n# EL Forkmon config\nFORKMON_CONFIG_TEMPLATE_FILEPATH = (\n    STATIC_FILES_DIRPATH + \"/forkmon-config/config.toml.tmpl\"\n)\n\n# Validator Ranges config\nVALIDATOR_RANGES_CONFIG_TEMPLATE_FILEPATH = (\n    STATIC_FILES_DIRPATH + \"/validator-ranges/config.yaml.tmpl\"\n)\n\nAPACHE_CONFIG_FILEPATH = STATIC_FILES_DIRPATH + \"/apache-config/index.html\"\nAPACHE_ENR_FILEPATH = STATIC_FILES_DIRPATH + \"/apache-config/enr.txt.tmpl\"\nAPACHE_ENR_LIST_FILEPATH = STATIC_FILES_DIRPATH + \"/apache-config/enr_list.txt.tmpl\"\nAPACHE_ENODE_FILEPATH = STATIC_FILES_DIRPATH + \"/apache-config/enode.txt.tmpl\"\n\nNGINX_CONFIG_FILEPATH = STATIC_FILES_DIRPATH + \"/nginx-config/index.html\"\nNGINX_ENR_FILEPATH = STATIC_FILES_DIRPATH + \"/nginx-config/enr.txt.tmpl\"\nNGINX_ENR_LIST_FILEPATH = STATIC_FILES_DIRPATH + \"/nginx-config/enr_list.txt.tmpl\"\nNGINX_ENODE_FILEPATH = STATIC_FILES_DIRPATH + \"/nginx-config/enode.txt.tmpl\"\n\nDORA_CONFIG_TEMPLATE_FILEPATH = STATIC_FILES_DIRPATH + \"/dora-config/config.yaml.tmpl\"\nDUGTRIO_CONFIG_TEMPLATE_FILEPATH = (\n    STATIC_FILES_DIRPATH + \"/dugtrio-config/config.yaml.tmpl\"\n)\nBLUTGANG_CONFIG_TEMPLATE_FILEPATH = (\n    STATIC_FILES_DIRPATH + \"/blutgang-config/config.toml.tmpl\"\n)\nCHECKPOINTZ_CONFIG_TEMPLATE_FILEPATH = (\n    STATIC_FILES_DIRPATH + \"/checkpointz-config/config.yaml.tmpl\"\n)\nERPC_CONFIG_TEMPLATE_FILEPATH = STATIC_FILES_DIRPATH + \"/erpc-config/erpc.yaml.tmpl\"\nFORKY_CONFIG_TEMPLATE_FILEPATH = STATIC_FILES_DIRPATH + \"/forky-config/config.yaml.tmpl\"\nTRACOOR_CONFIG_TEMPLATE_FILEPATH = (\n    STATIC_FILES_DIRPATH + \"/tracoor-config/config.yaml.tmpl\"\n)\nFULL_BEACONCHAIN_CONFIG_TEMPLATE_FILEPATH = (\n    STATIC_FILES_DIRPATH + \"/full-beaconchain-config/config.yaml.tmpl\"\n)\n\n# assertoor config\nASSERTOOR_CONFIG_DIRPATH = \"/assertoor-config\"\nASSERTOOR_CONFIG_TEMPLATE_FILEPATH = (\n    STATIC_FILES_DIRPATH + ASSERTOOR_CONFIG_DIRPATH + \"/config.yaml.tmpl\"\n)\nASSERTOOR_TESTS_CONFIG_DIRPATH = (\n    STATIC_FILES_DIRPATH + ASSERTOOR_CONFIG_DIRPATH + \"/tests\"\n)\n\n# spamoor config\nSPAMOOR_CONFIG_DIRPATH = \"/spamoor-config\"\nSPAMOOR_CONFIG_TEMPLATE_FILEPATH = (\n    STATIC_FILES_DIRPATH + SPAMOOR_CONFIG_DIRPATH + \"/startup-spammer.yaml.tmpl\"\n)\nSPAMOOR_HOSTS_TEMPLATE_FILEPATH = (\n    STATIC_FILES_DIRPATH + SPAMOOR_CONFIG_DIRPATH + \"/rpc-hosts.txt.tmpl\"\n)\n\n# slashoor config\nSLASHOOR_CONFIG_DIRPATH = \"/slashoor-config\"\nSLASHOOR_CONFIG_TEMPLATE_FILEPATH = (\n    STATIC_FILES_DIRPATH + SLASHOOR_CONFIG_DIRPATH + \"/config.yaml.tmpl\"\n)\n\n# xatu-sentry config\nXATU_SENTRY_CONFIG_DIRPATH = \"/xatu-sentry-config\"\nXATU_SENTRY_CONFIG_TEMPLATE_FILEPATH = (\n    STATIC_FILES_DIRPATH + XATU_SENTRY_CONFIG_DIRPATH + \"/config.yaml.tmpl\"\n)\n\n# Grafana config\nGRAFANA_CONFIG_DIRPATH = \"/grafana-config\"\nGRAFANA_DATASOURCE_CONFIG_TEMPLATE_FILEPATH = (\n    STATIC_FILES_DIRPATH + GRAFANA_CONFIG_DIRPATH + \"/templates/datasource.yml.tmpl\"\n)\nGRAFANA_DASHBOARD_PROVIDERS_CONFIG_TEMPLATE_FILEPATH = (\n    STATIC_FILES_DIRPATH\n    + GRAFANA_CONFIG_DIRPATH\n    + \"/templates/dashboard-providers.yml.tmpl\"\n)\nGRAFANA_DASHBOARDS_CONFIG_DIRPATH = (\n    STATIC_FILES_DIRPATH + GRAFANA_CONFIG_DIRPATH + \"/dashboards\"\n)\n\n# Tempo config\nTEMPO_CONFIG_TEMPLATE_FILEPATH = STATIC_FILES_DIRPATH + \"/tempo-config/tempo.yaml.tmpl\"\n\n# Geth + CL genesis generation\nGENESIS_GENERATION_CONFIG_DIRPATH = STATIC_FILES_DIRPATH + \"/genesis-generation-config\"\n\nEL_GENESIS_GENERATION_CONFIG_DIRPATH = GENESIS_GENERATION_CONFIG_DIRPATH + \"/el\"\nEL_GENESIS_GENERATION_CONFIG_TEMPLATE_FILEPATH = (\n    EL_GENESIS_GENERATION_CONFIG_DIRPATH + \"/genesis-config.yaml.tmpl\"\n)\n\nCL_GENESIS_GENERATION_CONFIG_DIRPATH = GENESIS_GENERATION_CONFIG_DIRPATH + \"/cl\"\nCL_GENESIS_GENERATION_CONFIG_TEMPLATE_FILEPATH = (\n    CL_GENESIS_GENERATION_CONFIG_DIRPATH + \"/config.yaml.tmpl\"\n)\nCL_GENESIS_GENERATION_MNEMONICS_TEMPLATE_FILEPATH = (\n    CL_GENESIS_GENERATION_CONFIG_DIRPATH + \"/mnemonics.yaml.tmpl\"\n)\n\nJWT_PATH_FILEPATH = STATIC_FILES_DIRPATH + \"/jwt/jwtsecret\"\nKEYMANAGER_PATH_FILEPATH = STATIC_FILES_DIRPATH + \"/keymanager/keymanager.txt\"\n\nPEERDAS_NODE_KEY_FILEPATH = STATIC_FILES_DIRPATH + \"/peerdas-node-keys/\"\n\nSHADOWFORK_FILEPATH = \"/network-configs/latest_block.json\"\n\nMEV_RS_MEV_BOOST_CONFIG_FILEPATH = (\n    STATIC_FILES_DIRPATH + \"/mev/mev-rs/mev_boost/config.toml.tmpl\"\n)\nMEV_RS_MEV_RELAY_CONFIG_FILEPATH = (\n    STATIC_FILES_DIRPATH + \"/mev/mev-rs/mev_relay/config.toml.tmpl\"\n)\nMEV_RS_MEV_BUILDER_CONFIG_FILEPATH = (\n    STATIC_FILES_DIRPATH + \"/mev/mev-rs/mev_builder/config.toml.tmpl\"\n)\n\nFLASHBOTS_RBUILDER_CONFIG_FILEPATH = (\n    STATIC_FILES_DIRPATH + \"/mev/flashbots/mev_builder/config.toml.tmpl\"\n)\n\nCOMMIT_BOOST_CONFIG_FILEPATH = (\n    STATIC_FILES_DIRPATH + \"/mev/commit-boost/cb-config.toml.tmpl\"\n)\n\nMEMPOOL_BRIDGE_CONFIG_TEMPLATE_FILEPATH = (\n    STATIC_FILES_DIRPATH + \"/mempool-bridge-config/config.yaml.tmpl\"\n)\nHELIX_RELAY_CONFIG_FILEPATH = STATIC_FILES_DIRPATH + \"/mev/helix/config.yaml.tmpl\"\n\nZKBOOST_CONFIG_TEMPLATE_FILEPATH = (\n    STATIC_FILES_DIRPATH + \"/zkboost-config/config.toml.tmpl\"\n)\n"
  },
  {
    "path": "src/tempo/tempo_launcher.star",
    "content": "shared_utils = import_module(\"../shared_utils/shared_utils.star\")\nconstants = import_module(\"../package_io/constants.star\")\ninput_parser = import_module(\"../package_io/input_parser.star\")\n\nSERVICE_NAME = \"tempo\"\n\n# Tempo standard ports\nHTTP_PORT_ID = \"http\"\nHTTP_PORT_NUMBER = 3200\nGRPC_PORT_ID = \"grpc\"\nGRPC_PORT_NUMBER = 9095\nOTLP_GRPC_PORT_ID = \"otlp-grpc\"\nOTLP_GRPC_PORT_NUMBER = 4317\nOTLP_HTTP_PORT_ID = \"otlp-http\"\nOTLP_HTTP_PORT_NUMBER = 4318\n\nTEMPO_CONFIG_FILENAME = \"tempo.yaml\"\nTEMPO_CONFIG_MOUNT_DIRPATH_ON_SERVICE = \"/etc/tempo\"\n\nUSED_PORTS = {\n    HTTP_PORT_ID: shared_utils.new_port_spec(\n        HTTP_PORT_NUMBER,\n        shared_utils.TCP_PROTOCOL,\n        shared_utils.HTTP_APPLICATION_PROTOCOL,\n    ),\n    GRPC_PORT_ID: shared_utils.new_port_spec(\n        GRPC_PORT_NUMBER,\n        shared_utils.TCP_PROTOCOL,\n    ),\n    OTLP_GRPC_PORT_ID: shared_utils.new_port_spec(\n        OTLP_GRPC_PORT_NUMBER,\n        shared_utils.TCP_PROTOCOL,\n    ),\n    OTLP_HTTP_PORT_ID: shared_utils.new_port_spec(\n        OTLP_HTTP_PORT_NUMBER,\n        shared_utils.TCP_PROTOCOL,\n        shared_utils.HTTP_APPLICATION_PROTOCOL,\n    ),\n}\n\n\ndef launch_tempo(\n    plan,\n    config_template,\n    global_node_selectors,\n    global_tolerations,\n    tempo_params,\n    port_publisher,\n    index,\n):\n    tolerations = shared_utils.get_tolerations(global_tolerations=global_tolerations)\n\n    config_files_artifact_name = get_tempo_config_dir_artifact_uuid(\n        plan,\n        config_template,\n        tempo_params,\n    )\n\n    public_ports = shared_utils.get_additional_service_standard_public_port(\n        port_publisher,\n        HTTP_PORT_ID,\n        index,\n        1,\n    )\n\n    config = get_config(\n        config_files_artifact_name,\n        global_node_selectors,\n        tolerations,\n        tempo_params,\n        public_ports,\n    )\n\n    service = plan.add_service(SERVICE_NAME, config)\n\n    # Return connection info for other services\n    return struct(\n        service_name=SERVICE_NAME,\n        ip_addr=service.name,\n        http_port_num=HTTP_PORT_NUMBER,\n        grpc_port_num=GRPC_PORT_NUMBER,\n        otlp_grpc_port_num=OTLP_GRPC_PORT_NUMBER,\n        otlp_http_port_num=OTLP_HTTP_PORT_NUMBER,\n        http_url=\"http://{}:{}\".format(service.name, HTTP_PORT_NUMBER),\n        grpc_url=\"{}:{}\".format(service.name, GRPC_PORT_NUMBER),\n        otlp_grpc_url=\"{}:{}\".format(SERVICE_NAME, OTLP_GRPC_PORT_NUMBER),\n        otlp_http_url=\"http://{}:{}\".format(SERVICE_NAME, OTLP_HTTP_PORT_NUMBER),\n    )\n\n\ndef get_tempo_config_dir_artifact_uuid(\n    plan,\n    config_template,\n    tempo_params,\n):\n    template_data = new_config_template_data(tempo_params)\n\n    template_and_data = shared_utils.new_template_and_data(\n        config_template, template_data\n    )\n\n    template_and_data_by_rel_dest_filepath = {}\n    template_and_data_by_rel_dest_filepath[TEMPO_CONFIG_FILENAME] = template_and_data\n\n    config_files_artifact_name = plan.render_templates(\n        template_and_data_by_rel_dest_filepath, \"tempo-config\"\n    )\n\n    return config_files_artifact_name\n\n\ndef get_config(\n    config_files_artifact_name,\n    node_selectors,\n    tolerations,\n    tempo_params,\n    public_ports,\n):\n    config_file_path = shared_utils.path_join(\n        TEMPO_CONFIG_MOUNT_DIRPATH_ON_SERVICE,\n        TEMPO_CONFIG_FILENAME,\n    )\n\n    return ServiceConfig(\n        image=tempo_params.image,\n        ports=USED_PORTS,\n        public_ports=public_ports,\n        files={\n            TEMPO_CONFIG_MOUNT_DIRPATH_ON_SERVICE: config_files_artifact_name,\n        },\n        cmd=[\n            \"-config.file={}\".format(config_file_path),\n        ],\n        min_cpu=tempo_params.min_cpu,\n        max_cpu=tempo_params.max_cpu,\n        min_memory=tempo_params.min_mem,\n        max_memory=tempo_params.max_mem,\n        node_selectors=node_selectors,\n        tolerations=tolerations,\n    )\n\n\ndef new_config_template_data(tempo_params):\n    return {\n        \"HTTPPort\": HTTP_PORT_NUMBER,\n        \"GRPCPort\": GRPC_PORT_NUMBER,\n        \"OTLPGRPCPort\": OTLP_GRPC_PORT_NUMBER,\n        \"OTLPHTTPPort\": OTLP_HTTP_PORT_NUMBER,\n    }\n"
  },
  {
    "path": "src/tracoor/tracoor_launcher.star",
    "content": "shared_utils = import_module(\"../shared_utils/shared_utils.star\")\nconstants = import_module(\"../package_io/constants.star\")\ninput_parser = import_module(\"../package_io/input_parser.star\")\n\nIMAGE_NAME = \"ethpandaops/tracoor:latest\"\nSERVICE_NAME = \"tracoor\"\n\nHTTP_PORT_NUMBER = 7007\n\nTRACOOR_CONFIG_FILENAME = \"tracoor-config.yaml\"\n\nTRACOOR_CONFIG_MOUNT_DIRPATH_ON_SERVICE = \"/config\"\n\n# The min/max CPU/memory that tracoor can use\nMIN_CPU = 100\nMAX_CPU = 1000\nMIN_MEMORY = 128\nMAX_MEMORY = 2048\n\nUSED_PORTS = {\n    constants.HTTP_PORT_ID: shared_utils.new_port_spec(\n        HTTP_PORT_NUMBER,\n        shared_utils.TCP_PROTOCOL,\n        shared_utils.HTTP_APPLICATION_PROTOCOL,\n    )\n}\n\n\ndef launch_tracoor(\n    plan,\n    config_template,\n    participant_contexts,\n    participant_configs,\n    el_cl_data_files_artifact_uuid,\n    network_params,\n    global_node_selectors,\n    global_tolerations,\n    final_genesis_timestamp,\n    port_publisher,\n    additional_service_index,\n    docker_cache_params,\n):\n    tolerations = shared_utils.get_tolerations(global_tolerations=global_tolerations)\n\n    all_client_info = []\n    for index, participant in enumerate(participant_contexts):\n        full_name, cl_client, el_client, _ = shared_utils.get_client_names(\n            participant, index, participant_contexts, participant_configs\n        )\n\n        beacon = new_cl_client_info(cl_client.beacon_http_url, full_name)\n        execution = new_el_client_info(\n            \"http://{0}:{1}\".format(\n                el_client.dns_name,\n                el_client.rpc_port_num,\n            ),\n            full_name,\n        )\n\n        client_info = {\n            \"Beacon\": beacon,\n            \"Execution\": execution,\n            \"Network\": network_params.network,\n        }\n        all_client_info.append(client_info)\n    plan.print(network_params.network)\n    template_data = new_config_template_data(\n        HTTP_PORT_NUMBER,\n        all_client_info,\n    )\n\n    template_and_data = shared_utils.new_template_and_data(\n        config_template, template_data\n    )\n    template_and_data_by_rel_dest_filepath = {}\n    template_and_data_by_rel_dest_filepath[TRACOOR_CONFIG_FILENAME] = template_and_data\n\n    config_files_artifact_name = plan.render_templates(\n        template_and_data_by_rel_dest_filepath, \"tracoor-config\"\n    )\n    el_cl_data_files_artifact_uuid = el_cl_data_files_artifact_uuid\n    config = get_config(\n        config_files_artifact_name,\n        el_cl_data_files_artifact_uuid,\n        network_params,\n        global_node_selectors,\n        tolerations,\n        port_publisher,\n        additional_service_index,\n        docker_cache_params,\n    )\n\n    plan.add_service(SERVICE_NAME, config)\n\n\ndef get_config(\n    config_files_artifact_name,\n    el_cl_data_files_artifact_uuid,\n    network_params,\n    node_selectors,\n    tolerations,\n    port_publisher,\n    additional_service_index,\n    docker_cache_params,\n):\n    config_file_path = shared_utils.path_join(\n        TRACOOR_CONFIG_MOUNT_DIRPATH_ON_SERVICE,\n        TRACOOR_CONFIG_FILENAME,\n    )\n\n    public_ports = shared_utils.get_additional_service_standard_public_port(\n        port_publisher,\n        constants.HTTP_PORT_ID,\n        additional_service_index,\n        0,\n    )\n\n    return ServiceConfig(\n        image=shared_utils.docker_cache_image_calc(\n            docker_cache_params,\n            IMAGE_NAME,\n        ),\n        ports=USED_PORTS,\n        public_ports=public_ports,\n        files={\n            TRACOOR_CONFIG_MOUNT_DIRPATH_ON_SERVICE: config_files_artifact_name,\n        },\n        cmd=[\n            \"single\",\n            \"--single-config={0}\".format(config_file_path),\n        ],\n        min_cpu=MIN_CPU,\n        max_cpu=MAX_CPU,\n        min_memory=MIN_MEMORY,\n        max_memory=MAX_MEMORY,\n        node_selectors=node_selectors,\n        tolerations=tolerations,\n    )\n\n\ndef new_config_template_data(\n    listen_port_num,\n    client_info,\n):\n    return {\n        \"ListenPortNum\": listen_port_num,\n        \"ParticipantClientInfo\": client_info,\n    }\n\n\ndef new_cl_client_info(beacon_http_url, full_name):\n    return {\n        \"Beacon_HTTP_URL\": beacon_http_url,\n        \"FullName\": full_name,\n    }\n\n\ndef new_el_client_info(execution_http_url, full_name):\n    return {\n        \"Execution_HTTP_URL\": execution_http_url,\n        \"FullName\": full_name,\n    }\n"
  },
  {
    "path": "src/tx_fuzz/tx_fuzz.star",
    "content": "shared_utils = import_module(\"../shared_utils/shared_utils.star\")\ninput_parser = import_module(\"../package_io/input_parser.star\")\nSERVICE_NAME = \"tx-fuzz\"\n\n# The min/max CPU/memory that tx-fuzz can use\nMIN_CPU = 100\nMAX_CPU = 1000\nMIN_MEMORY = 20\nMAX_MEMORY = 300\n\n\ndef launch_tx_fuzz(\n    plan,\n    prefunded_addresses,\n    el_uri,\n    tx_fuzz_params,\n    global_node_selectors,\n    global_tolerations,\n):\n    tolerations = shared_utils.get_tolerations(global_tolerations=global_tolerations)\n\n    config = get_config(\n        prefunded_addresses,\n        el_uri,\n        tx_fuzz_params,\n        global_node_selectors,\n        tolerations,\n    )\n    plan.add_service(SERVICE_NAME, config)\n\n\ndef get_config(\n    prefunded_addresses,\n    el_uri,\n    tx_fuzz_params,\n    node_selectors,\n    tolerations,\n):\n    cmd = [\n        \"spam\",\n        \"--rpc={}\".format(el_uri),\n        \"--sk={0}\".format(prefunded_addresses[3].private_key),\n    ]\n\n    if len(tx_fuzz_params.tx_fuzz_extra_args) > 0:\n        cmd.extend([param for param in tx_fuzz_params.tx_fuzz_extra_args])\n\n    return ServiceConfig(\n        image=tx_fuzz_params.image,\n        cmd=cmd,\n        min_cpu=MIN_CPU,\n        max_cpu=MAX_CPU,\n        min_memory=MIN_MEMORY,\n        max_memory=MAX_MEMORY,\n        node_selectors=node_selectors,\n        tolerations=tolerations,\n    )\n"
  },
  {
    "path": "src/vc/lighthouse.star",
    "content": "constants = import_module(\"../package_io/constants.star\")\ninput_parser = import_module(\"../package_io/input_parser.star\")\nshared_utils = import_module(\"../shared_utils/shared_utils.star\")\nvc_shared = import_module(\"./shared.star\")\n\nRUST_BACKTRACE_ENVVAR_NAME = \"RUST_BACKTRACE\"\nRUST_FULL_BACKTRACE_KEYWORD = \"full\"\n\nVERBOSITY_LEVELS = {\n    constants.GLOBAL_LOG_LEVEL.error: \"error\",\n    constants.GLOBAL_LOG_LEVEL.warn: \"warn\",\n    constants.GLOBAL_LOG_LEVEL.info: \"info\",\n    constants.GLOBAL_LOG_LEVEL.debug: \"debug\",\n    constants.GLOBAL_LOG_LEVEL.trace: \"trace\",\n}\n\n\ndef get_config(\n    plan,\n    participant,\n    el_cl_genesis_data,\n    image,\n    service_name,\n    global_log_level,\n    beacon_http_urls,\n    cl_context,\n    el_context,\n    full_name,\n    node_keystore_files,\n    tolerations,\n    node_selectors,\n    keymanager_enabled,\n    network_params,\n    port_publisher,\n    vc_index,\n    extra_files_artifacts,\n    tempo_otlp_grpc_url=None,\n    vc_binary_artifact=None,\n):\n    log_level = input_parser.get_client_log_level_or_default(\n        participant.vc_log_level, global_log_level, VERBOSITY_LEVELS\n    )\n\n    validator_keys_dirpath = shared_utils.path_join(\n        constants.VALIDATOR_KEYS_DIRPATH_ON_SERVICE_CONTAINER,\n        node_keystore_files.raw_keys_relative_dirpath,\n    )\n    validator_secrets_dirpath = shared_utils.path_join(\n        constants.VALIDATOR_KEYS_DIRPATH_ON_SERVICE_CONTAINER,\n        node_keystore_files.raw_secrets_relative_dirpath,\n    )\n\n    cmd = [\n        \"lighthouse\",\n        \"vc\",\n        \"--debug-level=\" + log_level,\n        \"--testnet-dir=\" + constants.GENESIS_CONFIG_MOUNT_PATH_ON_CONTAINER,\n        \"--validators-dir=\" + validator_keys_dirpath,\n        # NOTE: When secrets-dir is specified, we can't add the --data-dir flag\n        \"--secrets-dir=\" + validator_secrets_dirpath,\n        # The node won't have a slashing protection database and will fail to start otherwise\n        \"--init-slashing-protection\",\n        \"--beacon-nodes=\" + \",\".join(beacon_http_urls),\n        # \"--enable-doppelganger-protection\", // Disabled to not have to wait 2 epochs before validator can start\n        # burn address - If unset, the validator will scream in its logs\n        \"--suggested-fee-recipient=\" + constants.VALIDATING_REWARDS_ACCOUNT,\n        # vvvvvvvvvvvvvvvvvvv PROMETHEUS CONFIG vvvvvvvvvvvvvvvvvvvvv\n        \"--metrics\",\n        \"--metrics-address=0.0.0.0\",\n        \"--metrics-allow-origin=*\",\n        \"--metrics-port={0}\".format(vc_shared.VALIDATOR_CLIENT_METRICS_PORT_NUM),\n        # ^^^^^^^^^^^^^^^^^^^ PROMETHEUS CONFIG ^^^^^^^^^^^^^^^^^^^^^\n    ]\n\n    keymanager_api_cmd = [\n        \"--http\",\n        \"--http-port={0}\".format(vc_shared.VALIDATOR_HTTP_PORT_NUM),\n        \"--http-address=0.0.0.0\",\n        \"--http-allow-origin=*\",\n        \"--unencrypted-http-transport\",\n    ]\n\n    if network_params.gas_limit > 0:\n        cmd.append(\"--gas-limit={0}\".format(network_params.gas_limit))\n        cmd.append(\"--builder-proposals\")\n\n    # Add tempo telemetry integration if tempo is enabled\n    if tempo_otlp_grpc_url != None:\n        cmd.append(\"--telemetry-collector-url={}\".format(tempo_otlp_grpc_url))\n        cmd.append(\"--telemetry-service-name={}\".format(service_name))\n\n    if len(participant.vc_extra_params):\n        cmd.extend([param for param in participant.vc_extra_params])\n\n    files = {\n        constants.GENESIS_DATA_MOUNTPOINT_ON_CLIENTS: el_cl_genesis_data.files_artifact_uuid,\n        constants.VALIDATOR_KEYS_DIRPATH_ON_SERVICE_CONTAINER: node_keystore_files.files_artifact_uuid,\n    }\n    env = {RUST_BACKTRACE_ENVVAR_NAME: RUST_FULL_BACKTRACE_KEYWORD}\n    env.update(participant.vc_extra_env_vars)\n\n    public_ports = {}\n    public_keymanager_port_assignment = {}\n    if port_publisher.vc_enabled:\n        public_ports_for_component = shared_utils.get_public_ports_for_component(\n            \"vc\", port_publisher, vc_index\n        )\n        public_port_assignments = {\n            constants.METRICS_PORT_ID: public_ports_for_component[0]\n        }\n        public_keymanager_port_assignment = {\n            constants.VALIDATOR_HTTP_PORT_ID: public_ports_for_component[1]\n        }\n        public_ports = shared_utils.get_port_specs(public_port_assignments)\n\n    ports = {}\n    ports.update(vc_shared.VALIDATOR_CLIENT_USED_PORTS)\n\n    if keymanager_enabled:\n        cmd.extend(keymanager_api_cmd)\n        ports.update(vc_shared.VALIDATOR_KEYMANAGER_USED_PORTS)\n        public_ports.update(\n            shared_utils.get_port_specs(public_keymanager_port_assignment)\n        )\n\n    # Add extra mounts - automatically handle file uploads\n    processed_mounts = shared_utils.process_extra_mounts(\n        plan, participant.vc_extra_mounts, extra_files_artifacts\n    )\n    for mount_path, artifact in processed_mounts.items():\n        files[mount_path] = artifact\n\n    # Binary injection - mount custom binary directory if provided\n    if vc_binary_artifact != None:\n        files[\"/opt/bin\"] = vc_binary_artifact.artifact\n\n    config_args = {\n        \"image\": image,\n        \"ports\": ports,\n        \"public_ports\": public_ports,\n        \"publish_udp\": port_publisher.vc_enabled,\n        \"cmd\": cmd,\n        \"files\": files,\n        \"env_vars\": env,\n        \"labels\": shared_utils.label_maker(\n            client=constants.VC_TYPE.lighthouse,\n            client_type=constants.CLIENT_TYPES.validator,\n            image=image[-constants.MAX_LABEL_LENGTH :],\n            connected_client=cl_context.client_name,\n            extra_labels=participant.vc_extra_labels\n            | {constants.NODE_INDEX_LABEL_KEY: str(vc_index + 1)},\n            supernode=participant.supernode,\n        ),\n        \"tolerations\": tolerations,\n        \"node_selectors\": node_selectors,\n    }\n\n    # Binary injection - override entrypoint and cmd only when binary is provided\n    if vc_binary_artifact != None:\n        config_args[\"entrypoint\"] = [\"sh\", \"-c\"]\n        config_args[\"cmd\"] = [\n            \"cp /opt/bin/{0} /usr/local/bin/lighthouse && lighthouse \".format(\n                vc_binary_artifact.filename\n            )\n            + \" \".join(cmd)\n        ]\n\n    if participant.vc_min_cpu > 0:\n        config_args[\"min_cpu\"] = participant.vc_min_cpu\n    if participant.vc_max_cpu > 0:\n        config_args[\"max_cpu\"] = participant.vc_max_cpu\n    if participant.vc_min_mem > 0:\n        config_args[\"min_memory\"] = participant.vc_min_mem\n    if participant.vc_max_mem > 0:\n        config_args[\"max_memory\"] = participant.vc_max_mem\n    if len(participant.vc_devices) > 0:\n        config_args[\"devices\"] = participant.vc_devices\n    return ServiceConfig(**config_args)\n"
  },
  {
    "path": "src/vc/lodestar.star",
    "content": "constants = import_module(\"../package_io/constants.star\")\ninput_parser = import_module(\"../package_io/input_parser.star\")\nshared_utils = import_module(\"../shared_utils/shared_utils.star\")\nvc_shared = import_module(\"./shared.star\")\n\nVERBOSITY_LEVELS = {\n    constants.GLOBAL_LOG_LEVEL.error: \"error\",\n    constants.GLOBAL_LOG_LEVEL.warn: \"warn\",\n    constants.GLOBAL_LOG_LEVEL.info: \"info\",\n    constants.GLOBAL_LOG_LEVEL.debug: \"debug\",\n    constants.GLOBAL_LOG_LEVEL.trace: \"trace\",\n}\n\n\ndef get_config(\n    plan,\n    participant,\n    el_cl_genesis_data,\n    keymanager_file,\n    image,\n    global_log_level,\n    beacon_http_urls,\n    cl_context,\n    el_context,\n    remote_signer_context,\n    full_name,\n    node_keystore_files,\n    tolerations,\n    node_selectors,\n    keymanager_enabled,\n    network_params,\n    port_publisher,\n    vc_index,\n    extra_files_artifacts,\n    vc_binary_artifact=None,\n):\n    log_level = input_parser.get_client_log_level_or_default(\n        participant.vc_log_level, global_log_level, VERBOSITY_LEVELS\n    )\n\n    validator_keys_dirpath = shared_utils.path_join(\n        constants.VALIDATOR_KEYS_DIRPATH_ON_SERVICE_CONTAINER,\n        node_keystore_files.raw_keys_relative_dirpath,\n    )\n\n    validator_secrets_dirpath = shared_utils.path_join(\n        constants.VALIDATOR_KEYS_DIRPATH_ON_SERVICE_CONTAINER,\n        node_keystore_files.raw_secrets_relative_dirpath,\n    )\n\n    cmd = [\n        \"validator\",\n        \"--logLevel=\" + log_level,\n        \"--paramsFile=\"\n        + constants.GENESIS_CONFIG_MOUNT_PATH_ON_CONTAINER\n        + \"/config.yaml\",\n        \"--beaconNodes=\" + \",\".join(beacon_http_urls),\n        \"--suggestedFeeRecipient=\" + constants.VALIDATING_REWARDS_ACCOUNT,\n        # vvvvvvvvvvvvvvvvvvv PROMETHEUS CONFIG vvvvvvvvvvvvvvvvvvvvv\n        \"--metrics\",\n        \"--metrics.address=0.0.0.0\",\n        \"--metrics.port={0}\".format(vc_shared.VALIDATOR_CLIENT_METRICS_PORT_NUM),\n        # ^^^^^^^^^^^^^^^^^^^ PROMETHEUS CONFIG ^^^^^^^^^^^^^^^^^^^^^\n        \"--useProduceBlockV3\",\n        \"--disableKeystoresThreadPool\",\n    ]\n\n    if remote_signer_context == None:\n        cmd.extend(\n            [\n                \"--keystoresDir=\" + validator_keys_dirpath,\n                \"--secretsDir=\" + validator_secrets_dirpath,\n            ]\n        )\n    else:\n        cmd.extend(\n            [\n                \"--externalSigner.url={0}\".format(remote_signer_context.http_url),\n                \"--externalSigner.fetch\",\n            ]\n        )\n\n    keymanager_api_cmd = [\n        \"--keymanager\",\n        \"--keymanager.authEnabled=true\",\n        \"--keymanager.port={0}\".format(vc_shared.VALIDATOR_HTTP_PORT_NUM),\n        \"--keymanager.address=0.0.0.0\",\n        \"--keymanager.cors=*\",\n        \"--keymanager.tokenFile=\" + constants.KEYMANAGER_MOUNT_PATH_ON_CONTAINER,\n    ]\n\n    if network_params.gas_limit > 0:\n        cmd.append(\"--defaultGasLimit={0}\".format(network_params.gas_limit))\n\n    if len(participant.vc_extra_params) > 0:\n        # this is a repeated<proto type>, we convert it into Starlark\n        cmd.extend([param for param in participant.vc_extra_params])\n\n    files = {\n        constants.GENESIS_DATA_MOUNTPOINT_ON_CLIENTS: el_cl_genesis_data.files_artifact_uuid,\n        constants.VALIDATOR_KEYS_DIRPATH_ON_SERVICE_CONTAINER: node_keystore_files.files_artifact_uuid,\n    }\n\n    public_ports = {}\n    public_keymanager_port_assignment = {}\n    if port_publisher.vc_enabled:\n        public_ports_for_component = shared_utils.get_public_ports_for_component(\n            \"vc\", port_publisher, vc_index\n        )\n        public_port_assignments = {\n            constants.METRICS_PORT_ID: public_ports_for_component[0]\n        }\n        public_keymanager_port_assignment = {\n            constants.VALIDATOR_HTTP_PORT_ID: public_ports_for_component[1]\n        }\n        public_ports = shared_utils.get_port_specs(public_port_assignments)\n\n    ports = {}\n    ports.update(vc_shared.VALIDATOR_CLIENT_USED_PORTS)\n\n    if keymanager_enabled:\n        files[constants.KEYMANAGER_MOUNT_PATH_ON_CLIENTS] = keymanager_file\n        cmd.extend(keymanager_api_cmd)\n        ports.update(vc_shared.VALIDATOR_KEYMANAGER_USED_PORTS)\n        public_ports.update(\n            shared_utils.get_port_specs(public_keymanager_port_assignment)\n        )\n\n    # Add extra mounts - automatically handle file uploads\n    processed_mounts = shared_utils.process_extra_mounts(\n        plan, participant.vc_extra_mounts, extra_files_artifacts\n    )\n    for mount_path, artifact in processed_mounts.items():\n        files[mount_path] = artifact\n\n    # Binary injection - mount custom binary directory if provided\n    if vc_binary_artifact != None:\n        files[\"/opt/bin\"] = vc_binary_artifact.artifact\n\n    env_vars = participant.vc_extra_env_vars\n    if network_params.preset == \"minimal\":\n        env_vars[\"LODESTAR_PRESET\"] = \"minimal\"\n\n    config_args = {\n        \"image\": image,\n        \"ports\": ports,\n        \"public_ports\": public_ports,\n        \"publish_udp\": port_publisher.vc_enabled,\n        \"cmd\": cmd,\n        \"files\": files,\n        \"env_vars\": env_vars,\n        \"labels\": shared_utils.label_maker(\n            client=constants.VC_TYPE.lodestar,\n            client_type=constants.CLIENT_TYPES.validator,\n            image=image[-constants.MAX_LABEL_LENGTH :],\n            connected_client=cl_context.client_name,\n            extra_labels=participant.vc_extra_labels\n            | {constants.NODE_INDEX_LABEL_KEY: str(vc_index + 1)},\n            supernode=participant.supernode,\n        ),\n        \"tolerations\": tolerations,\n        \"node_selectors\": node_selectors,\n    }\n\n    # Binary injection - override entrypoint and cmd only when binary is provided\n    if vc_binary_artifact != None:\n        config_args[\"entrypoint\"] = [\"sh\", \"-c\"]\n        config_args[\"cmd\"] = [\n            \"cp /opt/bin/{0} /usr/app/packages/cli/bin/lodestar && node /usr/app/packages/cli/bin/lodestar \".format(\n                vc_binary_artifact.filename\n            )\n            + \" \".join(cmd)\n        ]\n\n    if participant.vc_min_cpu > 0:\n        config_args[\"min_cpu\"] = participant.vc_min_cpu\n    if participant.vc_max_cpu > 0:\n        config_args[\"max_cpu\"] = participant.vc_max_cpu\n    if participant.vc_min_mem > 0:\n        config_args[\"min_memory\"] = participant.vc_min_mem\n    if participant.vc_max_mem > 0:\n        config_args[\"max_memory\"] = participant.vc_max_mem\n    if len(participant.vc_devices) > 0:\n        config_args[\"devices\"] = participant.vc_devices\n    return ServiceConfig(**config_args)\n"
  },
  {
    "path": "src/vc/nimbus.star",
    "content": "constants = import_module(\"../package_io/constants.star\")\nshared_utils = import_module(\"../shared_utils/shared_utils.star\")\nvc_shared = import_module(\"./shared.star\")\n\n\ndef get_config(\n    plan,\n    participant,\n    el_cl_genesis_data,\n    image,\n    keymanager_file,\n    beacon_http_urls,\n    cl_context,\n    el_context,\n    remote_signer_context,\n    full_name,\n    node_keystore_files,\n    tolerations,\n    node_selectors,\n    keymanager_enabled,\n    network_params,\n    port_publisher,\n    vc_index,\n    extra_files_artifacts,\n    vc_binary_artifact=None,\n):\n    validator_keys_dirpath = \"\"\n    validator_secrets_dirpath = \"\"\n    if node_keystore_files != None:\n        validator_keys_dirpath = shared_utils.path_join(\n            constants.VALIDATOR_KEYS_DIRPATH_ON_SERVICE_CONTAINER,\n            node_keystore_files.nimbus_keys_relative_dirpath,\n        )\n        validator_secrets_dirpath = shared_utils.path_join(\n            constants.VALIDATOR_KEYS_DIRPATH_ON_SERVICE_CONTAINER,\n            node_keystore_files.raw_secrets_relative_dirpath,\n        )\n\n    cmd = []\n\n    for beacon_url in beacon_http_urls:\n        cmd.append(\"--beacon-node=\" + beacon_url)\n\n    cmd.extend(\n        [\n            \"--suggested-fee-recipient=\" + constants.VALIDATING_REWARDS_ACCOUNT,\n            # vvvvvvvvvvvvvvvvvvv METRICS CONFIG vvvvvvvvvvvvvvvvvvvvv\n            \"--metrics\",\n            \"--metrics-address=0.0.0.0\",\n            \"--metrics-port={0}\".format(vc_shared.VALIDATOR_CLIENT_METRICS_PORT_NUM),\n        ]\n    )\n\n    if remote_signer_context == None:\n        cmd.extend(\n            [\n                \"--validators-dir=\" + validator_keys_dirpath,\n                \"--secrets-dir=\" + validator_secrets_dirpath,\n            ]\n        )\n    else:\n        cmd.extend(\n            [\n                \"--web3-signer-url={0}\".format(remote_signer_context.http_url),\n            ]\n        )\n\n    keymanager_api_cmd = [\n        \"--keymanager\",\n        \"--keymanager-port={0}\".format(vc_shared.VALIDATOR_HTTP_PORT_NUM),\n        \"--keymanager-address=0.0.0.0\",\n        \"--keymanager-allow-origin=*\",\n        \"--keymanager-token-file=\" + constants.KEYMANAGER_MOUNT_PATH_ON_CONTAINER,\n    ]\n\n    if network_params.gas_limit > 0:\n        cmd.append(\"--suggested-gas-limit={0}\".format(network_params.gas_limit))\n\n    if len(participant.vc_extra_params) > 0:\n        # this is a repeated<proto type>, we convert it into Starlark\n        cmd.extend([param for param in participant.vc_extra_params])\n\n    files = {\n        constants.VALIDATOR_KEYS_DIRPATH_ON_SERVICE_CONTAINER: node_keystore_files.files_artifact_uuid,\n        constants.KEYMANAGER_MOUNT_PATH_ON_CLIENTS: keymanager_file,\n    }\n\n    public_ports = {}\n    public_keymanager_port_assignment = {}\n    if port_publisher.vc_enabled:\n        public_ports_for_component = shared_utils.get_public_ports_for_component(\n            \"vc\", port_publisher, vc_index\n        )\n        public_port_assignments = {\n            constants.METRICS_PORT_ID: public_ports_for_component[0]\n        }\n        public_keymanager_port_assignment = {\n            constants.VALIDATOR_HTTP_PORT_ID: public_ports_for_component[1]\n        }\n        public_ports = shared_utils.get_port_specs(public_port_assignments)\n\n    ports = {}\n    ports.update(vc_shared.VALIDATOR_CLIENT_USED_PORTS)\n\n    if keymanager_enabled:\n        cmd.extend(keymanager_api_cmd)\n        ports.update(vc_shared.VALIDATOR_KEYMANAGER_USED_PORTS)\n        public_ports.update(\n            shared_utils.get_port_specs(public_keymanager_port_assignment)\n        )\n\n    # Add extra mounts - automatically handle file uploads\n    processed_mounts = shared_utils.process_extra_mounts(\n        plan, participant.vc_extra_mounts, extra_files_artifacts\n    )\n    for mount_path, artifact in processed_mounts.items():\n        files[mount_path] = artifact\n\n    # Binary injection - mount custom binary directory if provided\n    if vc_binary_artifact != None:\n        files[\"/opt/bin\"] = vc_binary_artifact.artifact\n\n    config_args = {\n        \"image\": image,\n        \"ports\": ports,\n        \"public_ports\": public_ports,\n        \"publish_udp\": port_publisher.vc_enabled,\n        \"cmd\": cmd,\n        \"files\": files,\n        \"env_vars\": participant.vc_extra_env_vars,\n        \"labels\": shared_utils.label_maker(\n            client=constants.VC_TYPE.nimbus,\n            client_type=constants.CLIENT_TYPES.validator,\n            image=image[-constants.MAX_LABEL_LENGTH :],\n            connected_client=cl_context.client_name,\n            extra_labels=participant.vc_extra_labels\n            | {constants.NODE_INDEX_LABEL_KEY: str(vc_index + 1)},\n            supernode=participant.supernode,\n        ),\n        \"tolerations\": tolerations,\n        \"node_selectors\": node_selectors,\n        \"user\": User(uid=0, gid=0),\n    }\n\n    # Binary injection - override entrypoint and cmd only when binary is provided\n    if vc_binary_artifact != None:\n        config_args[\"entrypoint\"] = [\"sh\", \"-c\"]\n        config_args[\"cmd\"] = [\n            \"cp /opt/bin/{0} /usr/bin/nimbus_validator_client && /usr/bin/nimbus_validator_client \".format(\n                vc_binary_artifact.filename\n            )\n            + \" \".join(cmd)\n        ]\n\n    if participant.vc_min_cpu > 0:\n        config_args[\"min_cpu\"] = participant.vc_min_cpu\n    if participant.vc_max_cpu > 0:\n        config_args[\"max_cpu\"] = participant.vc_max_cpu\n    if participant.vc_min_mem > 0:\n        config_args[\"min_memory\"] = participant.vc_min_mem\n    if participant.vc_max_mem > 0:\n        config_args[\"max_memory\"] = participant.vc_max_mem\n    if len(participant.vc_devices) > 0:\n        config_args[\"devices\"] = participant.vc_devices\n    return ServiceConfig(**config_args)\n"
  },
  {
    "path": "src/vc/prysm.star",
    "content": "constants = import_module(\"../package_io/constants.star\")\nshared_utils = import_module(\"../shared_utils/shared_utils.star\")\nvc_shared = import_module(\"./shared.star\")\n\nPRYSM_PASSWORD_MOUNT_DIRPATH_ON_SERVICE_CONTAINER = \"/prysm-password\"\nPRYSM_BEACON_RPC_PORT = 4000\n\n\ndef get_config(\n    plan,\n    participant,\n    el_cl_genesis_data,\n    keymanager_file,\n    image,\n    beacon_http_urls,\n    cl_context,\n    el_context,\n    remote_signer_context,\n    full_name,\n    node_keystore_files,\n    prysm_password_relative_filepath,\n    prysm_password_artifact_uuid,\n    tolerations,\n    node_selectors,\n    keymanager_enabled,\n    network_params,\n    port_publisher,\n    vc_index,\n    extra_files_artifacts,\n    vc_binary_artifact=None,\n):\n    validator_keys_dirpath = shared_utils.path_join(\n        constants.VALIDATOR_KEYS_DIRPATH_ON_SERVICE_CONTAINER,\n        node_keystore_files.prysm_relative_dirpath,\n    )\n    validator_secrets_dirpath = shared_utils.path_join(\n        PRYSM_PASSWORD_MOUNT_DIRPATH_ON_SERVICE_CONTAINER,\n        prysm_password_relative_filepath,\n    )\n\n    cmd = [\n        \"--accept-terms-of-use=true\",  # it's mandatory in order to run the node\n        \"--chain-config-file=\"\n        + constants.GENESIS_CONFIG_MOUNT_PATH_ON_CONTAINER\n        + \"/config.yaml\",\n        \"--suggested-fee-recipient=\" + constants.VALIDATING_REWARDS_ACCOUNT,\n        \"--beacon-rest-api-provider=\" + \",\".join(beacon_http_urls),\n        # vvvvvvvvvvvvvvvvvvv METRICS CONFIG vvvvvvvvvvvvvvvvvvvvv\n        \"--disable-monitoring=false\",\n        \"--monitoring-host=0.0.0.0\",\n        \"--monitoring-port={0}\".format(vc_shared.VALIDATOR_CLIENT_METRICS_PORT_NUM),\n        # ^^^^^^^^^^^^^^^^^^^ METRICS CONFIG ^^^^^^^^^^^^^^^^^^^^^\n    ]\n\n    # Only add RPC provider if we're not using a blobber (blobber doesn't proxy RPC)\n    # Blobber uses port 5000, so check if that's in the URL\n    if \":5000\" not in beacon_http_urls[0]:\n        cmd.append(\"--beacon-rpc-provider=\" + cl_context.beacon_grpc_url)\n\n    if remote_signer_context == None:\n        cmd.extend(\n            [\n                \"--wallet-dir=\" + validator_keys_dirpath,\n                \"--wallet-password-file=\" + validator_secrets_dirpath,\n            ]\n        )\n    else:\n        cmd.extend(\n            [\n                \"--remote-signer-url={0}\".format(remote_signer_context.http_url),\n                \"--remote-signer-keys={0}/api/v1/eth2/publicKeys\".format(\n                    remote_signer_context.http_url\n                ),\n            ]\n        )\n\n    if network_params.gas_limit > 0:\n        cmd.append(\"--suggested-gas-limit={0}\".format(network_params.gas_limit))\n\n    keymanager_api_cmd = [\n        \"--rpc\",\n        \"--http-port={0}\".format(vc_shared.VALIDATOR_HTTP_PORT_NUM),\n        \"--http-host=0.0.0.0\",\n        \"--keymanager-token-file=\" + constants.KEYMANAGER_MOUNT_PATH_ON_CONTAINER,\n    ]\n\n    # Check if we're using a blobber by checking for port 5000\n    is_using_blobber = \":5000\" in beacon_http_urls[0]\n\n    if cl_context.client_name != constants.CL_TYPE.prysm or is_using_blobber:\n        # Use Beacon API if:\n        # 1. Prysm VC wants to connect to a non-Prysm BN, OR\n        # 2. Blobber is enabled (since blobber only proxies REST, not RPC)\n        cmd.append(\"--enable-beacon-rest-api\")\n\n    if len(participant.vc_extra_params) > 0:\n        # this is a repeated<proto type>, we convert it into Starlark\n        cmd.extend([param for param in participant.vc_extra_params])\n\n    files = {\n        constants.GENESIS_DATA_MOUNTPOINT_ON_CLIENTS: el_cl_genesis_data.files_artifact_uuid,\n        constants.VALIDATOR_KEYS_DIRPATH_ON_SERVICE_CONTAINER: node_keystore_files.files_artifact_uuid,\n        PRYSM_PASSWORD_MOUNT_DIRPATH_ON_SERVICE_CONTAINER: prysm_password_artifact_uuid,\n    }\n\n    public_ports = {}\n    public_keymanager_port_assignment = {}\n    if port_publisher.vc_enabled:\n        public_ports_for_component = shared_utils.get_public_ports_for_component(\n            \"vc\", port_publisher, vc_index\n        )\n        public_port_assignments = {\n            constants.METRICS_PORT_ID: public_ports_for_component[0]\n        }\n        public_keymanager_port_assignment = {\n            constants.VALIDATOR_HTTP_PORT_ID: public_ports_for_component[1]\n        }\n        public_ports = shared_utils.get_port_specs(public_port_assignments)\n\n    ports = {}\n    ports.update(vc_shared.VALIDATOR_CLIENT_USED_PORTS)\n\n    if keymanager_enabled:\n        files[constants.KEYMANAGER_MOUNT_PATH_ON_CLIENTS] = keymanager_file\n        cmd.extend(keymanager_api_cmd)\n        ports.update(vc_shared.VALIDATOR_KEYMANAGER_USED_PORTS)\n        public_ports.update(\n            shared_utils.get_port_specs(public_keymanager_port_assignment)\n        )\n\n    # Add extra mounts - automatically handle file uploads\n    processed_mounts = shared_utils.process_extra_mounts(\n        plan, participant.vc_extra_mounts, extra_files_artifacts\n    )\n    for mount_path, artifact in processed_mounts.items():\n        files[mount_path] = artifact\n\n    # Binary injection - mount custom binary directory if provided\n    if vc_binary_artifact != None:\n        files[\"/opt/bin\"] = vc_binary_artifact.artifact\n\n    config_args = {\n        \"image\": image,\n        \"ports\": ports,\n        \"public_ports\": public_ports,\n        \"publish_udp\": port_publisher.vc_enabled,\n        \"cmd\": cmd,\n        \"files\": files,\n        \"env_vars\": participant.vc_extra_env_vars,\n        \"labels\": shared_utils.label_maker(\n            client=constants.VC_TYPE.prysm,\n            client_type=constants.CLIENT_TYPES.validator,\n            image=image[-constants.MAX_LABEL_LENGTH :],\n            connected_client=cl_context.client_name,\n            extra_labels=participant.vc_extra_labels\n            | {constants.NODE_INDEX_LABEL_KEY: str(vc_index + 1)},\n            supernode=participant.supernode,\n        ),\n        \"tolerations\": tolerations,\n        \"node_selectors\": node_selectors,\n        \"tty_enabled\": True,\n    }\n\n    # Binary injection - override entrypoint and cmd only when binary is provided\n    if vc_binary_artifact != None:\n        config_args[\"entrypoint\"] = [\"sh\", \"-c\"]\n        config_args[\"cmd\"] = [\n            \"cp /opt/bin/{0} /app/cmd/validator/validator && /app/cmd/validator/validator \".format(\n                vc_binary_artifact.filename\n            )\n            + \" \".join(cmd)\n        ]\n\n    if participant.vc_min_cpu > 0:\n        config_args[\"min_cpu\"] = participant.vc_min_cpu\n    if participant.vc_max_cpu > 0:\n        config_args[\"max_cpu\"] = participant.vc_max_cpu\n    if participant.vc_min_mem > 0:\n        config_args[\"min_memory\"] = participant.vc_min_mem\n    if participant.vc_max_mem > 0:\n        config_args[\"max_memory\"] = participant.vc_max_mem\n    if len(participant.vc_devices) > 0:\n        config_args[\"devices\"] = participant.vc_devices\n    return ServiceConfig(**config_args)\n"
  },
  {
    "path": "src/vc/shared.star",
    "content": "shared_utils = import_module(\"../shared_utils/shared_utils.star\")\nconstants = import_module(\"../package_io/constants.star\")\n\nVALIDATOR_HTTP_PORT_NUM = 5056\nVALIDATOR_CLIENT_METRICS_PORT_NUM = 8080\nMETRICS_PATH = \"/metrics\"\n\nVALIDATOR_CLIENT_USED_PORTS = {\n    constants.METRICS_PORT_ID: shared_utils.new_port_spec(\n        VALIDATOR_CLIENT_METRICS_PORT_NUM,\n        shared_utils.TCP_PROTOCOL,\n        shared_utils.HTTP_APPLICATION_PROTOCOL,\n    ),\n}\n\nVALIDATOR_KEYMANAGER_USED_PORTS = {\n    constants.VALIDATOR_HTTP_PORT_ID: shared_utils.new_port_spec(\n        VALIDATOR_HTTP_PORT_NUM,\n        shared_utils.TCP_PROTOCOL,\n        shared_utils.HTTP_APPLICATION_PROTOCOL,\n    )\n}\n"
  },
  {
    "path": "src/vc/teku.star",
    "content": "constants = import_module(\"../package_io/constants.star\")\nshared_utils = import_module(\"../shared_utils/shared_utils.star\")\nvc_shared = import_module(\"./shared.star\")\n\n\ndef get_config(\n    plan,\n    participant,\n    el_cl_genesis_data,\n    keymanager_file,\n    image,\n    beacon_http_urls,\n    cl_context,\n    el_context,\n    remote_signer_context,\n    full_name,\n    node_keystore_files,\n    tolerations,\n    node_selectors,\n    keymanager_enabled,\n    network_params,\n    port_publisher,\n    vc_index,\n    extra_files_artifacts,\n    vc_binary_artifact=None,\n):\n    validator_keys_dirpath = \"\"\n    validator_secrets_dirpath = \"\"\n    if node_keystore_files != None:\n        validator_keys_dirpath = shared_utils.path_join(\n            constants.VALIDATOR_KEYS_DIRPATH_ON_SERVICE_CONTAINER,\n            node_keystore_files.teku_keys_relative_dirpath,\n        )\n        validator_secrets_dirpath = shared_utils.path_join(\n            constants.VALIDATOR_KEYS_DIRPATH_ON_SERVICE_CONTAINER,\n            node_keystore_files.teku_secrets_relative_dirpath,\n        )\n\n    cmd = [\n        \"validator-client\",\n        \"--network=\"\n        + constants.GENESIS_CONFIG_MOUNT_PATH_ON_CONTAINER\n        + \"/config.yaml\",\n        \"--beacon-node-api-endpoint=\" + \",\".join(beacon_http_urls),\n        \"--validators-proposer-default-fee-recipient=\"\n        + constants.VALIDATING_REWARDS_ACCOUNT,\n        # vvvvvvvvvvvvvvvvvvv METRICS CONFIG vvvvvvvvvvvvvvvvvvvvv\n        \"--metrics-enabled=true\",\n        \"--metrics-host-allowlist=*\",\n        \"--metrics-interface=0.0.0.0\",\n        \"--metrics-port={0}\".format(vc_shared.VALIDATOR_CLIENT_METRICS_PORT_NUM),\n    ]\n\n    if network_params.gas_limit > 0:\n        cmd.append(\n            \"--validators-builder-registration-default-gas-limit={0}\".format(\n                network_params.gas_limit\n            )\n        )\n\n    if remote_signer_context == None:\n        cmd.extend(\n            [\n                \"--validator-keys={0}:{1}\".format(\n                    validator_keys_dirpath,\n                    validator_secrets_dirpath,\n                ),\n            ]\n        )\n    else:\n        cmd.extend(\n            [\n                \"--validators-external-signer-url={0}\".format(\n                    remote_signer_context.http_url\n                ),\n                \"--validators-external-signer-public-keys=external-signer\",\n            ]\n        )\n\n    keymanager_api_cmd = [\n        \"--validator-api-enabled=true\",\n        \"--validator-api-host-allowlist=*\",\n        \"--validator-api-port={0}\".format(vc_shared.VALIDATOR_HTTP_PORT_NUM),\n        \"--validator-api-interface=0.0.0.0\",\n        \"--validator-api-bearer-file=\" + constants.KEYMANAGER_MOUNT_PATH_ON_CONTAINER,\n        \"--Xvalidator-api-ssl-enabled=false\",\n        \"--Xvalidator-api-unsafe-hosts-enabled=true\",\n    ]\n\n    if len(participant.vc_extra_params) > 0:\n        # this is a repeated<proto type>, we convert it into Starlark\n        cmd.extend([param for param in participant.vc_extra_params])\n\n    files = {\n        constants.GENESIS_DATA_MOUNTPOINT_ON_CLIENTS: el_cl_genesis_data.files_artifact_uuid,\n        constants.VALIDATOR_KEYS_DIRPATH_ON_SERVICE_CONTAINER: node_keystore_files.files_artifact_uuid,\n    }\n\n    public_ports = {}\n    public_keymanager_port_assignment = {}\n    if port_publisher.vc_enabled:\n        public_ports_for_component = shared_utils.get_public_ports_for_component(\n            \"vc\", port_publisher, vc_index\n        )\n        public_port_assignments = {\n            constants.METRICS_PORT_ID: public_ports_for_component[0]\n        }\n        public_keymanager_port_assignment = {\n            constants.VALIDATOR_HTTP_PORT_ID: public_ports_for_component[1]\n        }\n        public_ports = shared_utils.get_port_specs(public_port_assignments)\n\n    ports = {}\n    ports.update(vc_shared.VALIDATOR_CLIENT_USED_PORTS)\n\n    if keymanager_enabled:\n        files[constants.KEYMANAGER_MOUNT_PATH_ON_CLIENTS] = keymanager_file\n        cmd.extend(keymanager_api_cmd)\n        ports.update(vc_shared.VALIDATOR_KEYMANAGER_USED_PORTS)\n        public_ports.update(\n            shared_utils.get_port_specs(public_keymanager_port_assignment)\n        )\n\n    # Add extra mounts - automatically handle file uploads\n    processed_mounts = shared_utils.process_extra_mounts(\n        plan, participant.vc_extra_mounts, extra_files_artifacts\n    )\n    for mount_path, artifact in processed_mounts.items():\n        files[mount_path] = artifact\n\n    # Binary injection - mount custom binary directory if provided\n    if vc_binary_artifact != None:\n        files[\"/opt/bin\"] = vc_binary_artifact.artifact\n\n    config_args = {\n        \"image\": image,\n        \"ports\": ports,\n        \"public_ports\": public_ports,\n        \"publish_udp\": port_publisher.vc_enabled,\n        \"cmd\": cmd,\n        \"files\": files,\n        \"env_vars\": participant.vc_extra_env_vars,\n        \"labels\": shared_utils.label_maker(\n            client=constants.VC_TYPE.teku,\n            client_type=constants.CLIENT_TYPES.validator,\n            image=image[-constants.MAX_LABEL_LENGTH :],\n            connected_client=cl_context.client_name,\n            extra_labels=participant.vc_extra_labels\n            | {constants.NODE_INDEX_LABEL_KEY: str(vc_index + 1)},\n            supernode=participant.supernode,\n        ),\n        \"tolerations\": tolerations,\n        \"node_selectors\": node_selectors,\n    }\n\n    # Binary injection - override entrypoint and cmd only when binary is provided\n    if vc_binary_artifact != None:\n        config_args[\"entrypoint\"] = [\"sh\", \"-c\"]\n        config_args[\"cmd\"] = [\n            \"cp /opt/bin/{0} /opt/teku/bin/teku && /opt/teku/bin/teku \".format(\n                vc_binary_artifact.filename\n            )\n            + \" \".join(cmd)\n        ]\n\n    if participant.vc_min_cpu > 0:\n        config_args[\"min_cpu\"] = participant.vc_min_cpu\n    if participant.vc_max_cpu > 0:\n        config_args[\"max_cpu\"] = participant.vc_max_cpu\n    if participant.vc_min_mem > 0:\n        config_args[\"min_memory\"] = participant.vc_min_mem\n    if participant.vc_max_mem > 0:\n        config_args[\"max_memory\"] = participant.vc_max_mem\n    if len(participant.vc_devices) > 0:\n        config_args[\"devices\"] = participant.vc_devices\n    return ServiceConfig(**config_args)\n"
  },
  {
    "path": "src/vc/vc_context.star",
    "content": "def new_vc_context(\n    client_name,\n    service_name,\n    metrics_info,\n):\n    return struct(\n        client_name=client_name,\n        service_name=service_name,\n        metrics_info=metrics_info,\n    )\n"
  },
  {
    "path": "src/vc/vc_launcher.star",
    "content": "input_parser = import_module(\"../package_io/input_parser.star\")\nconstants = import_module(\"../package_io/constants.star\")\nnode_metrics = import_module(\"../node_metrics_info.star\")\nvc_context = import_module(\"./vc_context.star\")\nshared_utils = import_module(\"../shared_utils/shared_utils.star\")\n\nlighthouse = import_module(\"./lighthouse.star\")\nlodestar = import_module(\"./lodestar.star\")\nnimbus = import_module(\"./nimbus.star\")\nprysm = import_module(\"./prysm.star\")\nteku = import_module(\"./teku.star\")\nvero = import_module(\"./vero.star\")\nvc_shared = import_module(\"./shared.star\")\n\n\ndef get_vc_config(\n    plan,\n    launcher,\n    keymanager_file,\n    service_name,\n    vc_type,\n    image,\n    global_log_level,\n    cl_context,\n    all_cl_contexts,\n    el_context,\n    remote_signer_context,\n    full_name,\n    snooper_enabled,\n    snooper_beacon_context,\n    node_keystore_files,\n    participant,\n    prysm_password_relative_filepath,\n    prysm_password_artifact_uuid,\n    global_tolerations,\n    node_selectors,\n    network_params,\n    port_publisher,\n    vc_index,\n    extra_files_artifacts,\n    tempo_otlp_grpc_url=None,\n    vc_binary_artifact=None,\n):\n    if node_keystore_files == None:\n        return None\n\n    tolerations = shared_utils.get_tolerations(\n        specific_container_tolerations=participant.vc_tolerations,\n        participant_tolerations=participant.tolerations,\n        global_tolerations=global_tolerations,\n    )\n\n    if snooper_enabled:\n        beacon_http_url = \"http://{0}:{1}\".format(\n            snooper_beacon_context.ip_addr,\n            snooper_beacon_context.beacon_rpc_port_num,\n        )\n        beacon_http_urls = [beacon_http_url]\n    else:\n        beacon_http_urls = []\n        if (\n            participant.vc_beacon_node_indices != None\n            and len(participant.vc_beacon_node_indices) > 0\n        ):\n            for idx in participant.vc_beacon_node_indices:\n                if idx < len(all_cl_contexts):\n                    beacon_http_urls.append(all_cl_contexts[idx].beacon_http_url)\n\n        if len(beacon_http_urls) == 0:\n            beacon_http_urls = [cl_context.beacon_http_url]\n\n        beacon_http_url = beacon_http_urls[0]\n\n    keymanager_enabled = participant.keymanager_enabled\n    if vc_type == constants.VC_TYPE.lighthouse:\n        if remote_signer_context != None:\n            fail(\"`use_remote_signer` flag not supported for lighthouse VC\")\n        config = lighthouse.get_config(\n            plan=plan,\n            participant=participant,\n            el_cl_genesis_data=launcher.el_cl_genesis_data,\n            image=image,\n            service_name=service_name,\n            global_log_level=global_log_level,\n            beacon_http_urls=beacon_http_urls,\n            cl_context=cl_context,\n            el_context=el_context,\n            full_name=full_name,\n            node_keystore_files=node_keystore_files,\n            tolerations=tolerations,\n            node_selectors=node_selectors,\n            keymanager_enabled=keymanager_enabled,\n            network_params=network_params,\n            port_publisher=port_publisher,\n            vc_index=vc_index,\n            extra_files_artifacts=extra_files_artifacts,\n            tempo_otlp_grpc_url=tempo_otlp_grpc_url,\n            vc_binary_artifact=vc_binary_artifact,\n        )\n    elif vc_type == constants.VC_TYPE.lodestar:\n        config = lodestar.get_config(\n            plan=plan,\n            participant=participant,\n            el_cl_genesis_data=launcher.el_cl_genesis_data,\n            keymanager_file=keymanager_file,\n            image=image,\n            global_log_level=global_log_level,\n            beacon_http_urls=beacon_http_urls,\n            cl_context=cl_context,\n            el_context=el_context,\n            remote_signer_context=remote_signer_context,\n            full_name=full_name,\n            node_keystore_files=node_keystore_files,\n            tolerations=tolerations,\n            node_selectors=node_selectors,\n            keymanager_enabled=keymanager_enabled,\n            network_params=network_params,\n            port_publisher=port_publisher,\n            vc_index=vc_index,\n            extra_files_artifacts=extra_files_artifacts,\n            vc_binary_artifact=vc_binary_artifact,\n        )\n    elif vc_type == constants.VC_TYPE.teku:\n        config = teku.get_config(\n            plan=plan,\n            participant=participant,\n            el_cl_genesis_data=launcher.el_cl_genesis_data,\n            keymanager_file=keymanager_file,\n            image=image,\n            beacon_http_urls=beacon_http_urls,\n            cl_context=cl_context,\n            el_context=el_context,\n            remote_signer_context=remote_signer_context,\n            full_name=full_name,\n            node_keystore_files=node_keystore_files,\n            tolerations=tolerations,\n            node_selectors=node_selectors,\n            keymanager_enabled=keymanager_enabled,\n            network_params=network_params,\n            port_publisher=port_publisher,\n            vc_index=vc_index,\n            extra_files_artifacts=extra_files_artifacts,\n            vc_binary_artifact=vc_binary_artifact,\n        )\n    elif vc_type == constants.VC_TYPE.nimbus:\n        config = nimbus.get_config(\n            plan=plan,\n            participant=participant,\n            el_cl_genesis_data=launcher.el_cl_genesis_data,\n            keymanager_file=keymanager_file,\n            image=image,\n            beacon_http_urls=beacon_http_urls,\n            cl_context=cl_context,\n            el_context=el_context,\n            remote_signer_context=remote_signer_context,\n            full_name=full_name,\n            node_keystore_files=node_keystore_files,\n            tolerations=tolerations,\n            node_selectors=node_selectors,\n            keymanager_enabled=keymanager_enabled,\n            network_params=network_params,\n            port_publisher=port_publisher,\n            vc_index=vc_index,\n            extra_files_artifacts=extra_files_artifacts,\n            vc_binary_artifact=vc_binary_artifact,\n        )\n    elif vc_type == constants.VC_TYPE.prysm:\n        config = prysm.get_config(\n            plan=plan,\n            participant=participant,\n            el_cl_genesis_data=launcher.el_cl_genesis_data,\n            keymanager_file=keymanager_file,\n            image=image,\n            beacon_http_urls=beacon_http_urls,\n            cl_context=cl_context,\n            el_context=el_context,\n            remote_signer_context=remote_signer_context,\n            full_name=full_name,\n            node_keystore_files=node_keystore_files,\n            prysm_password_relative_filepath=prysm_password_relative_filepath,\n            prysm_password_artifact_uuid=prysm_password_artifact_uuid,\n            tolerations=tolerations,\n            node_selectors=node_selectors,\n            keymanager_enabled=keymanager_enabled,\n            network_params=network_params,\n            port_publisher=port_publisher,\n            vc_index=vc_index,\n            extra_files_artifacts=extra_files_artifacts,\n            vc_binary_artifact=vc_binary_artifact,\n        )\n    elif vc_type == constants.VC_TYPE.vero:\n        if remote_signer_context == None:\n            fail(\"vero VC requires `use_remote_signer` to be true\")\n        if keymanager_enabled:\n            fail(\"vero VC doesn't support the Keymanager API\")\n        config = vero.get_config(\n            plan=plan,\n            participant=participant,\n            el_cl_genesis_data=launcher.el_cl_genesis_data,\n            image=image,\n            global_log_level=global_log_level,\n            beacon_http_urls=beacon_http_urls,\n            cl_context=cl_context,\n            remote_signer_context=remote_signer_context,\n            full_name=full_name,\n            tolerations=tolerations,\n            node_selectors=node_selectors,\n            port_publisher=port_publisher,\n            vc_index=vc_index,\n            extra_files_artifacts=extra_files_artifacts,\n            vc_binary_artifact=vc_binary_artifact,\n        )\n    elif vc_type == constants.VC_TYPE.grandine:\n        fail(\"Grandine VC is not yet supported\")\n    elif vc_type == constants.VC_TYPE.consensoor:\n        return None\n    else:\n        fail(\"Unsupported vc_type: {0}\".format(vc_type))\n\n    return config\n\n\ndef new_vc_launcher(el_cl_genesis_data):\n    return struct(el_cl_genesis_data=el_cl_genesis_data)\n\n\ndef get_vc_context(\n    plan,\n    service_name,\n    service,\n    client_name,\n):\n    validator_metrics_port = service.ports[constants.METRICS_PORT_ID]\n    validator_metrics_url = \"{0}:{1}\".format(\n        service.name, validator_metrics_port.number\n    )\n    validator_node_metrics_info = node_metrics.new_node_metrics_info(\n        service_name, vc_shared.METRICS_PATH, validator_metrics_url\n    )\n\n    return vc_context.new_vc_context(\n        client_name=client_name,\n        service_name=service_name,\n        metrics_info=validator_node_metrics_info,\n    )\n"
  },
  {
    "path": "src/vc/vero.star",
    "content": "constants = import_module(\"../package_io/constants.star\")\ninput_parser = import_module(\"../package_io/input_parser.star\")\nshared_utils = import_module(\"../shared_utils/shared_utils.star\")\nvc_shared = import_module(\"./shared.star\")\n\n\nVERBOSITY_LEVELS = {\n    constants.GLOBAL_LOG_LEVEL.error: \"ERROR\",\n    constants.GLOBAL_LOG_LEVEL.warn: \"WARNING\",\n    constants.GLOBAL_LOG_LEVEL.info: \"INFO\",\n    constants.GLOBAL_LOG_LEVEL.debug: \"DEBUG\",\n}\n\n\ndef get_config(\n    plan,\n    participant,\n    el_cl_genesis_data,\n    image,\n    global_log_level,\n    beacon_http_urls,\n    cl_context,\n    remote_signer_context,\n    full_name,\n    tolerations,\n    node_selectors,\n    port_publisher,\n    vc_index,\n    extra_files_artifacts,\n    vc_binary_artifact=None,\n):\n    log_level = input_parser.get_client_log_level_or_default(\n        participant.vc_log_level, global_log_level, VERBOSITY_LEVELS\n    )\n\n    cmd = [\n        \"--network=custom\",\n        \"--network-custom-config-path=\"\n        + constants.GENESIS_CONFIG_MOUNT_PATH_ON_CONTAINER\n        + \"/config.yaml\",\n        \"--remote-signer-url={0}\".format(remote_signer_context.http_url),\n        \"--beacon-node-urls=\" + \",\".join(beacon_http_urls),\n        \"--fee-recipient=\" + constants.VALIDATING_REWARDS_ACCOUNT,\n        \"--metrics-address=0.0.0.0\",\n        \"--metrics-port={0}\".format(vc_shared.VALIDATOR_CLIENT_METRICS_PORT_NUM),\n        \"--log-level=\" + log_level,\n    ]\n\n    if len(participant.vc_extra_params) > 0:\n        # this is a repeated<proto type>, we convert it into Starlark\n        cmd.extend([param for param in participant.vc_extra_params])\n\n    files = {\n        constants.GENESIS_DATA_MOUNTPOINT_ON_CLIENTS: el_cl_genesis_data.files_artifact_uuid,\n    }\n\n    public_ports = {}\n    if port_publisher.vc_enabled:\n        public_ports_for_component = shared_utils.get_public_ports_for_component(\n            \"vc\", port_publisher, vc_index\n        )\n        public_port_assignments = {\n            constants.METRICS_PORT_ID: public_ports_for_component[0]\n        }\n        public_ports = shared_utils.get_port_specs(public_port_assignments)\n\n    ports = {}\n    ports.update(vc_shared.VALIDATOR_CLIENT_USED_PORTS)\n\n    # Add extra mounts - automatically handle file uploads\n    processed_mounts = shared_utils.process_extra_mounts(\n        plan, participant.vc_extra_mounts, extra_files_artifacts\n    )\n    for mount_path, artifact in processed_mounts.items():\n        files[mount_path] = artifact\n\n    # Binary injection - mount custom binary directory if provided\n    if vc_binary_artifact != None:\n        files[\"/opt/bin\"] = vc_binary_artifact.artifact\n\n    config_args = {\n        \"image\": image,\n        \"ports\": ports,\n        \"public_ports\": public_ports,\n        \"publish_udp\": port_publisher.vc_enabled,\n        \"cmd\": cmd,\n        \"files\": files,\n        \"env_vars\": participant.vc_extra_env_vars,\n        \"labels\": shared_utils.label_maker(\n            client=constants.VC_TYPE.vero,\n            client_type=constants.CLIENT_TYPES.validator,\n            image=image[-constants.MAX_LABEL_LENGTH :],\n            connected_client=cl_context.client_name,\n            extra_labels=participant.vc_extra_labels\n            | {constants.NODE_INDEX_LABEL_KEY: str(vc_index + 1)},\n            supernode=participant.supernode,\n        ),\n        \"tolerations\": tolerations,\n        \"node_selectors\": node_selectors,\n    }\n\n    # Binary injection - override entrypoint and cmd only when binary is provided\n    if vc_binary_artifact != None:\n        config_args[\"entrypoint\"] = [\"sh\", \"-c\"]\n        config_args[\"cmd\"] = [\n            \"cp /opt/bin/{0} /usr/local/bin/vero && vero \".format(\n                vc_binary_artifact.filename\n            )\n            + \" \".join(cmd)\n        ]\n\n    if participant.vc_min_cpu > 0:\n        config_args[\"min_cpu\"] = participant.vc_min_cpu\n    if participant.vc_max_cpu > 0:\n        config_args[\"max_cpu\"] = participant.vc_max_cpu\n    if participant.vc_min_mem > 0:\n        config_args[\"min_memory\"] = participant.vc_min_mem\n    if participant.vc_max_mem > 0:\n        config_args[\"max_memory\"] = participant.vc_max_mem\n    if len(participant.vc_devices) > 0:\n        config_args[\"devices\"] = participant.vc_devices\n    return ServiceConfig(**config_args)\n"
  },
  {
    "path": "src/xatu_sentry/xatu_sentry_context.star",
    "content": "def new_xatu_sentry_context(\n    ip_addr,\n    metrics_port_num,\n    pair_name,\n):\n    return struct(\n        ip_addr=ip_addr,\n        metrics_port_num=metrics_port_num,\n        pair_name=pair_name,\n    )\n"
  },
  {
    "path": "src/xatu_sentry/xatu_sentry_launcher.star",
    "content": "shared_utils = import_module(\"../shared_utils/shared_utils.star\")\nstatic_files = import_module(\"../static_files/static_files.star\")\nxatu_sentry_context = import_module(\"../xatu_sentry/xatu_sentry_context.star\")\ninput_parser = import_module(\"../package_io/input_parser.star\")\n\nHTTP_PORT_ID = \"http\"\nMETRICS_PORT_NUMBER = 9090\n\nXATU_SENTRY_CONFIG_MOUNT_DIRPATH_ON_SERVICE = \"/config\"\nXATU_SENTRY_CONFIG_FILENAME = \"config.yaml\"\n\n# The min/max CPU/memory that xatu-sentry can use\nMIN_CPU = 10\nMAX_CPU = 1000\nMIN_MEMORY = 16\nMAX_MEMORY = 1024\n\n\ndef launch(\n    plan,\n    xatu_sentry_service_name,\n    cl_context,\n    xatu_sentry_params,\n    network_params,\n    pair_name,\n    node_selectors,\n    global_tolerations,\n):\n    tolerations = shared_utils.get_tolerations(global_tolerations=global_tolerations)\n    config_template = read_file(static_files.XATU_SENTRY_CONFIG_TEMPLATE_FILEPATH)\n\n    template_data = new_config_template_data(\n        str(METRICS_PORT_NUMBER),\n        pair_name,\n        \"{0}\".format(cl_context.beacon_http_url),\n        xatu_sentry_params.xatu_server_addr,\n        network_params.network,\n        xatu_sentry_params.beacon_subscriptions,\n        xatu_sentry_params.xatu_server_headers,\n        xatu_sentry_params.xatu_server_tls,\n    )\n\n    template_and_data = shared_utils.new_template_and_data(\n        config_template, template_data\n    )\n\n    template_and_data_by_rel_dest_filepath = {}\n\n    config_name = \"{}-{}\".format(xatu_sentry_service_name, XATU_SENTRY_CONFIG_FILENAME)\n\n    template_and_data_by_rel_dest_filepath[config_name] = template_and_data\n\n    config_files_artifact_name = plan.render_templates(\n        template_and_data_by_rel_dest_filepath, config_name\n    )\n\n    config_file_path = shared_utils.path_join(\n        XATU_SENTRY_CONFIG_MOUNT_DIRPATH_ON_SERVICE,\n        config_name,\n    )\n\n    xatu_sentry_service = plan.add_service(\n        xatu_sentry_service_name,\n        ServiceConfig(\n            image=xatu_sentry_params.xatu_sentry_image,\n            ports={\n                HTTP_PORT_ID: shared_utils.new_port_spec(\n                    METRICS_PORT_NUMBER,\n                    shared_utils.TCP_PROTOCOL,\n                    shared_utils.HTTP_APPLICATION_PROTOCOL,\n                )\n            },\n            files={\n                XATU_SENTRY_CONFIG_MOUNT_DIRPATH_ON_SERVICE: config_files_artifact_name,\n            },\n            cmd=[\n                \"sentry\",\n                \"--config\",\n                config_file_path,\n            ],\n            min_cpu=MIN_CPU,\n            max_cpu=MAX_CPU,\n            min_memory=MIN_MEMORY,\n            max_memory=MAX_MEMORY,\n            node_selectors=node_selectors,\n            tolerations=tolerations,\n        ),\n    )\n\n    return xatu_sentry_context.new_xatu_sentry_context(\n        xatu_sentry_service.name,\n        METRICS_PORT_NUMBER,\n        pair_name,\n    )\n\n\ndef new_config_template_data(\n    metrics_port,\n    beacon_node_name,\n    beacon_node_addr,\n    xatu_server_addr,\n    network_name,\n    beacon_subscriptions,\n    xatu_server_headers,\n    xatu_server_tls,\n):\n    return {\n        \"MetricsPort\": metrics_port,\n        \"BeaconNodeName\": beacon_node_name,\n        \"BeaconNodeAddress\": beacon_node_addr,\n        \"XatuServerAddress\": xatu_server_addr,\n        \"EthereumNetworkName\": network_name,\n        \"BeaconSubscriptions\": beacon_subscriptions,\n        \"XatuServerHeaders\": xatu_server_headers,\n        \"XatuServerTLS\": xatu_server_tls,\n    }\n"
  },
  {
    "path": "src/zkboost/zkboost_launcher.star",
    "content": "shared_utils = import_module(\"../shared_utils/shared_utils.star\")\nconstants = import_module(\"../package_io/constants.star\")\n\nSERVICE_NAME_PREFIX = \"zkboost\"\n\nHTTP_PORT_NUMBER = 3000\n\nZKBOOST_CONFIG_FILENAME = \"config.toml\"\n\nZKBOOST_CONFIG_MOUNT_DIRPATH_ON_SERVICE = \"/config\"\n\nMIN_CPU = 100\nMAX_CPU = 1000\nMIN_MEMORY = 256\nMAX_MEMORY = 2048\n\nUSED_PORTS = {\n    constants.HTTP_PORT_ID: shared_utils.new_port_spec(\n        HTTP_PORT_NUMBER,\n        shared_utils.TCP_PROTOCOL,\n        shared_utils.HTTP_APPLICATION_PROTOCOL,\n    ),\n}\n\nERE_SERVER_HTTP_PORT_ID = \"http\"\nERE_SERVER_PORT = 3000\nERE_SERVER_READY_TIMEOUT = \"600s\"\nERE_SERVER_READY_INTERVAL = \"10s\"\n\n# Templates for auto-resolving ere-server image and ere-guests ELF URL from the\n# Cargo.toml in zkboost repo, that pins ere and ere-guests version.\nZKBOOST_CARGO_TOML_FILEPATH = \"github.com/eth-act/zkboost/Cargo.toml@{ref}\"\nERE_SERVER_IMAGE_TEMPLATE = (\n    \"ghcr.io/eth-act/ere/ere-server-{zkvm_kind}:{version}{suffix}\"\n)\nERE_GUESTS_ELF_URL_TEMPLATE = \"https://github.com/eth-act/ere-guests/releases/download/v{version}/stateless-validator-{proof_type}.elf\"\nERE_DEP_NAME = \"ere-server-client\"\nERE_GUESTS_DEP_NAME = \"ere-guests-stateless-validator-common\"\n\n# Default env applied to every `kind: ere` entry.\nERE_SERVER_DEFAULT_ENV = {\"RUST_LOG\": \"info\"}\n\n# ZisK-specific Ere server defaults.\nZISK_DEFAULT_SHM_SIZE_MIB = 32768\nZISK_DEFAULT_ULIMITS = {\"memlock\": -1}\nZISK_DEFAULT_ENV = {\n    \"RUST_LOG\": \"info,asm_runner=warn,executor=warn,mem_planner_cpp=warn,proofman=warn,rom_setup=warn,sm_rom=warn,zisk=warn\",\n    \"ERE_ZISK_SETUP_ON_INIT\": \"1\",\n}\n\n\ndef launch_zkboost(\n    plan,\n    config_template,\n    participant_contexts,\n    zkboost_params,\n    global_node_selectors,\n    global_tolerations,\n    port_publisher,\n    additional_service_index,\n    docker_cache_params,\n    tempo_otlp_grpc_url=None,\n):\n    tolerations = shared_utils.get_tolerations(global_tolerations=global_tolerations)\n\n    # Launch ere-server services once - shared across all zkboost instances.\n    # Each `ere` zkvm entry results in a single long-lived service; all zkboost\n    # instances reference it as an endpoint.\n    # `_resolve_image_and_elf_url` fills in `image` and `elf_url` from zkboost's\n    # pinned ere/ere-guests versions when the user didn't provide them.\n    ere_server_endpoints = {}\n    metrics_jobs = []\n    for zkvm in _resolve_image_and_elf_url(zkboost_params.zkvms, zkboost_params.image):\n        if zkvm[\"kind\"] != \"ere\":\n            continue\n\n        proof_type = zkvm[\"proof_type\"]\n        if proof_type in ere_server_endpoints:\n            continue\n\n        endpoint = _launch_ere_server(\n            plan, zkvm, global_node_selectors, tolerations, tempo_otlp_grpc_url\n        )\n        ere_server_endpoints[proof_type] = endpoint\n        metrics_jobs.append(_get_ere_server_metrics_job(proof_type))\n\n    for instance_index, instance in enumerate(zkboost_params.instances):\n        name = instance[\"name\"]\n        el_participant_index = instance[\"el_participant_index\"]\n\n        if el_participant_index >= len(participant_contexts):\n            fail(\n                \"zkboost instance '{0}' references el_participant_index {1} but only {2} participants exist\".format(\n                    name, el_participant_index, len(participant_contexts)\n                )\n            )\n\n        el_client = participant_contexts[el_participant_index].el_context\n        el_endpoint = \"http://{0}:{1}\".format(\n            el_client.dns_name, el_client.rpc_port_num\n        )\n\n        zkvms = []\n        for zkvm in zkboost_params.zkvms:\n            entry = {\n                \"Kind\": zkvm[\"kind\"],\n                \"ProofType\": zkvm[\"proof_type\"],\n                \"ProofTimeoutSecs\": zkvm.get(\"proof_timeout_secs\", 12),\n            }\n            if zkvm[\"kind\"] == \"ere\":\n                entry[\"Endpoint\"] = ere_server_endpoints[zkvm[\"proof_type\"]]\n            elif zkvm[\"kind\"] == \"external\":\n                entry[\n                    \"Kind\"\n                ] = \"ere\"  # zkboost config kind for any external prover connection\n                entry[\"Endpoint\"] = zkvm[\"endpoint\"]\n            elif zkvm[\"kind\"] == \"mock\":\n                mock_proving_time = zkvm.get(\n                    \"mock_proving_time\", {\"kind\": \"constant\", \"ms\": 6000}\n                )\n                entry[\"MockProvingTimeKind\"] = mock_proving_time.get(\"kind\", \"constant\")\n                entry[\"MockProvingTimeConstantMs\"] = mock_proving_time.get(\"ms\", 0)\n                entry[\"MockProvingTimeRandomMinMs\"] = mock_proving_time.get(\"min_ms\", 0)\n                entry[\"MockProvingTimeRandomMaxMs\"] = mock_proving_time.get(\"max_ms\", 0)\n                entry[\"MockProvingTimeLinearMsPerMgas\"] = mock_proving_time.get(\n                    \"ms_per_mgas\", 0\n                )\n                entry[\"MockProofSize\"] = zkvm.get(\"mock_proof_size\", 128 << 10)\n                entry[\"MockFailure\"] = zkvm.get(\"mock_failure\", False)\n            zkvms.append(entry)\n\n        template_data = {\n            \"Port\": HTTP_PORT_NUMBER,\n            \"ELEndpoint\": el_endpoint,\n            \"WitnessTimeoutSecs\": 12,\n            \"WitnessCacheSize\": 128,\n            \"ProofCacheSize\": 128,\n            \"DashboardEnabled\": zkboost_params.dashboard_enabled,\n            \"DashboardRetention\": 256,\n            \"Zkvms\": zkvms,\n        }\n\n        template_and_data = shared_utils.new_template_and_data(\n            config_template, template_data\n        )\n        template_and_data_by_rel_dest_filepath = {}\n        template_and_data_by_rel_dest_filepath[\n            ZKBOOST_CONFIG_FILENAME\n        ] = template_and_data\n\n        config_files_artifact_name = plan.render_templates(\n            template_and_data_by_rel_dest_filepath, name + \"-config\"\n        )\n        config = get_config(\n            name,\n            config_files_artifact_name,\n            zkboost_params,\n            global_node_selectors,\n            tolerations,\n            port_publisher,\n            additional_service_index + instance_index,\n            docker_cache_params,\n            tempo_otlp_grpc_url,\n        )\n\n        plan.add_service(name, config)\n        metrics_jobs.append(get_metrics_job(name))\n\n    return metrics_jobs\n\n\ndef get_metrics_job(service_name):\n    return {\n        \"Name\": service_name,\n        \"Endpoint\": \"{0}:{1}\".format(service_name, HTTP_PORT_NUMBER),\n        \"MetricsPath\": \"/metrics\",\n        \"Labels\": {\n            \"service\": service_name,\n            \"client_type\": SERVICE_NAME_PREFIX,\n        },\n        \"ScrapeInterval\": \"15s\",\n    }\n\n\ndef get_config(\n    service_name,\n    config_files_artifact_name,\n    zkboost_params,\n    node_selectors,\n    tolerations,\n    port_publisher,\n    additional_service_index,\n    docker_cache_params,\n    tempo_otlp_grpc_url,\n):\n    config_file_path = shared_utils.path_join(\n        ZKBOOST_CONFIG_MOUNT_DIRPATH_ON_SERVICE,\n        ZKBOOST_CONFIG_FILENAME,\n    )\n\n    public_ports = shared_utils.get_additional_service_standard_public_port(\n        port_publisher,\n        constants.HTTP_PORT_ID,\n        additional_service_index,\n        0,\n    )\n\n    env_vars = dict(zkboost_params.env)\n    if tempo_otlp_grpc_url != None:\n        env_vars[\"OTEL_EXPORTER_OTLP_ENDPOINT\"] = tempo_otlp_grpc_url\n        env_vars[\"OTEL_SERVICE_NAME\"] = service_name\n\n    return ServiceConfig(\n        image=shared_utils.docker_cache_image_calc(\n            docker_cache_params,\n            zkboost_params.image,\n        ),\n        ports=USED_PORTS,\n        public_ports=public_ports,\n        files={\n            ZKBOOST_CONFIG_MOUNT_DIRPATH_ON_SERVICE: config_files_artifact_name,\n        },\n        entrypoint=[\"/usr/local/bin/zkboost\"],\n        cmd=[\"--config\", config_file_path],\n        env_vars=env_vars,\n        min_cpu=MIN_CPU,\n        max_cpu=MAX_CPU,\n        min_memory=MIN_MEMORY,\n        max_memory=MAX_MEMORY,\n        node_selectors=node_selectors,\n        tolerations=tolerations,\n        ready_conditions=ReadyCondition(\n            recipe=GetHttpRequestRecipe(\n                port_id=constants.HTTP_PORT_ID,\n                endpoint=\"/health\",\n            ),\n            field=\"code\",\n            assertion=\"==\",\n            target_value=200,\n        ),\n    )\n\n\ndef _launch_ere_server(\n    plan, zkvm, global_node_selectors, tolerations, tempo_otlp_grpc_url\n):\n    \"\"\"Launch an ere-server prover service and return its HTTP endpoint.\"\"\"\n    proof_type = zkvm[\"proof_type\"]\n    service_name = \"ere-server-{0}\".format(proof_type)\n    zkvm_kind = _zkvm_kind_from_proof_type(proof_type)\n\n    gpu = dict(zkvm.get(\"gpu\", {}))\n    has_gpu = _zkvm_has_gpu(zkvm)\n    if zkvm_kind == \"zisk\":\n        if \"shm_size\" not in gpu:\n            gpu[\"shm_size\"] = ZISK_DEFAULT_SHM_SIZE_MIB\n        if \"ulimits\" not in gpu:\n            gpu[\"ulimits\"] = dict(ZISK_DEFAULT_ULIMITS)\n\n    used_ports = {\n        ERE_SERVER_HTTP_PORT_ID: shared_utils.new_port_spec(\n            ERE_SERVER_PORT,\n            shared_utils.TCP_PROTOCOL,\n            shared_utils.HTTP_APPLICATION_PROTOCOL,\n            wait=None,\n        )\n    }\n\n    env_vars = dict(ERE_SERVER_DEFAULT_ENV)\n    if zkvm_kind == \"zisk\":\n        for key, value in ZISK_DEFAULT_ENV.items():\n            env_vars[key] = value\n    for key, value in zkvm.get(\"env\", {}).items():\n        env_vars[key] = value\n    if tempo_otlp_grpc_url != None:\n        env_vars[\"OTEL_EXPORTER_OTLP_ENDPOINT\"] = tempo_otlp_grpc_url\n        env_vars[\"OTEL_SERVICE_NAME\"] = service_name\n\n    plan.add_service(\n        name=service_name,\n        config=ServiceConfig(\n            image=zkvm[\"image\"],\n            ports=used_ports,\n            cmd=[\n                \"--port\",\n                \"{0}\".format(ERE_SERVER_PORT),\n                \"--elf-url\",\n                zkvm[\"elf_url\"],\n                \"gpu\" if has_gpu else \"cpu\",\n            ],\n            env_vars=env_vars,\n            gpu=GpuConfig(\n                count=gpu.get(\"count\", 0),\n                device_ids=gpu.get(\"device_ids\", []),\n                shm_size=gpu.get(\"shm_size\", 0),\n                ulimits=gpu.get(\"ulimits\", {}),\n                driver=gpu.get(\"driver\", \"nvidia\"),\n            ),\n            node_selectors=global_node_selectors,\n            tolerations=tolerations,\n            ready_conditions=ReadyCondition(\n                recipe=GetHttpRequestRecipe(\n                    port_id=ERE_SERVER_HTTP_PORT_ID,\n                    endpoint=\"/health\",\n                ),\n                field=\"code\",\n                assertion=\"==\",\n                target_value=200,\n                timeout=ERE_SERVER_READY_TIMEOUT,\n                interval=ERE_SERVER_READY_INTERVAL,\n            ),\n        ),\n    )\n\n    return \"http://{0}:{1}\".format(service_name, ERE_SERVER_PORT)\n\n\ndef _zkvm_has_gpu(zkvm):\n    gpu = zkvm.get(\"gpu\", {})\n    return len(gpu.get(\"device_ids\", [])) > 0 or gpu.get(\"count\", 0) > 0\n\n\ndef _zkvm_kind_from_proof_type(proof_type):\n    \"\"\"Derive the zkVM backend (e.g. `zisk`, `openvm`) from `proof_type` (e.g.\n    `ethrex-zisk`, `reth-openvm`).\n    \"\"\"\n    return proof_type.split(\"-\")[-1]\n\n\ndef _resolve_image_and_elf_url(zkvms, zkboost_image):\n    \"\"\"Return a new zkvms list where every `kind: ere` entry is guaranteed to\n    have `image` and `elf_url` set. Missing fields are resolved from zkboost's\n    Cargo.toml pinned ere/ere-guests versions.\n\n    Fails when an auto-resolve is required but the corresponding dep isn't\n    tag-pinned in zkboost (uses branch or rev), in which case the user must set\n    the field explicitly.\n    \"\"\"\n    if not any(\n        [\n            zkvm[\"kind\"] == \"ere\" and (\"image\" not in zkvm or \"elf_url\" not in zkvm)\n            for zkvm in zkvms\n        ]\n    ):\n        return zkvms\n\n    ere_version, ere_guests_version = _resolve_ere_versions(zkboost_image)\n\n    resolved = []\n    for zkvm in zkvms:\n        if zkvm[\"kind\"] != \"ere\":\n            resolved.append(zkvm)\n            continue\n        zkvm = dict(zkvm)\n        proof_type = zkvm[\"proof_type\"]\n        zkvm_kind = _zkvm_kind_from_proof_type(proof_type)\n\n        if \"image\" not in zkvm:\n            zkvm[\"image\"] = ERE_SERVER_IMAGE_TEMPLATE.format(\n                zkvm_kind=zkvm_kind,\n                version=ere_version,\n                suffix=\"-cuda\" if _zkvm_has_gpu(zkvm) else \"\",\n            )\n        if \"elf_url\" not in zkvm:\n            zkvm[\"elf_url\"] = ERE_GUESTS_ELF_URL_TEMPLATE.format(\n                version=ere_guests_version,\n                proof_type=proof_type,\n            )\n        resolved.append(zkvm)\n    return resolved\n\n\ndef _resolve_ere_versions(zkboost_image):\n    \"\"\"Resolve ere and ere-guests versions from zkboost's Cargo.toml at the git\n    ref matching the zkboost image tag.\n\n    Auto-resolution is supported for the zkboost image:\n      - `ghcr.io/eth-act/zkboost/zkboost` and\n        `ghcr.io/eth-act/zkboost/zkboost:latest` -> `Cargo.toml@vX.Y.Z`\n          where `X.Y.Z` is resolved from `workspace.package.version` of\n          `Cargo.toml@master`.\n      - `ghcr.io/eth-act/zkboost/zkboost:X.Y.Z` -> `Cargo.toml@vX.Y.Z`\n      - `ghcr.io/eth-act/zkboost/zkboost:<sha:7>` -> `Cargo.toml@<sha:7>`\n          where `<sha:7>` is the 7 characters lowercase hex git commit SHA.\n\n    Any other image (different registry, fork, pre-release tag, etc.) cannot\n    be guaranteed to match a specific Cargo.toml revision, so the user must\n    set `image` and `elf_url` explicitly on each ere zkvm entry.\n    \"\"\"\n    image_base = constants.DEFAULT_ZKBOOST_IMAGE.split(\":\")[0]\n    if zkboost_image == image_base:\n        image_tag = \"latest\"\n    elif zkboost_image.startswith(image_base + \":\"):\n        image_tag = zkboost_image[len(image_base) + 1 :]\n    else:\n        _fail_resolve_ere_versions(\n            \"zkboost_params.image '{image}' is not the official zkboost image. Auto-resolution is only supported for `{official}` with no tag, `:latest`, `:X.Y.Z`, or `:<sha:7>`\".format(\n                image=zkboost_image,\n                official=image_base,\n            )\n        )\n\n    if image_tag == \"latest\":\n        cargo_toml = read_file(ZKBOOST_CARGO_TOML_FILEPATH.format(ref=\"master\"))\n        version = _parse_cargo_workspace_version(cargo_toml)\n        if version == None:\n            _fail_resolve_ere_versions(\n                \"cannot locate `workspace.package.version` in zkboost's master Cargo.toml to resolve `:latest`\",\n            )\n        ref = \"v\" + version\n    elif _is_semver(image_tag):\n        ref = \"v\" + image_tag\n    elif _is_git_sha(image_tag):\n        ref = image_tag\n    else:\n        _fail_resolve_ere_versions(\n            \"zkboost_params.image tag '{image_tag}' is not `latest`, `X.Y.Z`, or a git commit SHA (7 lowercase hex chars)\".format(\n                image_tag=image_tag,\n            ),\n        )\n\n    cargo_toml = read_file(ZKBOOST_CARGO_TOML_FILEPATH.format(ref=ref))\n    ere_version = _parse_cargo_dependency_version(cargo_toml, ERE_DEP_NAME)\n    if ere_version == None:\n        _fail_resolve_ere_versions(\n            \"`{dep}` is not tag-pinned in zkboost's Cargo.toml@{ref}\".format(\n                dep=ERE_DEP_NAME,\n                ref=ref,\n            ),\n        )\n    ere_guests_version = _parse_cargo_dependency_version(\n        cargo_toml, ERE_GUESTS_DEP_NAME\n    )\n    if ere_guests_version == None:\n        _fail_resolve_ere_versions(\n            \"`{dep}` is not tag-pinned in zkboost's Cargo.toml@{ref}\".format(\n                dep=ERE_GUESTS_DEP_NAME,\n                ref=ref,\n            ),\n        )\n    return ere_version, ere_guests_version\n\n\ndef _fail_resolve_ere_versions(reason):\n    fail(\n        reason\n        + \". Set `image` and `elf_url` explicitly on each `kind: ere` zkvm entry to skip auto-resolution.\"\n    )\n\n\ndef _is_semver(image_tag):\n    digits = image_tag.split(\".\")\n    return len(digits) == 3 and all([digit.isdigit() for digit in digits])\n\n\ndef _is_git_sha(image_tag):\n    return len(image_tag) >= 7 and all(\n        [char in \"0123456789abcdef\" for char in image_tag.elems()]\n    )\n\n\ndef _parse_cargo_workspace_version(cargo_toml):\n    \"\"\"Return the value of `version` under the `[workspace.package]` table, or\n    `None` if not found. Stops at the next `[section]` header so it won't leak\n    into other tables.\n    \"\"\"\n    tokens = [token.strip(\",\").strip('\"') for token in cargo_toml.split()]\n    for i in range(len(tokens)):\n        if tokens[i] != \"[workspace.package]\":\n            continue\n        for j in range(i + 1, len(tokens) - 2):\n            if tokens[j].startswith(\"[\") and tokens[j].endswith(\"]\"):\n                return None\n            if tokens[j] == \"version\" and tokens[j + 1] == \"=\":\n                return tokens[j + 2]\n        return None\n    return None\n\n\ndef _parse_cargo_dependency_version(cargo_toml, dependency):\n    \"\"\"Return the version pinned by `<dependency> = { ..., tag = \"vX.Y.Z\", ... }`\n    in cargo_toml, with the leading `v` stripped.\n    \"\"\"\n    tokens = [token.strip(\",\").strip('\"') for token in cargo_toml.split()]\n    for i in range(len(tokens) - 2):\n        if tokens[i] != dependency or tokens[i + 1] != \"=\" or tokens[i + 2] != \"{\":\n            continue\n        depth = 1\n        for j in range(i + 3, len(tokens)):\n            if tokens[j] == \"{\":\n                depth += 1\n            elif tokens[j] == \"}\":\n                depth -= 1\n                if depth == 0:\n                    break\n            elif (\n                depth == 1\n                and tokens[j] == \"tag\"\n                and j + 2 < len(tokens)\n                and tokens[j + 1] == \"=\"\n                and tokens[j + 2].startswith(\"v\")\n            ):\n                return tokens[j + 2][1:]\n        return None\n    return None\n\n\ndef _get_ere_server_metrics_job(proof_type):\n    service_name = \"ere-server-{0}\".format(proof_type)\n    return {\n        \"Name\": service_name,\n        \"Endpoint\": \"{0}:{1}\".format(service_name, ERE_SERVER_PORT),\n        \"MetricsPath\": \"/metrics\",\n        \"Labels\": {\n            \"service\": service_name,\n            \"client_type\": \"ere-server\",\n            \"proof_type\": proof_type,\n        },\n        \"ScrapeInterval\": \"15s\",\n    }\n"
  },
  {
    "path": "static_files/apache-config/enode.txt.tmpl",
    "content": "{{ range $elClient := .ELClient }}\n{{ $elClient.Enode }}\n{{- end }}\n"
  },
  {
    "path": "static_files/apache-config/enr.txt.tmpl",
    "content": "{{ range $clClient := .CLClient }}\n- {{ $clClient.Enr }}\n{{- end }}\n"
  },
  {
    "path": "static_files/apache-config/enr_list.txt.tmpl",
    "content": "{{ range $clClient := .CLClient }}\n{{ $clClient.Enr }}\n{{- end }}\n"
  },
  {
    "path": "static_files/apache-config/index.html",
    "content": "<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n    <meta charset=\"UTF-8\">\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n    <title>Welcome to My Website</title>\n    <style>\n        body {\n            font-family: Arial, sans-serif;\n            margin: 0;\n            padding: 0;\n            background-color: #f4f4f4;\n        }\n        .container {\n            max-width: 800px;\n            margin: 20px auto;\n            padding: 20px;\n            background-color: #fff;\n            border-radius: 5px;\n            box-shadow: 0 0 10px rgba(0, 0, 0, 0.1);\n        }\n        h1 {\n            color: #333;\n            text-align: center;\n        }\n        .download-btn {\n            display: block;\n            width: 200px;\n            margin: 20px auto;\n            padding: 10px;\n            text-align: center;\n            background-color: #007bff;\n            color: #fff;\n            border: none;\n            border-radius: 5px;\n            cursor: pointer;\n            text-decoration: none; /* Remove underline */\n        }\n        .download-btn:hover {\n            background-color: #0056b3;\n        }\n    </style>\n</head>\n<body>\n    <div class=\"container\">\n        <h1>Welcome to Kurtosis File sharing site</h1>\n        <a href=\"network-config.tar\" class=\"download-btn\">Download network configs</a>\n    </div>\n</body>\n</html>\n"
  },
  {
    "path": "static_files/assertoor-config/config.yaml.tmpl",
    "content": "\nendpoints:\n{{ range $client := .ClientInfo }}\n- name: \"{{ $client.Name }}\"\n  consensusUrl: \"{{ $client.CL_HTTP_URL }}\"\n  executionUrl: \"http://{{ $client.ELIPAddr }}:{{ $client.ELPortNum }}\"\n  {{- if .ELSnooperEnabled }}\n  executionSnooperUrl: \"{{ $client.ELSnooperUrl }}\"\n  {{- end }}\n  {{- if .CLSnooperEnabled }}\n  consensusSnooperUrl: \"{{ $client.CLSnooperUrl }}\"\n  {{- end }}\n{{- end }}\n\nweb:\n  server:\n    host: \"0.0.0.0\"\n    port: 8080\n  frontend:\n    enabled: true\n    debug: true\n    pprof: true\n  api:\n    enabled: true\n    disableAuth: true\n\ndatabase:\n  engine: \"sqlite\"\n  sqlite:\n    file: \"/app/assertoor-database.sqlite\"\n\nai:\n  enabled: true\n  defaultModel: anthropic/claude-sonnet-4.5\n  allowedModels:\n    - anthropic/claude-sonnet-4.5\n    - anthropic/claude-opus-4.5\n    - openai/gpt-5.2-codex\n    - google/gemini-3-flash-preview\n  maxTokens: 8192\n\nvalidatorNames:\n  inventoryYaml: \"/validator-ranges/validator-ranges.yaml\"\n\nglobalVars:\n  walletPrivkey: \"850643a0224065ecce3882673c21f56bcf6eef86274cc21cadff15930b59fc8c\"\n  clientPairNames:\n{{- range $client := .ClientInfo }}\n  - \"{{ $client.Name }}\"\n{{- end }}\n  validatorPairNames: {{ if eq (len .ValidatorClientInfo) 0 }}[]{{ end }}\n{{- range $client := .ValidatorClientInfo }}\n  - \"{{ $client.Name }}\"\n{{- end }}\n  elSnooperClientPairNames: {{ if eq (len .ElSnooperClientInfo) 0 }}[]{{ end }}\n{{- range $client := .ElSnooperClientInfo }}\n  - \"{{ $client.Name }}\"\n{{- end }}\n  clSnooperClientPairNames: {{ if eq (len .ClSnooperClientInfo) 0 }}[]{{ end }}\n{{- range $client := .ClSnooperClientInfo }}\n  - \"{{ $client.Name }}\"\n{{- end }}\n\nexternalTests:\n{{- if .RunStabilityCheck }}\n- file: /tests/stability-check.yaml\n{{- end }}\n{{- if .RunBlockProposalCheck }}\n- file: /tests/block-proposal-check.yaml\n{{- end }}\n{{- if .RunTransactionTest }}\n- file: /tests/eoa-transactions-test.yaml\n{{- end }}\n{{- if .RunBlobTransactionTest }}\n- file: /tests/blob-transactions-test.yaml\n{{- end }}\n{{- if .RunOpcodesTransactionTest }}\n- file: /tests/all-opcodes-transaction-test.yaml\n{{- end }}\n{{- if .RunLifecycleTest }}\n- file: /tests/validator-lifecycle-test.yaml\n{{- end }}\n{{- range $test := .AdditionalTests }}\n- {{ $test }}\n{{- end }}\n"
  },
  {
    "path": "static_files/assertoor-config/tests/all-opcodes-transaction-test.yaml",
    "content": "id: all-opcodes-test\nname: \"All-Opcodes Transaction Test\"\ntimeout: 1h\nconfig:\n  walletPrivkey: \"\"\ntasks:\n- name: check_clients_are_healthy\n  title: \"Check if at least one client is ready\"\n  timeout: 5m\n  config:\n    minClientCount: 1\n\n- name: generate_transaction\n  title: \"Execute all opcodes as contract deployment\"\n  config:\n    feeCap: 5000000000 # 5 gwei\n    gasLimit: 1000000\n    contractDeployment: true\n    callData: \"602a61053901600052600160206000a1602a61053902600052600260206000a1602a61053903600052600360206000a1602a61053904600052600460206000a17fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd661053905600052600560206000a1602a61053906600052600660206000a17fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd661053907600052600760206000a1610400602a61053908600052600860206000a1610400602a61053909600052600960206000a1602a6105390a600052600a60206000a1602a6105390b600052600b60206000a1602a61053910600052601060206000a1602a61053911600052601160206000a17fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd661053912600052601260206000a17fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd661053913600052601360206000a1602a61053914600052601460206000a161053915600052601560206000a1602a61053916600052601660206000a1602a61053917600052601760206000a1602a61053918600052601860206000a161053919600052601960206000a1602a6105391a600052601a60206000a1602a6105391b600052601b60206000a1602a6105391c600052601c60206000a17fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6105391d600052601d60206000a16105396000526020600020600052602060206000a130600052603060206000a13031600052603160206000a132600052603260206000a133600052603360206000a134600052603460206000a1600035600052603560206000a136600052603660206000a160146002600137603760206000a138600052603860206000a160146002600139603960206000a13a600052603a60206000a1303b600052603b60206000a1601460026001303c603c60206000a1686000388082803990f360b81b600052600960006000f0808060005260f060206000a167100000000000000060005260205f5f5f5f855af13d600052603d60206000a13d600060003e603e60206000a13f600052603f60206000a16001430340600052604060206000a141600052604160206000a142600052604260206000a143600052604360206000a144600052604460206000a145600052604560206000a146600052604660206000a147600052604760206000a148600052604860206000a1610539600150600052605060206000a1600151600052605160206000a1610539600052605260206000a1610539600053605360206000a1610539600155605560206000a1600154600052605460206000a16642424242424242600052600f5801566710000000000000006000525b605660206000a1602a61053911600f5801576710000000000000006000525b605760206000a158600052605860206000a159600052605960206000a15a600052605a60206000a16001600052606060206000a1610102600052606160206000a162010203600052606260206000a16301020304600052606360206000a1640102030405600052606460206000a165010203040506600052606560206000a16601020304050607600052606660206000a1670102030405060708600052606760206000a168010203040506070809600052606860206000a16901020304050607080910600052606960206000a16a0102030405060708091011600052606a60206000a16b010203040506070809101112600052606b60206000a16c01020304050607080910111213600052606c60206000a16d0102030405060708091011121314600052606d60206000a16e010203040506070809101112131415600052606e60206000a16f01020304050607080910111213141516600052606f60206000a1700102030405060708091011121314151617600052607060206000a171010203040506070809101112131415161718600052607160206000a17201020304050607080910111213141516171819600052607260206000a1730102030405060708091011121314151617181920600052607360206000a174010203040506070809101112131415161718192021600052607460206000a17501020304050607080910111213141516171819202122600052607560206000a1760102030405060708091011121314151617181920212223600052607660206000a177010203040506070809101112131415161718192021222324600052607760206000a17801020304050607080910111213141516171819202122232425600052607860206000a1790102030405060708091011121314151617181920212223242526600052607960206000a17a010203040506070809101112131415161718192021222324252627600052607a60206000a17b01020304050607080910111213141516171819202122232425262728600052607b60206000a17c0102030405060708091011121314151617181920212223242526272829600052607c60206000a17d010203040506070809101112131415161718192021222324252627282930600052607d60206000a17e01020304050607080910111213141516171819202122232425262728293031600052607e60206000a17f0102030405060708091011121314151617181920212223242526272829303132600052607f60206000a1600060116022603360446055606660776088609960aa60bb60cc60dd60ee60ff80600052608060206000a181600052608160206000a182600052608260206000a183600052608360206000a184600052608460206000a185600052608560206000a186600052608660206000a187600052608760206000a188600052608860206000a189600052608960206000a18a600052608a60206000a18b600052608b60206000a18c600052608c60206000a18d600052608d60206000a18e600052608e60206000a18f600052608f60206000a1604290600052609060206000a1604291600052609160206000a1604292600052609260206000a1604293600052609360206000a1604294600052609460206000a1604295600052609560206000a1604296600052609660206000a1604297600052609760206000a1604298600052609860206000a1604299600052609960206000a160429a600052609a60206000a160429b600052609b60206000a160429c600052609c60206000a160429d600052609d60206000a160429e600052609e60206000a160429f600052609f60206000a161133760005260206000a060a160206000a1601160a260206000a26022601160a360206000a360336022601160a460206000a4686000388082803990f360b81b600052600960006000f08060005260f060206000a160205f5f5f5f85612710f160005260f160206000a160205f5f5f5f85612710f260005260f260206000a160205f5f5f845af460005260f460206000a1686000388082803990f360b81b6000526000600960006000f58060005260f560206000a160205f5f5f84612710fa60005260fa60206000a16000388082803990f3\"\n    failOnReject: true\n    contractAddressResultVar: \"testContractAddr\"\n    expectEvents:\n    - { topic0: \"0x0000000000000000000000000000000000000000000000000000000000000001\", data: \"0x0000000000000000000000000000000000000000000000000000000000000563\" }\n    - { topic0: \"0x0000000000000000000000000000000000000000000000000000000000000002\", data: \"0x000000000000000000000000000000000000000000000000000000000000db5a\" }\n    - { topic0: \"0x0000000000000000000000000000000000000000000000000000000000000003\", data: \"0x000000000000000000000000000000000000000000000000000000000000050f\" }\n    - { topic0: \"0x0000000000000000000000000000000000000000000000000000000000000004\", data: \"0x000000000000000000000000000000000000000000000000000000000000001f\" }\n    - { topic0: \"0x0000000000000000000000000000000000000000000000000000000000000005\", data: \"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1\" }\n    - { topic0: \"0x0000000000000000000000000000000000000000000000000000000000000006\", data: \"0x0000000000000000000000000000000000000000000000000000000000000023\" }\n    - { topic0: \"0x0000000000000000000000000000000000000000000000000000000000000007\", data: \"0x0000000000000000000000000000000000000000000000000000000000000023\" }\n    - { topic0: \"0x0000000000000000000000000000000000000000000000000000000000000008\", data: \"0x0000000000000000000000000000000000000000000000000000000000000163\" }\n    - { topic0: \"0x0000000000000000000000000000000000000000000000000000000000000009\", data: \"0x000000000000000000000000000000000000000000000000000000000000035a\" }\n    - { topic0: \"0x000000000000000000000000000000000000000000000000000000000000000a\", data: \"0x22216e0e1bc703e8543d93e59e8f927277d1501d039f87b7aeb01fd538f0ee71\" }\n    - { topic0: \"0x000000000000000000000000000000000000000000000000000000000000000b\", data: \"0x000000000000000000000000000000000000000000000000000000000000002a\" }\n    - { topic0: \"0x0000000000000000000000000000000000000000000000000000000000000010\", data: \"0x0000000000000000000000000000000000000000000000000000000000000000\" }\n    - { topic0: \"0x0000000000000000000000000000000000000000000000000000000000000011\", data: \"0x0000000000000000000000000000000000000000000000000000000000000001\" }\n    - { topic0: \"0x0000000000000000000000000000000000000000000000000000000000000012\", data: \"0x0000000000000000000000000000000000000000000000000000000000000000\" }\n    - { topic0: \"0x0000000000000000000000000000000000000000000000000000000000000013\", data: \"0x0000000000000000000000000000000000000000000000000000000000000001\" }\n    - { topic0: \"0x0000000000000000000000000000000000000000000000000000000000000014\", data: \"0x0000000000000000000000000000000000000000000000000000000000000000\" }\n    - { topic0: \"0x0000000000000000000000000000000000000000000000000000000000000015\", data: \"0x0000000000000000000000000000000000000000000000000000000000000000\" }\n    - { topic0: \"0x0000000000000000000000000000000000000000000000000000000000000016\", data: \"0x0000000000000000000000000000000000000000000000000000000000000028\" }\n    - { topic0: \"0x0000000000000000000000000000000000000000000000000000000000000017\", data: \"0x000000000000000000000000000000000000000000000000000000000000053b\" }\n    - { topic0: \"0x0000000000000000000000000000000000000000000000000000000000000018\", data: \"0x0000000000000000000000000000000000000000000000000000000000000513\" }\n    - { topic0: \"0x0000000000000000000000000000000000000000000000000000000000000019\", data: \"0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffac6\" }\n    - { topic0: \"0x000000000000000000000000000000000000000000000000000000000000001a\", data: \"0x0000000000000000000000000000000000000000000000000000000000000000\" }\n    - { topic0: \"0x000000000000000000000000000000000000000000000000000000000000001b\", data: \"0x0000000000000000000000000000000000000000000000000000000000000000\" }\n    - { topic0: \"0x000000000000000000000000000000000000000000000000000000000000001c\", data: \"0x0000000000000000000000000000000000000000000000000000000000000000\" }\n    - { topic0: \"0x000000000000000000000000000000000000000000000000000000000000001d\", data: \"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff\" }\n    - { topic0: \"0x0000000000000000000000000000000000000000000000000000000000000020\", data: \"0x64525377d0e4fdc0b5cb83d111f37debd7efc1f40a572ff8a92bbeeb587a5603\" }\n    - { topic0: \"0x0000000000000000000000000000000000000000000000000000000000000031\", data: \"0x0000000000000000000000000000000000000000000000000000000000000000\" }\n    - { topic0: \"0x0000000000000000000000000000000000000000000000000000000000000034\", data: \"0x0000000000000000000000000000000000000000000000000000000000000000\" }\n    - { topic0: \"0x0000000000000000000000000000000000000000000000000000000000000035\", data: \"0x0000000000000000000000000000000000000000000000000000000000000000\" }\n    - { topic0: \"0x0000000000000000000000000000000000000000000000000000000000000036\", data: \"0x0000000000000000000000000000000000000000000000000000000000000000\" }\n    - { topic0: \"0x0000000000000000000000000000000000000000000000000000000000000037\", data: \"0x0000000000000000000000000000000000000000000000000000000000000000\" }\n    - { topic0: \"0x0000000000000000000000000000000000000000000000000000000000000038\", data: \"0x0000000000000000000000000000000000000000000000000000000000000a38\" }\n    - { topic0: \"0x0000000000000000000000000000000000000000000000000000000000000039\", data: \"0x0061053901600052600160206000a1602a610539020000000000000000000a38\" }\n    - { topic0: \"0x000000000000000000000000000000000000000000000000000000000000003b\", data: \"0x0000000000000000000000000000000000000000000000000000000000000000\" }\n    - { topic0: \"0x000000000000000000000000000000000000000000000000000000000000003c\", data: \"0x0000000000000000000000000000000000000000000000000000000000000000\" }\n    - { topic0: \"0x000000000000000000000000000000000000000000000000000000000000003d\", data: \"0x0000000000000000000000000000000000000000000000000000000000000009\" }\n    - { topic0: \"0x000000000000000000000000000000000000000000000000000000000000003e\", data: \"0x6000388082803990f30000000000000000000000000000000000000000000009\" }\n    - { topic0: \"0x000000000000000000000000000000000000000000000000000000000000003f\", data: \"0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470\" }\n    - { topic0: \"0x0000000000000000000000000000000000000000000000000000000000000047\", data: \"0x0000000000000000000000000000000000000000000000000000000000000000\" }\n    - { topic0: \"0x0000000000000000000000000000000000000000000000000000000000000050\", data: \"0x0000000000000000000000000000000000000000000000000000000000000539\" }\n    - { topic0: \"0x0000000000000000000000000000000000000000000000000000000000000051\", data: \"0x0000000000000000000000000000000000000000000000000000000000053900\" }\n    - { topic0: \"0x0000000000000000000000000000000000000000000000000000000000000052\", data: \"0x0000000000000000000000000000000000000000000000000000000000000539\" }\n    - { topic0: \"0x0000000000000000000000000000000000000000000000000000000000000053\", data: \"0x3900000000000000000000000000000000000000000000000000000000000539\" }\n    - { topic0: \"0x0000000000000000000000000000000000000000000000000000000000000054\", data: \"0x0000000000000000000000000000000000000000000000000000000000000539\" }\n    - { topic0: \"0x0000000000000000000000000000000000000000000000000000000000000055\", data: \"0x3900000000000000000000000000000000000000000000000000000000000539\" }\n    - { topic0: \"0x0000000000000000000000000000000000000000000000000000000000000056\", data: \"0x0000000000000000000000000000000000000000000000000042424242424242\" }\n    - { topic0: \"0x0000000000000000000000000000000000000000000000000000000000000057\", data: \"0x0000000000000000000000000000000000000000000000000042424242424242\" }\n    - { topic0: \"0x0000000000000000000000000000000000000000000000000000000000000058\", data: \"0x0000000000000000000000000000000000000000000000000000000000000435\" }\n    - { topic0: \"0x0000000000000000000000000000000000000000000000000000000000000059\", data: \"0x0000000000000000000000000000000000000000000000000000000000000040\" }\n  configVars:\n    privateKey: \"walletPrivkey\"\n- name: generate_transaction\n  title: \"Execute all opcodes as contract call\"\n  config:\n    feeCap: 5000000000 # 5 gwei\n    gasLimit: 1000000\n    callData: \"1337133713371337\"\n    failOnReject: true\n    expectEvents:\n    - { topic0: \"0x0000000000000000000000000000000000000000000000000000000000000001\", data: \"0x0000000000000000000000000000000000000000000000000000000000000563\" }\n    - { topic0: \"0x0000000000000000000000000000000000000000000000000000000000000002\", data: \"0x000000000000000000000000000000000000000000000000000000000000db5a\" }\n    - { topic0: \"0x0000000000000000000000000000000000000000000000000000000000000003\", data: \"0x000000000000000000000000000000000000000000000000000000000000050f\" }\n    - { topic0: \"0x0000000000000000000000000000000000000000000000000000000000000004\", data: \"0x000000000000000000000000000000000000000000000000000000000000001f\" }\n    - { topic0: \"0x0000000000000000000000000000000000000000000000000000000000000005\", data: \"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1\" }\n    - { topic0: \"0x0000000000000000000000000000000000000000000000000000000000000006\", data: \"0x0000000000000000000000000000000000000000000000000000000000000023\" }\n    - { topic0: \"0x0000000000000000000000000000000000000000000000000000000000000007\", data: \"0x0000000000000000000000000000000000000000000000000000000000000023\" }\n    - { topic0: \"0x0000000000000000000000000000000000000000000000000000000000000008\", data: \"0x0000000000000000000000000000000000000000000000000000000000000163\" }\n    - { topic0: \"0x0000000000000000000000000000000000000000000000000000000000000009\", data: \"0x000000000000000000000000000000000000000000000000000000000000035a\" }\n    - { topic0: \"0x000000000000000000000000000000000000000000000000000000000000000a\", data: \"0x22216e0e1bc703e8543d93e59e8f927277d1501d039f87b7aeb01fd538f0ee71\" }\n    - { topic0: \"0x000000000000000000000000000000000000000000000000000000000000000b\", data: \"0x000000000000000000000000000000000000000000000000000000000000002a\" }\n    - { topic0: \"0x0000000000000000000000000000000000000000000000000000000000000010\", data: \"0x0000000000000000000000000000000000000000000000000000000000000000\" }\n    - { topic0: \"0x0000000000000000000000000000000000000000000000000000000000000011\", data: \"0x0000000000000000000000000000000000000000000000000000000000000001\" }\n    - { topic0: \"0x0000000000000000000000000000000000000000000000000000000000000012\", data: \"0x0000000000000000000000000000000000000000000000000000000000000000\" }\n    - { topic0: \"0x0000000000000000000000000000000000000000000000000000000000000013\", data: \"0x0000000000000000000000000000000000000000000000000000000000000001\" }\n    - { topic0: \"0x0000000000000000000000000000000000000000000000000000000000000014\", data: \"0x0000000000000000000000000000000000000000000000000000000000000000\" }\n    - { topic0: \"0x0000000000000000000000000000000000000000000000000000000000000015\", data: \"0x0000000000000000000000000000000000000000000000000000000000000000\" }\n    - { topic0: \"0x0000000000000000000000000000000000000000000000000000000000000016\", data: \"0x0000000000000000000000000000000000000000000000000000000000000028\" }\n    - { topic0: \"0x0000000000000000000000000000000000000000000000000000000000000017\", data: \"0x000000000000000000000000000000000000000000000000000000000000053b\" }\n    - { topic0: \"0x0000000000000000000000000000000000000000000000000000000000000018\", data: \"0x0000000000000000000000000000000000000000000000000000000000000513\" }\n    - { topic0: \"0x0000000000000000000000000000000000000000000000000000000000000019\", data: \"0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffac6\" }\n    - { topic0: \"0x000000000000000000000000000000000000000000000000000000000000001a\", data: \"0x0000000000000000000000000000000000000000000000000000000000000000\" }\n    - { topic0: \"0x000000000000000000000000000000000000000000000000000000000000001b\", data: \"0x0000000000000000000000000000000000000000000000000000000000000000\" }\n    - { topic0: \"0x000000000000000000000000000000000000000000000000000000000000001c\", data: \"0x0000000000000000000000000000000000000000000000000000000000000000\" }\n    - { topic0: \"0x000000000000000000000000000000000000000000000000000000000000001d\", data: \"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff\" }\n    - { topic0: \"0x0000000000000000000000000000000000000000000000000000000000000020\", data: \"0x64525377d0e4fdc0b5cb83d111f37debd7efc1f40a572ff8a92bbeeb587a5603\" }\n    - { topic0: \"0x0000000000000000000000000000000000000000000000000000000000000031\", data: \"0x0000000000000000000000000000000000000000000000000000000000000000\" }\n    - { topic0: \"0x0000000000000000000000000000000000000000000000000000000000000034\", data: \"0x0000000000000000000000000000000000000000000000000000000000000000\" }\n    - { topic0: \"0x0000000000000000000000000000000000000000000000000000000000000035\", data: \"0x1337133713371337000000000000000000000000000000000000000000000000\" }\n    - { topic0: \"0x0000000000000000000000000000000000000000000000000000000000000036\", data: \"0x0000000000000000000000000000000000000000000000000000000000000008\" }\n    - { topic0: \"0x0000000000000000000000000000000000000000000000000000000000000037\", data: \"0x0013371337133700000000000000000000000000000000000000000000000008\" }\n    - { topic0: \"0x0000000000000000000000000000000000000000000000000000000000000038\", data: \"0x0000000000000000000000000000000000000000000000000000000000000a38\" }\n    - { topic0: \"0x0000000000000000000000000000000000000000000000000000000000000039\", data: \"0x0061053901600052600160206000a1602a610539020000000000000000000a38\" }\n    - { topic0: \"0x000000000000000000000000000000000000000000000000000000000000003b\", data: \"0x0000000000000000000000000000000000000000000000000000000000000a38\" }\n    - { topic0: \"0x000000000000000000000000000000000000000000000000000000000000003c\", data: \"0x0061053901600052600160206000a1602a610539020000000000000000000a38\" }\n    - { topic0: \"0x000000000000000000000000000000000000000000000000000000000000003d\", data: \"0x0000000000000000000000000000000000000000000000000000000000000009\" }\n    - { topic0: \"0x000000000000000000000000000000000000000000000000000000000000003e\", data: \"0x6000388082803990f30000000000000000000000000000000000000000000009\" }\n    - { topic0: \"0x000000000000000000000000000000000000000000000000000000000000003f\", data: \"0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470\" }\n    - { topic0: \"0x0000000000000000000000000000000000000000000000000000000000000047\", data: \"0x0000000000000000000000000000000000000000000000000000000000000000\" }\n    - { topic0: \"0x0000000000000000000000000000000000000000000000000000000000000050\", data: \"0x0000000000000000000000000000000000000000000000000000000000000539\" }\n    - { topic0: \"0x0000000000000000000000000000000000000000000000000000000000000051\", data: \"0x0000000000000000000000000000000000000000000000000000000000053900\" }\n    - { topic0: \"0x0000000000000000000000000000000000000000000000000000000000000052\", data: \"0x0000000000000000000000000000000000000000000000000000000000000539\" }\n    - { topic0: \"0x0000000000000000000000000000000000000000000000000000000000000053\", data: \"0x3900000000000000000000000000000000000000000000000000000000000539\" }\n    - { topic0: \"0x0000000000000000000000000000000000000000000000000000000000000054\", data: \"0x0000000000000000000000000000000000000000000000000000000000000539\" }\n    - { topic0: \"0x0000000000000000000000000000000000000000000000000000000000000055\", data: \"0x3900000000000000000000000000000000000000000000000000000000000539\" }\n    - { topic0: \"0x0000000000000000000000000000000000000000000000000000000000000056\", data: \"0x0000000000000000000000000000000000000000000000000042424242424242\" }\n    - { topic0: \"0x0000000000000000000000000000000000000000000000000000000000000057\", data: \"0x0000000000000000000000000000000000000000000000000042424242424242\" }\n    - { topic0: \"0x0000000000000000000000000000000000000000000000000000000000000058\", data: \"0x0000000000000000000000000000000000000000000000000000000000000435\" }\n    - { topic0: \"0x0000000000000000000000000000000000000000000000000000000000000059\", data: \"0x0000000000000000000000000000000000000000000000000000000000000040\" }\n  configVars:\n    privateKey: \"walletPrivkey\"\n    targetAddress: \"testContractAddr\"\n\n- name: generate_transaction\n  title: \"Generate test transaction with STOP opcode\"\n  config:\n    feeCap: 5000000000 # 5 gwei\n    gasLimit: 100000\n    contractDeployment: true\n    callData: \"006000388082803990f3\"\n    awaitReceipt: false\n  configVars:\n    privateKey: \"walletPrivkey\"\n- name: generate_transaction\n  title: \"Generate test transaction with RETURN opcode\"\n  config:\n    feeCap: 5000000000 # 5 gwei\n    gasLimit: 100000\n    contractDeployment: true\n    callData: \"61053960005260206000f3\"\n    awaitReceipt: false\n  configVars:\n    privateKey: \"walletPrivkey\"\n- name: generate_transaction\n  title: \"Generate test transaction with REVERT opcode\"\n  config:\n    feeCap: 5000000000 # 5 gwei\n    gasLimit: 100000\n    contractDeployment: true\n    callData: \"61053960005260206000fd\"\n    awaitReceipt: false\n  configVars:\n    privateKey: \"walletPrivkey\"\n- name: generate_transaction\n  title: \"Generate test transaction with INVALID opcode\"\n  config:\n    feeCap: 5000000000 # 5 gwei\n    gasLimit: 100000\n    contractDeployment: true\n    callData: \"610539600052fe\"\n    awaitReceipt: false\n  configVars:\n    privateKey: \"walletPrivkey\"\n\n\n# test precompiles\n# deploy transient storage contract\n- name: generate_transaction\n  title: \"Deploy precompiles test contract\"\n  config:\n    feeCap: 5000000000 # 5 gwei\n    gasLimit: 2500000\n    contractDeployment: true\n    callData: \"608060405234801561000f575f80fd5b5060015f1b60405161002090610081565b8190604051809103905ff590508015801561003d573d5f803e3d5ffd5b505f806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061008e565b610cbc806113d083390190565b6113358061009b5f395ff3fe608060405234801561000f575f80fd5b5060043610610060575f3560e01c80630a8e8e01146100645780631ad7be821461006e57806366e41cb7146100785780636b59084d146100825780638f0d282d1461008c578063a7deec9214610096575b5f80fd5b61006c6100a0565b005b610076610163565b005b61008061026f565b005b61008a61033c565b005b61009461044a565b005b61009e61056b565b005b5f60036113376040516020016100b6919061093f565b6040516020818303038152906040526040516100d291906109c5565b602060405180830381855afa1580156100ed573d5f803e3d5ffd5b5050506040515160601b6bffffffffffffffffffffffff1916905060037f02f3e89081ef16f09f0e2ffdcf090ded6d9b3873ccd94513b60b4e667132f2d58260405160200161013c9190610a04565b6040516020818303038152906040526040516101589190610a76565b60405180910390a250565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16633148f14f634fb110d263fcde41b26604c01db400b0c96040518463ffffffff1660e01b81526004016101d093929190610b53565b6020604051808303815f875af11580156101ec573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906102109190610bc3565b905060057f02f3e89081ef16f09f0e2ffdcf090ded6d9b3873ccd94513b60b4e667132f2d5825f1b6040516020016102489190610a04565b6040516020818303038152906040526040516102649190610a76565b60405180910390a250565b5f6002611337604051602001610285919061093f565b6040516020818303038152906040526040516102a191906109c5565b602060405180830381855afa1580156102bc573d5f803e3d5ffd5b5050506040513d601f19601f820116820180604052508101906102df9190610c18565b905060027f02f3e89081ef16f09f0e2ffdcf090ded6d9b3873ccd94513b60b4e667132f2d5826040516020016103159190610a04565b6040516020818303038152906040526040516103319190610a76565b60405180910390a250565b5f60017f345d9e6eb0778ac44a2803c061bf16a9cbd04495237b69fc85ad7ab2e256d9ee601c7f198177033ef6625421cd1b7ef6036264face53da5da4d7f2948aef3edf7e3f957f5c8fcf4db887386224512af70a8bc50d678069359c4d208a496d3a47339c78106040515f81526020016040526040516103c09493929190610d3e565b6020604051602081039080840390855afa1580156103e0573d5f803e3d5ffd5b50505060206040510351905060017f02f3e89081ef16f09f0e2ffdcf090ded6d9b3873ccd94513b60b4e667132f2d58260601b6040516020016104239190610dcc565b60405160208183030381529060405260405161043f9190610a76565b60405180910390a250565b5f7f13371337133713371337133713371337133713371337133713371337133713375f1b90505f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663840f6120836040516020016104be9190610a04565b6040516020818303038152906040526040518263ffffffff1660e01b81526004016104e99190610a76565b5f604051808303815f875af1158015610504573d5f803e3d5ffd5b505050506040513d5f823e3d601f19601f8201168201806040525081019061052c9190610f04565b905060047f02f3e89081ef16f09f0e2ffdcf090ded6d9b3873ccd94513b60b4e667132f2d58260405161055f9190610a76565b60405180910390a25050565b5f600c9050610578610898565b7f48c9bdf267e6096a3ba7ca8485ae67bb2bf894fe72f36e3cf1361d5f3af54fa5815f600281106105ac576105ab610f4b565b5b6020020181815250507fd182e6ad7f520e511f6c3e2b8c68059b6bbd41fbabd9831f79217e1319cde05b816001600281106105ea576105e9610f4b565b5b6020020181815250506105fb6108ba565b7f6162630000000000000000000000000000000000000000000000000000000000815f6004811061062f5761062e610f4b565b5b6020020181815250505f8160016004811061064d5761064c610f4b565b5b6020020181815250505f8160026004811061066b5761066a610f4b565b5b6020020181815250505f8160036004811061068957610688610f4b565b5b60200201818152505061069a6108dc565b7f0300000000000000000000000000000000000000000000000000000000000000815f600281106106ce576106cd610f4b565b5b602002019077ffffffffffffffffffffffffffffffffffffffffffffffff1916908177ffffffffffffffffffffffffffffffffffffffffffffffff1916815250505f8160016002811061072457610723610f4b565b5b602002019077ffffffffffffffffffffffffffffffffffffffffffffffff1916908177ffffffffffffffffffffffffffffffffffffffffffffffff1916815250505f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166373fe73148686868660016040518663ffffffff1660e01b81526004016107c89594939291906111a4565b6040805180830381865afa1580156107e2573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061080691906112a9565b905060097f02f3e89081ef16f09f0e2ffdcf090ded6d9b3873ccd94513b60b4e667132f2d5825f6002811061083e5761083d610f4b565b5b60200201518360016002811061085757610856610f4b565b5b602002015160405160200161086d9291906112d4565b6040516020818303038152906040526040516108899190610a76565b60405180910390a25050505050565b6040518060400160405280600290602082028036833780820191505090505090565b6040518060800160405280600490602082028036833780820191505090505090565b6040518060400160405280600290602082028036833780820191505090505090565b5f61ffff82169050919050565b5f8160f01b9050919050565b5f6109218261090b565b9050919050565b610939610934826108fe565b610917565b82525050565b5f61094a8284610928565b60028201915081905092915050565b5f81519050919050565b5f81905092915050565b5f5b8381101561098a57808201518184015260208101905061096f565b5f8484015250505050565b5f61099f82610959565b6109a98185610963565b93506109b981856020860161096d565b80840191505092915050565b5f6109d08284610995565b915081905092915050565b5f819050919050565b5f819050919050565b6109fe6109f9826109db565b6109e4565b82525050565b5f610a0f82846109ed565b60208201915081905092915050565b5f82825260208201905092915050565b5f601f19601f8301169050919050565b5f610a4882610959565b610a528185610a1e565b9350610a6281856020860161096d565b610a6b81610a2e565b840191505092915050565b5f6020820190508181035f830152610a8e8184610a3e565b905092915050565b5f819050919050565b5f819050919050565b5f819050919050565b5f610acb610ac6610ac184610a96565b610aa8565b610a9f565b9050919050565b610adb81610ab1565b82525050565b5f819050919050565b5f610b04610aff610afa84610ae1565b610aa8565b610a9f565b9050919050565b610b1481610aea565b82525050565b5f819050919050565b5f610b3d610b38610b3384610b1a565b610aa8565b610a9f565b9050919050565b610b4d81610b23565b82525050565b5f606082019050610b665f830186610ad2565b610b736020830185610b0b565b610b806040830184610b44565b949350505050565b5f604051905090565b5f80fd5b5f80fd5b610ba281610a9f565b8114610bac575f80fd5b50565b5f81519050610bbd81610b99565b92915050565b5f60208284031215610bd857610bd7610b91565b5b5f610be584828501610baf565b91505092915050565b610bf7816109db565b8114610c01575f80fd5b50565b5f81519050610c1281610bee565b92915050565b5f60208284031215610c2d57610c2c610b91565b5b5f610c3a84828501610c04565b91505092915050565b5f819050919050565b5f815f1b9050919050565b5f610c71610c6c610c6784610c43565b610c4c565b6109db565b9050919050565b610c8181610c57565b82525050565b5f819050919050565b5f60ff82169050919050565b5f610cb6610cb1610cac84610c87565b610aa8565b610c90565b9050919050565b610cc681610c9c565b82525050565b5f819050919050565b5f610cef610cea610ce584610ccc565b610c4c565b6109db565b9050919050565b610cff81610cd5565b82525050565b5f819050919050565b5f610d28610d23610d1e84610d05565b610c4c565b6109db565b9050919050565b610d3881610d0e565b82525050565b5f608082019050610d515f830187610c78565b610d5e6020830186610cbd565b610d6b6040830185610cf6565b610d786060830184610d2f565b95945050505050565b5f7fffffffffffffffffffffffffffffffffffffffff00000000000000000000000082169050919050565b5f819050919050565b610dc6610dc182610d81565b610dac565b82525050565b5f610dd78284610db5565b60148201915081905092915050565b5f80fd5b5f80fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b610e2482610a2e565b810181811067ffffffffffffffff82111715610e4357610e42610dee565b5b80604052505050565b5f610e55610b88565b9050610e618282610e1b565b919050565b5f67ffffffffffffffff821115610e8057610e7f610dee565b5b610e8982610a2e565b9050602081019050919050565b5f610ea8610ea384610e66565b610e4c565b905082815260208101848484011115610ec457610ec3610dea565b5b610ecf84828561096d565b509392505050565b5f82601f830112610eeb57610eea610de6565b5b8151610efb848260208601610e96565b91505092915050565b5f60208284031215610f1957610f18610b91565b5b5f82015167ffffffffffffffff811115610f3657610f35610b95565b5b610f4284828501610ed7565b91505092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f63ffffffff82169050919050565b610f9081610f78565b82525050565b5f60029050919050565b5f81905092915050565b5f819050919050565b610fbc816109db565b82525050565b5f610fcd8383610fb3565b60208301905092915050565b5f602082019050919050565b610fee81610f96565b610ff88184610fa0565b925061100382610faa565b805f5b8381101561103357815161101a8782610fc2565b965061102583610fd9565b925050600181019050611006565b505050505050565b5f60049050919050565b5f81905092915050565b5f819050919050565b5f602082019050919050565b61106d8161103b565b6110778184611045565b92506110828261104f565b805f5b838110156110b25781516110998782610fc2565b96506110a483611058565b925050600181019050611085565b505050505050565b5f60029050919050565b5f81905092915050565b5f819050919050565b5f7fffffffffffffffff00000000000000000000000000000000000000000000000082169050919050565b61110b816110d7565b82525050565b5f61111c8383611102565b60208301905092915050565b5f602082019050919050565b61113d816110ba565b61114781846110c4565b9250611152826110ce565b805f5b838110156111825781516111698782611111565b965061117483611128565b925050600181019050611155565b505050505050565b5f8115159050919050565b61119e8161118a565b82525050565b5f610140820190506111b85f830188610f87565b6111c56020830187610fe5565b6111d26060830186611064565b6111df60e0830185611134565b6111ed610120830184611195565b9695505050505050565b5f67ffffffffffffffff82111561121157611210610dee565b5b602082029050919050565b5f80fd5b5f61123261122d846111f7565b610e4c565b9050806020840283018581111561124c5761124b61121c565b5b835b8181101561127557806112618882610c04565b84526020840193505060208101905061124e565b5050509392505050565b5f82601f83011261129357611292610de6565b5b60026112a0848285611220565b91505092915050565b5f604082840312156112be576112bd610b91565b5b5f6112cb8482850161127f565b91505092915050565b5f6112df82856109ed565b6020820191506112ef82846109ed565b602082019150819050939250505056fea2646970667358221220092eb79db8ed3e8ec4659bb3d1243bdd463b22f9ef4c8107374640408b69f4a964736f6c63430008180033608060405234801561000f575f80fd5b50610c9f8061001d5f395ff3fe608060405234801561000f575f80fd5b5060043610610060575f3560e01c80633148f14f1461006457806373fe731414610094578063840f6120146100c4578063914a900a146100f4578063bf45767a14610112578063f707cb7414610130575b5f80fd5b61007e600480360381019061007991906103a8565b61014e565b60405161008b9190610407565b60405180910390f35b6100ae60048036038101906100a991906107b0565b610199565b6040516100bb91906108ce565b60405180910390f35b6100de60048036038101906100d99190610997565b6102bf565b6040516100eb9190610a58565b60405180910390f35b6100fc610333565b6040516101099190610ab7565b60405180910390f35b61011a610338565b6040516101279190610ab7565b60405180910390f35b61013861033d565b6040516101459190610ab7565b60405180910390f35b5f60405160208152602080820152602060408201528460608201528360808201528260a082015260c05160208160c0845f60055f19f161018c575f80fd5b8051925050509392505050565b6101a1610342565b6101a9610342565b5f87875f600281106101be576101bd610ad0565b5b6020020151886001600281106101d7576101d6610ad0565b5b6020020151885f600481106101ef576101ee610ad0565b5b60200201518960016004811061020857610207610ad0565b5b60200201518a60026004811061022157610220610ad0565b5b60200201518b60036004811061023a57610239610ad0565b5b60200201518b5f6002811061025257610251610ad0565b5b60200201518c60016002811061026b5761026a610ad0565b5b60200201518c60405160200161028a9a99989796959493929190610bb6565b604051602081830303815290604052905060408260d56020840160095f19fa6102b1575f80fd5b819250505095945050505050565b60605f825167ffffffffffffffff8111156102dd576102dc61046d565b5b6040519080825280601f01601f19166020018201604052801561030f5781602001600182028036833780820191505090505b5090508251806020830182602087015f60045af161032957fe5b5080915050919050565b600981565b600481565b600581565b6040518060400160405280600290602082028036833780820191505090505090565b5f604051905090565b5f80fd5b5f80fd5b5f819050919050565b61038781610375565b8114610391575f80fd5b50565b5f813590506103a28161037e565b92915050565b5f805f606084860312156103bf576103be61036d565b5b5f6103cc86828701610394565b93505060206103dd86828701610394565b92505060406103ee86828701610394565b9150509250925092565b61040181610375565b82525050565b5f60208201905061041a5f8301846103f8565b92915050565b5f63ffffffff82169050919050565b61043881610420565b8114610442575f80fd5b50565b5f813590506104538161042f565b92915050565b5f80fd5b5f601f19601f8301169050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b6104a38261045d565b810181811067ffffffffffffffff821117156104c2576104c161046d565b5b80604052505050565b5f6104d4610364565b90506104e0828261049a565b919050565b5f67ffffffffffffffff8211156104ff576104fe61046d565b5b602082029050919050565b5f80fd5b5f819050919050565b6105208161050e565b811461052a575f80fd5b50565b5f8135905061053b81610517565b92915050565b5f61055361054e846104e5565b6104cb565b9050806020840283018581111561056d5761056c61050a565b5b835b818110156105965780610582888261052d565b84526020840193505060208101905061056f565b5050509392505050565b5f82601f8301126105b4576105b3610459565b5b60026105c1848285610541565b91505092915050565b5f67ffffffffffffffff8211156105e4576105e361046d565b5b602082029050919050565b5f6106016105fc846105ca565b6104cb565b9050806020840283018581111561061b5761061a61050a565b5b835b818110156106445780610630888261052d565b84526020840193505060208101905061061d565b5050509392505050565b5f82601f83011261066257610661610459565b5b600461066f8482856105ef565b91505092915050565b5f67ffffffffffffffff8211156106925761069161046d565b5b602082029050919050565b5f7fffffffffffffffff00000000000000000000000000000000000000000000000082169050919050565b6106d18161069d565b81146106db575f80fd5b50565b5f813590506106ec816106c8565b92915050565b5f6107046106ff84610678565b6104cb565b9050806020840283018581111561071e5761071d61050a565b5b835b81811015610747578061073388826106de565b845260208401935050602081019050610720565b5050509392505050565b5f82601f83011261076557610764610459565b5b60026107728482856106f2565b91505092915050565b5f8115159050919050565b61078f8161077b565b8114610799575f80fd5b50565b5f813590506107aa81610786565b92915050565b5f805f805f61014086880312156107ca576107c961036d565b5b5f6107d788828901610445565b95505060206107e8888289016105a0565b94505060606107f98882890161064e565b93505060e061080a88828901610751565b92505061012061081c8882890161079c565b9150509295509295909350565b5f60029050919050565b5f81905092915050565b5f819050919050565b61084f8161050e565b82525050565b5f6108608383610846565b60208301905092915050565b5f602082019050919050565b61088181610829565b61088b8184610833565b92506108968261083d565b805f5b838110156108c65781516108ad8782610855565b96506108b88361086c565b925050600181019050610899565b505050505050565b5f6040820190506108e15f830184610878565b92915050565b5f80fd5b5f67ffffffffffffffff8211156109055761090461046d565b5b61090e8261045d565b9050602081019050919050565b828183375f83830152505050565b5f61093b610936846108eb565b6104cb565b905082815260208101848484011115610957576109566108e7565b5b61096284828561091b565b509392505050565b5f82601f83011261097e5761097d610459565b5b813561098e848260208601610929565b91505092915050565b5f602082840312156109ac576109ab61036d565b5b5f82013567ffffffffffffffff8111156109c9576109c8610371565b5b6109d58482850161096a565b91505092915050565b5f81519050919050565b5f82825260208201905092915050565b5f5b83811015610a155780820151818401526020810190506109fa565b5f8484015250505050565b5f610a2a826109de565b610a3481856109e8565b9350610a448185602086016109f8565b610a4d8161045d565b840191505092915050565b5f6020820190508181035f830152610a708184610a20565b905092915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f610aa182610a78565b9050919050565b610ab181610a97565b82525050565b5f602082019050610aca5f830184610aa8565b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f8160e01b9050919050565b5f610b1382610afd565b9050919050565b610b2b610b2682610420565b610b09565b82525050565b5f819050919050565b610b4b610b468261050e565b610b31565b82525050565b5f819050919050565b610b6b610b668261069d565b610b51565b82525050565b5f8160f81b9050919050565b5f610b8782610b71565b9050919050565b5f610b9882610b7d565b9050919050565b610bb0610bab8261077b565b610b8e565b82525050565b5f610bc1828d610b1a565b600482019150610bd1828c610b3a565b602082019150610be1828b610b3a565b602082019150610bf1828a610b3a565b602082019150610c018289610b3a565b602082019150610c118288610b3a565b602082019150610c218287610b3a565b602082019150610c318286610b5a565b600882019150610c418285610b5a565b600882019150610c518284610b9f565b6001820191508190509b9a505050505050505050505056fea26469706673582212205a5ef194d0db70e01a3c706dd56c7be60a9e1f132cbfdb006a802283a583b9a064736f6c63430008180033\"\n    failOnReject: true\n    contractAddressResultVar: \"precompilesTestContractAddr\"\n  configVars:\n    privateKey: \"walletPrivkey\"\n# check precompiles\n- name: generate_transaction\n  title: \"Call precompiles test contract: test1()\"\n  config:\n    feeCap: 5000000000 # 5 gwei\n    gasLimit: 200000\n    callData: \"0x6b59084d\"\n    expectEvents:\n      - { topic0: \"0x02f3e89081ef16f09f0e2ffdcf090ded6d9b3873ccd94513b60b4e667132f2d5\", topic1: \"0x0000000000000000000000000000000000000000000000000000000000000001\", data: \"0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000014be3f73d5867365d38da69e1a90f2c4cf026100ff000000000000000000000000\" }\n  configVars:\n    targetAddress: \"precompilesTestContractAddr\"\n    privateKey: \"walletPrivkey\"\n- name: generate_transaction\n  title: \"Call precompiles test contract: test2()\"\n  config:\n    feeCap: 5000000000 # 5 gwei\n    gasLimit: 200000\n    callData: \"0x66e41cb7\"\n    expectEvents:\n      - { topic0: \"0x02f3e89081ef16f09f0e2ffdcf090ded6d9b3873ccd94513b60b4e667132f2d5\", topic1: \"0x0000000000000000000000000000000000000000000000000000000000000002\", data: \"0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000020158760c856e5ea1ba97e2e2a456736c4bf30d964559afa6d748cf05694a636ff\" }\n  configVars:\n    targetAddress: \"precompilesTestContractAddr\"\n    privateKey: \"walletPrivkey\"\n- name: generate_transaction\n  title: \"Call precompiles test contract: test3()\"\n  config:\n    feeCap: 5000000000 # 5 gwei\n    gasLimit: 200000\n    callData: \"0x0a8e8e01\"\n    expectEvents:\n      - { topic0: \"0x02f3e89081ef16f09f0e2ffdcf090ded6d9b3873ccd94513b60b4e667132f2d5\", topic1: \"0x0000000000000000000000000000000000000000000000000000000000000003\", data: \"0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000020224d2bd5251d8f9faa114eb0826e371d1236fda1000000000000000000000000\" }\n  configVars:\n    targetAddress: \"precompilesTestContractAddr\"\n    privateKey: \"walletPrivkey\"\n- name: generate_transaction\n  title: \"Call precompiles test contract: test4()\"\n  config:\n    feeCap: 5000000000 # 5 gwei\n    gasLimit: 200000\n    callData: \"0x8f0d282d\"\n    expectEvents:\n      - { topic0: \"0x02f3e89081ef16f09f0e2ffdcf090ded6d9b3873ccd94513b60b4e667132f2d5\", topic1: \"0x0000000000000000000000000000000000000000000000000000000000000004\", data: \"0x000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000201337133713371337133713371337133713371337133713371337133713371337\" }\n  configVars:\n    targetAddress: \"precompilesTestContractAddr\"\n    privateKey: \"walletPrivkey\"\n- name: generate_transaction\n  title: \"Call precompiles test contract: test5()\"\n  config:\n    feeCap: 5000000000 # 5 gwei\n    gasLimit: 200000\n    callData: \"0x1ad7be82\"\n    expectEvents:\n      - { topic0: \"0x02f3e89081ef16f09f0e2ffdcf090ded6d9b3873ccd94513b60b4e667132f2d5\", topic1: \"0x0000000000000000000000000000000000000000000000000000000000000005\", data: \"0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000307943feabf46\" }\n  configVars:\n    targetAddress: \"precompilesTestContractAddr\"\n    privateKey: \"walletPrivkey\"\n- name: generate_transaction\n  title: \"Call precompiles test contract: test9()\"\n  config:\n    feeCap: 5000000000 # 5 gwei\n    gasLimit: 200000\n    callData: \"0xa7deec92\"\n    expectEvents:\n      - { topic0: \"0x02f3e89081ef16f09f0e2ffdcf090ded6d9b3873ccd94513b60b4e667132f2d5\", topic1: \"0x0000000000000000000000000000000000000000000000000000000000000009\", data: \"0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000040ba80a53f981c4d0d6a2797b69f12f6e94c212f14685ac4b74b12bb6fdbffa2d17d87c5392aab792dc252d5de4533cc9518d38aa8dbf1925ab92386edd4009923\" }\n  configVars:\n    targetAddress: \"precompilesTestContractAddr\"\n    privateKey: \"walletPrivkey\"\n\n\n\n# deploy zk proof contract\n- name: generate_transaction\n  title: \"Deploy test zk proof contract\"\n  config:\n    feeCap: 5000000000 # 5 gwei\n    gasLimit: 2500000\n    contractDeployment: true\n    callData: \"608060405234801561000f575f80fd5b5060405161001c90610079565b604051809103905ff080158015610035573d5f803e3d5ffd5b505f806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550610086565b611c1e8061078a83390190565b6106f7806100935f395ff3fe608060405234801561000f575f80fd5b5060043610610033575f3560e01c8062c80d8114610037578063e4886e5014610067575b5f80fd5b610051600480360381019061004c91906103ca565b610085565b60405161005e919061045a565b60405180910390f35b61006f610163565b60405161007c91906104ed565b60405180910390f35b5f805f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16631e8e1e1385856040518363ffffffff1660e01b81526004016100e1929190610637565b602060405180830381865afa1580156100fc573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906101209190610696565b90507fb6030296ed6d28f593d0c257c080ef243cd60eb419e82d45d9e530c59391510281604051610151919061045a565b60405180910390a18091505092915050565b5f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f604051905090565b5f80fd5b5f80fd5b5f80fd5b5f80fd5b5f601f19601f8301169050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b6101e58261019f565b810181811067ffffffffffffffff82111715610204576102036101af565b5b80604052505050565b5f610216610186565b905061022282826101dc565b919050565b5f67ffffffffffffffff821115610241576102406101af565b5b61024a8261019f565b9050602081019050919050565b828183375f83830152505050565b5f61027761027284610227565b61020d565b9050828152602081018484840111156102935761029261019b565b5b61029e848285610257565b509392505050565b5f82601f8301126102ba576102b9610197565b5b81356102ca848260208601610265565b91505092915050565b5f67ffffffffffffffff8211156102ed576102ec6101af565b5b602082029050602081019050919050565b5f80fd5b5f819050919050565b61031481610302565b811461031e575f80fd5b50565b5f8135905061032f8161030b565b92915050565b5f610347610342846102d3565b61020d565b9050808382526020820190506020840283018581111561036a576103696102fe565b5b835b81811015610393578061037f8882610321565b84526020840193505060208101905061036c565b5050509392505050565b5f82601f8301126103b1576103b0610197565b5b81356103c1848260208601610335565b91505092915050565b5f80604083850312156103e0576103df61018f565b5b5f83013567ffffffffffffffff8111156103fd576103fc610193565b5b610409858286016102a6565b925050602083013567ffffffffffffffff81111561042a57610429610193565b5b6104368582860161039d565b9150509250929050565b5f8115159050919050565b61045481610440565b82525050565b5f60208201905061046d5f83018461044b565b92915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f819050919050565b5f6104b56104b06104ab84610473565b610492565b610473565b9050919050565b5f6104c68261049b565b9050919050565b5f6104d7826104bc565b9050919050565b6104e7816104cd565b82525050565b5f6020820190506105005f8301846104de565b92915050565b5f81519050919050565b5f82825260208201905092915050565b5f5b8381101561053d578082015181840152602081019050610522565b5f8484015250505050565b5f61055282610506565b61055c8185610510565b935061056c818560208601610520565b6105758161019f565b840191505092915050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b6105b281610302565b82525050565b5f6105c383836105a9565b60208301905092915050565b5f602082019050919050565b5f6105e582610580565b6105ef818561058a565b93506105fa8361059a565b805f5b8381101561062a57815161061188826105b8565b975061061c836105cf565b9250506001810190506105fd565b5085935050505092915050565b5f6040820190508181035f83015261064f8185610548565b9050818103602083015261066381846105db565b90509392505050565b61067581610440565b811461067f575f80fd5b50565b5f815190506106908161066c565b92915050565b5f602082840312156106ab576106aa61018f565b5b5f6106b884828501610682565b9150509291505056fea2646970667358221220088f04d06811a654c4621ef9c53e2ba3ed7768ddb71492f34243795727ab3c9e64736f6c63430008180033608060405234801561000f575f80fd5b50611c018061001d5f395ff3fe608060405234801561000f575f80fd5b5060043610610029575f3560e01c80631e8e1e131461002d575b5f80fd5b61004760048036038101906100429190611b22565b61005d565b6040516100549190611bb2565b60405180910390f35b5f611875565b5f80600184845f805b8215610096578284059150848202860390508495508094508282028403905082935080925061006c565b60018411156100a3575f80fd5b5f8612156100b15788860195505b85965050505050505092915050565b6040518160208402830181516020830192505f5b82841015610117578185527f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000018451830991506020850194506020840193506100d4565b6101417f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000183610063565b91506020850394506020840393508592505b828411156101bd577f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000018551830990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001845183099150808452602085039450602084039350610153565b81845250505050505050565b7f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000181106101f8575f805260205ff35b50565b61032081511461020d575f805260205ff35b61021b6102608201516101c9565b6102296102808201516101c9565b6102376102a08201516101c9565b6102456102c08201516101c9565b6102536102e08201516101c9565b6102616103008201516101c9565b61026f6103208201516101c9565b50565b5f8060208501516102c085015260208301516102e08501526020800183015161030085015260406020018301516103208501526060602001830151610340850152608060200183015161036085015260a06020018301516103808501527f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000160e06102c08601200690508060208501527f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000016020808601200660408501527f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001604060e0850120065f8501527f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000160c06101208501200691508160608501527f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000182820960a08501527f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000182830991507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000182830991507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000182830991507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000182830991507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000182830991508160808501527f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000180600184030106915081610260850152816102808501527f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000160e0610260850120068060c08601527f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000181820992508260e08601527f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000018184099250826101008601527f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000018184099250826101208601527f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000018184099250826101408601527f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000018184099250826101608601527f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000160806101e086012006610180860152505050505050565b60017f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001807f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000018360608601510301066020096102a0830152610660600261028084016100c0565b610260820151600191507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001816102a0850151096102a0840152505050565b5f7f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001807f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000160208601516102a086015109830301069050806101a0830152505050565b5f805f7f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000016101a08601516103208601510892507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000160208601516102c08601510991507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001610260850151830891507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000016040860151830891507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000160208601516102e08601510990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001610280850151820890507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000016040860151820890507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000181830991507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000160408601516102a08601510890507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000181830991507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001610300850151830991507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000015f860151830991507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000015f8601516102a08701510990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000015f860151820990507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000181830891507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001827f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000018501030692507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000161028086015184099250826101c08601525050505050565b81518152602082015160208201525050565b6040518151815260208201516020820152825160408201526020830151606082015260408260808360066107d05a03fa80610a58575f805260205ff35b50505050565b5f604051835181526020840151602082015284604082015260408160608360076107d05a03fa915081610a93575f805260205ff35b825160408201526020830151606082015260408360808360066107d05a03fa915081610ac1575f805260205ff35b5050505050565b5f60405183815284602082015285604082015260408160608360076107d05a03fa915081610af8575f805260205ff35b825160408201526020830151606082015260408360808360066107d05a03fa915081610b26575f805260205ff35b505050505050565b5f60405183815284602082015285604082015260408360608360076107d05a03fa915081610b5e575f805260205ff35b505050505050565b6101e08201610b796101e0830182610a09565b610b8d610180840151610220840183610a5e565b505050565b5f8061022084017f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000160c0860151610260860151099250610c14837f02e54e0275445e269e1d5b593c671c5a3c7787deb99d877420be33f7376385397f28999a24cf41cb7f5477b05417ec5f4f2d460a89caae0e07e3eaeba5ac56812584610b2e565b7f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000161028085015184099250610c8b837f09742d1fa784edca3549812b0121572ca9dbb35dd4684045d772408865fa1e4b7f0ed42b61c48fffe8fb7797ad3542b49fc39a4f2cc51d40babd0e31362ac7e6d884610ac8565b7f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000160c0860151610280860151099250610d06837f2a375c17bc0f07607aba1517c4c844c2e824e02ce712b253ba48b5258f9421707f2677e46f1525ed41b063ecfc461eb535202c78c510191bab9456e0c064da455484610ac8565b7f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000160c08601516102a0860151099250610d81837f08c64ec72e440f97910f7526a262f94ad8ac64b8d327d516e7fdbfe6f9e0005e7f024e03e3f4293766318b713ef6eb4b4d2e4a80e8d9d1329256c51a494d1f5da084610ac8565b60c08501519250610dd4837f2b62733ca9c47ebbcae7d4ceb2db867887ae2ef66118980cc79874ca1d0e22147f058f9d58ff1bdff84c5c0f49b4a39b5dedd652e91514acbf4b0ecbbdfc25786884610ac8565b7f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000160a08601516102608601510892507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000016040860151840892507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000160a086015160020991507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001610280850151830891507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000016040860151830891507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000182840992507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000160a086015160030991507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000016102a0850151830891507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000016040860151830891507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000182840992507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000015f860151840992507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000160c0860151840992507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000015f8601516102a08701510991507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000015f860151830991507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000160c0860151830991507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000182840892507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001610180860151840892506110ac8360e0860183610a5e565b7f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000016102c085015160208701510992507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001610260850151840892507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000016040860151840892507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000016102e085015160208701510991507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001610280850151830891507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000016040860151830891507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000182840992507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000015f860151840992507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000160c0860151840992507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000016020860151840992507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001610300850151840992507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001837f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000103069250611315837f24c147567dafd4191e1a6b6a0454ba621801ab61e998a38939bdbb64d664760e7f29b6c1b3e9065435d429d078311433f67a86ea5361159e8f740541899c94c0a884610ac8565b611323610120850182610a1b565b6080850151925061133983610160860183610a5e565b7f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001838409925061136e836101a0860183610a5e565b61138060e08601516020860183610a5e565b6113936101008601516060860183610a5e565b6113a661012086015160a0860183610a5e565b6113f76101408601517f0e65e2f35d97f40565921b1fdef35f329fa140b6149b718a493217dfa926d9477f2d6c9d3011d9e5b219e4005594f20926562891671887abea906656470d3f1e2184610ac8565b6114486101608601517f0f555be3adf1604edc317b91425104be179f4152774a5b8c0941aeb92ac4abf87f1dbde0c37609ac6a5ab8f393f5c494df1ff84e28c46e93fc04d69f6f0e0d87bc84610ac8565b6101c085015192507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000018060c087015161032087015109840892507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000018060e087015161026087015109840892507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000018061010087015161028087015109840892507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001806101208701516102a087015109840892507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001806101408701516102c087015109840892507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001806101608701516102e087015109840892507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000018061018087015161030087015109840892507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001837f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000103069250611608836002600184610ac8565b6060850151925061161e836101e0860183610a5e565b7f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000160608601516101808701510992507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000017f09c532c6306b93d29678200d47c0b2a99c18d51b838eeb1d3eed4c533bb512d0840992506116a283610220860183610a5e565b5050505050565b5f6040516101e0830151815260206101e08401015160208201527f26186a2d65ee4d2f9c9a5b91f86597d35f192cd120caf7e935d8443d1938e23d60408201527f30441fd1b5d3370482c42152a8899027716989a6996c2535bc9f7fee8aaef79e60608201527f1970ea81dd6992adfbc571effb03503adbbb6a857f578403c6c40e22d65b3c0260808201527f054793348f12c0cf5622c340573cb277586319de359ab9389778f689786b1e4860a082015261022083015160c08201526020610220840101517f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd47817f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd47030690508060e08301527f198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c26101008301527f1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed6101208301527f090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b6101408301527f12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa6101608301526020826101808460086107d05a03fa825181169350505050919050565b6040516102c08101604052611889846101fb565b611894838286610272565b61189d816105fa565b6118a7838261069e565b6118b18185610700565b6118bb8185610b66565b6118c58185610b92565b6118ce816116a9565b6102c08203604052805f5260205ff35b5f604051905090565b5f80fd5b5f80fd5b5f80fd5b5f80fd5b5f601f19601f8301169050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b61193d826118f7565b810181811067ffffffffffffffff8211171561195c5761195b611907565b5b80604052505050565b5f61196e6118de565b905061197a8282611934565b919050565b5f67ffffffffffffffff82111561199957611998611907565b5b6119a2826118f7565b9050602081019050919050565b828183375f83830152505050565b5f6119cf6119ca8461197f565b611965565b9050828152602081018484840111156119eb576119ea6118f3565b5b6119f68482856119af565b509392505050565b5f82601f830112611a1257611a116118ef565b5b8135611a228482602086016119bd565b91505092915050565b5f67ffffffffffffffff821115611a4557611a44611907565b5b602082029050602081019050919050565b5f80fd5b5f819050919050565b611a6c81611a5a565b8114611a76575f80fd5b50565b5f81359050611a8781611a63565b92915050565b5f611a9f611a9a84611a2b565b611965565b90508083825260208201905060208402830185811115611ac257611ac1611a56565b5b835b81811015611aeb5780611ad78882611a79565b845260208401935050602081019050611ac4565b5050509392505050565b5f82601f830112611b0957611b086118ef565b5b8135611b19848260208601611a8d565b91505092915050565b5f8060408385031215611b3857611b376118e7565b5b5f83013567ffffffffffffffff811115611b5557611b546118eb565b5b611b61858286016119fe565b925050602083013567ffffffffffffffff811115611b8257611b816118eb565b5b611b8e85828601611af5565b9150509250929050565b5f8115159050919050565b611bac81611b98565b82525050565b5f602082019050611bc55f830184611ba3565b9291505056fea2646970667358221220c386006c749b86961627b412b0eecae599db372813a409cbbf4078a254aa84de64736f6c63430008180033\"\n    failOnReject: true\n    contractAddressResultVar: \"zkProofContractAddr\"\n  configVars:\n    privateKey: \"walletPrivkey\"\n# check proof\n- name: generate_transaction\n  title: \"Call test zk proof verification\"\n  config:\n    feeCap: 5000000000 # 5 gwei\n    gasLimit: 1000000\n    callData: \"0x00c80d81000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000003800000000000000000000000000000000000000000000000000000000000000320001e50e3518a0332a2715e62492b3e7e53c30ccb4e019227bdee4342d42ea18e29e4035a088e27c0379bc0b7fa298d6e111263aa9532e4b04e084afc492c0a5c0ac16f7e6b5a4365d9cdc8e722b8ba275e414a167965a1275505f2c0557a448526253d37b2b56fbdc7a653cb0b751dbe4ed2b0864ecbdcdd3f912761bdcbfcb424bc4fa98ded41603f82fc9378708971b2b249c9e4068148e009ba904fc6181104fa3e91c821d2c004f30df7d127d3df56561926f0bfa9496a55840e7ab8aa8a23f2b298e0bb72df59936c4184d5a865211b28771b4243f57797409307d0b0250e7f3300b3b96d1f246db13c412a94163ec30f363c03ff9b6b287c484f00acdf21c454551599290e96d1a50c80ec4fac99c3edc18f1e63ca94cf0fde08d9cb2b27d69c5a1fec263a669aa8f0d21213ba6711c99fc4f49f8161eab74fb21be46e1585b25bfd0a1d9494d07484388242a8b96c9222e9df99512a1f5b1f4a7812ae0374769e26f20c8af66ba9bb2a0ab95b4bcb4bbd9a2a8b89956fb72ec817b6c21d4bb305780ced6b622e28b8ce816108a22d246a9d1b7d26dc5f3bb534bf4f3f0139139999d43aeeecf1ffa3016903093c3ca306a4aec045fb689c16c0b43b63047ba614c3ab41ac5db347b2070e64e727f671a987a3713c69d1eaf0e3acc96a06f49359839708466ca6cfecb4f636adc0fa4483a132276be8a9cce5a17899f1002d4015bd025ab6417fdd6f61b2fdf2056ae5e8c6492e4ddf084d96acd4014f2f1436fa9d696a63a9bf010dbb6f382c98e18b9bbf14de8d7a3e0ad6aec6b4b425eab9097a5a920803f039ded725975f2678261918e187bed0b38aef9647013e2c6425f639f1b070031961d7d2200508dcbf6e467f4dcc9a421352fe8c1f77b219cf3b89fd8224ad0f9806ed47ee51d19954c1281e04ea56dbc356eee07961171ea4b98f6bbca1b111a51d87fe368190a19d90f26dbb50792880413e9c6142b81bb8da3cbb6b8910466b16f1be9e01b91122a59afe236cb36bb5c5deb96cff721f0a174b28049774af6ff38af5ee56c5f4290318fb6c657d68496dc3a0ea7f592cce39822655a0b29026f1522b98470217ed6b7696f227a5c125eec5721c53f600000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000008\"\n  configVars:\n    targetAddress: \"zkProofContractAddr\"\n    privateKey: \"walletPrivkey\"\n\n\n- name: run_tasks_concurrent\n  title: \"Check chain stability\"\n  timeout: 1h\n  config:\n    tasks:\n    - name: check_consensus_reorgs\n      title: \"Check consensus reorgs\"\n      config:\n        maxReorgsPerEpoch: 2\n        minCheckEpochCount: 1\n    - name: check_consensus_forks\n      title: \"Check consensus forks\"\n      config:\n        minCheckEpochCount: 1\n"
  },
  {
    "path": "static_files/assertoor-config/tests/blob-transactions-test.yaml",
    "content": "id: blob-transactions-test\nname: \"Blob Transaction Test\"\ntimeout: 1h\nconfig:\n  walletPrivkey: \"\"\n  validatorPairNames: []\n  clientPairNames: []\ntasks:\n- name: check_clients_are_healthy\n  title: \"Check if at least one client is ready\"\n  timeout: 5m\n  config:\n    minClientCount: 1\n\n# check if all client pairs propose blocks with blob transactions\n- name: run_task_background\n  title: \"Check if all clients propose blocks with blob transactions\"\n  config:\n    onBackgroundComplete: fail\n    backgroundTask:\n      name: generate_blob_transactions\n      title: \"Generate 2 blob transactions per block\"\n      config:\n        childWallets: 20\n        walletSeed: \"blob-test\"\n        limitPending: 10\n        limitPerBlock: 2\n        randomTarget: true\n        amount: 1000000\n        randomAmount: true\n        blobSidecars: 1\n      configVars:\n        privateKey: \"walletPrivkey\"\n    foregroundTask:\n      name: run_task_matrix\n      title: \"Check transaction inclusion with all client pairs\"\n      timeout: 30m\n      configVars:\n        matrixValues: \"validatorPairNames\"\n      config:\n        runConcurrent: true\n        matrixVar: \"validatorPairName\"\n        task:\n          name: check_consensus_block_proposals\n          title: \"Wait for block proposal with >= 1 blobs from ${validatorPairName}\"\n          configVars:\n            validatorNamePattern: \"validatorPairName\"\n          config:\n            minBlobCount: 1\n- name: \"sleep\"\n  title: \"Wait 30sec to clear up pending transactions\"\n  config:\n    duration: 30s\n\n# check if blob transactions can be sent via each client pair\n- name: run_task_matrix\n  title: \"Check if blob transactions can be sent via each client pair\"\n  configVars:\n    matrixValues: \"clientPairNames\"\n  config:\n    runConcurrent: false\n    matrixVar: \"clientPairName\"\n    task:\n      name: run_tasks\n      title: \"Check if blob transactions can be sent via ${clientPairName}\"\n      config:\n        tasks:\n        - name: run_task_background\n          title: \"Check if blob transactions can be sent via ${clientPairName}\"\n          config:\n            onBackgroundComplete: fail\n            backgroundTask:\n              name: generate_blob_transactions\n              title: \"Generate 2 blob transactions per block and send via ${clientPairName}\"\n              config:\n                childWallets: 20\n                walletSeed: \"blob-test\"\n                limitPending: 10\n                limitPerBlock: 2\n                randomTarget: true\n                amount: 1000000\n                randomAmount: true\n                blobSidecars: 1\n              configVars:\n                privateKey: \"walletPrivkey\"\n                clientPattern: \"clientPairName\"\n            foregroundTask:\n              name: check_consensus_block_proposals\n              title: \"Wait for block proposal with >= 1 blobs\"\n              config:\n                minBlobCount: 1\n        - name: \"sleep\"\n          title: \"Wait 30sec to clear up pending transactions\"\n          config:\n            duration: 30s\n"
  },
  {
    "path": "static_files/assertoor-config/tests/block-proposal-check.yaml",
    "content": "id: block-proposal-check\nname: \"Every client pair proposed a block\"\ntimeout: 2h\ndisable: false\nconfig:\n  validatorPairNames: []\ntasks:\n- name: check_clients_are_healthy\n  title: \"Check if at least one client is ready\"\n  timeout: 5m\n  config:\n    minClientCount: 1\n\n- name: run_task_matrix\n  title: \"Check block proposals from all client pairs\"\n  configVars:\n    matrixValues: \"validatorPairNames\"\n  config:\n    runConcurrent: true\n    matrixVar: \"validatorPairName\"\n    task:\n      name: check_consensus_block_proposals\n      title: \"Wait for block proposal from ${validatorPairName}\"\n      configVars:\n        validatorNamePattern: \"validatorPairName\"\n"
  },
  {
    "path": "static_files/assertoor-config/tests/eoa-transactions-test.yaml",
    "content": "id: eoa-transactions-test\nname: \"Transaction Test\"\ntimeout: 1h\nconfig:\n  walletPrivkey: \"\"\n  validatorPairNames: []\n  clientPairNames: []\ntasks:\n- name: check_clients_are_healthy\n  title: \"Check if at least one client is ready\"\n  timeout: 5m\n  config:\n    minClientCount: 1\n\n# check if all client pairs propose blocks with legacy EOA transactions\n- name: run_task_background\n  title: \"Check if all clients propose blocks with legacy EOA transactions\"\n  config:\n    onBackgroundComplete: fail\n    backgroundTask:\n      name: generate_eoa_transactions\n      title: \"Generate 10 EOA transaction per block\"\n      config:\n        childWallets: 100\n        limitPending: 100\n        limitPerBlock: 10\n        randomTarget: true\n        amount: 1000000\n        randomAmount: true\n        legacyTxType: true\n      configVars:\n        privateKey: \"walletPrivkey\"\n\n    foregroundTask:\n      name: run_task_matrix\n      title: \"Check transaction inclusion with all client pairs\"\n      timeout: 30m\n      configVars:\n        matrixValues: \"validatorPairNames\"\n      config:\n        runConcurrent: true\n        matrixVar: \"validatorPairName\"\n        task:\n          name: check_consensus_block_proposals\n          title: \"Wait for block proposal with >= 5 transactions from ${validatorPairName}\"\n          configVars:\n            validatorNamePattern: \"validatorPairName\"\n          config:\n            minTransactionCount: 5\n- name: \"sleep\"\n  title: \"Wait 30sec to clear up pending transactions\"\n  config:\n    duration: 30s\n\n# check if legacy EOA transactions can be sent via each client pair\n- name: run_task_matrix\n  title: \"Check if legacy EOA transactions can be sent via each client pair\"\n  configVars:\n    matrixValues: \"clientPairNames\"\n  config:\n    runConcurrent: false\n    matrixVar: \"clientPairName\"\n    task:\n      name: run_tasks\n      title: \"Check if legacy EOA transactions can be sent via ${clientPairName}\"\n      config:\n        tasks:\n        - name: run_task_background\n          title: \"Check if legacy EOA transactions can be sent via ${clientPairName}\"\n          config:\n            onBackgroundComplete: fail\n            backgroundTask:\n              name: generate_eoa_transactions\n              title: \"Generate 10 EOA transaction per block and send via ${clientPairName}\"\n              config:\n                childWallets: 100\n                limitPending: 100\n                limitPerBlock: 10\n                randomTarget: true\n                amount: 1000000\n                randomAmount: true\n                legacyTxType: true\n              configVars:\n                privateKey: \"walletPrivkey\"\n                clientPattern: \"clientPairName\"\n\n            foregroundTask:\n              name: check_consensus_block_proposals\n              title: \"Wait for block proposal with >= 5 transactions\"\n              config:\n                minTransactionCount: 5\n        - name: \"sleep\"\n          title: \"Wait 30sec to clear up pending transactions\"\n          config:\n            duration: 30s\n\n# check if all client pairs propose blocks with dynfee EOA transactions\n- name: run_task_background\n  title: \"Check if all clients propose blocks with dynfee EOA transactions\"\n  config:\n    onBackgroundComplete: fail\n    backgroundTask:\n      name: generate_eoa_transactions\n      title: \"Generate 10 EOA transaction per block\"\n      config:\n        childWallets: 100\n        limitPending: 100\n        limitPerBlock: 10\n        randomTarget: true\n        amount: 1000000\n        randomAmount: true\n      configVars:\n        privateKey: \"walletPrivkey\"\n\n    foregroundTask:\n      name: run_task_matrix\n      title: \"Check transaction inclusion with all client pairs\"\n      timeout: 30m\n      configVars:\n        matrixValues: \"validatorPairNames\"\n      config:\n        runConcurrent: true\n        matrixVar: \"validatorPairName\"\n        task:\n          name: check_consensus_block_proposals\n          title: \"Wait for block proposal with >= 5 transactions from ${validatorPairName}\"\n          configVars:\n            validatorNamePattern: \"validatorPairName\"\n          config:\n            minTransactionCount: 5\n- name: \"sleep\"\n  title: \"Wait 30sec to clear up pending transactions\"\n  config:\n    duration: 30s\n\n# check if dynfee EOA transactions can be sent via each client pair\n- name: run_task_matrix\n  title: \"Check if dynfee EOA transactions can be sent via each client pair\"\n  configVars:\n    matrixValues: \"clientPairNames\"\n  config:\n    runConcurrent: false\n    matrixVar: \"clientPairName\"\n    task:\n      name: run_tasks\n      title: \"Check if dynfee EOA transactions can be sent via ${clientPairName}\"\n      config:\n        tasks:\n        - name: run_task_background\n          title: \"Check if dynfee EOA transactions can be sent via ${clientPairName}\"\n          config:\n            onBackgroundComplete: fail\n            backgroundTask:\n              name: generate_eoa_transactions\n              title: \"Generate 10 EOA transaction per block and send via ${clientPairName}\"\n              config:\n                childWallets: 100\n                limitPending: 100\n                limitPerBlock: 10\n                randomTarget: true\n                amount: 1000000\n                randomAmount: true\n              configVars:\n                privateKey: \"walletPrivkey\"\n                clientPattern: \"clientPairName\"\n            foregroundTask:\n              name: check_consensus_block_proposals\n              title: \"Wait for block proposal with >= 5 transactions\"\n              config:\n                minTransactionCount: 5\n        - name: \"sleep\"\n          title: \"Wait 30sec to clear up pending transactions\"\n          config:\n            duration: 30s\n"
  },
  {
    "path": "static_files/assertoor-config/tests/stability-check.yaml",
    "content": "id: stability-check\nname: \"Check chain stability\"\ntimeout: 2h\ntasks:\n- name: check_clients_are_healthy\n  title: \"Check if at least one client is ready\"\n  timeout: 5m\n  config:\n    minClientCount: 1\n\n- name: run_tasks_concurrent\n  title: \"Check if all EL & CL clients are synced\"\n  timeout: 30m\n  config:\n    tasks:\n    - name: check_consensus_sync_status\n      title: \"Check if CL clients are synced\"\n    - name: check_execution_sync_status\n      title: \"Check if EL clients are synced\"\n\n- name: run_tasks_concurrent\n  title: \"Check chain stability\"\n  timeout: 1h\n  config:\n    tasks:\n    - name: check_consensus_finality\n      title: \"Check consensus chain finality\"\n      config:\n        minFinalizedEpochs: 2\n        maxUnfinalizedEpochs: 3\n    - name: check_consensus_attestation_stats\n      title: \"Check consensus attestation stats\"\n      config:\n        minTargetPercent: 98\n        minHeadPercent: 80\n    - name: check_consensus_reorgs\n      title: \"Check consensus reorgs\"\n      config:\n        maxReorgsPerEpoch: 2\n        minCheckEpochCount: 1\n    - name: check_consensus_forks\n      title: \"Check consensus forks\"\n      config:\n        maxForkDistance: 3\n"
  },
  {
    "path": "static_files/assertoor-config/tests/validator-lifecycle-test.yaml",
    "content": "id: validator-lifecycle-test\nname: \"Validator Lifecycle Test\"\ntimeout: 72h\nconfig:\n  walletPrivkey: \"\"\n  validatorMnemonic: \"trial jeans seat abstract runway cupboard please elevator club file arrow lounge crash sun thumb clock duty priority key fence funny trick diary album\"\n  validatorPairNames: []\ntasks:\n- name: check_clients_are_healthy\n  title: \"Check if at least one client is ready\"\n  timeout: 5m\n  config:\n    minClientCount: 1\n\n- name: run_tasks_concurrent\n  title: \"Generate deposits & Track inclusion\"\n  config:\n    tasks:\n    - name: generate_deposits\n      title: \"Generate 300 deposits\"\n      config:\n        limitTotal: 300\n        limitPerSlot: 20\n        limitPending: 50\n        depositContract: \"0x00000000219ab540356cBB839Cbe05303d7705Fa\"\n        awaitReceipt: true\n      configVars:\n        walletPrivkey: \"walletPrivkey\"\n        mnemonic: \"validatorMnemonic\"\n\n    - name: run_task_background\n      title: \"Check deposit inclusion with all client pairs\"\n      config:\n        onBackgroundComplete: succeed\n        backgroundTask:\n          name: run_tasks\n          title: \"Await end of next deposit voting period\"\n          config:\n            tasks:\n            - name: check_consensus_validator_status\n              title: \"Wait for inclusion of the last deposit\"\n              config:\n                validatorPubKey: 0xa4a6121cb76eaf63e520615368a21d504c6f7363b5045f965e3587f623a6f7f1ce32af63ce3c535e75cd831db27c5abd\n                validatorStatus:\n                - pending_initialized\n                - pending_queued\n                - active_ongoing\n        foregroundTask:\n          name: run_task_options\n          title: \"Check deposit inclusion\"\n          config:\n            ignoreFailure: true\n            task:\n              name: run_task_matrix\n              title: \"Check deposit inclusion with all client pairs\"\n              timeout: 48h\n              configVars:\n                matrixValues: \"validatorPairNames\"\n              config:\n                runConcurrent: true\n                matrixVar: \"validatorPairName\"\n                task:\n                  name: check_consensus_block_proposals\n                  title: \"Wait for block proposal with deposits from ${validatorPairName}\"\n                  configVars:\n                    validatorNamePattern: \"validatorPairName\"\n                  config:\n                    minDepositCount: 1\n\n# due to the deposits we should reach un-finality soon.\n- name: check_consensus_validator_status\n  title: \"Wait for the last deposit to become activated\"\n  timeout: 48h\n  config:\n    validatorPubKey: 0xa4a6121cb76eaf63e520615368a21d504c6f7363b5045f965e3587f623a6f7f1ce32af63ce3c535e75cd831db27c5abd\n    validatorStatus:\n    - active_ongoing\n\n# due to the deposits we should have reached un-finality now.\n- name: check_consensus_finality\n  title: \"Check for consensus chain un-finality\"\n  timeout: 1m\n  config:\n    minUnfinalizedEpochs: 5\n\n# check if all client pairs propose blocks with bls changes during un-finality\n- name: run_task_background\n  title: \"Check if all clients propose blocks with BLS changes during un-finality\"\n  config:\n    onBackgroundComplete: failOrIgnore\n    backgroundTask:\n      name: generate_bls_changes\n      title: \"Generate 50 BLS changes (1 bls change per slot)\"\n      config:\n        limitTotal: 50\n        limitPerSlot: 1\n        indexCount: 100\n        targetAddress: 0x65D08a056c17Ae13370565B04cF77D2AfA1cB9FA\n      configVars:\n        mnemonic: \"validatorMnemonic\"\n\n    foregroundTask:\n      name: run_task_matrix\n      title: \"Check bls change inclusion with all client pairs\"\n      timeout: 1h\n      configVars:\n        matrixValues: \"validatorPairNames\"\n      config:\n        runConcurrent: true\n        matrixVar: \"validatorPairName\"\n        task:\n          name: check_consensus_block_proposals\n          title: \"Wait for block proposal with deposits from ${validatorPairName}\"\n          configVars:\n            validatorNamePattern: \"validatorPairName\"\n          config:\n            minBlsChangeCount: 1\n\n# check if all client pairs propose blocks with exits during un-finality\n- name: run_task_background\n  title: \"Check if all clients propose blocks with exits during un-finality\"\n  config:\n    onBackgroundComplete: failOrIgnore\n    backgroundTask:\n      name: generate_exits\n      title: \"Generate 50 Voluntary Exits (1 exit per slot)\"\n      config:\n        limitTotal: 50\n        limitPerSlot: 1\n        indexCount: 100\n      configVars:\n        mnemonic: \"validatorMnemonic\"\n\n    foregroundTask:\n      name: run_task_matrix\n      title: \"Check exit inclusion with all client pairs\"\n      timeout: 1h\n      configVars:\n        matrixValues: \"validatorPairNames\"\n      config:\n        runConcurrent: true\n        matrixVar: \"validatorPairName\"\n        task:\n          name: check_consensus_block_proposals\n          title: \"Wait for block proposal with deposits from ${validatorPairName}\"\n          configVars:\n            validatorNamePattern: \"validatorPairName\"\n          config:\n            minExitCount: 1\n\n# check if all client pairs propose blocks with attester slashings\n- name: run_task_background\n  title: \"Check if all clients propose blocks with attester slashings during un-finality\"\n  config:\n    onBackgroundComplete: failOrIgnore\n    backgroundTask:\n      name: generate_slashings\n      title: \"Generate 1 attester slashing per slot\"\n      config:\n        slashingType: \"attester\"\n        startIndex: 50\n        limitTotal: 50\n        limitPerSlot: 1\n        indexCount: 50\n      configVars:\n        mnemonic: \"validatorMnemonic\"\n\n    foregroundTask:\n      name: run_task_matrix\n      title: \"Check slashing inclusion with all client pairs\"\n      timeout: 1h\n      configVars:\n        matrixValues: \"validatorPairNames\"\n      config:\n        runConcurrent: true\n        matrixVar: \"validatorPairName\"\n        task:\n          name: check_consensus_block_proposals\n          title: \"Wait for block proposal with attester slashings from ${validatorPairName}\"\n          configVars:\n            validatorNamePattern: \"validatorPairName\"\n          config:\n            minAttesterSlashingCount: 1\n\n# check if all client pairs propose blocks with proposer slashings\n- name: run_task_background\n  title: \"Check if all clients propose blocks with proposer slashings during un-finality\"\n  config:\n    onBackgroundComplete: failOrIgnore\n    backgroundTask:\n      name: generate_slashings\n      title: \"Generate 1 proposer slashing per slot\"\n      config:\n        slashingType: \"proposer\"\n        startIndex: 100\n        limitTotal: 50\n        limitPerSlot: 1\n        indexCount: 50\n      configVars:\n        mnemonic: \"validatorMnemonic\"\n\n    foregroundTask:\n      name: run_task_matrix\n      title: \"Check slashing inclusion with all client pairs\"\n      timeout: 1h\n      configVars:\n        matrixValues: \"validatorPairNames\"\n      config:\n        runConcurrent: true\n        matrixVar: \"validatorPairName\"\n        task:\n          name: check_consensus_block_proposals\n          title: \"Wait for block proposal with proposer slashings from ${validatorPairName}\"\n          configVars:\n            validatorNamePattern: \"validatorPairName\"\n          config:\n            minProposerSlashingCount: 1\n\n# exit 150 validators and wait for finality\n- name: run_task_options\n  title: \"Exit 150 validators\"\n  config:\n    task:\n      name: generate_exits\n      title: \"Exit 150 Validators\"\n      config:\n        indexCount: 150\n      configVars:\n        mnemonic: \"validatorMnemonic\"\n- name: check_consensus_finality\n  title: \"Wait for consensus chain finality\"\n  timeout: 18h\n  config:\n    maxUnfinalizedEpochs: 4\n\n# check if all client pairs propose blocks with bls changes during finality\n- name: run_task_background\n  title: \"Check if all clients propose blocks with BLS changes during finality\"\n  config:\n    onBackgroundComplete: failOrIgnore\n    backgroundTask:\n      name: generate_bls_changes\n      title: \"Generate 1 bls change per slot\"\n      config:\n        startIndex: 150\n        limitTotal: 50\n        limitPerSlot: 1\n        indexCount: 50\n        targetAddress: 0x65D08a056c17Ae13370565B04cF77D2AfA1cB9FA\n      configVars:\n        mnemonic: \"validatorMnemonic\"\n\n    foregroundTask:\n      name: run_task_matrix\n      title: \"Check bls change inclusion with all client pairs\"\n      timeout: 1h\n      configVars:\n        matrixValues: \"validatorPairNames\"\n      config:\n        runConcurrent: true\n        matrixVar: \"validatorPairName\"\n        task:\n          name: check_consensus_block_proposals\n          title: \"Wait for block proposal with BLS changes from ${validatorPairName}\"\n          configVars:\n            validatorNamePattern: \"validatorPairName\"\n          config:\n            minBlsChangeCount: 1\n\n# check if all client pairs propose blocks with exits during finality\n- name: run_task_background\n  title: \"Check if all clients propose blocks with exits during finality\"\n  config:\n    onBackgroundComplete: failOrIgnore\n    backgroundTask:\n      name: generate_exits\n      title: \"Generate 1 exit per slot\"\n      config:\n        startIndex: 150\n        limitTotal: 50\n        limitPerSlot: 1\n        indexCount: 50\n      configVars:\n        mnemonic: \"validatorMnemonic\"\n\n    foregroundTask:\n      name: run_task_matrix\n      title: \"Check exit inclusion with all client pairs\"\n      timeout: 1h\n      configVars:\n        matrixValues: \"validatorPairNames\"\n      config:\n        runConcurrent: true\n        matrixVar: \"validatorPairName\"\n        task:\n          name: check_consensus_block_proposals\n          title: \"Wait for block proposal with exits from ${validatorPairName}\"\n          configVars:\n            validatorNamePattern: \"validatorPairName\"\n          config:\n            minExitCount: 1\n\n# check if all client pairs propose blocks with attester slashings\n- name: run_task_background\n  title: \"Check if all clients propose blocks with attester slashings during finality\"\n  config:\n    onBackgroundComplete: failOrIgnore\n    backgroundTask:\n      name: generate_slashings\n      title: \"Generate 1 attester slashing per slot\"\n      config:\n        slashingType: \"attester\"\n        startIndex: 200\n        limitTotal: 50\n        limitPerSlot: 1\n        indexCount: 50\n      configVars:\n        mnemonic: \"validatorMnemonic\"\n\n    foregroundTask:\n      name: run_task_matrix\n      title: \"Check slashing inclusion with all client pairs\"\n      timeout: 1h\n      configVars:\n        matrixValues: \"validatorPairNames\"\n      config:\n        runConcurrent: true\n        matrixVar: \"validatorPairName\"\n        task:\n          name: check_consensus_block_proposals\n          title: \"Wait for block proposal with attester slashings from ${validatorPairName}\"\n          configVars:\n            validatorNamePattern: \"validatorPairName\"\n          config:\n            minAttesterSlashingCount: 1\n\n# check if all client pairs propose blocks with proposer slashings\n- name: run_task_background\n  title: \"Check if all clients propose blocks with proposer slashings during finality\"\n  config:\n    onBackgroundComplete: failOrIgnore\n    backgroundTask:\n      name: generate_slashings\n      title: \"Generate 1 proposer slashing per slot\"\n      config:\n        slashingType: \"proposer\"\n        startIndex: 250\n        limitTotal: 50\n        limitPerSlot: 1\n        indexCount: 50\n      configVars:\n        mnemonic: \"validatorMnemonic\"\n\n    foregroundTask:\n      name: run_task_matrix\n      title: \"Check slashing inclusion with all client pairs\"\n      timeout: 1h\n      configVars:\n        matrixValues: \"validatorPairNames\"\n      config:\n        runConcurrent: true\n        matrixVar: \"validatorPairName\"\n        task:\n          name: check_consensus_block_proposals\n          title: \"Wait for block proposal with proposer slashings from ${validatorPairName}\"\n          configVars:\n            validatorNamePattern: \"validatorPairName\"\n          config:\n            minProposerSlashingCount: 1\n\ncleanupTasks:\n- name: run_task_options\n  title: \"Exit all validators\"\n  config:\n    task:\n      name: generate_exits\n      title: \"Exit all test validators\"\n      config:\n        limitTotal: 300\n        indexCount: 300\n      configVars:\n        mnemonic: \"validatorMnemonic\"\n- name: run_task_options\n  title: \"Withdraw all funds\"\n  config:\n    task:\n      name: generate_bls_changes\n      title: \"Generate BLS changes for all validators\"\n      config:\n        limitTotal: 300\n        indexCount: 300\n        targetAddress: 0x65D08a056c17Ae13370565B04cF77D2AfA1cB9FA\n      configVars:\n        mnemonic: \"validatorMnemonic\"\n"
  },
  {
    "path": "static_files/blutgang-config/config.toml.tmpl",
    "content": "# To use the config file, use the -c/--config option pointing to the path of a config file\n\n# Config for blutgang goes here\n[blutgang]\n# Clear the cache DB on startup\ndo_clear = false\n# Where to bind blutgang to\naddress = \"0.0.0.0:3000\"\n# Moving average length for the latency\nma_length = 100\n# Sort RPCs by latency on startup. Recommended to leave on.\nsort_on_startup = true\n# Enable health checking\nhealth_check = true\n# Enable content type header checking. Set this to `true` if you want\n# Blutgang to be JSON-RPC compliant.\nheader_check = true\n# Acceptable time to wait for a response in ms\nttl = 30\n# How many times to retry a request before giving up\nmax_retries = 32\n# Block time in ms, used as a sanity check when not receiving subscriptions\nexpected_block_time = 13000\n# Time between health checks in ms\nhealth_check_ttl = 400\n# Suppress the health check running info messages\nsupress_rpc_check = false\n\n# Note: the admin namespace contains volatile functions and\n# should not be exposed publicly.\n[admin]\n# Enable the admin namespace\nenabled = true\n# Address for the admin RPC\naddress = \"0.0.0.0:5715\"\n# Only allow read-only methods\n# Recommended `true` unless you 100% need write methods\nreadonly = true\n# Enable the use of JWT for auth\n# Should be on if exposing to the internet\njwt = false\n# jwt token\nkey = \"\"\n\n# Sled config\n# Sled is the database we use for our cache, for more info check their docs\n[sled]\n# Path to db\ndb_path = \"./blutgang-cache\"\n# sled mode. Can be HighThroughput/LowSpace\nmode = \"HighThroughput\"\n# Cache size in bytes.\ncache_capacity = 1000000000\n# Use zstd compression. Reduces size 60-70%,\n# and increases CPU and latency by around 10% for db writes and 2% for reads.\n# If storage constrained, it's fine to have it be on.\ncompression = false\n# Print DB profile when dropped. Doesn't do anything for now.\nprint_profile = false\n# Frequency of flushes in ms\nflush_every_ms = 240\n\n# Add separate RPCs as TOML tables\n# DO NOT name an rpc `blutgang`, `admin`, or `sled`\n\n\n# RPC Node Endpoints\n{{ range $elClient := .ELClientInfo }}\n[{{ $elClient.FullName }}]\nurl = \"http://{{ $elClient.IP_Addr }}:{{ $elClient.RPC_PortNum }}\"\nws_url = \"ws://{{ $elClient.IP_Addr }}:{{ $elClient.WS_PortNum }}\"\nmax_consecutive = 150\nmax_per_second = 200\n{{- end }}\n"
  },
  {
    "path": "static_files/checkpointz-config/config.yaml.tmpl",
    "content": "global:\n  listenAddr: \":5555\"\n  logging: \"info\"\n  metricsAddr: \":9090\"\n\ncheckpointz:\n  mode: \"full\"\n  custom_preset: true\n  caches:\n    blocks:\n      max_items: 200\n    states:\n      max_items: 5\n  historical_epoch_count: 20\n  frontend:\n    enabled: true\n    brand_name: \"Checkpointz - {{ .Network }}\"\n    public_url: \"http://localhost:5555\"\n\nbeacon:\n  upstreams:\n{{ range $clClient := .CLClientInfo }}\n  - name: \"{{ $clClient.FullName }}\"\n    address: \"{{ $clClient.Beacon_HTTP_URL }}\"\n    dataProvider: true\n{{- end }}\n"
  },
  {
    "path": "static_files/dora-config/config.yaml.tmpl",
    "content": "\nlogging:\n  outputLevel: \"info\"\n\n# Chain network configuration\nchain:\n  displayName: \"{{ .Network }}\"\n\n# HTTP Server configuration\nserver:\n  host: \"0.0.0.0\" # Address to listen on\n  port: \"8080\" # Port to listen on\n\nfrontend:\n  enabled: true # Enable or disable to web frontend\n  debug: false\n  pprof: true\n  minimize: false # minimize html templates\n  disablePageCache: true\n\n  # Name of the site, displayed in the title tag\n  siteName: \"Dora the Explorer\"\n  siteSubtitle: \"{{ .Network }} - Kurtosis\"\n\n  # link to EL Explorer\n  ethExplorerLink: \"\"\n\n  # file or inventory url to load validator names from\n{{- if .IsDevnet }}\n  validatorNamesInventory: \"https://config.{{ .Network }}.ethpandaops.io/api/v1/nodes/validator-ranges\"\n{{- else }}\n  validatorNamesYaml: \"/validator-ranges/validator-ranges.yaml\"\n{{- end }}\n\n  rainbowkitProjectId: \"15fe4ab4d5c0bcb6f0dc7c398301ff0e\"\n  showSubmitDeposit: true\n  showSubmitElRequests: true\n  showPeerDASInfos: true\n  showSensitivePeerInfos: true\n  disableDasGuardianCheck: false\n  enableDasGuardianMassScan: true\n  showValidatorSummary: true\n\napi:\n  enabled: true\n  corsOrigins:\n    - \"*\"\n\nrpcProxy:\n  enabled: true\n  upstreamUrl: \"{{ .PublicRPC }}\"\n\nbeaconapi:\n  # CL Client RPC\n  endpoints:\n{{ range $clClient := .CLClientInfo }}\n    - url: \"{{ $clClient.Beacon_HTTP_URL }}\"\n      name: \"{{ $clClient.FullName }}\"\n      archive: true\n{{- end }}\n  # local cache for page models\n  localCacheSize: 10 # 10MB\n\n  # remote cache for page models\n  redisCacheAddr: \"\"\n  redisCachePrefix: \"\"\n\nexecutionapi:\n  genesisConfig: \"/network-configs/genesis.json\"\n  endpoints:\n{{ range $elClient := .ELClientInfo }}\n    - url: \"{{ $elClient.Execution_HTTP_URL }}\"\n      engineSnooperUrl: \"{{ $elClient.Execution_Engine_Snooper_URL }}\"\n      name: \"{{ $elClient.FullName }}\"\n      archive: true\n{{- end }}\n  depositLogBatchSize: 1000\n\n# indexer keeps track of the latest epochs in memory.\nindexer:\n  # max number of epochs to keep in memory\n  inMemoryEpochs: 8\n\n  # disable synchronizing historic data\n  disableSynchronizer: false\n\n  # reset synchronization state to this epoch on startup - only use to resync database, comment out afterwards\n  #resyncFromEpoch: 0\n\n  # force re-synchronization of epochs that are already present in DB - only use to fix missing data after schema upgrades\n  #resyncForceUpdate: true\n\n  # number of seconds to pause the synchronization between each epoch (don't overload CL client)\n  syncEpochCooldown: 1\n\n  # maximum number of parallel beacon state requests (might cause high memory usage)\n  maxParallelValidatorSetRequests: 2\n\nmevIndexer:\n  # list of mev relays to crawl mev blocks from\n  relays: {{ if not .MEVRelayInfo }}[]{{ end }}\n{{ range $relay := .MEVRelayInfo }}\n    - index: {{ $relay.Index }}\n      name: \"{{ $relay.Name }}\"\n      url: \"{{ $relay.Url }}\"\n{{- end }}\n  refreshInterval: 5m\n\nexecutionIndexer:\n  enabled: true\n  retention: 168h # keep history for 1 week\n  detailsEnabled: true\n  tracesEnabled: true\n  detailsMaxSize: \"10GB\"\n\ndatabase:\n  engine: \"sqlite\"\n  sqlite:\n    file: \"/dora-database.sqlite\"\n\nblockDb:\n  engine: \"pebble\"\n  pebble:\n    path: \"/dora-blockdb.peb\"\n    cacheSize: 100\n"
  },
  {
    "path": "static_files/dugtrio-config/config.yaml.tmpl",
    "content": "logging:\n  outputLevel: \"debug\"\n  #outputStderr: false\n  #filePath: \"explorer.log\"\n  #fileLevel: \"warn\"\n\n# HTTP Server configuration\nserver:\n  # Address to listen on\n  host: \"0.0.0.0\"\n\n  # Port to listen on\n  port: \"8080\"\n\n# Beacon Node Endpoints\nendpoints:\n{{ range $clClient := .CLClientInfo }}\n  - url: \"{{ $clClient.Beacon_HTTP_URL }}\"\n    name: \"{{ $clClient.FullName }}\"\n{{- end }}\n\n# Pool configuration\npool:\n  schedulerMode: \"rr\"\n  followDistance: 10\n  maxHeadDistance: 2\n\n# Proxy configuration\nproxy:\n  # number of proxies in front of dugtrio\n  proxyCount: 0\n\n  # proxy call timeout\n  callTimeout: 60s\n\n  # proxy session timeout\n  sessionTimeout: 10m\n\n  # reuse the same endpoint when possible\n  stickyEndpoint: true\n\n  # call rate limit (calls per second)\n  callRateLimit: 100\n\n  # call rate burst limit\n  callRateBurst: 1000\n\n  # blocked api paths (regex patterns)\n  blockedPaths:\n    - ^/eth/v[0-9]+/debug/.*\n\n# Frontend configuration\nfrontend:\n  # Enable or disable to web frontend\n  enabled: true\n  minify: true\n  siteName: \"Dugtrio-Kurtosis\"\n"
  },
  {
    "path": "static_files/erpc-config/erpc.yaml.tmpl",
    "content": "logLevel: debug\n\nserver:\n  httpHostV4: 0.0.0.0\n  httpPortV4: {{ .HTTPPort }}\n  aliasing:\n    rules:\n      - matchDomain: \"*\"\n        serveProject: \"main\"\n        serveArchitecture: \"evm\"\n        serveChain: \"{{ .NetworkID }}\"\n\nmetrics:\n  enabled: true\n  hostV4: 0.0.0.0\n  port: {{ .MetricsPort }}\n\nhealthCheck:\n  mode: networks\n\ndatabase:\n  evmJsonRpcCache:\n    connectors:\n      - id: memory-cache\n        driver: memory\n    policies:\n      - network: \"*\"\n        method: \"*\"\n        finality: realtime\n        empty: allow\n        connector: memory-cache\n        ttl: 2s\n      - network: \"*\"\n        method: \"*\"\n        finality: unfinalized\n        empty: allow\n        connector: memory-cache\n        ttl: 10s\n      - network: \"*\"\n        method: \"*\"\n        finality: finalized\n        empty: allow\n        connector: memory-cache\n        ttl: 1h\n\nprojects:\n  - id: main\n    upstreams:\n      {{- range $elClient := .ELClientInfo }}\n      - id: {{ $elClient.FullName }}\n        type: evm\n        endpoint: http://{{ $elClient.IP_Addr }}:{{ $elClient.RPC_PortNum }}\n        evm:\n          chainId: {{ $.NetworkID }}\n      {{- end }}\n    networks:\n      - architecture: evm\n        evm:\n          chainId: {{ .NetworkID }}\n        failsafe:\n          timeout:\n            duration: 30s\n          retry:\n            maxAttempts: 3\n            delay: 500ms\n            backoffMaxDelay: 10s\n            backoffFactor: 1.2\n            jitter: 500ms\n          hedge:\n            delay: 3000ms\n            maxCount: 2\n"
  },
  {
    "path": "static_files/forkmon-config/config.toml.tmpl",
    "content": "# How often to reload data from the nodes\nreload_interval = \"10s\"\n# If specified, a http server will serve static content here\nserver_address = \"0.0.0.0:{{ .ListenPortNum }}\"\n# Shown in the document title, if specified\nchain_name=\"kurtosis-chain\"\n# Local or non third party connection require rpc kind\n{{ range $elClient := .ELClientInfo }}\n[[clients]]\n  url  = \"http://{{ $elClient.IPAddr }}:{{ $elClient.PortNum }}\"\n  name = \"{{ $elClient.Name }}\"\n  kind = \"rpc\"\n{{- end }}\n"
  },
  {
    "path": "static_files/forky-config/config.yaml.tmpl",
    "content": "listen_addr: \":8080\"\nlog_level: \"info\"\nmetrics:\n  enabled: false\n\nhttp:\n  edge_cache:\n    enabled: true\n    frame_ttl: 1440m\n\nforky:\n  retention_period: \"30m\"\n\n  store:\n    type: memory\n    config: {}\n\n  indexer:\n    dsn: \"file::memory:?cache=shared\"\n    driver_name: sqlite\n\n  sources:\n{{ range $clClient := .CLClientInfo }}\n    - name: \"{{ $clClient.FullName }}\"\n      type: \"beacon_node\"\n      config:\n        address: \"{{ $clClient.Beacon_HTTP_URL }}\"\n        polling_interval: \"{{ $.SecondsPerSlot }}s\"\n{{- end }}\n\n  ethereum:\n    network:\n      name: \"{{ .Network }}\"\n      spec:\n        seconds_per_slot: {{ .SecondsPerSlot }}\n        slots_per_epoch: {{ if eq .Preset \"minimal\" }}8{{ else }}32{{ end }}\n        genesis_time: {{ .FinalGenesisTimestamp }}\n"
  },
  {
    "path": "static_files/full-beaconchain-config/config.yaml.tmpl",
    "content": "chain:\n  clConfigPath: 'node'\n  elConfigPath: '/network-configs/genesis.json'\nreaderDatabase:\n  name: {{.DBName}}\n  host: {{.DBHost}}\n  port: {{.DBPort}}\n  user: {{.DBUser}}\n  password: {{.DBPass}}\nwriterDatabase:\n  name: {{.DBName}}\n  host: {{.DBHost}}\n  port: {{.DBPort}}\n  user: {{.DBUser}}\n  password: {{.DBPass}}\nbigtable:\n  project: explorer\n  instance: explorer\n  emulator: true\n  emulatorHost: {{.LBTHost}}\n  emulatorPort: {{.LBTPort}}\neth1ErigonEndpoint: '{{.ELNodeEndpoint}}'\neth1GethEndpoint: '{{.ELNodeEndpoint}}'\nredisCacheEndpoint: '{{.RedisEndpoint}}'\ntieredCacheProvider: 'redis'\nfrontend:\n  siteDomain: \"localhost:8080\"\n  siteName: 'Open Source Ethereum (ETH) Testnet Explorer' # Name of the site, displayed in the title tag\n  siteSubtitle: \"Showing a local testnet.\"\n  server:\n    host: '0.0.0.0' # Address to listen on\n    port: '{{.FrontendPort}}' # Port to listen on\n  readerDatabase:\n    name: {{.DBName}}\n    host: {{.DBHost}}\n    port: {{.DBPort}}\n    user: {{.DBUser}}\n    password: {{.DBPass}}\n  writerDatabase:\n    name: {{.DBName}}\n    host: {{.DBHost}}\n    port: {{.DBPort}}\n    user: {{.DBUser}}\n    password: {{.DBPass}}\n  sessionSecret: \"11111111111111111111111111111111\"\n  jwtSigningSecret: \"1111111111111111111111111111111111111111111111111111111111111111\"\n  jwtIssuer: \"localhost\"\n  jwtValidityInMinutes: 30\n  maxMailsPerEmailPerDay: 10\n  mail:\n    mailgun:\n      sender: no-reply@localhost\n      domain: mg.localhost\n      privateKey: \"key-11111111111111111111111111111111\"\n  csrfAuthKey: '1111111111111111111111111111111111111111111111111111111111111111'\nindexer:\n  # fullIndexOnStartup: false # Perform a one time full db index on startup\n  # indexMissingEpochsOnStartup: true # Check for missing epochs and export them after startup\n  node:\n    host: '{{.CLNodeHost}}'\n    port: '{{.CLNodePort}}'\n    type: '{{.CLNodeType}}'\n  eth1DepositContractFirstBlock: 0\n"
  },
  {
    "path": "static_files/genesis-generation-config/el-cl/additional-contracts.json.tmpl",
    "content": "{{ .AdditionalPreloadedContracts }}"
  },
  {
    "path": "static_files/genesis-generation-config/el-cl/values.env.tmpl",
    "content": "export PRESET_BASE=\"{{ .Preset }}\"\nexport CHAIN_ID=\"{{ .NetworkId }}\"\nexport DEPOSIT_CONTRACT_ADDRESS=\"{{ .DepositContractAddress }}\"\nexport EL_AND_CL_MNEMONIC=\"{{ .PreregisteredValidatorKeysMnemonic }}\"\nexport CL_EXEC_BLOCK=\"0\"\nexport SLOT_DURATION_IN_SECONDS={{ .SecondsPerSlot }}\nexport SLOT_DURATION_MS={{ .SlotDurationMs }}\nexport DEPOSIT_CONTRACT_BLOCK=\"0x0000000000000000000000000000000000000000000000000000000000000000\"\nexport NUMBER_OF_VALIDATORS={{ .NumValidatorKeysToPreregister }}\nexport GENESIS_FORK_VERSION=\"{{ .GenesisForkVersion }}\"\nexport ALTAIR_FORK_VERSION=\"{{ .AltairForkVersion }}\"\nexport ALTAIR_FORK_EPOCH=\"{{ .AltairForkEpoch }}\"\nexport BELLATRIX_FORK_VERSION=\"{{ .BellatrixForkVersion }}\"\nexport BELLATRIX_FORK_EPOCH=\"{{ .BellatrixForkEpoch }}\"\nexport CAPELLA_FORK_VERSION=\"{{ .CapellaForkVersion }}\"\nexport CAPELLA_FORK_EPOCH=\"{{ .CapellaForkEpoch }}\"\nexport DENEB_FORK_VERSION=\"{{ .DenebForkVersion }}\"\nexport DENEB_FORK_EPOCH=\"{{ .DenebForkEpoch }}\"\nexport ELECTRA_FORK_VERSION=\"{{ .ElectraForkVersion }}\"\nexport ELECTRA_FORK_EPOCH=\"{{ .ElectraForkEpoch }}\"\nexport FULU_FORK_VERSION=\"{{ .FuluForkVersion }}\"\nexport FULU_FORK_EPOCH=\"{{ .FuluForkEpoch }}\"\nexport GLOAS_FORK_VERSION=\"{{ .GloasForkVersion }}\"\nexport GLOAS_FORK_EPOCH=\"{{ .GloasForkEpoch }}\"\nexport HEZE_FORK_VERSION=\"{{ .HezeForkVersion }}\"\nexport HEZE_FORK_EPOCH=\"{{ .HezeForkEpoch }}\"\nexport WITHDRAWAL_TYPE=\"{{ .WithdrawalType }}\"\nexport WITHDRAWAL_ADDRESS=\"{{ .WithdrawalAddress }}\"\nexport VALIDATOR_BALANCE=\"{{ .ValidatorBalance }}\"\nexport GENESIS_TIMESTAMP={{ .UnixTimestamp }}\nexport GENESIS_DELAY={{ .GenesisDelay }}\nexport GENESIS_GASLIMIT={{ .GenesisGasLimit }}\nexport MAX_PER_EPOCH_ACTIVATION_CHURN_LIMIT={{ .MaxPerEpochActivationChurnLimit }}\nexport CHURN_LIMIT_QUOTIENT={{ .ChurnLimitQuotient }}\nexport CONFIRMATION_BYZANTINE_THRESHOLD={{ .ConfirmationByzantineThreshold }}\nexport EJECTION_BALANCE={{ .EjectionBalance }}\nexport ETH1_FOLLOW_DISTANCE={{ .Eth1FollowDistance }}\nexport SHADOW_FORK_FILE={{ .ShadowForkFile }}\nexport MIN_VALIDATOR_WITHDRAWABILITY_DELAY={{ .MinValidatorWithdrawabilityDelay }}\nexport MIN_BUILDER_WITHDRAWABILITY_DELAY={{ .MinBuilderWithdrawabilityDelay }}\nexport SHARD_COMMITTEE_PERIOD={{ .ShardCommitteePeriod }}\nexport ATTESTATION_DUE_BPS_GLOAS={{ .AttestationDueBpsGloas }}\nexport AGGREGATE_DUE_BPS_GLOAS={{ .AggregateDueBpsGloas }}\nexport SYNC_MESSAGE_DUE_BPS_GLOAS={{ .SyncMessageDueBpsGloas }}\nexport CONTRIBUTION_DUE_BPS_GLOAS={{ .ContributionDueBpsGloas }}\nexport PAYLOAD_ATTESTATION_DUE_BPS={{ .PayloadAttestationDueBps }}\nexport VIEW_FREEZE_CUTOFF_BPS={{ .ViewFreezeCutoffBps }}\nexport INCLUSION_LIST_SUBMISSION_DUE_BPS={{ .InclusionListSubmissionDueBps }}\nexport PROPOSER_INCLUSION_LIST_CUTOFF_BPS={{ .ProposerInclusionListCutoffBps }}\nexport SAMPLES_PER_SLOT={{ .SamplesPerSlot }}\nexport CUSTODY_REQUIREMENT={{ .CustodyRequirement }}\nexport MAX_BLOBS_PER_BLOCK_ELECTRA={{ .MaxBlobsPerBlockElectra }}\nexport TARGET_BLOBS_PER_BLOCK_ELECTRA={{ .TargetBlobsPerBlockElectra }}\nexport MAX_REQUEST_BLOCKS_DENEB={{ .MaxRequestBlocksDeneb }}\nexport BASEFEE_UPDATE_FRACTION_ELECTRA={{ .BaseFeeUpdateFractionElectra }}\nexport ADDITIONAL_PRELOADED_CONTRACTS={{ .AdditionalPreloadedContractsFile }}\nexport ADDITIONAL_VALIDATOR_MNEMONICS={{ .AdditionalValidatorMnemonics }}\nexport EL_PREMINE_ADDRS={{ .PrefundedAccounts }}\nexport MAX_PAYLOAD_SIZE={{ .MaxPayloadSize }}\nexport BPO_1_EPOCH=\"{{ .Bpo1Epoch }}\"\nexport BPO_1_MAX_BLOBS={{ .Bpo1MaxBlobs }}\nexport BPO_1_TARGET_BLOBS={{ .Bpo1TargetBlobs }}\nexport BPO_1_BASE_FEE_UPDATE_FRACTION={{ .Bpo1BaseFeeUpdateFraction }}\nexport BPO_2_EPOCH=\"{{ .Bpo2Epoch }}\"\nexport BPO_2_MAX_BLOBS={{ .Bpo2MaxBlobs }}\nexport BPO_2_TARGET_BLOBS={{ .Bpo2TargetBlobs }}\nexport BPO_2_BASE_FEE_UPDATE_FRACTION={{ .Bpo2BaseFeeUpdateFraction }}\nexport BPO_3_EPOCH=\"{{ .Bpo3Epoch }}\"\nexport BPO_3_MAX_BLOBS={{ .Bpo3MaxBlobs }}\nexport BPO_3_TARGET_BLOBS={{ .Bpo3TargetBlobs }}\nexport BPO_3_BASE_FEE_UPDATE_FRACTION={{ .Bpo3BaseFeeUpdateFraction }}\nexport BPO_4_EPOCH=\"{{ .Bpo4Epoch }}\"\nexport BPO_4_MAX_BLOBS={{ .Bpo4MaxBlobs }}\nexport BPO_4_TARGET_BLOBS={{ .Bpo4TargetBlobs }}\nexport BPO_4_BASE_FEE_UPDATE_FRACTION={{ .Bpo4BaseFeeUpdateFraction }}\nexport BPO_5_EPOCH=\"{{ .Bpo5Epoch }}\"\nexport BPO_5_MAX_BLOBS={{ .Bpo5MaxBlobs }}\nexport BPO_5_TARGET_BLOBS={{ .Bpo5TargetBlobs }}\nexport BPO_5_BASE_FEE_UPDATE_FRACTION={{ .Bpo5BaseFeeUpdateFraction }}\nexport MIN_EPOCHS_FOR_DATA_COLUMN_SIDECARS_REQUESTS={{ .MinEpochsForDataColumnSidecarsRequests }}\n{{ range $key, $value := .ExtraEnvVars }}\nexport {{ $key }}={{ $value }}\n{{ end }}"
  },
  {
    "path": "static_files/grafana-config/dashboards/beacon-metrics-dashboard.json",
    "content": "{\n  \"annotations\": {\n    \"list\": [\n      {\n        \"builtIn\": 1,\n        \"datasource\": {\n          \"type\": \"grafana\",\n          \"uid\": \"-- Grafana --\"\n        },\n        \"enable\": true,\n        \"hide\": true,\n        \"iconColor\": \"rgba(0, 211, 255, 1)\",\n        \"name\": \"Annotations & Alerts\",\n        \"target\": {\n          \"limit\": 100,\n          \"matchAny\": false,\n          \"tags\": [],\n          \"type\": \"dashboard\"\n        },\n        \"type\": \"dashboard\"\n      }\n    ]\n  },\n  \"description\": \"\",\n  \"editable\": true,\n  \"fiscalYearStartMonth\": 0,\n  \"graphTooltip\": 0,\n  \"id\": 3,\n  \"links\": [],\n  \"liveNow\": false,\n  \"panels\": [\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"custom\": {\n            \"hideFrom\": {\n              \"legend\": false,\n              \"tooltip\": false,\n              \"viz\": false\n            },\n            \"scaleDistribution\": {\n              \"type\": \"linear\"\n            }\n          }\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 18,\n        \"w\": 12,\n        \"x\": 0,\n        \"y\": 0\n      },\n      \"id\": 6,\n      \"options\": {\n        \"calculate\": false,\n        \"cellGap\": 1,\n        \"color\": {\n          \"exponent\": 0.5,\n          \"fill\": \"dark-orange\",\n          \"max\": 1,\n          \"min\": 0,\n          \"mode\": \"scheme\",\n          \"reverse\": true,\n          \"scale\": \"exponential\",\n          \"scheme\": \"RdYlGn\",\n          \"steps\": 20\n        },\n        \"exemplars\": {\n          \"color\": \"rgba(255,0,255,0.7)\"\n        },\n        \"filterValues\": {\n          \"le\": 1e-9\n        },\n        \"legend\": {\n          \"show\": true\n        },\n        \"rowsFrame\": {\n          \"layout\": \"auto\"\n        },\n        \"tooltip\": {\n          \"show\": true,\n          \"yHistogram\": false\n        },\n        \"yAxis\": {\n          \"axisPlacement\": \"left\",\n          \"reverse\": true\n        }\n      },\n      \"pluginVersion\": \"9.2.3\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"UhcO3vy7z\"\n          },\n          \"editorMode\": \"code\",\n          \"expr\": \"beacon_network_target_participation\",\n          \"legendFormat\": \"{{range}}\",\n          \"range\": true,\n          \"refId\": \"A\"\n        }\n      ],\n      \"title\": \"Target Participations Rates\",\n      \"type\": \"heatmap\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"custom\": {\n            \"hideFrom\": {\n              \"legend\": false,\n              \"tooltip\": false,\n              \"viz\": false\n            },\n            \"scaleDistribution\": {\n              \"type\": \"linear\"\n            }\n          }\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 18,\n        \"w\": 12,\n        \"x\": 12,\n        \"y\": 0\n      },\n      \"id\": 5,\n      \"options\": {\n        \"calculate\": false,\n        \"cellGap\": 1,\n        \"color\": {\n          \"exponent\": 0.5,\n          \"fill\": \"dark-orange\",\n          \"max\": 1,\n          \"min\": 0,\n          \"mode\": \"scheme\",\n          \"reverse\": true,\n          \"scale\": \"exponential\",\n          \"scheme\": \"RdYlGn\",\n          \"steps\": 20\n        },\n        \"exemplars\": {\n          \"color\": \"rgba(255,0,255,0.7)\"\n        },\n        \"filterValues\": {\n          \"le\": 1e-9\n        },\n        \"legend\": {\n          \"show\": true\n        },\n        \"rowsFrame\": {\n          \"layout\": \"auto\"\n        },\n        \"tooltip\": {\n          \"show\": true,\n          \"yHistogram\": false\n        },\n        \"yAxis\": {\n          \"axisPlacement\": \"left\",\n          \"reverse\": true\n        }\n      },\n      \"pluginVersion\": \"9.2.3\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"UhcO3vy7z\"\n          },\n          \"editorMode\": \"code\",\n          \"expr\": \"beacon_network_source_participation\",\n          \"legendFormat\": \"{{range}}\",\n          \"range\": true,\n          \"refId\": \"A\"\n        }\n      ],\n      \"title\": \"Source Participations Rates\",\n      \"type\": \"heatmap\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"custom\": {\n            \"hideFrom\": {\n              \"legend\": false,\n              \"tooltip\": false,\n              \"viz\": false\n            },\n            \"scaleDistribution\": {\n              \"type\": \"linear\"\n            }\n          }\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 15,\n        \"w\": 12,\n        \"x\": 0,\n        \"y\": 18\n      },\n      \"id\": 3,\n      \"options\": {\n        \"calculate\": false,\n        \"cellGap\": 1,\n        \"color\": {\n          \"exponent\": 0.5,\n          \"fill\": \"dark-orange\",\n          \"max\": 1,\n          \"min\": 0,\n          \"mode\": \"scheme\",\n          \"reverse\": true,\n          \"scale\": \"exponential\",\n          \"scheme\": \"RdYlGn\",\n          \"steps\": 20\n        },\n        \"exemplars\": {\n          \"color\": \"yellow\"\n        },\n        \"filterValues\": {\n          \"le\": 1e-9\n        },\n        \"legend\": {\n          \"show\": true\n        },\n        \"rowsFrame\": {\n          \"layout\": \"auto\"\n        },\n        \"tooltip\": {\n          \"show\": true,\n          \"yHistogram\": false\n        },\n        \"yAxis\": {\n          \"axisPlacement\": \"left\",\n          \"reverse\": true\n        }\n      },\n      \"pluginVersion\": \"9.2.3\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"UhcO3vy7z\"\n          },\n          \"editorMode\": \"code\",\n          \"expr\": \"beacon_network_head_participation\",\n          \"legendFormat\": \"{{range}}\",\n          \"range\": true,\n          \"refId\": \"A\"\n        }\n      ],\n      \"title\": \"Head Participations Rates\",\n      \"type\": \"heatmap\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"custom\": {\n            \"hideFrom\": {\n              \"legend\": false,\n              \"tooltip\": false,\n              \"viz\": false\n            },\n            \"scaleDistribution\": {\n              \"type\": \"linear\"\n            }\n          }\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 15,\n        \"w\": 12,\n        \"x\": 12,\n        \"y\": 18\n      },\n      \"id\": 4,\n      \"options\": {\n        \"calculate\": false,\n        \"cellGap\": 1,\n        \"color\": {\n          \"exponent\": 0.5,\n          \"fill\": \"dark-orange\",\n          \"mode\": \"scheme\",\n          \"reverse\": true,\n          \"scale\": \"exponential\",\n          \"scheme\": \"RdYlGn\",\n          \"steps\": 20\n        },\n        \"exemplars\": {\n          \"color\": \"rgba(255,0,255,0.7)\"\n        },\n        \"filterValues\": {\n          \"le\": 1e-9\n        },\n        \"legend\": {\n          \"show\": true\n        },\n        \"rowsFrame\": {\n          \"layout\": \"auto\"\n        },\n        \"tooltip\": {\n          \"show\": true,\n          \"yHistogram\": false\n        },\n        \"yAxis\": {\n          \"axisPlacement\": \"left\",\n          \"reverse\": true\n        }\n      },\n      \"pluginVersion\": \"9.2.3\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"UhcO3vy7z\"\n          },\n          \"editorMode\": \"code\",\n          \"expr\": \"beacon_network_inactivity_scores\",\n          \"legendFormat\": \"{{range}}\",\n          \"range\": true,\n          \"refId\": \"A\"\n        }\n      ],\n      \"title\": \"Inactivity Scores\",\n      \"type\": \"heatmap\"\n    }\n  ],\n  \"refresh\": \"\",\n  \"revision\": 1,\n  \"schemaVersion\": 37,\n  \"style\": \"dark\",\n  \"tags\": [],\n  \"templating\": {\n    \"list\": []\n  },\n  \"time\": {\n    \"from\": \"now-6h\",\n    \"to\": \"now\"\n  },\n  \"timepicker\": {},\n  \"timezone\": \"\",\n  \"title\": \"Validator Participation Rates Dashboards\",\n  \"uid\": \"participation_rates_dashboards\",\n  \"version\": 1,\n  \"weekStart\": \"\"\n}\n"
  },
  {
    "path": "static_files/grafana-config/dashboards/besu-dashboard.json",
    "content": "{\n  \"__inputs\": [\n    {\n      \"name\": \"DS_PROMETHEUS\",\n      \"label\": \"Prometheus\",\n      \"description\": \"\",\n      \"type\": \"datasource\",\n      \"pluginId\": \"prometheus\",\n      \"pluginName\": \"Prometheus\"\n    }\n  ],\n  \"__elements\": {},\n  \"__requires\": [\n    {\n      \"type\": \"grafana\",\n      \"id\": \"grafana\",\n      \"name\": \"Grafana\",\n      \"version\": \"12.0.2\"\n    },\n    {\n      \"type\": \"datasource\",\n      \"id\": \"prometheus\",\n      \"name\": \"Prometheus\",\n      \"version\": \"1.0.0\"\n    },\n    {\n      \"type\": \"panel\",\n      \"id\": \"table\",\n      \"name\": \"Table\",\n      \"version\": \"\"\n    },\n    {\n      \"type\": \"panel\",\n      \"id\": \"text\",\n      \"name\": \"Text\",\n      \"version\": \"\"\n    },\n    {\n      \"type\": \"panel\",\n      \"id\": \"timeseries\",\n      \"name\": \"Time series\",\n      \"version\": \"\"\n    }\n  ],\n  \"annotations\": {\n    \"list\": [\n      {\n        \"$$hashKey\": \"object:10795\",\n        \"builtIn\": 1,\n        \"datasource\": {\n          \"type\": \"datasource\",\n          \"uid\": \"grafana\"\n        },\n        \"enable\": true,\n        \"hide\": true,\n        \"iconColor\": \"rgba(0, 211, 255, 1)\",\n        \"name\": \"Annotations & Alerts\",\n        \"target\": {\n          \"limit\": 100,\n          \"matchAny\": false,\n          \"tags\": [],\n          \"type\": \"dashboard\"\n        },\n        \"type\": \"dashboard\"\n      }\n    ]\n  },\n  \"description\": \"Provides detailed metrics of Besu nodes\",\n  \"editable\": true,\n  \"fiscalYearStartMonth\": 0,\n  \"graphTooltip\": 1,\n  \"id\": null,\n  \"links\": [],\n  \"panels\": [\n    {\n      \"collapsed\": true,\n      \"gridPos\": {\n        \"h\": 1,\n        \"w\": 24,\n        \"x\": 0,\n        \"y\": 0\n      },\n      \"id\": 465,\n      \"panels\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"fieldConfig\": {\n            \"defaults\": {\n              \"color\": {\n                \"mode\": \"thresholds\"\n              },\n              \"custom\": {\n                \"align\": \"auto\",\n                \"cellOptions\": {\n                  \"type\": \"auto\"\n                },\n                \"inspect\": false\n              },\n              \"decimals\": 2,\n              \"displayName\": \"\",\n              \"mappings\": [],\n              \"thresholds\": {\n                \"mode\": \"absolute\",\n                \"steps\": [\n                  {\n                    \"color\": \"green\"\n                  },\n                  {\n                    \"color\": \"red\",\n                    \"value\": 80\n                  }\n                ]\n              },\n              \"unit\": \"short\"\n            },\n            \"overrides\": [\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"job\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"unit\",\n                    \"value\": \"short\"\n                  },\n                  {\n                    \"id\": \"decimals\",\n                    \"value\": 2\n                  },\n                  {\n                    \"id\": \"custom.align\"\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"Value #A\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"displayName\",\n                    \"value\": \"Chain Height\"\n                  },\n                  {\n                    \"id\": \"unit\",\n                    \"value\": \"locale\"\n                  },\n                  {\n                    \"id\": \"decimals\",\n                    \"value\": 2\n                  },\n                  {\n                    \"id\": \"custom.align\"\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"Value #B\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"displayName\",\n                    \"value\": \"Pivot Block Number\"\n                  },\n                  {\n                    \"id\": \"unit\",\n                    \"value\": \"locale\"\n                  },\n                  {\n                    \"id\": \"decimals\",\n                    \"value\": 2\n                  },\n                  {\n                    \"id\": \"custom.align\"\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"Time\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"unit\",\n                    \"value\": \"short\"\n                  },\n                  {\n                    \"id\": \"decimals\",\n                    \"value\": 2\n                  },\n                  {\n                    \"id\": \"custom.align\"\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"__name__\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"unit\",\n                    \"value\": \"short\"\n                  },\n                  {\n                    \"id\": \"decimals\",\n                    \"value\": 2\n                  },\n                  {\n                    \"id\": \"custom.align\"\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"Value #C\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"displayName\",\n                    \"value\": \"Pending State Nodes\"\n                  },\n                  {\n                    \"id\": \"unit\",\n                    \"value\": \"locale\"\n                  },\n                  {\n                    \"id\": \"custom.align\"\n                  },\n                  {\n                    \"id\": \"thresholds\",\n                    \"value\": {\n                      \"mode\": \"absolute\",\n                      \"steps\": [\n                        {\n                          \"color\": \"rgba(245, 54, 54, 0.9)\"\n                        },\n                        {\n                          \"color\": \"rgba(237, 129, 40, 0.89)\"\n                        }\n                      ]\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"Value #D\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"displayName\",\n                    \"value\": \"Downloaded State Nodes\"\n                  },\n                  {\n                    \"id\": \"unit\",\n                    \"value\": \"locale\"\n                  },\n                  {\n                    \"id\": \"decimals\",\n                    \"value\": 2\n                  },\n                  {\n                    \"id\": \"custom.align\"\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"instance\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"displayName\",\n                    \"value\": \"System\"\n                  },\n                  {\n                    \"id\": \"unit\",\n                    \"value\": \"short\"\n                  },\n                  {\n                    \"id\": \"decimals\",\n                    \"value\": 2\n                  },\n                  {\n                    \"id\": \"custom.align\"\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"Value #E\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"displayName\",\n                    \"value\": \"Blocks To Download\"\n                  },\n                  {\n                    \"id\": \"unit\",\n                    \"value\": \"locale\"\n                  },\n                  {\n                    \"id\": \"custom.align\"\n                  },\n                  {\n                    \"id\": \"thresholds\",\n                    \"value\": {\n                      \"mode\": \"absolute\",\n                      \"steps\": [\n                        {\n                          \"color\": \"rgba(50, 172, 45, 0.97)\"\n                        },\n                        {\n                          \"color\": \"rgba(237, 129, 40, 0.89)\",\n                          \"value\": 0\n                        },\n                        {\n                          \"color\": \"rgba(245, 54, 54, 0.9)\",\n                          \"value\": 0\n                        }\n                      ]\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"Value #F\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"displayName\",\n                    \"value\": \"Target Chain Height\"\n                  },\n                  {\n                    \"id\": \"unit\",\n                    \"value\": \"locale\"\n                  },\n                  {\n                    \"id\": \"decimals\",\n                    \"value\": 2\n                  },\n                  {\n                    \"id\": \"custom.align\"\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"Value #G\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"displayName\",\n                    \"value\": \"Blocks Behind\"\n                  },\n                  {\n                    \"id\": \"unit\",\n                    \"value\": \"locale\"\n                  },\n                  {\n                    \"id\": \"decimals\",\n                    \"value\": 2\n                  },\n                  {\n                    \"id\": \"custom.cellOptions\",\n                    \"value\": {\n                      \"type\": \"color-text\"\n                    }\n                  },\n                  {\n                    \"id\": \"custom.align\"\n                  },\n                  {\n                    \"id\": \"thresholds\",\n                    \"value\": {\n                      \"mode\": \"absolute\",\n                      \"steps\": [\n                        {\n                          \"color\": \"rgba(50, 172, 45, 0.97)\"\n                        },\n                        {\n                          \"color\": \"rgba(237, 129, 40, 0.89)\",\n                          \"value\": 1\n                        },\n                        {\n                          \"color\": \"rgba(245, 54, 54, 0.9)\",\n                          \"value\": 10\n                        }\n                      ]\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"Value #H\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"displayName\",\n                    \"value\": \"% Peer Limit Used\"\n                  },\n                  {\n                    \"id\": \"unit\",\n                    \"value\": \"percentunit\"\n                  },\n                  {\n                    \"id\": \"custom.cellOptions\",\n                    \"value\": {\n                      \"type\": \"color-text\"\n                    }\n                  },\n                  {\n                    \"id\": \"custom.align\"\n                  },\n                  {\n                    \"id\": \"thresholds\",\n                    \"value\": {\n                      \"mode\": \"absolute\",\n                      \"steps\": [\n                        {\n                          \"color\": \"rgba(245, 54, 54, 0.9)\"\n                        },\n                        {\n                          \"color\": \"rgba(237, 129, 40, 0.89)\",\n                          \"value\": 0\n                        },\n                        {\n                          \"color\": \"rgba(50, 172, 45, 0.97)\",\n                          \"value\": 0\n                        }\n                      ]\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"Value #I\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"displayName\",\n                    \"value\": \"Pending State Nodes\"\n                  },\n                  {\n                    \"id\": \"unit\",\n                    \"value\": \"locale\"\n                  },\n                  {\n                    \"id\": \"custom.align\"\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"Value #J\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"displayName\",\n                    \"value\": \"Downloaded State Nodes\"\n                  },\n                  {\n                    \"id\": \"unit\",\n                    \"value\": \"locale\"\n                  },\n                  {\n                    \"id\": \"custom.align\"\n                  }\n                ]\n              }\n            ]\n          },\n          \"gridPos\": {\n            \"h\": 9,\n            \"w\": 24,\n            \"x\": 0,\n            \"y\": 2093\n          },\n          \"id\": 102,\n          \"options\": {\n            \"cellHeight\": \"sm\",\n            \"footer\": {\n              \"countRows\": false,\n              \"fields\": \"\",\n              \"reducer\": [\n                \"sum\"\n              ],\n              \"show\": false\n            },\n            \"showHeader\": true\n          },\n          \"pluginVersion\": \"10.4.1\",\n          \"targets\": [\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"PBFA97CFB590B2093\"\n              },\n              \"exemplar\": false,\n              \"expr\": \"sum by (instance) ((besu_blockchain_height{instance=~\\\"$system\\\"} or ethereum_blockchain_height{instance=~\\\"$system\\\"}) and besu_synchronizer_snap_world_state_pending_account_requests_current{instance=~\\\"$system\\\"}  ) >0\",\n              \"format\": \"table\",\n              \"hide\": false,\n              \"instant\": true,\n              \"interval\": \"\",\n              \"intervalFactor\": 1,\n              \"legendFormat\": \"Chain Height\",\n              \"refId\": \"A\"\n            },\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"PBFA97CFB590B2093\"\n              },\n              \"exemplar\": false,\n              \"expr\": \"besu_synchronizer_fast_sync_pivot_block_current{instance=~\\\"$system\\\"} and besu_synchronizer_snap_world_state_pending_account_requests_current{instance=~\\\"$system\\\"}  >0 \",\n              \"format\": \"table\",\n              \"instant\": true,\n              \"interval\": \"\",\n              \"intervalFactor\": 1,\n              \"legendFormat\": \"\",\n              \"refId\": \"B\"\n            },\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"PBFA97CFB590B2093\"\n              },\n              \"exemplar\": false,\n              \"expr\": \"sum by (instance) (besu_synchronizer_fast_sync_pivot_block_current{instance=~\\\"$system\\\"} - (besu_blockchain_height{instance=~\\\"$system\\\"} or ethereum_blockchain_height{instance=~\\\"$system\\\"}) and besu_synchronizer_snap_world_state_pending_account_requests_current{instance=~\\\"$system\\\"}  ) >0 \",\n              \"format\": \"table\",\n              \"instant\": true,\n              \"interval\": \"\",\n              \"intervalFactor\": 1,\n              \"legendFormat\": \"\",\n              \"refId\": \"E\"\n            },\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"PBFA97CFB590B2093\"\n              },\n              \"exemplar\": false,\n              \"expr\": \"sum by (instance) (besu_synchronizer_snap_world_state_generated_nodes_total{instance=~\\\"$system\\\"} and besu_synchronizer_snap_world_state_healed_nodes_total{instance=~\\\"$system\\\"} ) >0 \",\n              \"format\": \"table\",\n              \"instant\": true,\n              \"interval\": \"\",\n              \"intervalFactor\": 1,\n              \"legendFormat\": \"\",\n              \"refId\": \"D\"\n            }\n          ],\n          \"title\": \"Snap Sync Progress\",\n          \"transformations\": [\n            {\n              \"id\": \"merge\",\n              \"options\": {\n                \"reducers\": []\n              }\n            }\n          ],\n          \"type\": \"table\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"description\": \"Total number of data nodes generated and healed as part of snap sync world state download\",\n          \"fieldConfig\": {\n            \"defaults\": {\n              \"color\": {\n                \"mode\": \"palette-classic\"\n              },\n              \"custom\": {\n                \"axisBorderShow\": false,\n                \"axisCenteredZero\": false,\n                \"axisColorMode\": \"text\",\n                \"axisLabel\": \"\",\n                \"axisPlacement\": \"auto\",\n                \"barAlignment\": 0,\n                \"drawStyle\": \"line\",\n                \"fillOpacity\": 10,\n                \"gradientMode\": \"none\",\n                \"hideFrom\": {\n                  \"legend\": false,\n                  \"tooltip\": false,\n                  \"viz\": false\n                },\n                \"insertNulls\": false,\n                \"lineInterpolation\": \"linear\",\n                \"lineWidth\": 1,\n                \"pointSize\": 5,\n                \"scaleDistribution\": {\n                  \"type\": \"linear\"\n                },\n                \"showPoints\": \"never\",\n                \"spanNulls\": true,\n                \"stacking\": {\n                  \"group\": \"A\",\n                  \"mode\": \"none\"\n                },\n                \"thresholdsStyle\": {\n                  \"mode\": \"off\"\n                }\n              },\n              \"links\": [],\n              \"mappings\": [],\n              \"thresholds\": {\n                \"mode\": \"absolute\",\n                \"steps\": [\n                  {\n                    \"color\": \"green\"\n                  },\n                  {\n                    \"color\": \"red\",\n                    \"value\": 80\n                  }\n                ]\n              },\n              \"unit\": \"short\"\n            },\n            \"overrides\": []\n          },\n          \"gridPos\": {\n            \"h\": 8,\n            \"w\": 12,\n            \"x\": 0,\n            \"y\": 2102\n          },\n          \"id\": 104,\n          \"options\": {\n            \"legend\": {\n              \"calcs\": [],\n              \"displayMode\": \"list\",\n              \"placement\": \"bottom\",\n              \"showLegend\": true\n            },\n            \"tooltip\": {\n              \"mode\": \"multi\",\n              \"sort\": \"none\"\n            }\n          },\n          \"pluginVersion\": \"9.3.1\",\n          \"targets\": [\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"PBFA97CFB590B2093\"\n              },\n              \"exemplar\": true,\n              \"expr\": \"besu_synchronizer_snap_world_state_generated_nodes_total{instance=~\\\"$system\\\"}\",\n              \"instant\": false,\n              \"interval\": \"\",\n              \"legendFormat\": \"{{instance}}-generated-nodes\",\n              \"refId\": \"A\"\n            },\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"PBFA97CFB590B2093\"\n              },\n              \"exemplar\": true,\n              \"expr\": \"besu_synchronizer_snap_world_state_healed_nodes_total{instance=~\\\"$system\\\"}\",\n              \"hide\": false,\n              \"instant\": false,\n              \"interval\": \"\",\n              \"intervalFactor\": 1,\n              \"legendFormat\": \"{{instance}}-healed-nodes\",\n              \"refId\": \"B\"\n            }\n          ],\n          \"title\": \"Nodes retrieved \",\n          \"type\": \"timeseries\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"description\": \"\",\n          \"fieldConfig\": {\n            \"defaults\": {\n              \"color\": {\n                \"mode\": \"palette-classic\"\n              },\n              \"custom\": {\n                \"axisBorderShow\": false,\n                \"axisCenteredZero\": false,\n                \"axisColorMode\": \"text\",\n                \"axisLabel\": \"\",\n                \"axisPlacement\": \"auto\",\n                \"barAlignment\": 0,\n                \"drawStyle\": \"line\",\n                \"fillOpacity\": 10,\n                \"gradientMode\": \"none\",\n                \"hideFrom\": {\n                  \"legend\": false,\n                  \"tooltip\": false,\n                  \"viz\": false\n                },\n                \"insertNulls\": false,\n                \"lineInterpolation\": \"linear\",\n                \"lineWidth\": 1,\n                \"pointSize\": 5,\n                \"scaleDistribution\": {\n                  \"type\": \"linear\"\n                },\n                \"showPoints\": \"never\",\n                \"spanNulls\": true,\n                \"stacking\": {\n                  \"group\": \"A\",\n                  \"mode\": \"none\"\n                },\n                \"thresholdsStyle\": {\n                  \"mode\": \"off\"\n                }\n              },\n              \"links\": [],\n              \"mappings\": [],\n              \"thresholds\": {\n                \"mode\": \"absolute\",\n                \"steps\": [\n                  {\n                    \"color\": \"green\"\n                  },\n                  {\n                    \"color\": \"red\",\n                    \"value\": 80\n                  }\n                ]\n              },\n              \"unit\": \"short\"\n            },\n            \"overrides\": []\n          },\n          \"gridPos\": {\n            \"h\": 8,\n            \"w\": 12,\n            \"x\": 12,\n            \"y\": 2102\n          },\n          \"id\": 106,\n          \"options\": {\n            \"legend\": {\n              \"calcs\": [],\n              \"displayMode\": \"list\",\n              \"placement\": \"bottom\",\n              \"showLegend\": true\n            },\n            \"tooltip\": {\n              \"mode\": \"multi\",\n              \"sort\": \"none\"\n            }\n          },\n          \"pluginVersion\": \"9.3.1\",\n          \"targets\": [\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"PBFA97CFB590B2093\"\n              },\n              \"exemplar\": true,\n              \"expr\": \"besu_synchronizer_snap_world_state_accounts_total{instance=~\\\"$system\\\"}\",\n              \"interval\": \"\",\n              \"legendFormat\": \"{{instance}}-accounts\",\n              \"refId\": \"A\"\n            },\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"PBFA97CFB590B2093\"\n              },\n              \"exemplar\": true,\n              \"expr\": \"besu_synchronizer_snap_world_state_slots_total{instance=~\\\"$system\\\"}\",\n              \"hide\": false,\n              \"interval\": \"\",\n              \"legendFormat\": \"{{instance}}-slots\",\n              \"refId\": \"B\"\n            },\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"PBFA97CFB590B2093\"\n              },\n              \"exemplar\": true,\n              \"expr\": \"besu_synchronizer_snap_world_state_codes_total{instance=~\\\"$system\\\"}\",\n              \"hide\": false,\n              \"interval\": \"\",\n              \"legendFormat\": \"{{instance}}-codes\",\n              \"refId\": \"C\"\n            }\n          ],\n          \"title\": \"Downloaded data\",\n          \"type\": \"timeseries\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"description\": \"Number of storage pending requests for snap sync world state download\",\n          \"fieldConfig\": {\n            \"defaults\": {\n              \"color\": {\n                \"mode\": \"palette-classic\"\n              },\n              \"custom\": {\n                \"axisBorderShow\": false,\n                \"axisCenteredZero\": false,\n                \"axisColorMode\": \"text\",\n                \"axisLabel\": \"\",\n                \"axisPlacement\": \"auto\",\n                \"barAlignment\": 0,\n                \"drawStyle\": \"line\",\n                \"fillOpacity\": 10,\n                \"gradientMode\": \"none\",\n                \"hideFrom\": {\n                  \"legend\": false,\n                  \"tooltip\": false,\n                  \"viz\": false\n                },\n                \"insertNulls\": false,\n                \"lineInterpolation\": \"linear\",\n                \"lineWidth\": 1,\n                \"pointSize\": 5,\n                \"scaleDistribution\": {\n                  \"type\": \"linear\"\n                },\n                \"showPoints\": \"never\",\n                \"spanNulls\": true,\n                \"stacking\": {\n                  \"group\": \"A\",\n                  \"mode\": \"none\"\n                },\n                \"thresholdsStyle\": {\n                  \"mode\": \"off\"\n                }\n              },\n              \"links\": [],\n              \"mappings\": [],\n              \"thresholds\": {\n                \"mode\": \"absolute\",\n                \"steps\": [\n                  {\n                    \"color\": \"green\"\n                  },\n                  {\n                    \"color\": \"red\",\n                    \"value\": 80\n                  }\n                ]\n              },\n              \"unit\": \"short\"\n            },\n            \"overrides\": []\n          },\n          \"gridPos\": {\n            \"h\": 8,\n            \"w\": 12,\n            \"x\": 0,\n            \"y\": 3518\n          },\n          \"id\": 112,\n          \"options\": {\n            \"legend\": {\n              \"calcs\": [],\n              \"displayMode\": \"list\",\n              \"placement\": \"bottom\",\n              \"showLegend\": true\n            },\n            \"tooltip\": {\n              \"mode\": \"multi\",\n              \"sort\": \"none\"\n            }\n          },\n          \"pluginVersion\": \"9.3.1\",\n          \"targets\": [\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"PBFA97CFB590B2093\"\n              },\n              \"exemplar\": true,\n              \"expr\": \"besu_synchronizer_snap_world_state_pending_storage_requests_current{instance=~\\\"$system\\\"}\",\n              \"interval\": \"\",\n              \"legendFormat\": \"{{instance}}\",\n              \"refId\": \"A\"\n            }\n          ],\n          \"title\": \"Storage pending requests\",\n          \"type\": \"timeseries\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"description\": \"Number of account pending requests for snap sync world state download\",\n          \"fieldConfig\": {\n            \"defaults\": {\n              \"color\": {\n                \"mode\": \"palette-classic\"\n              },\n              \"custom\": {\n                \"axisBorderShow\": false,\n                \"axisCenteredZero\": false,\n                \"axisColorMode\": \"text\",\n                \"axisLabel\": \"\",\n                \"axisPlacement\": \"auto\",\n                \"barAlignment\": 0,\n                \"drawStyle\": \"line\",\n                \"fillOpacity\": 10,\n                \"gradientMode\": \"none\",\n                \"hideFrom\": {\n                  \"legend\": false,\n                  \"tooltip\": false,\n                  \"viz\": false\n                },\n                \"insertNulls\": false,\n                \"lineInterpolation\": \"linear\",\n                \"lineWidth\": 1,\n                \"pointSize\": 5,\n                \"scaleDistribution\": {\n                  \"type\": \"linear\"\n                },\n                \"showPoints\": \"never\",\n                \"spanNulls\": true,\n                \"stacking\": {\n                  \"group\": \"A\",\n                  \"mode\": \"none\"\n                },\n                \"thresholdsStyle\": {\n                  \"mode\": \"off\"\n                }\n              },\n              \"links\": [],\n              \"mappings\": [],\n              \"thresholds\": {\n                \"mode\": \"absolute\",\n                \"steps\": [\n                  {\n                    \"color\": \"green\"\n                  },\n                  {\n                    \"color\": \"red\",\n                    \"value\": 80\n                  }\n                ]\n              },\n              \"unit\": \"short\"\n            },\n            \"overrides\": []\n          },\n          \"gridPos\": {\n            \"h\": 8,\n            \"w\": 12,\n            \"x\": 12,\n            \"y\": 3518\n          },\n          \"id\": 110,\n          \"options\": {\n            \"legend\": {\n              \"calcs\": [],\n              \"displayMode\": \"list\",\n              \"placement\": \"bottom\",\n              \"showLegend\": true\n            },\n            \"tooltip\": {\n              \"mode\": \"multi\",\n              \"sort\": \"none\"\n            }\n          },\n          \"pluginVersion\": \"9.3.1\",\n          \"targets\": [\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"PBFA97CFB590B2093\"\n              },\n              \"exemplar\": true,\n              \"expr\": \"besu_synchronizer_snap_world_state_pending_account_requests_current{instance=~\\\"$system\\\"}\",\n              \"interval\": \"\",\n              \"legendFormat\": \"{{instance}}\",\n              \"refId\": \"A\"\n            }\n          ],\n          \"title\": \"Account pending requests\",\n          \"type\": \"timeseries\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"description\": \"Number of trie node pending requests for snap sync world state download\",\n          \"fieldConfig\": {\n            \"defaults\": {\n              \"color\": {\n                \"mode\": \"palette-classic\"\n              },\n              \"custom\": {\n                \"axisBorderShow\": false,\n                \"axisCenteredZero\": false,\n                \"axisColorMode\": \"text\",\n                \"axisLabel\": \"\",\n                \"axisPlacement\": \"auto\",\n                \"barAlignment\": 0,\n                \"drawStyle\": \"line\",\n                \"fillOpacity\": 10,\n                \"gradientMode\": \"none\",\n                \"hideFrom\": {\n                  \"legend\": false,\n                  \"tooltip\": false,\n                  \"viz\": false\n                },\n                \"insertNulls\": false,\n                \"lineInterpolation\": \"linear\",\n                \"lineWidth\": 1,\n                \"pointSize\": 5,\n                \"scaleDistribution\": {\n                  \"type\": \"linear\"\n                },\n                \"showPoints\": \"never\",\n                \"spanNulls\": true,\n                \"stacking\": {\n                  \"group\": \"A\",\n                  \"mode\": \"none\"\n                },\n                \"thresholdsStyle\": {\n                  \"mode\": \"off\"\n                }\n              },\n              \"links\": [],\n              \"mappings\": [],\n              \"thresholds\": {\n                \"mode\": \"absolute\",\n                \"steps\": [\n                  {\n                    \"color\": \"green\"\n                  },\n                  {\n                    \"color\": \"red\",\n                    \"value\": 80\n                  }\n                ]\n              },\n              \"unit\": \"short\"\n            },\n            \"overrides\": []\n          },\n          \"gridPos\": {\n            \"h\": 8,\n            \"w\": 12,\n            \"x\": 0,\n            \"y\": 3526\n          },\n          \"id\": 116,\n          \"options\": {\n            \"legend\": {\n              \"calcs\": [],\n              \"displayMode\": \"list\",\n              \"placement\": \"bottom\",\n              \"showLegend\": true\n            },\n            \"tooltip\": {\n              \"mode\": \"multi\",\n              \"sort\": \"none\"\n            }\n          },\n          \"pluginVersion\": \"9.3.1\",\n          \"targets\": [\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"PBFA97CFB590B2093\"\n              },\n              \"exemplar\": true,\n              \"expr\": \"besu_synchronizer_snap_world_state_pending_trie_node_requests_current{instance=~\\\"$system\\\"}\",\n              \"interval\": \"\",\n              \"legendFormat\": \"{{instance}}\",\n              \"refId\": \"A\"\n            }\n          ],\n          \"title\": \"Trie node pending requests\",\n          \"type\": \"timeseries\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"description\": \"Number of code pending requests for snap sync world state download\",\n          \"fieldConfig\": {\n            \"defaults\": {\n              \"color\": {\n                \"mode\": \"palette-classic\"\n              },\n              \"custom\": {\n                \"axisBorderShow\": false,\n                \"axisCenteredZero\": false,\n                \"axisColorMode\": \"text\",\n                \"axisLabel\": \"\",\n                \"axisPlacement\": \"auto\",\n                \"barAlignment\": 0,\n                \"drawStyle\": \"line\",\n                \"fillOpacity\": 10,\n                \"gradientMode\": \"none\",\n                \"hideFrom\": {\n                  \"legend\": false,\n                  \"tooltip\": false,\n                  \"viz\": false\n                },\n                \"insertNulls\": false,\n                \"lineInterpolation\": \"linear\",\n                \"lineWidth\": 1,\n                \"pointSize\": 5,\n                \"scaleDistribution\": {\n                  \"type\": \"linear\"\n                },\n                \"showPoints\": \"never\",\n                \"spanNulls\": true,\n                \"stacking\": {\n                  \"group\": \"A\",\n                  \"mode\": \"none\"\n                },\n                \"thresholdsStyle\": {\n                  \"mode\": \"off\"\n                }\n              },\n              \"links\": [],\n              \"mappings\": [],\n              \"thresholds\": {\n                \"mode\": \"absolute\",\n                \"steps\": [\n                  {\n                    \"color\": \"green\"\n                  },\n                  {\n                    \"color\": \"red\",\n                    \"value\": 80\n                  }\n                ]\n              },\n              \"unit\": \"short\"\n            },\n            \"overrides\": []\n          },\n          \"gridPos\": {\n            \"h\": 8,\n            \"w\": 12,\n            \"x\": 12,\n            \"y\": 3526\n          },\n          \"id\": 114,\n          \"options\": {\n            \"legend\": {\n              \"calcs\": [],\n              \"displayMode\": \"list\",\n              \"placement\": \"bottom\",\n              \"showLegend\": true\n            },\n            \"tooltip\": {\n              \"mode\": \"multi\",\n              \"sort\": \"none\"\n            }\n          },\n          \"pluginVersion\": \"9.3.1\",\n          \"targets\": [\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"PBFA97CFB590B2093\"\n              },\n              \"exemplar\": true,\n              \"expr\": \"besu_synchronizer_snap_world_state_pending_code_requests_current{instance=~\\\"$system\\\"}\",\n              \"interval\": \"\",\n              \"legendFormat\": \"{{instance}}\",\n              \"refId\": \"A\"\n            }\n          ],\n          \"title\": \"Code pending requests\",\n          \"type\": \"timeseries\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"description\": \"Number of entries processed by each world state download pipeline stage\",\n          \"fieldConfig\": {\n            \"defaults\": {\n              \"color\": {\n                \"mode\": \"palette-classic\"\n              },\n              \"custom\": {\n                \"axisBorderShow\": false,\n                \"axisCenteredZero\": false,\n                \"axisColorMode\": \"text\",\n                \"axisLabel\": \"\",\n                \"axisPlacement\": \"auto\",\n                \"barAlignment\": 0,\n                \"drawStyle\": \"line\",\n                \"fillOpacity\": 10,\n                \"gradientMode\": \"none\",\n                \"hideFrom\": {\n                  \"legend\": false,\n                  \"tooltip\": false,\n                  \"viz\": false\n                },\n                \"insertNulls\": false,\n                \"lineInterpolation\": \"linear\",\n                \"lineWidth\": 1,\n                \"pointSize\": 5,\n                \"scaleDistribution\": {\n                  \"type\": \"linear\"\n                },\n                \"showPoints\": \"never\",\n                \"spanNulls\": true,\n                \"stacking\": {\n                  \"group\": \"A\",\n                  \"mode\": \"none\"\n                },\n                \"thresholdsStyle\": {\n                  \"mode\": \"off\"\n                }\n              },\n              \"links\": [],\n              \"mappings\": [],\n              \"thresholds\": {\n                \"mode\": \"absolute\",\n                \"steps\": [\n                  {\n                    \"color\": \"green\"\n                  },\n                  {\n                    \"color\": \"red\",\n                    \"value\": 80\n                  }\n                ]\n              },\n              \"unit\": \"short\"\n            },\n            \"overrides\": []\n          },\n          \"gridPos\": {\n            \"h\": 8,\n            \"w\": 12,\n            \"x\": 0,\n            \"y\": 3534\n          },\n          \"id\": 120,\n          \"options\": {\n            \"legend\": {\n              \"calcs\": [],\n              \"displayMode\": \"list\",\n              \"placement\": \"bottom\",\n              \"showLegend\": true\n            },\n            \"tooltip\": {\n              \"mode\": \"multi\",\n              \"sort\": \"none\"\n            }\n          },\n          \"pluginVersion\": \"9.3.1\",\n          \"targets\": [\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"PBFA97CFB590B2093\"\n              },\n              \"exemplar\": true,\n              \"expr\": \"besu_synchronizer_chain_download_pipeline_processed_total{instance=~\\\"$system\\\"} != 0\",\n              \"interval\": \"\",\n              \"legendFormat\": \"{{instance}}-{{step}}\",\n              \"refId\": \"A\"\n            }\n          ],\n          \"title\": \"Blockchain pipeline entries\",\n          \"type\": \"timeseries\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"description\": \"Number of entries processed by each world state download pipeline stage\",\n          \"fieldConfig\": {\n            \"defaults\": {\n              \"color\": {\n                \"mode\": \"palette-classic\"\n              },\n              \"custom\": {\n                \"axisBorderShow\": false,\n                \"axisCenteredZero\": false,\n                \"axisColorMode\": \"text\",\n                \"axisLabel\": \"\",\n                \"axisPlacement\": \"auto\",\n                \"barAlignment\": 0,\n                \"drawStyle\": \"line\",\n                \"fillOpacity\": 10,\n                \"gradientMode\": \"none\",\n                \"hideFrom\": {\n                  \"legend\": false,\n                  \"tooltip\": false,\n                  \"viz\": false\n                },\n                \"insertNulls\": false,\n                \"lineInterpolation\": \"linear\",\n                \"lineWidth\": 1,\n                \"pointSize\": 5,\n                \"scaleDistribution\": {\n                  \"type\": \"linear\"\n                },\n                \"showPoints\": \"never\",\n                \"spanNulls\": true,\n                \"stacking\": {\n                  \"group\": \"A\",\n                  \"mode\": \"none\"\n                },\n                \"thresholdsStyle\": {\n                  \"mode\": \"off\"\n                }\n              },\n              \"links\": [],\n              \"mappings\": [],\n              \"thresholds\": {\n                \"mode\": \"absolute\",\n                \"steps\": [\n                  {\n                    \"color\": \"green\"\n                  },\n                  {\n                    \"color\": \"red\",\n                    \"value\": 80\n                  }\n                ]\n              },\n              \"unit\": \"short\"\n            },\n            \"overrides\": []\n          },\n          \"gridPos\": {\n            \"h\": 8,\n            \"w\": 12,\n            \"x\": 12,\n            \"y\": 3534\n          },\n          \"id\": 118,\n          \"options\": {\n            \"legend\": {\n              \"calcs\": [],\n              \"displayMode\": \"list\",\n              \"placement\": \"bottom\",\n              \"showLegend\": true\n            },\n            \"tooltip\": {\n              \"mode\": \"multi\",\n              \"sort\": \"none\"\n            }\n          },\n          \"pluginVersion\": \"9.3.1\",\n          \"targets\": [\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"PBFA97CFB590B2093\"\n              },\n              \"exemplar\": true,\n              \"expr\": \"besu_synchronizer_snap_world_state_pipeline_processed_total{instance=~\\\"$system\\\"} != 0\",\n              \"interval\": \"\",\n              \"legendFormat\": \"{{step}}\",\n              \"refId\": \"A\"\n            }\n          ],\n          \"title\": \"Worldtstate pipeline entries\",\n          \"type\": \"timeseries\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"description\": \"Total number of data nodes healed as part of snap sync world state heal process\",\n          \"fieldConfig\": {\n            \"defaults\": {\n              \"color\": {\n                \"mode\": \"palette-classic\"\n              },\n              \"custom\": {\n                \"axisBorderShow\": false,\n                \"axisCenteredZero\": false,\n                \"axisColorMode\": \"text\",\n                \"axisLabel\": \"\",\n                \"axisPlacement\": \"auto\",\n                \"barAlignment\": 0,\n                \"drawStyle\": \"line\",\n                \"fillOpacity\": 0,\n                \"gradientMode\": \"none\",\n                \"hideFrom\": {\n                  \"legend\": false,\n                  \"tooltip\": false,\n                  \"viz\": false\n                },\n                \"insertNulls\": false,\n                \"lineInterpolation\": \"linear\",\n                \"lineWidth\": 1,\n                \"pointSize\": 5,\n                \"scaleDistribution\": {\n                  \"log\": 10,\n                  \"type\": \"log\"\n                },\n                \"showPoints\": \"never\",\n                \"spanNulls\": true,\n                \"stacking\": {\n                  \"group\": \"A\",\n                  \"mode\": \"none\"\n                },\n                \"thresholdsStyle\": {\n                  \"mode\": \"off\"\n                }\n              },\n              \"links\": [],\n              \"mappings\": [],\n              \"min\": 1000,\n              \"thresholds\": {\n                \"mode\": \"absolute\",\n                \"steps\": [\n                  {\n                    \"color\": \"green\"\n                  },\n                  {\n                    \"color\": \"red\",\n                    \"value\": 80\n                  }\n                ]\n              },\n              \"unit\": \"short\"\n            },\n            \"overrides\": []\n          },\n          \"gridPos\": {\n            \"h\": 8,\n            \"w\": 12,\n            \"x\": 0,\n            \"y\": 3542\n          },\n          \"id\": 108,\n          \"options\": {\n            \"legend\": {\n              \"calcs\": [],\n              \"displayMode\": \"list\",\n              \"placement\": \"bottom\",\n              \"showLegend\": true\n            },\n            \"tooltip\": {\n              \"mode\": \"multi\",\n              \"sort\": \"none\"\n            }\n          },\n          \"pluginVersion\": \"9.3.1\",\n          \"targets\": [\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"PBFA97CFB590B2093\"\n              },\n              \"exemplar\": true,\n              \"expr\": \"rate(besu_synchronizer_snap_world_state_generated_nodes_total{instance=~\\\"$system\\\"}[10m]) > 0\",\n              \"interval\": \"\",\n              \"legendFormat\": \"{{instance}}-genetared\",\n              \"refId\": \"A\"\n            },\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"PBFA97CFB590B2093\"\n              },\n              \"exemplar\": true,\n              \"expr\": \"rate(besu_synchronizer_snap_world_state_healed_nodes_total{instance=~\\\"$system\\\"}[10m]) > 0\",\n              \"hide\": false,\n              \"interval\": \"\",\n              \"legendFormat\": \"{{instance}}-healed\",\n              \"refId\": \"B\"\n            }\n          ],\n          \"title\": \"Snapsync Node Rate (10 min avg)\",\n          \"type\": \"timeseries\"\n        }\n      ],\n      \"title\": \"Snap Sync\",\n      \"type\": \"row\"\n    },\n    {\n      \"collapsed\": true,\n      \"gridPos\": {\n        \"h\": 1,\n        \"w\": 24,\n        \"x\": 0,\n        \"y\": 1\n      },\n      \"id\": 466,\n      \"panels\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"fieldConfig\": {\n            \"defaults\": {\n              \"color\": {\n                \"mode\": \"thresholds\"\n              },\n              \"custom\": {\n                \"align\": \"auto\",\n                \"cellOptions\": {\n                  \"type\": \"auto\"\n                },\n                \"inspect\": false\n              },\n              \"decimals\": 2,\n              \"displayName\": \"\",\n              \"mappings\": [],\n              \"thresholds\": {\n                \"mode\": \"absolute\",\n                \"steps\": [\n                  {\n                    \"color\": \"green\"\n                  },\n                  {\n                    \"color\": \"red\",\n                    \"value\": 80\n                  }\n                ]\n              },\n              \"unit\": \"short\"\n            },\n            \"overrides\": [\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"job\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"unit\",\n                    \"value\": \"short\"\n                  },\n                  {\n                    \"id\": \"decimals\",\n                    \"value\": 2\n                  },\n                  {\n                    \"id\": \"custom.align\"\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"Value #A\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"displayName\",\n                    \"value\": \"Chain Height\"\n                  },\n                  {\n                    \"id\": \"unit\",\n                    \"value\": \"locale\"\n                  },\n                  {\n                    \"id\": \"decimals\",\n                    \"value\": 2\n                  },\n                  {\n                    \"id\": \"custom.align\"\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"Value #B\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"displayName\",\n                    \"value\": \"Pivot Block Number\"\n                  },\n                  {\n                    \"id\": \"unit\",\n                    \"value\": \"locale\"\n                  },\n                  {\n                    \"id\": \"decimals\",\n                    \"value\": 2\n                  },\n                  {\n                    \"id\": \"custom.align\"\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"Time\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"unit\",\n                    \"value\": \"short\"\n                  },\n                  {\n                    \"id\": \"decimals\",\n                    \"value\": 2\n                  },\n                  {\n                    \"id\": \"custom.align\"\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"__name__\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"unit\",\n                    \"value\": \"short\"\n                  },\n                  {\n                    \"id\": \"decimals\",\n                    \"value\": 2\n                  },\n                  {\n                    \"id\": \"custom.align\"\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"Value #C\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"displayName\",\n                    \"value\": \"Pending State Nodes\"\n                  },\n                  {\n                    \"id\": \"unit\",\n                    \"value\": \"locale\"\n                  },\n                  {\n                    \"id\": \"custom.align\"\n                  },\n                  {\n                    \"id\": \"thresholds\",\n                    \"value\": {\n                      \"mode\": \"absolute\",\n                      \"steps\": [\n                        {\n                          \"color\": \"rgba(245, 54, 54, 0.9)\"\n                        },\n                        {\n                          \"color\": \"rgba(237, 129, 40, 0.89)\"\n                        }\n                      ]\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"Value #D\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"displayName\",\n                    \"value\": \"Downloaded State Nodes\"\n                  },\n                  {\n                    \"id\": \"unit\",\n                    \"value\": \"locale\"\n                  },\n                  {\n                    \"id\": \"decimals\",\n                    \"value\": 2\n                  },\n                  {\n                    \"id\": \"custom.align\"\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"instance\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"displayName\",\n                    \"value\": \"System\"\n                  },\n                  {\n                    \"id\": \"unit\",\n                    \"value\": \"short\"\n                  },\n                  {\n                    \"id\": \"decimals\",\n                    \"value\": 2\n                  },\n                  {\n                    \"id\": \"custom.align\"\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"Value #E\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"displayName\",\n                    \"value\": \"Blocks To Download\"\n                  },\n                  {\n                    \"id\": \"unit\",\n                    \"value\": \"locale\"\n                  },\n                  {\n                    \"id\": \"custom.align\"\n                  },\n                  {\n                    \"id\": \"thresholds\",\n                    \"value\": {\n                      \"mode\": \"absolute\",\n                      \"steps\": [\n                        {\n                          \"color\": \"rgba(50, 172, 45, 0.97)\"\n                        },\n                        {\n                          \"color\": \"rgba(237, 129, 40, 0.89)\",\n                          \"value\": 0\n                        },\n                        {\n                          \"color\": \"rgba(245, 54, 54, 0.9)\",\n                          \"value\": 0\n                        }\n                      ]\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"Value #F\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"displayName\",\n                    \"value\": \"Target Chain Height\"\n                  },\n                  {\n                    \"id\": \"unit\",\n                    \"value\": \"locale\"\n                  },\n                  {\n                    \"id\": \"decimals\",\n                    \"value\": 2\n                  },\n                  {\n                    \"id\": \"custom.align\"\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"Value #G\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"displayName\",\n                    \"value\": \"Blocks Behind\"\n                  },\n                  {\n                    \"id\": \"unit\",\n                    \"value\": \"locale\"\n                  },\n                  {\n                    \"id\": \"decimals\",\n                    \"value\": 2\n                  },\n                  {\n                    \"id\": \"custom.cellOptions\",\n                    \"value\": {\n                      \"type\": \"color-text\"\n                    }\n                  },\n                  {\n                    \"id\": \"custom.align\"\n                  },\n                  {\n                    \"id\": \"thresholds\",\n                    \"value\": {\n                      \"mode\": \"absolute\",\n                      \"steps\": [\n                        {\n                          \"color\": \"rgba(50, 172, 45, 0.97)\"\n                        },\n                        {\n                          \"color\": \"rgba(237, 129, 40, 0.89)\",\n                          \"value\": 1\n                        },\n                        {\n                          \"color\": \"rgba(245, 54, 54, 0.9)\",\n                          \"value\": 10\n                        }\n                      ]\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"Value #H\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"displayName\",\n                    \"value\": \"% Peer Limit Used\"\n                  },\n                  {\n                    \"id\": \"unit\",\n                    \"value\": \"percentunit\"\n                  },\n                  {\n                    \"id\": \"custom.cellOptions\",\n                    \"value\": {\n                      \"type\": \"color-text\"\n                    }\n                  },\n                  {\n                    \"id\": \"custom.align\"\n                  },\n                  {\n                    \"id\": \"thresholds\",\n                    \"value\": {\n                      \"mode\": \"absolute\",\n                      \"steps\": [\n                        {\n                          \"color\": \"rgba(245, 54, 54, 0.9)\"\n                        },\n                        {\n                          \"color\": \"rgba(237, 129, 40, 0.89)\",\n                          \"value\": 0\n                        },\n                        {\n                          \"color\": \"rgba(50, 172, 45, 0.97)\",\n                          \"value\": 0\n                        }\n                      ]\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"Value #I\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"displayName\",\n                    \"value\": \"Pending State Nodes\"\n                  },\n                  {\n                    \"id\": \"unit\",\n                    \"value\": \"locale\"\n                  },\n                  {\n                    \"id\": \"custom.align\"\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"Value #J\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"displayName\",\n                    \"value\": \"Downloaded State Nodes\"\n                  },\n                  {\n                    \"id\": \"unit\",\n                    \"value\": \"locale\"\n                  },\n                  {\n                    \"id\": \"custom.align\"\n                  }\n                ]\n              }\n            ]\n          },\n          \"gridPos\": {\n            \"h\": 9,\n            \"w\": 24,\n            \"x\": 0,\n            \"y\": 2094\n          },\n          \"id\": 92,\n          \"options\": {\n            \"cellHeight\": \"sm\",\n            \"footer\": {\n              \"countRows\": false,\n              \"fields\": \"\",\n              \"reducer\": [\n                \"sum\"\n              ],\n              \"show\": false\n            },\n            \"showHeader\": true\n          },\n          \"pluginVersion\": \"10.4.1\",\n          \"targets\": [\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"PBFA97CFB590B2093\"\n              },\n              \"exemplar\": false,\n              \"expr\": \"sum by (instance) ((besu_blockchain_height{instance=~\\\"$system\\\"} or ethereum_blockchain_height{instance=~\\\"$system\\\"}) and besu_synchronizer_world_state_pending_requests_current{instance=~\\\"$system\\\"} > 0)\",\n              \"format\": \"table\",\n              \"instant\": true,\n              \"interval\": \"\",\n              \"intervalFactor\": 1,\n              \"legendFormat\": \"Chain Height\",\n              \"refId\": \"A\"\n            },\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"PBFA97CFB590B2093\"\n              },\n              \"exemplar\": false,\n              \"expr\": \"sum by (instance) (besu_synchronizer_fast_sync_pivot_block_current{instance=~\\\"$system\\\"} and besu_synchronizer_world_state_pending_requests_current{instance=~\\\"$system\\\"} > 0)\",\n              \"format\": \"table\",\n              \"instant\": true,\n              \"interval\": \"\",\n              \"intervalFactor\": 1,\n              \"legendFormat\": \"\",\n              \"refId\": \"B\"\n            },\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"PBFA97CFB590B2093\"\n              },\n              \"exemplar\": false,\n              \"expr\": \"sum by (instance) (besu_synchronizer_fast_sync_pivot_block_current{instance=~\\\"$system\\\"} - besu_blockchain_height{instance=~\\\"$system\\\"} and besu_synchronizer_world_state_pending_requests_current{instance=~\\\"$system\\\"} > 0)\",\n              \"format\": \"table\",\n              \"instant\": true,\n              \"interval\": \"\",\n              \"intervalFactor\": 1,\n              \"legendFormat\": \"\",\n              \"refId\": \"E\"\n            },\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"PBFA97CFB590B2093\"\n              },\n              \"exemplar\": false,\n              \"expr\": \"sum by (instance) (besu_synchronizer_world_state_pending_requests_current{instance=~\\\"$system\\\"} > 0)\",\n              \"format\": \"table\",\n              \"instant\": true,\n              \"interval\": \"\",\n              \"intervalFactor\": 1,\n              \"legendFormat\": \"\",\n              \"refId\": \"C\"\n            },\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"PBFA97CFB590B2093\"\n              },\n              \"exemplar\": false,\n              \"expr\": \"sum by (instance) (besu_synchronizer_world_state_completed_requests_total{instance=~\\\"$system\\\"} and besu_synchronizer_world_state_pending_requests_current{instance=~\\\"$system\\\"} > 0)\",\n              \"format\": \"table\",\n              \"instant\": true,\n              \"interval\": \"\",\n              \"intervalFactor\": 1,\n              \"legendFormat\": \"\",\n              \"refId\": \"D\"\n            }\n          ],\n          \"title\": \"Fast Sync Progress\",\n          \"transformations\": [\n            {\n              \"id\": \"merge\",\n              \"options\": {\n                \"reducers\": []\n              }\n            }\n          ],\n          \"type\": \"table\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"fieldConfig\": {\n            \"defaults\": {\n              \"color\": {\n                \"mode\": \"palette-classic\"\n              },\n              \"custom\": {\n                \"axisBorderShow\": false,\n                \"axisCenteredZero\": false,\n                \"axisColorMode\": \"text\",\n                \"axisLabel\": \"\",\n                \"axisPlacement\": \"auto\",\n                \"barAlignment\": 0,\n                \"drawStyle\": \"line\",\n                \"fillOpacity\": 0,\n                \"gradientMode\": \"none\",\n                \"hideFrom\": {\n                  \"legend\": false,\n                  \"tooltip\": false,\n                  \"viz\": false\n                },\n                \"insertNulls\": false,\n                \"lineInterpolation\": \"linear\",\n                \"lineWidth\": 1,\n                \"pointSize\": 5,\n                \"scaleDistribution\": {\n                  \"type\": \"linear\"\n                },\n                \"showPoints\": \"never\",\n                \"spanNulls\": false,\n                \"stacking\": {\n                  \"group\": \"A\",\n                  \"mode\": \"none\"\n                },\n                \"thresholdsStyle\": {\n                  \"mode\": \"off\"\n                }\n              },\n              \"links\": [],\n              \"mappings\": [],\n              \"thresholds\": {\n                \"mode\": \"absolute\",\n                \"steps\": [\n                  {\n                    \"color\": \"green\"\n                  },\n                  {\n                    \"color\": \"red\",\n                    \"value\": 80\n                  }\n                ]\n              },\n              \"unit\": \"locale\"\n            },\n            \"overrides\": []\n          },\n          \"gridPos\": {\n            \"h\": 8,\n            \"w\": 12,\n            \"x\": 0,\n            \"y\": 2103\n          },\n          \"id\": 86,\n          \"options\": {\n            \"legend\": {\n              \"calcs\": [],\n              \"displayMode\": \"list\",\n              \"placement\": \"bottom\",\n              \"showLegend\": true\n            },\n            \"tooltip\": {\n              \"mode\": \"multi\",\n              \"sort\": \"none\"\n            }\n          },\n          \"pluginVersion\": \"10.4.1\",\n          \"targets\": [\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"PBFA97CFB590B2093\"\n              },\n              \"expr\": \"ethereum_best_known_block_number{instance=~'$system'}\",\n              \"interval\": \"\",\n              \"legendFormat\": \"{{instance}} Best\",\n              \"refId\": \"A\"\n            },\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"PBFA97CFB590B2093\"\n              },\n              \"expr\": \"ethereum_blockchain_height{instance=~'$system'}\",\n              \"interval\": \"\",\n              \"legendFormat\": \"{{instance}} current\",\n              \"refId\": \"B\"\n            }\n          ],\n          \"title\": \"Chain Height\",\n          \"type\": \"timeseries\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"fieldConfig\": {\n            \"defaults\": {\n              \"color\": {\n                \"mode\": \"palette-classic\"\n              },\n              \"custom\": {\n                \"axisBorderShow\": false,\n                \"axisCenteredZero\": false,\n                \"axisColorMode\": \"text\",\n                \"axisLabel\": \"\",\n                \"axisPlacement\": \"auto\",\n                \"barAlignment\": 0,\n                \"drawStyle\": \"line\",\n                \"fillOpacity\": 10,\n                \"gradientMode\": \"none\",\n                \"hideFrom\": {\n                  \"legend\": false,\n                  \"tooltip\": false,\n                  \"viz\": false\n                },\n                \"insertNulls\": false,\n                \"lineInterpolation\": \"linear\",\n                \"lineWidth\": 1,\n                \"pointSize\": 5,\n                \"scaleDistribution\": {\n                  \"type\": \"linear\"\n                },\n                \"showPoints\": \"never\",\n                \"spanNulls\": false,\n                \"stacking\": {\n                  \"group\": \"A\",\n                  \"mode\": \"none\"\n                },\n                \"thresholdsStyle\": {\n                  \"mode\": \"off\"\n                }\n              },\n              \"links\": [],\n              \"mappings\": [],\n              \"thresholds\": {\n                \"mode\": \"absolute\",\n                \"steps\": [\n                  {\n                    \"color\": \"green\"\n                  },\n                  {\n                    \"color\": \"red\",\n                    \"value\": 80\n                  }\n                ]\n              },\n              \"unit\": \"short\"\n            },\n            \"overrides\": []\n          },\n          \"gridPos\": {\n            \"h\": 8,\n            \"w\": 12,\n            \"x\": 12,\n            \"y\": 2103\n          },\n          \"id\": 84,\n          \"options\": {\n            \"legend\": {\n              \"calcs\": [],\n              \"displayMode\": \"list\",\n              \"placement\": \"bottom\",\n              \"showLegend\": true\n            },\n            \"tooltip\": {\n              \"mode\": \"multi\",\n              \"sort\": \"none\"\n            }\n          },\n          \"pluginVersion\": \"10.4.1\",\n          \"targets\": [\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"PBFA97CFB590B2093\"\n              },\n              \"expr\": \"sum by (instance) (besu_synchronizer_world_state_completed_requests_total{instance=~\\\"$system\\\"} and besu_synchronizer_world_state_pending_requests_current{instance=~\\\"$system\\\"} > 0)\",\n              \"interval\": \"\",\n              \"legendFormat\": \"{{instance}}\",\n              \"refId\": \"A\"\n            }\n          ],\n          \"title\": \"Downloaded State Nodes\",\n          \"type\": \"timeseries\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"fieldConfig\": {\n            \"defaults\": {\n              \"color\": {\n                \"mode\": \"palette-classic\"\n              },\n              \"custom\": {\n                \"axisBorderShow\": false,\n                \"axisCenteredZero\": false,\n                \"axisColorMode\": \"text\",\n                \"axisLabel\": \"\",\n                \"axisPlacement\": \"auto\",\n                \"barAlignment\": 0,\n                \"drawStyle\": \"line\",\n                \"fillOpacity\": 0,\n                \"gradientMode\": \"none\",\n                \"hideFrom\": {\n                  \"legend\": false,\n                  \"tooltip\": false,\n                  \"viz\": false\n                },\n                \"insertNulls\": false,\n                \"lineInterpolation\": \"linear\",\n                \"lineWidth\": 1,\n                \"pointSize\": 5,\n                \"scaleDistribution\": {\n                  \"log\": 10,\n                  \"type\": \"log\"\n                },\n                \"showPoints\": \"never\",\n                \"spanNulls\": false,\n                \"stacking\": {\n                  \"group\": \"A\",\n                  \"mode\": \"none\"\n                },\n                \"thresholdsStyle\": {\n                  \"mode\": \"off\"\n                }\n              },\n              \"links\": [],\n              \"mappings\": [],\n              \"min\": 1000,\n              \"thresholds\": {\n                \"mode\": \"absolute\",\n                \"steps\": [\n                  {\n                    \"color\": \"green\"\n                  },\n                  {\n                    \"color\": \"red\",\n                    \"value\": 80\n                  }\n                ]\n              },\n              \"unit\": \"short\"\n            },\n            \"overrides\": []\n          },\n          \"gridPos\": {\n            \"h\": 8,\n            \"w\": 12,\n            \"x\": 0,\n            \"y\": 3519\n          },\n          \"id\": 88,\n          \"options\": {\n            \"legend\": {\n              \"calcs\": [],\n              \"displayMode\": \"list\",\n              \"placement\": \"bottom\",\n              \"showLegend\": true\n            },\n            \"tooltip\": {\n              \"mode\": \"multi\",\n              \"sort\": \"none\"\n            }\n          },\n          \"pluginVersion\": \"10.4.1\",\n          \"targets\": [\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"PBFA97CFB590B2093\"\n              },\n              \"expr\": \"besu_synchronizer_world_state_pending_requests_current{instance=~'$system'}\",\n              \"interval\": \"\",\n              \"legendFormat\": \"{{instance}} pending\",\n              \"refId\": \"A\"\n            },\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"PBFA97CFB590B2093\"\n              },\n              \"expr\": \"besu_synchronizer_world_state_existing_nodes_total{instance='$system'}\",\n              \"interval\": \"\",\n              \"legendFormat\": \"{{instance}} downloaded\",\n              \"refId\": \"B\"\n            }\n          ],\n          \"title\": \"Known Pending State Nodes\",\n          \"type\": \"timeseries\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"fieldConfig\": {\n            \"defaults\": {\n              \"color\": {\n                \"mode\": \"palette-classic\"\n              },\n              \"custom\": {\n                \"axisBorderShow\": false,\n                \"axisCenteredZero\": false,\n                \"axisColorMode\": \"text\",\n                \"axisLabel\": \"\",\n                \"axisPlacement\": \"auto\",\n                \"barAlignment\": 0,\n                \"drawStyle\": \"line\",\n                \"fillOpacity\": 10,\n                \"gradientMode\": \"none\",\n                \"hideFrom\": {\n                  \"legend\": false,\n                  \"tooltip\": false,\n                  \"viz\": false\n                },\n                \"insertNulls\": false,\n                \"lineInterpolation\": \"linear\",\n                \"lineWidth\": 1,\n                \"pointSize\": 5,\n                \"scaleDistribution\": {\n                  \"type\": \"linear\"\n                },\n                \"showPoints\": \"never\",\n                \"spanNulls\": false,\n                \"stacking\": {\n                  \"group\": \"A\",\n                  \"mode\": \"none\"\n                },\n                \"thresholdsStyle\": {\n                  \"mode\": \"off\"\n                }\n              },\n              \"links\": [],\n              \"mappings\": [],\n              \"thresholds\": {\n                \"mode\": \"absolute\",\n                \"steps\": [\n                  {\n                    \"color\": \"green\"\n                  },\n                  {\n                    \"color\": \"red\",\n                    \"value\": 80\n                  }\n                ]\n              },\n              \"unit\": \"short\"\n            },\n            \"overrides\": []\n          },\n          \"gridPos\": {\n            \"h\": 8,\n            \"w\": 12,\n            \"x\": 12,\n            \"y\": 3519\n          },\n          \"id\": 90,\n          \"options\": {\n            \"legend\": {\n              \"calcs\": [],\n              \"displayMode\": \"list\",\n              \"placement\": \"bottom\",\n              \"showLegend\": true\n            },\n            \"tooltip\": {\n              \"mode\": \"multi\",\n              \"sort\": \"none\"\n            }\n          },\n          \"pluginVersion\": \"10.4.1\",\n          \"targets\": [\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"PBFA97CFB590B2093\"\n              },\n              \"expr\": \"rate(besu_synchronizer_world_state_completed_requests_total{instance=~\\\"$system\\\"}[10m])\",\n              \"interval\": \"\",\n              \"legendFormat\": \"{{instance}}\",\n              \"refId\": \"A\"\n            }\n          ],\n          \"title\": \"Fast Sync Node Rate (10 min avg)\",\n          \"type\": \"timeseries\"\n        }\n      ],\n      \"title\": \"Fast Sync\",\n      \"type\": \"row\"\n    },\n    {\n      \"collapsed\": false,\n      \"gridPos\": {\n        \"h\": 1,\n        \"w\": 24,\n        \"x\": 0,\n        \"y\": 2\n      },\n      \"id\": 467,\n      \"panels\": [],\n      \"title\": \"Overview\",\n      \"type\": \"row\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"thresholds\"\n          },\n          \"custom\": {\n            \"align\": \"auto\",\n            \"cellOptions\": {\n              \"type\": \"auto\"\n            },\n            \"inspect\": false\n          },\n          \"decimals\": 2,\n          \"displayName\": \"\",\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\"\n              },\n              {\n                \"color\": \"red\",\n                \"value\": 80\n              }\n            ]\n          },\n          \"unit\": \"short\"\n        },\n        \"overrides\": [\n          {\n            \"matcher\": {\n              \"id\": \"byName\",\n              \"options\": \"job\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"unit\",\n                \"value\": \"short\"\n              },\n              {\n                \"id\": \"decimals\",\n                \"value\": 2\n              },\n              {\n                \"id\": \"custom.align\"\n              }\n            ]\n          },\n          {\n            \"matcher\": {\n              \"id\": \"byName\",\n              \"options\": \"Value #A\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"displayName\",\n                \"value\": \"Chain Height\"\n              },\n              {\n                \"id\": \"unit\",\n                \"value\": \"locale\"\n              },\n              {\n                \"id\": \"decimals\",\n                \"value\": 2\n              },\n              {\n                \"id\": \"custom.align\"\n              }\n            ]\n          },\n          {\n            \"matcher\": {\n              \"id\": \"byName\",\n              \"options\": \"Value #B\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"displayName\",\n                \"value\": \"Total Difficulty\"\n              },\n              {\n                \"id\": \"unit\",\n                \"value\": \"sci\"\n              },\n              {\n                \"id\": \"decimals\",\n                \"value\": 2\n              },\n              {\n                \"id\": \"custom.align\"\n              }\n            ]\n          },\n          {\n            \"matcher\": {\n              \"id\": \"byName\",\n              \"options\": \"Time\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"unit\",\n                \"value\": \"short\"\n              },\n              {\n                \"id\": \"decimals\",\n                \"value\": 2\n              },\n              {\n                \"id\": \"custom.align\"\n              }\n            ]\n          },\n          {\n            \"matcher\": {\n              \"id\": \"byName\",\n              \"options\": \"__name__\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"unit\",\n                \"value\": \"short\"\n              },\n              {\n                \"id\": \"decimals\",\n                \"value\": 2\n              },\n              {\n                \"id\": \"custom.align\"\n              }\n            ]\n          },\n          {\n            \"matcher\": {\n              \"id\": \"byName\",\n              \"options\": \"Value #C\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"displayName\",\n                \"value\": \"Peer Count\"\n              },\n              {\n                \"id\": \"unit\",\n                \"value\": \"locale\"\n              },\n              {\n                \"id\": \"decimals\",\n                \"value\": 2\n              },\n              {\n                \"id\": \"custom.align\"\n              },\n              {\n                \"id\": \"thresholds\",\n                \"value\": {\n                  \"mode\": \"absolute\",\n                  \"steps\": [\n                    {\n                      \"color\": \"rgba(245, 54, 54, 0.9)\"\n                    },\n                    {\n                      \"color\": \"rgba(237, 129, 40, 0.89)\"\n                    }\n                  ]\n                }\n              }\n            ]\n          },\n          {\n            \"matcher\": {\n              \"id\": \"byName\",\n              \"options\": \"Value #D\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"displayName\",\n                \"value\": \"Block Time (5m avg)\"\n              },\n              {\n                \"id\": \"unit\",\n                \"value\": \"s\"\n              },\n              {\n                \"id\": \"decimals\",\n                \"value\": 2\n              },\n              {\n                \"id\": \"custom.align\"\n              }\n            ]\n          },\n          {\n            \"matcher\": {\n              \"id\": \"byName\",\n              \"options\": \"instance\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"displayName\",\n                \"value\": \"System\"\n              },\n              {\n                \"id\": \"unit\",\n                \"value\": \"short\"\n              },\n              {\n                \"id\": \"decimals\",\n                \"value\": 2\n              },\n              {\n                \"id\": \"custom.align\"\n              }\n            ]\n          },\n          {\n            \"matcher\": {\n              \"id\": \"byName\",\n              \"options\": \"Value #E\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"displayName\",\n                \"value\": \"Time Since Last Block\"\n              },\n              {\n                \"id\": \"unit\",\n                \"value\": \"dtdurations\"\n              },\n              {\n                \"id\": \"custom.cellOptions\",\n                \"value\": {\n                  \"type\": \"color-text\"\n                }\n              },\n              {\n                \"id\": \"custom.align\"\n              },\n              {\n                \"id\": \"thresholds\",\n                \"value\": {\n                  \"mode\": \"absolute\",\n                  \"steps\": [\n                    {\n                      \"color\": \"rgba(50, 172, 45, 0.97)\"\n                    },\n                    {\n                      \"color\": \"rgba(237, 129, 40, 0.89)\",\n                      \"value\": 120\n                    },\n                    {\n                      \"color\": \"rgba(245, 54, 54, 0.9)\",\n                      \"value\": 240\n                    }\n                  ]\n                }\n              }\n            ]\n          },\n          {\n            \"matcher\": {\n              \"id\": \"byName\",\n              \"options\": \"Value #F\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"displayName\",\n                \"value\": \"Target Chain Height\"\n              },\n              {\n                \"id\": \"unit\",\n                \"value\": \"locale\"\n              },\n              {\n                \"id\": \"decimals\",\n                \"value\": 2\n              },\n              {\n                \"id\": \"custom.align\"\n              }\n            ]\n          },\n          {\n            \"matcher\": {\n              \"id\": \"byName\",\n              \"options\": \"Value #G\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"displayName\",\n                \"value\": \"Blocks Behind\"\n              },\n              {\n                \"id\": \"unit\",\n                \"value\": \"locale\"\n              },\n              {\n                \"id\": \"decimals\",\n                \"value\": 2\n              },\n              {\n                \"id\": \"custom.cellOptions\",\n                \"value\": {\n                  \"type\": \"color-text\"\n                }\n              },\n              {\n                \"id\": \"custom.align\"\n              },\n              {\n                \"id\": \"thresholds\",\n                \"value\": {\n                  \"mode\": \"absolute\",\n                  \"steps\": [\n                    {\n                      \"color\": \"rgba(50, 172, 45, 0.97)\"\n                    },\n                    {\n                      \"color\": \"rgba(237, 129, 40, 0.89)\",\n                      \"value\": 1\n                    },\n                    {\n                      \"color\": \"rgba(245, 54, 54, 0.9)\",\n                      \"value\": 10\n                    }\n                  ]\n                }\n              }\n            ]\n          },\n          {\n            \"matcher\": {\n              \"id\": \"byName\",\n              \"options\": \"Value #H\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"displayName\",\n                \"value\": \"% Peer Limit Used\"\n              },\n              {\n                \"id\": \"unit\",\n                \"value\": \"percentunit\"\n              },\n              {\n                \"id\": \"custom.cellOptions\",\n                \"value\": {\n                  \"type\": \"color-text\"\n                }\n              },\n              {\n                \"id\": \"custom.align\"\n              },\n              {\n                \"id\": \"thresholds\",\n                \"value\": {\n                  \"mode\": \"absolute\",\n                  \"steps\": [\n                    {\n                      \"color\": \"rgba(245, 54, 54, 0.9)\"\n                    },\n                    {\n                      \"color\": \"rgba(237, 129, 40, 0.89)\",\n                      \"value\": 0\n                    },\n                    {\n                      \"color\": \"rgba(50, 172, 45, 0.97)\",\n                      \"value\": 0\n                    }\n                  ]\n                }\n              }\n            ]\n          },\n          {\n            \"matcher\": {\n              \"id\": \"byName\",\n              \"options\": \"instance\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"custom.width\"\n              },\n              {\n                \"id\": \"custom.filterable\"\n              },\n              {\n                \"id\": \"displayName\",\n                \"value\": \"instance\"\n              }\n            ]\n          }\n        ]\n      },\n      \"gridPos\": {\n        \"h\": 8,\n        \"w\": 24,\n        \"x\": 0,\n        \"y\": 3\n      },\n      \"id\": 468,\n      \"options\": {\n        \"cellHeight\": \"sm\",\n        \"footer\": {\n          \"countRows\": false,\n          \"fields\": \"\",\n          \"reducer\": [\n            \"sum\"\n          ],\n          \"show\": false\n        },\n        \"showHeader\": true,\n        \"sortBy\": []\n      },\n      \"pluginVersion\": \"12.0.2\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"exemplar\": false,\n          \"expr\": \"sum by (instance) (besu_blockchain_height{instance=~\\\"$system\\\"} or ethereum_blockchain_height{instance=~\\\"$system\\\"})\",\n          \"format\": \"table\",\n          \"instant\": true,\n          \"interval\": \"\",\n          \"intervalFactor\": 1,\n          \"legendFormat\": \"Chain Height\",\n          \"refId\": \"A\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"exemplar\": false,\n          \"expr\": \"sum by (instance) (besu_synchronizer_best_known_block{instance=~\\\"$system\\\"} or ethereum_best_known_block_number{instance=~\\\"$system\\\"})\",\n          \"format\": \"table\",\n          \"instant\": true,\n          \"interval\": \"\",\n          \"intervalFactor\": 1,\n          \"legendFormat\": \"\",\n          \"refId\": \"F\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"exemplar\": false,\n          \"expr\": \"sum by (instance) ((besu_synchronizer_best_known_block{instance=~\\\"$system\\\"} - besu_blockchain_height{instance=~\\\"$system\\\"}) or (ethereum_best_known_block_number{instance=~\\\"$system\\\"} - ethereum_blockchain_height{instance=~\\\"$system\\\"}))\",\n          \"format\": \"table\",\n          \"instant\": true,\n          \"interval\": \"\",\n          \"intervalFactor\": 1,\n          \"legendFormat\": \"\",\n          \"refId\": \"G\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"exemplar\": false,\n          \"expr\": \"sum by (instance) ((1/rate(besu_blockchain_height{instance=~\\\"$system\\\"}[5m])) or (1/rate(ethereum_blockchain_height{instance=~\\\"$system\\\"}[5m])))\",\n          \"format\": \"table\",\n          \"instant\": true,\n          \"interval\": \"\",\n          \"intervalFactor\": 1,\n          \"legendFormat\": \"\",\n          \"refId\": \"D\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"exemplar\": false,\n          \"expr\": \"sum by (instance) (time() - besu_blockchain_chain_head_timestamp{instance=~\\\"$system\\\"})\",\n          \"format\": \"table\",\n          \"instant\": true,\n          \"interval\": \"\",\n          \"intervalFactor\": 1,\n          \"legendFormat\": \"\",\n          \"refId\": \"E\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"exemplar\": false,\n          \"expr\": \"sum by (instance) (besu_peers_peer_count_current{instance=~\\\"$system\\\"} or ethereum_peer_count{instance=~\\\"$system\\\"})\",\n          \"format\": \"table\",\n          \"instant\": true,\n          \"interval\": \"\",\n          \"intervalFactor\": 1,\n          \"legendFormat\": \"Peer Count\",\n          \"refId\": \"C\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"exemplar\": false,\n          \"expr\": \"sum by (instance) ((besu_peers_peer_count_current{instance=~\\\"$system\\\"} / besu_network_peers_limit{instance=~\\\"$system\\\"}) or ethereum_peer_count{instance=~\\\"$system\\\"} / ethereum_peer_limit{instance=~\\\"$system\\\"})\",\n          \"format\": \"table\",\n          \"instant\": true,\n          \"interval\": \"\",\n          \"intervalFactor\": 1,\n          \"legendFormat\": \"\",\n          \"refId\": \"H\"\n        }\n      ],\n      \"title\": \"Overview\",\n      \"transformations\": [\n        {\n          \"id\": \"merge\",\n          \"options\": {\n            \"reducers\": []\n          }\n        }\n      ],\n      \"type\": \"table\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"palette-classic\"\n          },\n          \"custom\": {\n            \"axisBorderShow\": false,\n            \"axisCenteredZero\": false,\n            \"axisColorMode\": \"text\",\n            \"axisLabel\": \"\",\n            \"axisPlacement\": \"auto\",\n            \"barAlignment\": 0,\n            \"barWidthFactor\": 0.6,\n            \"drawStyle\": \"line\",\n            \"fillOpacity\": 10,\n            \"gradientMode\": \"none\",\n            \"hideFrom\": {\n              \"legend\": false,\n              \"tooltip\": false,\n              \"viz\": false\n            },\n            \"insertNulls\": false,\n            \"lineInterpolation\": \"linear\",\n            \"lineWidth\": 1,\n            \"pointSize\": 5,\n            \"scaleDistribution\": {\n              \"log\": 2,\n              \"type\": \"log\"\n            },\n            \"showPoints\": \"never\",\n            \"spanNulls\": false,\n            \"stacking\": {\n              \"group\": \"A\",\n              \"mode\": \"none\"\n            },\n            \"thresholdsStyle\": {\n              \"mode\": \"off\"\n            }\n          },\n          \"links\": [],\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\"\n              },\n              {\n                \"color\": \"red\",\n                \"value\": 80\n              }\n            ]\n          },\n          \"unit\": \"s\"\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 11,\n        \"w\": 12,\n        \"x\": 0,\n        \"y\": 11\n      },\n      \"id\": 469,\n      \"options\": {\n        \"legend\": {\n          \"calcs\": [\n            \"mean\",\n            \"lastNotNull\",\n            \"max\",\n            \"min\"\n          ],\n          \"displayMode\": \"table\",\n          \"placement\": \"bottom\",\n          \"showLegend\": true\n        },\n        \"tooltip\": {\n          \"hideZeros\": false,\n          \"mode\": \"multi\",\n          \"sort\": \"none\"\n        }\n      },\n      \"pluginVersion\": \"12.0.2\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"expr\": \"1/rate(besu_blockchain_height{instance=~\\\"$system\\\"}[5m]) or 1/rate(ethereum_blockchain_height{instance=~\\\"$system\\\"}[5m])\",\n          \"format\": \"time_series\",\n          \"interval\": \"\",\n          \"intervalFactor\": 1,\n          \"legendFormat\": \"{{instance}}\",\n          \"refId\": \"A\"\n        }\n      ],\n      \"title\": \"Block Time\",\n      \"type\": \"timeseries\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"palette-classic\"\n          },\n          \"custom\": {\n            \"axisBorderShow\": false,\n            \"axisCenteredZero\": false,\n            \"axisColorMode\": \"text\",\n            \"axisLabel\": \"\",\n            \"axisPlacement\": \"auto\",\n            \"barAlignment\": 0,\n            \"barWidthFactor\": 0.6,\n            \"drawStyle\": \"line\",\n            \"fillOpacity\": 10,\n            \"gradientMode\": \"none\",\n            \"hideFrom\": {\n              \"legend\": false,\n              \"tooltip\": false,\n              \"viz\": false\n            },\n            \"insertNulls\": false,\n            \"lineInterpolation\": \"linear\",\n            \"lineWidth\": 1,\n            \"pointSize\": 5,\n            \"scaleDistribution\": {\n              \"log\": 10,\n              \"type\": \"log\"\n            },\n            \"showPoints\": \"never\",\n            \"spanNulls\": false,\n            \"stacking\": {\n              \"group\": \"A\",\n              \"mode\": \"none\"\n            },\n            \"thresholdsStyle\": {\n              \"mode\": \"off\"\n            }\n          },\n          \"links\": [],\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\"\n              },\n              {\n                \"color\": \"red\",\n                \"value\": 80\n              }\n            ]\n          },\n          \"unit\": \"locale\"\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 11,\n        \"w\": 12,\n        \"x\": 12,\n        \"y\": 11\n      },\n      \"id\": 470,\n      \"options\": {\n        \"legend\": {\n          \"calcs\": [\n            \"mean\",\n            \"lastNotNull\",\n            \"max\",\n            \"min\"\n          ],\n          \"displayMode\": \"table\",\n          \"placement\": \"bottom\",\n          \"showLegend\": true\n        },\n        \"tooltip\": {\n          \"hideZeros\": false,\n          \"mode\": \"multi\",\n          \"sort\": \"none\"\n        }\n      },\n      \"pluginVersion\": \"12.0.2\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"expr\": \"besu_synchronizer_best_known_block{instance=~\\\"$system\\\"} - besu_blockchain_height{instance=~\\\"$system\\\"} or ethereum_best_known_block_number{instance=~\\\"$system\\\"} - ethereum_blockchain_height{instance=~\\\"$system\\\"}\",\n          \"format\": \"time_series\",\n          \"interval\": \"\",\n          \"intervalFactor\": 1,\n          \"legendFormat\": \"{{instance}}\",\n          \"refId\": \"A\"\n        }\n      ],\n      \"title\": \"Blocks Behind\",\n      \"type\": \"timeseries\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"description\": \"Describes the number of connected peers as a percentage of the maximum number of peers that can connect to the node.\",\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"palette-classic\"\n          },\n          \"custom\": {\n            \"axisBorderShow\": false,\n            \"axisCenteredZero\": false,\n            \"axisColorMode\": \"text\",\n            \"axisLabel\": \"\",\n            \"axisPlacement\": \"auto\",\n            \"barAlignment\": 0,\n            \"barWidthFactor\": 0.6,\n            \"drawStyle\": \"line\",\n            \"fillOpacity\": 10,\n            \"gradientMode\": \"none\",\n            \"hideFrom\": {\n              \"legend\": false,\n              \"tooltip\": false,\n              \"viz\": false\n            },\n            \"insertNulls\": false,\n            \"lineInterpolation\": \"linear\",\n            \"lineWidth\": 1,\n            \"pointSize\": 5,\n            \"scaleDistribution\": {\n              \"type\": \"linear\"\n            },\n            \"showPoints\": \"never\",\n            \"spanNulls\": false,\n            \"stacking\": {\n              \"group\": \"A\",\n              \"mode\": \"none\"\n            },\n            \"thresholdsStyle\": {\n              \"mode\": \"off\"\n            }\n          },\n          \"links\": [],\n          \"mappings\": [],\n          \"max\": 1,\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\"\n              },\n              {\n                \"color\": \"red\",\n                \"value\": 80\n              }\n            ]\n          },\n          \"unit\": \"percentunit\"\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 8,\n        \"w\": 12,\n        \"x\": 0,\n        \"y\": 22\n      },\n      \"id\": 471,\n      \"options\": {\n        \"legend\": {\n          \"calcs\": [],\n          \"displayMode\": \"list\",\n          \"placement\": \"bottom\",\n          \"showLegend\": true\n        },\n        \"tooltip\": {\n          \"hideZeros\": false,\n          \"mode\": \"multi\",\n          \"sort\": \"none\"\n        }\n      },\n      \"pluginVersion\": \"12.0.2\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"expr\": \"(ethereum_peer_count{instance=~\\\"$system\\\"} or besu_peer_count{instance=~\\\"$system\\\"})/(ethereum_peer_limit{instance=~\\\"$system\\\"} or ethereum_peer_limit{instance=~\\\"$system\\\"})\",\n          \"interval\": \"\",\n          \"legendFormat\": \"{{instance}}\",\n          \"refId\": \"A\"\n        }\n      ],\n      \"title\": \"Connected Peers\",\n      \"type\": \"timeseries\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"description\": \"\",\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"palette-classic\"\n          },\n          \"custom\": {\n            \"axisBorderShow\": false,\n            \"axisCenteredZero\": false,\n            \"axisColorMode\": \"text\",\n            \"axisLabel\": \"\",\n            \"axisPlacement\": \"auto\",\n            \"barAlignment\": 0,\n            \"barWidthFactor\": 0.6,\n            \"drawStyle\": \"line\",\n            \"fillOpacity\": 10,\n            \"gradientMode\": \"none\",\n            \"hideFrom\": {\n              \"legend\": false,\n              \"tooltip\": false,\n              \"viz\": false\n            },\n            \"insertNulls\": false,\n            \"lineInterpolation\": \"linear\",\n            \"lineWidth\": 1,\n            \"pointSize\": 5,\n            \"scaleDistribution\": {\n              \"type\": \"linear\"\n            },\n            \"showPoints\": \"never\",\n            \"spanNulls\": false,\n            \"stacking\": {\n              \"group\": \"A\",\n              \"mode\": \"none\"\n            },\n            \"thresholdsStyle\": {\n              \"mode\": \"off\"\n            }\n          },\n          \"links\": [],\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\"\n              },\n              {\n                \"color\": \"red\",\n                \"value\": 80\n              }\n            ]\n          },\n          \"unit\": \"none\"\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 8,\n        \"w\": 12,\n        \"x\": 12,\n        \"y\": 22\n      },\n      \"id\": 472,\n      \"options\": {\n        \"legend\": {\n          \"calcs\": [\n            \"min\",\n            \"mean\",\n            \"max\",\n            \"lastNotNull\"\n          ],\n          \"displayMode\": \"table\",\n          \"placement\": \"bottom\",\n          \"showLegend\": true,\n          \"sortBy\": \"Mean\",\n          \"sortDesc\": true\n        },\n        \"tooltip\": {\n          \"hideZeros\": false,\n          \"mode\": \"multi\",\n          \"sort\": \"none\"\n        }\n      },\n      \"pluginVersion\": \"12.0.2\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"editorMode\": \"code\",\n          \"expr\": \"irate(besu_blockchain_chain_head_transaction_count_counter_total{instance=~\\\"$system\\\"}[1h]) * besu_synchronizer_in_sync{instance=~\\\"$system\\\"}\",\n          \"interval\": \"\",\n          \"legendFormat\": \"{{instance}}\",\n          \"range\": true,\n          \"refId\": \"A\"\n        }\n      ],\n      \"title\": \"Network Transactions Per Second (TPS)\",\n      \"type\": \"timeseries\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"description\": \"Describes the number of connected peers as a percentage of the maximum number of peers that can connect to the node.\",\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"palette-classic\"\n          },\n          \"custom\": {\n            \"axisBorderShow\": false,\n            \"axisCenteredZero\": false,\n            \"axisColorMode\": \"text\",\n            \"axisLabel\": \"\",\n            \"axisPlacement\": \"auto\",\n            \"barAlignment\": 0,\n            \"barWidthFactor\": 0.6,\n            \"drawStyle\": \"line\",\n            \"fillOpacity\": 10,\n            \"gradientMode\": \"none\",\n            \"hideFrom\": {\n              \"legend\": false,\n              \"tooltip\": false,\n              \"viz\": false\n            },\n            \"insertNulls\": false,\n            \"lineInterpolation\": \"linear\",\n            \"lineWidth\": 1,\n            \"pointSize\": 5,\n            \"scaleDistribution\": {\n              \"type\": \"linear\"\n            },\n            \"showPoints\": \"never\",\n            \"spanNulls\": false,\n            \"stacking\": {\n              \"group\": \"A\",\n              \"mode\": \"none\"\n            },\n            \"thresholdsStyle\": {\n              \"mode\": \"off\"\n            }\n          },\n          \"links\": [],\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\"\n              },\n              {\n                \"color\": \"red\",\n                \"value\": 80\n              }\n            ]\n          },\n          \"unit\": \"none\"\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 8,\n        \"w\": 12,\n        \"x\": 0,\n        \"y\": 30\n      },\n      \"id\": 473,\n      \"options\": {\n        \"legend\": {\n          \"calcs\": [\n            \"min\",\n            \"mean\",\n            \"max\",\n            \"lastNotNull\"\n          ],\n          \"displayMode\": \"table\",\n          \"placement\": \"bottom\",\n          \"showLegend\": true,\n          \"sortBy\": \"Mean\",\n          \"sortDesc\": true\n        },\n        \"tooltip\": {\n          \"hideZeros\": false,\n          \"mode\": \"multi\",\n          \"sort\": \"none\"\n        }\n      },\n      \"pluginVersion\": \"12.0.2\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"editorMode\": \"code\",\n          \"expr\": \"(irate(besu_blockchain_chain_head_gas_used_counter_total{instance=~\\\"$system\\\"}[1h])/1000000) * besu_synchronizer_in_sync{instance=~\\\"$system\\\"}\",\n          \"interval\": \"\",\n          \"legendFormat\": \"{{instance}}\",\n          \"range\": true,\n          \"refId\": \"A\"\n        }\n      ],\n      \"title\": \"Network throughput (Mgas/s)\",\n      \"type\": \"timeseries\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"description\": \"\",\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"palette-classic\"\n          },\n          \"custom\": {\n            \"axisBorderShow\": false,\n            \"axisCenteredZero\": false,\n            \"axisColorMode\": \"text\",\n            \"axisLabel\": \"\",\n            \"axisPlacement\": \"auto\",\n            \"barAlignment\": 0,\n            \"barWidthFactor\": 0.6,\n            \"drawStyle\": \"line\",\n            \"fillOpacity\": 10,\n            \"gradientMode\": \"none\",\n            \"hideFrom\": {\n              \"legend\": false,\n              \"tooltip\": false,\n              \"viz\": false\n            },\n            \"insertNulls\": false,\n            \"lineInterpolation\": \"linear\",\n            \"lineWidth\": 1,\n            \"pointSize\": 5,\n            \"scaleDistribution\": {\n              \"type\": \"linear\"\n            },\n            \"showPoints\": \"never\",\n            \"spanNulls\": false,\n            \"stacking\": {\n              \"group\": \"A\",\n              \"mode\": \"none\"\n            },\n            \"thresholdsStyle\": {\n              \"mode\": \"off\"\n            }\n          },\n          \"links\": [],\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\"\n              },\n              {\n                \"color\": \"red\",\n                \"value\": 80\n              }\n            ]\n          },\n          \"unit\": \"none\"\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 8,\n        \"w\": 12,\n        \"x\": 12,\n        \"y\": 30\n      },\n      \"id\": 474,\n      \"options\": {\n        \"legend\": {\n          \"calcs\": [\n            \"min\",\n            \"mean\",\n            \"max\",\n            \"lastNotNull\"\n          ],\n          \"displayMode\": \"table\",\n          \"placement\": \"bottom\",\n          \"showLegend\": true,\n          \"sortBy\": \"Mean\",\n          \"sortDesc\": true\n        },\n        \"tooltip\": {\n          \"hideZeros\": false,\n          \"mode\": \"multi\",\n          \"sort\": \"none\"\n        }\n      },\n      \"pluginVersion\": \"12.0.2\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"editorMode\": \"code\",\n          \"expr\": \"irate(besu_block_processing_parallelized_transactions_counter_total{instance=~\\\"$system\\\"}[1h])\",\n          \"interval\": \"\",\n          \"legendFormat\": \"Parallel Tx {{instance}}\",\n          \"range\": true,\n          \"refId\": \"A\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"editorMode\": \"code\",\n          \"expr\": \"irate(besu_block_processing_conflicted_transactions_counter_total{instance=~\\\"$system\\\"}[1h])\",\n          \"hide\": false,\n          \"interval\": \"\",\n          \"legendFormat\": \"Conflicting Tx {{instance}}\",\n          \"range\": true,\n          \"refId\": \"B\"\n        }\n      ],\n      \"title\": \"Parallel vs Conflicting transactions\",\n      \"type\": \"timeseries\"\n    },\n    {\n      \"collapsed\": true,\n      \"gridPos\": {\n        \"h\": 1,\n        \"w\": 24,\n        \"x\": 0,\n        \"y\": 38\n      },\n      \"id\": 475,\n      \"panels\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"description\": \"\",\n          \"fieldConfig\": {\n            \"defaults\": {\n              \"color\": {\n                \"mode\": \"palette-classic\"\n              },\n              \"custom\": {\n                \"axisBorderShow\": false,\n                \"axisCenteredZero\": false,\n                \"axisColorMode\": \"text\",\n                \"axisLabel\": \"\",\n                \"axisPlacement\": \"auto\",\n                \"barAlignment\": 0,\n                \"barWidthFactor\": 0.6,\n                \"drawStyle\": \"line\",\n                \"fillOpacity\": 0,\n                \"gradientMode\": \"none\",\n                \"hideFrom\": {\n                  \"legend\": false,\n                  \"tooltip\": false,\n                  \"viz\": false\n                },\n                \"insertNulls\": false,\n                \"lineInterpolation\": \"linear\",\n                \"lineWidth\": 1,\n                \"pointSize\": 5,\n                \"scaleDistribution\": {\n                  \"type\": \"linear\"\n                },\n                \"showPoints\": \"auto\",\n                \"spanNulls\": false,\n                \"stacking\": {\n                  \"group\": \"A\",\n                  \"mode\": \"none\"\n                },\n                \"thresholdsStyle\": {\n                  \"mode\": \"off\"\n                }\n              },\n              \"mappings\": [],\n              \"thresholds\": {\n                \"mode\": \"absolute\",\n                \"steps\": [\n                  {\n                    \"color\": \"green\"\n                  },\n                  {\n                    \"color\": \"red\",\n                    \"value\": 80\n                  }\n                ]\n              }\n            },\n            \"overrides\": []\n          },\n          \"gridPos\": {\n            \"h\": 10,\n            \"w\": 24,\n            \"x\": 0,\n            \"y\": 74\n          },\n          \"id\": 124,\n          \"maxPerRow\": 2,\n          \"options\": {\n            \"legend\": {\n              \"calcs\": [\n                \"min\",\n                \"max\",\n                \"mean\",\n                \"last\"\n              ],\n              \"displayMode\": \"table\",\n              \"placement\": \"bottom\",\n              \"showLegend\": true,\n              \"sortBy\": \"Mean\",\n              \"sortDesc\": false\n            },\n            \"tooltip\": {\n              \"mode\": \"single\",\n              \"sort\": \"none\"\n            }\n          },\n          \"pluginVersion\": \"11.3.0\",\n          \"repeat\": \"overview_engine_percentiles\",\n          \"repeatDirection\": \"h\",\n          \"targets\": [\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"PBFA97CFB590B2093\"\n              },\n              \"editorMode\": \"code\",\n              \"exemplar\": true,\n              \"expr\": \"besu_rpc_request_time{instance=~\\\"$system\\\", methodName=~\\\"engine_newPayloadV.*\\\", quantile=~\\\"$overview_engine_percentiles\\\"}\",\n              \"interval\": \"\",\n              \"legendFormat\": \"{{methodName}} ({{instance}})\",\n              \"range\": true,\n              \"refId\": \"A\"\n            }\n          ],\n          \"title\": \"newPayload time (quantile $overview_engine_percentiles)\",\n          \"type\": \"timeseries\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"description\": \"\",\n          \"fieldConfig\": {\n            \"defaults\": {\n              \"color\": {\n                \"mode\": \"palette-classic\"\n              },\n              \"custom\": {\n                \"axisBorderShow\": false,\n                \"axisCenteredZero\": false,\n                \"axisColorMode\": \"text\",\n                \"axisLabel\": \"\",\n                \"axisPlacement\": \"auto\",\n                \"barAlignment\": 0,\n                \"drawStyle\": \"line\",\n                \"fillOpacity\": 0,\n                \"gradientMode\": \"none\",\n                \"hideFrom\": {\n                  \"legend\": false,\n                  \"tooltip\": false,\n                  \"viz\": false\n                },\n                \"insertNulls\": false,\n                \"lineInterpolation\": \"linear\",\n                \"lineWidth\": 1,\n                \"pointSize\": 5,\n                \"scaleDistribution\": {\n                  \"type\": \"linear\"\n                },\n                \"showPoints\": \"auto\",\n                \"spanNulls\": false,\n                \"stacking\": {\n                  \"group\": \"A\",\n                  \"mode\": \"none\"\n                },\n                \"thresholdsStyle\": {\n                  \"mode\": \"off\"\n                }\n              },\n              \"mappings\": [],\n              \"thresholds\": {\n                \"mode\": \"absolute\",\n                \"steps\": [\n                  {\n                    \"color\": \"green\"\n                  },\n                  {\n                    \"color\": \"red\",\n                    \"value\": 80\n                  }\n                ]\n              }\n            },\n            \"overrides\": []\n          },\n          \"gridPos\": {\n            \"h\": 10,\n            \"w\": 24,\n            \"x\": 0,\n            \"y\": 583\n          },\n          \"id\": 128,\n          \"maxPerRow\": 2,\n          \"options\": {\n            \"legend\": {\n              \"calcs\": [\n                \"min\",\n                \"max\",\n                \"mean\",\n                \"last\"\n              ],\n              \"displayMode\": \"table\",\n              \"placement\": \"bottom\",\n              \"showLegend\": true,\n              \"sortBy\": \"Mean\",\n              \"sortDesc\": false\n            },\n            \"tooltip\": {\n              \"mode\": \"single\",\n              \"sort\": \"none\"\n            }\n          },\n          \"repeat\": \"overview_engine_percentiles\",\n          \"repeatDirection\": \"h\",\n          \"targets\": [\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"PBFA97CFB590B2093\"\n              },\n              \"editorMode\": \"code\",\n              \"exemplar\": true,\n              \"expr\": \"besu_rpc_request_time{instance=~\\\"$system\\\", methodName=~\\\"engine_forkchoiceUpdatedV.*\\\", quantile=~\\\"$overview_engine_percentiles\\\"}\",\n              \"interval\": \"\",\n              \"legendFormat\": \"{{methodName}} ({{instance}})\",\n              \"range\": true,\n              \"refId\": \"A\"\n            }\n          ],\n          \"title\": \"forkchoiceUpdated time (quantile $overview_engine_percentiles)\",\n          \"type\": \"timeseries\"\n        }\n      ],\n      \"title\": \"Execution Engine Details\",\n      \"type\": \"row\"\n    },\n    {\n      \"collapsed\": true,\n      \"gridPos\": {\n        \"h\": 1,\n        \"w\": 24,\n        \"x\": 0,\n        \"y\": 39\n      },\n      \"id\": 476,\n      \"panels\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"fieldConfig\": {\n            \"defaults\": {\n              \"color\": {\n                \"mode\": \"palette-classic\"\n              },\n              \"custom\": {\n                \"axisBorderShow\": false,\n                \"axisCenteredZero\": false,\n                \"axisColorMode\": \"text\",\n                \"axisLabel\": \"\",\n                \"axisPlacement\": \"auto\",\n                \"barAlignment\": 0,\n                \"barWidthFactor\": 0.6,\n                \"drawStyle\": \"line\",\n                \"fillOpacity\": 10,\n                \"gradientMode\": \"none\",\n                \"hideFrom\": {\n                  \"legend\": false,\n                  \"tooltip\": false,\n                  \"viz\": false\n                },\n                \"insertNulls\": false,\n                \"lineInterpolation\": \"linear\",\n                \"lineWidth\": 1,\n                \"pointSize\": 5,\n                \"scaleDistribution\": {\n                  \"type\": \"linear\"\n                },\n                \"showPoints\": \"never\",\n                \"spanNulls\": false,\n                \"stacking\": {\n                  \"group\": \"A\",\n                  \"mode\": \"none\"\n                },\n                \"thresholdsStyle\": {\n                  \"mode\": \"off\"\n                }\n              },\n              \"links\": [],\n              \"mappings\": [],\n              \"thresholds\": {\n                \"mode\": \"absolute\",\n                \"steps\": [\n                  {\n                    \"color\": \"green\"\n                  },\n                  {\n                    \"color\": \"red\",\n                    \"value\": 80\n                  }\n                ]\n              },\n              \"unit\": \"percentunit\"\n            },\n            \"overrides\": []\n          },\n          \"gridPos\": {\n            \"h\": 11,\n            \"w\": 12,\n            \"x\": 0,\n            \"y\": 40\n          },\n          \"id\": 134,\n          \"options\": {\n            \"legend\": {\n              \"calcs\": [],\n              \"displayMode\": \"list\",\n              \"placement\": \"bottom\",\n              \"showLegend\": true\n            },\n            \"tooltip\": {\n              \"hideZeros\": false,\n              \"mode\": \"multi\",\n              \"sort\": \"none\"\n            }\n          },\n          \"pluginVersion\": \"12.0.2\",\n          \"targets\": [\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"PBFA97CFB590B2093\"\n              },\n              \"editorMode\": \"code\",\n              \"expr\": \"rate(jvm_gc_collection_seconds_sum{instance=~\\\"$system\\\", job=~\\\".*besu.*|execution.*\\\"}[1m])\",\n              \"format\": \"time_series\",\n              \"interval\": \"\",\n              \"intervalFactor\": 5,\n              \"legendFormat\": \"{{gc}} [{{instance}}]\",\n              \"metric\": \"jvm_gc_collection_seconds_sum\",\n              \"range\": true,\n              \"refId\": \"A\",\n              \"step\": 10\n            }\n          ],\n          \"title\": \"GC time\",\n          \"type\": \"timeseries\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"fieldConfig\": {\n            \"defaults\": {\n              \"color\": {\n                \"mode\": \"palette-classic\"\n              },\n              \"custom\": {\n                \"axisBorderShow\": false,\n                \"axisCenteredZero\": false,\n                \"axisColorMode\": \"text\",\n                \"axisLabel\": \"\",\n                \"axisPlacement\": \"auto\",\n                \"barAlignment\": 0,\n                \"barWidthFactor\": 0.6,\n                \"drawStyle\": \"line\",\n                \"fillOpacity\": 10,\n                \"gradientMode\": \"none\",\n                \"hideFrom\": {\n                  \"legend\": false,\n                  \"tooltip\": false,\n                  \"viz\": false\n                },\n                \"insertNulls\": false,\n                \"lineInterpolation\": \"linear\",\n                \"lineWidth\": 1,\n                \"pointSize\": 5,\n                \"scaleDistribution\": {\n                  \"type\": \"linear\"\n                },\n                \"showPoints\": \"never\",\n                \"spanNulls\": false,\n                \"stacking\": {\n                  \"group\": \"A\",\n                  \"mode\": \"none\"\n                },\n                \"thresholdsStyle\": {\n                  \"mode\": \"off\"\n                }\n              },\n              \"links\": [],\n              \"mappings\": [],\n              \"thresholds\": {\n                \"mode\": \"absolute\",\n                \"steps\": [\n                  {\n                    \"color\": \"green\"\n                  },\n                  {\n                    \"color\": \"red\",\n                    \"value\": 80\n                  }\n                ]\n              },\n              \"unit\": \"decbytes\"\n            },\n            \"overrides\": []\n          },\n          \"gridPos\": {\n            \"h\": 11,\n            \"w\": 12,\n            \"x\": 12,\n            \"y\": 40\n          },\n          \"id\": 136,\n          \"options\": {\n            \"legend\": {\n              \"calcs\": [\n                \"mean\",\n                \"lastNotNull\",\n                \"max\",\n                \"min\"\n              ],\n              \"displayMode\": \"table\",\n              \"placement\": \"bottom\",\n              \"showLegend\": true\n            },\n            \"tooltip\": {\n              \"hideZeros\": false,\n              \"mode\": \"multi\",\n              \"sort\": \"none\"\n            }\n          },\n          \"pluginVersion\": \"12.0.2\",\n          \"targets\": [\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"PBFA97CFB590B2093\"\n              },\n              \"editorMode\": \"code\",\n              \"expr\": \"(jvm_memory_bytes_used{instance=~\\\"$system\\\", area=\\\"heap\\\", job=~\\\".*besu.*|execution.*\\\"} + ignoring(area) jvm_memory_bytes_used{instance=~\\\"$system\\\", area=\\\"nonheap\\\", job=~\\\".*besu.*|execution.*\\\"}) or (jvm_memory_used_bytes{instance=~\\\"$system\\\", area=\\\"heap\\\", job=~\\\".*besu.*|execution.*\\\"} + ignoring(area) jvm_memory_used_bytes{instance=~\\\"$system\\\", area=\\\"nonheap\\\", job=~\\\".*besu.*|execution.*\\\"})\",\n              \"format\": \"time_series\",\n              \"intervalFactor\": 5,\n              \"legendFormat\": \"{{instance}}\",\n              \"range\": true,\n              \"refId\": \"A\"\n            }\n          ],\n          \"title\": \"Java Memory Used (heap+nonheap)\",\n          \"type\": \"timeseries\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"fieldConfig\": {\n            \"defaults\": {\n              \"color\": {\n                \"mode\": \"palette-classic\"\n              },\n              \"custom\": {\n                \"axisBorderShow\": false,\n                \"axisCenteredZero\": false,\n                \"axisColorMode\": \"text\",\n                \"axisLabel\": \"\",\n                \"axisPlacement\": \"auto\",\n                \"barAlignment\": 0,\n                \"barWidthFactor\": 0.6,\n                \"drawStyle\": \"line\",\n                \"fillOpacity\": 10,\n                \"gradientMode\": \"none\",\n                \"hideFrom\": {\n                  \"legend\": false,\n                  \"tooltip\": false,\n                  \"viz\": false\n                },\n                \"insertNulls\": false,\n                \"lineInterpolation\": \"linear\",\n                \"lineWidth\": 1,\n                \"pointSize\": 5,\n                \"scaleDistribution\": {\n                  \"type\": \"linear\"\n                },\n                \"showPoints\": \"never\",\n                \"spanNulls\": false,\n                \"stacking\": {\n                  \"group\": \"A\",\n                  \"mode\": \"none\"\n                },\n                \"thresholdsStyle\": {\n                  \"mode\": \"off\"\n                }\n              },\n              \"links\": [],\n              \"mappings\": [],\n              \"thresholds\": {\n                \"mode\": \"absolute\",\n                \"steps\": [\n                  {\n                    \"color\": \"green\"\n                  },\n                  {\n                    \"color\": \"red\",\n                    \"value\": 80\n                  }\n                ]\n              },\n              \"unit\": \"decbytes\"\n            },\n            \"overrides\": []\n          },\n          \"gridPos\": {\n            \"h\": 11,\n            \"w\": 12,\n            \"x\": 0,\n            \"y\": 51\n          },\n          \"id\": 138,\n          \"options\": {\n            \"legend\": {\n              \"calcs\": [\n                \"mean\",\n                \"lastNotNull\",\n                \"max\",\n                \"min\"\n              ],\n              \"displayMode\": \"table\",\n              \"placement\": \"bottom\",\n              \"showLegend\": true\n            },\n            \"tooltip\": {\n              \"hideZeros\": false,\n              \"mode\": \"multi\",\n              \"sort\": \"none\"\n            }\n          },\n          \"pluginVersion\": \"12.0.2\",\n          \"targets\": [\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"PBFA97CFB590B2093\"\n              },\n              \"editorMode\": \"code\",\n              \"exemplar\": true,\n              \"expr\": \"(jvm_memory_bytes_committed{instance=~\\\"$system\\\", area=\\\"heap\\\", job=~\\\".*besu.*|execution.*\\\"} + ignoring(area) jvm_memory_bytes_committed{instance=~\\\"$system\\\", area=\\\"nonheap\\\", job=~\\\".*besu.*|execution.*\\\"}) or (jvm_memory_committed_bytes{instance=~\\\"$system\\\", area=\\\"heap\\\", job=~\\\".*besu.*|execution.*\\\"} + ignoring(area) jvm_memory_committed_bytes{instance=~\\\"$system\\\", area=\\\"nonheap\\\", job=~\\\".*besu.*|execution.*\\\"})\",\n              \"format\": \"time_series\",\n              \"interval\": \"\",\n              \"intervalFactor\": 5,\n              \"legendFormat\": \"{{instance}}\",\n              \"range\": true,\n              \"refId\": \"A\"\n            }\n          ],\n          \"title\": \"Java Memory Committed (heap+nonheap)\",\n          \"type\": \"timeseries\"\n        }\n      ],\n      \"title\": \"Java Memory Management\",\n      \"type\": \"row\"\n    },\n    {\n      \"collapsed\": true,\n      \"gridPos\": {\n        \"h\": 1,\n        \"w\": 24,\n        \"x\": 0,\n        \"y\": 40\n      },\n      \"id\": 477,\n      \"panels\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"fieldConfig\": {\n            \"defaults\": {\n              \"color\": {\n                \"mode\": \"palette-classic\"\n              },\n              \"custom\": {\n                \"axisBorderShow\": false,\n                \"axisCenteredZero\": false,\n                \"axisColorMode\": \"text\",\n                \"axisLabel\": \"\",\n                \"axisPlacement\": \"auto\",\n                \"barAlignment\": 0,\n                \"barWidthFactor\": 0.6,\n                \"drawStyle\": \"line\",\n                \"fillOpacity\": 0,\n                \"gradientMode\": \"none\",\n                \"hideFrom\": {\n                  \"legend\": false,\n                  \"tooltip\": false,\n                  \"viz\": false\n                },\n                \"insertNulls\": false,\n                \"lineInterpolation\": \"linear\",\n                \"lineWidth\": 1,\n                \"pointSize\": 5,\n                \"scaleDistribution\": {\n                  \"type\": \"linear\"\n                },\n                \"showPoints\": \"auto\",\n                \"spanNulls\": false,\n                \"stacking\": {\n                  \"group\": \"A\",\n                  \"mode\": \"none\"\n                },\n                \"thresholdsStyle\": {\n                  \"mode\": \"off\"\n                }\n              },\n              \"mappings\": [],\n              \"thresholds\": {\n                \"mode\": \"absolute\",\n                \"steps\": [\n                  {\n                    \"color\": \"green\"\n                  },\n                  {\n                    \"color\": \"red\",\n                    \"value\": 80\n                  }\n                ]\n              },\n              \"unit\": \"percentunit\"\n            },\n            \"overrides\": []\n          },\n          \"gridPos\": {\n            \"h\": 9,\n            \"w\": 12,\n            \"x\": 0,\n            \"y\": 1393\n          },\n          \"id\": 154,\n          \"options\": {\n            \"legend\": {\n              \"calcs\": [\n                \"min\",\n                \"max\",\n                \"mean\",\n                \"lastNotNull\"\n              ],\n              \"displayMode\": \"table\",\n              \"placement\": \"bottom\",\n              \"showLegend\": true\n            },\n            \"tooltip\": {\n              \"hideZeros\": false,\n              \"mode\": \"single\",\n              \"sort\": \"none\"\n            }\n          },\n          \"pluginVersion\": \"12.0.2\",\n          \"targets\": [\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"PBFA97CFB590B2093\"\n              },\n              \"editorMode\": \"code\",\n              \"exemplar\": true,\n              \"expr\": \"guava_cache_hit_total{instance=~\\\"$system\\\", cache=\\\"storageNodes\\\"}/(guava_cache_hit_total{instance=~\\\"$system\\\", cache=\\\"storageNodes\\\"}+guava_cache_miss_total{instance=~\\\"$system\\\", cache=\\\"storageNodes\\\"})\",\n              \"interval\": \"\",\n              \"legendFormat\": \"Hit ratio - instance {{instance}}\",\n              \"range\": true,\n              \"refId\": \"A\"\n            }\n          ],\n          \"title\": \"Storage Preload cache\",\n          \"type\": \"timeseries\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"fieldConfig\": {\n            \"defaults\": {\n              \"color\": {\n                \"mode\": \"palette-classic\"\n              },\n              \"custom\": {\n                \"axisBorderShow\": false,\n                \"axisCenteredZero\": false,\n                \"axisColorMode\": \"text\",\n                \"axisLabel\": \"\",\n                \"axisPlacement\": \"auto\",\n                \"barAlignment\": 0,\n                \"barWidthFactor\": 0.6,\n                \"drawStyle\": \"line\",\n                \"fillOpacity\": 0,\n                \"gradientMode\": \"none\",\n                \"hideFrom\": {\n                  \"legend\": false,\n                  \"tooltip\": false,\n                  \"viz\": false\n                },\n                \"insertNulls\": false,\n                \"lineInterpolation\": \"linear\",\n                \"lineWidth\": 1,\n                \"pointSize\": 5,\n                \"scaleDistribution\": {\n                  \"type\": \"linear\"\n                },\n                \"showPoints\": \"auto\",\n                \"spanNulls\": false,\n                \"stacking\": {\n                  \"group\": \"A\",\n                  \"mode\": \"none\"\n                },\n                \"thresholdsStyle\": {\n                  \"mode\": \"off\"\n                }\n              },\n              \"mappings\": [],\n              \"thresholds\": {\n                \"mode\": \"absolute\",\n                \"steps\": [\n                  {\n                    \"color\": \"green\"\n                  },\n                  {\n                    \"color\": \"red\",\n                    \"value\": 80\n                  }\n                ]\n              },\n              \"unit\": \"percentunit\"\n            },\n            \"overrides\": []\n          },\n          \"gridPos\": {\n            \"h\": 9,\n            \"w\": 12,\n            \"x\": 12,\n            \"y\": 1393\n          },\n          \"id\": 205,\n          \"options\": {\n            \"legend\": {\n              \"calcs\": [\n                \"min\",\n                \"max\",\n                \"mean\",\n                \"lastNotNull\"\n              ],\n              \"displayMode\": \"table\",\n              \"placement\": \"bottom\",\n              \"showLegend\": true\n            },\n            \"tooltip\": {\n              \"hideZeros\": false,\n              \"mode\": \"single\",\n              \"sort\": \"none\"\n            }\n          },\n          \"pluginVersion\": \"12.0.2\",\n          \"targets\": [\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"PBFA97CFB590B2093\"\n              },\n              \"editorMode\": \"code\",\n              \"exemplar\": true,\n              \"expr\": \"guava_cache_hit_total{instance=~\\\"$system\\\", cache=\\\"accountsNodes\\\"}/(guava_cache_hit_total{instance=~\\\"$system\\\", cache=\\\"accountsNodes\\\"}+guava_cache_miss_total{instance=~\\\"$system\\\", cache=\\\"accountsNodes\\\"})\",\n              \"interval\": \"\",\n              \"legendFormat\": \"Hit ratio - instance {{instance}}\",\n              \"range\": true,\n              \"refId\": \"A\"\n            }\n          ],\n          \"title\": \"Accounts Preload cache\",\n          \"type\": \"timeseries\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"fieldConfig\": {\n            \"defaults\": {\n              \"color\": {\n                \"mode\": \"palette-classic\"\n              },\n              \"custom\": {\n                \"axisBorderShow\": false,\n                \"axisCenteredZero\": false,\n                \"axisColorMode\": \"text\",\n                \"axisLabel\": \"\",\n                \"axisPlacement\": \"auto\",\n                \"barAlignment\": 0,\n                \"barWidthFactor\": 0.6,\n                \"drawStyle\": \"line\",\n                \"fillOpacity\": 0,\n                \"gradientMode\": \"none\",\n                \"hideFrom\": {\n                  \"legend\": false,\n                  \"tooltip\": false,\n                  \"viz\": false\n                },\n                \"insertNulls\": false,\n                \"lineInterpolation\": \"linear\",\n                \"lineWidth\": 1,\n                \"pointSize\": 5,\n                \"scaleDistribution\": {\n                  \"type\": \"linear\"\n                },\n                \"showPoints\": \"auto\",\n                \"spanNulls\": false,\n                \"stacking\": {\n                  \"group\": \"A\",\n                  \"mode\": \"none\"\n                },\n                \"thresholdsStyle\": {\n                  \"mode\": \"off\"\n                }\n              },\n              \"mappings\": [],\n              \"thresholds\": {\n                \"mode\": \"absolute\",\n                \"steps\": [\n                  {\n                    \"color\": \"green\"\n                  },\n                  {\n                    \"color\": \"red\",\n                    \"value\": 80\n                  }\n                ]\n              },\n              \"unit\": \"percentunit\"\n            },\n            \"overrides\": []\n          },\n          \"gridPos\": {\n            \"h\": 9,\n            \"w\": 12,\n            \"x\": 0,\n            \"y\": 1402\n          },\n          \"id\": 239,\n          \"options\": {\n            \"legend\": {\n              \"calcs\": [\n                \"min\",\n                \"max\",\n                \"mean\",\n                \"last\"\n              ],\n              \"displayMode\": \"table\",\n              \"placement\": \"bottom\",\n              \"showLegend\": true\n            },\n            \"timezone\": [\n              \"Africa/Addis_Ababa\"\n            ],\n            \"tooltip\": {\n              \"hideZeros\": false,\n              \"mode\": \"single\",\n              \"sort\": \"none\"\n            }\n          },\n          \"pluginVersion\": \"12.0.2\",\n          \"targets\": [\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"PBFA97CFB590B2093\"\n              },\n              \"editorMode\": \"code\",\n              \"exemplar\": true,\n              \"expr\": \"rate(besu_blockchain_get_account_flat_database{instance=~\\\"$system\\\"}[$__rate_interval])/rate(besu_blockchain_get_account_total{instance=~\\\"$system\\\"}[$__rate_interval]) or rate(besu_blockchain_get_account_flat_database_total{instance=~\\\"$system\\\"}[$__rate_interval])/rate(besu_blockchain_get_account_total{instance=~\\\"$system\\\"}[$__rate_interval])\",\n              \"interval\": \"\",\n              \"legendFormat\": \"Flat database hit ratio - accounts {{instance}}\",\n              \"range\": true,\n              \"refId\": \"A\"\n            },\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"PBFA97CFB590B2093\"\n              },\n              \"editorMode\": \"code\",\n              \"exemplar\": true,\n              \"expr\": \"rate(besu_blockchain_get_account_merkle_trie{instance=~\\\"$system\\\"}[$__rate_interval])/rate(besu_blockchain_get_account_total{instance=~\\\"$system\\\"}[$__rate_interval]) or rate(besu_blockchain_get_account_merkle_trie_total{instance=~\\\"$system\\\"}[$__rate_interval])/rate(besu_blockchain_get_account_total{instance=~\\\"$system\\\"}[$__rate_interval])\",\n              \"hide\": false,\n              \"interval\": \"\",\n              \"legendFormat\": \"% Merkle Patricia Trie Hits found - accounts {{instance}}\",\n              \"range\": true,\n              \"refId\": \"B\"\n            },\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"PBFA97CFB590B2093\"\n              },\n              \"editorMode\": \"code\",\n              \"exemplar\": true,\n              \"expr\": \"rate(besu_blockchain_get_account_missing_merkle_trie{instance=~\\\"$system\\\"}[$__rate_interval])/rate(besu_blockchain_get_account_total{instance=~\\\"$system\\\"}[$__rate_interval]) or rate(besu_blockchain_get_account_missing_merkle_trie_total{instance=~\\\"$system\\\"}[$__rate_interval])/rate(besu_blockchain_get_account_total{instance=~\\\"$system\\\"}[$__rate_interval])\",\n              \"hide\": false,\n              \"interval\": \"\",\n              \"legendFormat\": \"% Merkle Patricia Trie Hits missing - accounts {{instance}}\",\n              \"range\": true,\n              \"refId\": \"C\"\n            }\n          ],\n          \"title\": \"Account Flat Database hit ratio\",\n          \"type\": \"timeseries\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"fieldConfig\": {\n            \"defaults\": {\n              \"color\": {\n                \"mode\": \"palette-classic\"\n              },\n              \"custom\": {\n                \"axisBorderShow\": false,\n                \"axisCenteredZero\": false,\n                \"axisColorMode\": \"text\",\n                \"axisLabel\": \"\",\n                \"axisPlacement\": \"auto\",\n                \"barAlignment\": 0,\n                \"barWidthFactor\": 0.6,\n                \"drawStyle\": \"line\",\n                \"fillOpacity\": 0,\n                \"gradientMode\": \"none\",\n                \"hideFrom\": {\n                  \"legend\": false,\n                  \"tooltip\": false,\n                  \"viz\": false\n                },\n                \"insertNulls\": false,\n                \"lineInterpolation\": \"linear\",\n                \"lineWidth\": 1,\n                \"pointSize\": 5,\n                \"scaleDistribution\": {\n                  \"type\": \"linear\"\n                },\n                \"showPoints\": \"auto\",\n                \"spanNulls\": false,\n                \"stacking\": {\n                  \"group\": \"A\",\n                  \"mode\": \"none\"\n                },\n                \"thresholdsStyle\": {\n                  \"mode\": \"off\"\n                }\n              },\n              \"mappings\": [],\n              \"thresholds\": {\n                \"mode\": \"absolute\",\n                \"steps\": [\n                  {\n                    \"color\": \"green\"\n                  },\n                  {\n                    \"color\": \"red\",\n                    \"value\": 80\n                  }\n                ]\n              },\n              \"unit\": \"percentunit\"\n            },\n            \"overrides\": []\n          },\n          \"gridPos\": {\n            \"h\": 9,\n            \"w\": 12,\n            \"x\": 12,\n            \"y\": 1402\n          },\n          \"id\": 240,\n          \"options\": {\n            \"legend\": {\n              \"calcs\": [\n                \"min\",\n                \"max\",\n                \"mean\",\n                \"last\"\n              ],\n              \"displayMode\": \"table\",\n              \"placement\": \"bottom\",\n              \"showLegend\": true,\n              \"sortBy\": \"Mean\",\n              \"sortDesc\": true\n            },\n            \"timezone\": [\n              \"Africa/Addis_Ababa\"\n            ],\n            \"tooltip\": {\n              \"hideZeros\": false,\n              \"mode\": \"single\",\n              \"sort\": \"none\"\n            }\n          },\n          \"pluginVersion\": \"12.0.2\",\n          \"targets\": [\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"PBFA97CFB590B2093\"\n              },\n              \"editorMode\": \"code\",\n              \"exemplar\": true,\n              \"expr\": \"rate(besu_blockchain_get_storagevalue_flat_database{instance=~\\\"$system\\\"}[$__rate_interval])/rate(besu_blockchain_get_storagevalue_total{instance=~\\\"$system\\\"}[$__rate_interval]) or rate(besu_blockchain_get_storagevalue_flat_database_total{instance=~\\\"$system\\\"}[$__rate_interval])/rate(besu_blockchain_get_storagevalue_total{instance=~\\\"$system\\\"}[$__rate_interval])\",\n              \"interval\": \"\",\n              \"legendFormat\": \"Flat database hit ratio - storage {{instance}}\",\n              \"range\": true,\n              \"refId\": \"A\"\n            },\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"PBFA97CFB590B2093\"\n              },\n              \"editorMode\": \"code\",\n              \"exemplar\": true,\n              \"expr\": \"rate(besu_blockchain_get_storagevalue_merkle_trie{instance=~\\\"$system\\\"}[$__rate_interval])/rate(besu_blockchain_get_storagevalue_total{instance=~\\\"$system\\\"}[$__rate_interval]) or rate(besu_blockchain_get_storagevalue_merkle_trie_total{instance=~\\\"$system\\\"}[$__rate_interval])/rate(besu_blockchain_get_storagevalue_total{instance=~\\\"$system\\\"}[$__rate_interval])\",\n              \"hide\": false,\n              \"interval\": \"\",\n              \"legendFormat\": \"% Merkle Patricia Trie Hits found - storage {{instance}}\",\n              \"range\": true,\n              \"refId\": \"B\"\n            },\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"PBFA97CFB590B2093\"\n              },\n              \"editorMode\": \"code\",\n              \"exemplar\": true,\n              \"expr\": \"rate(besu_blockchain_get_storagevalue_missing_merkle_trie{instance=~\\\"$system\\\"}[$__rate_interval])/rate(besu_blockchain_get_storagevalue_total{instance=~\\\"$system\\\"}[$__rate_interval]) or rate(besu_blockchain_get_storagevalue_missing_merkle_trie_total{instance=~\\\"$system\\\"}[$__rate_interval])/rate(besu_blockchain_get_storagevalue_total{instance=~\\\"$system\\\"}[$__rate_interval])\",\n              \"hide\": false,\n              \"interval\": \"\",\n              \"legendFormat\": \"% Merkle Patricia Trie Hits missing - storage {{instance}}\",\n              \"range\": true,\n              \"refId\": \"C\"\n            }\n          ],\n          \"title\": \"Storage Flat Database hit ratio\",\n          \"type\": \"timeseries\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"fieldConfig\": {\n            \"defaults\": {\n              \"color\": {\n                \"mode\": \"palette-classic\"\n              },\n              \"custom\": {\n                \"axisBorderShow\": false,\n                \"axisCenteredZero\": false,\n                \"axisColorMode\": \"text\",\n                \"axisLabel\": \"\",\n                \"axisPlacement\": \"auto\",\n                \"barAlignment\": 0,\n                \"barWidthFactor\": 0.6,\n                \"drawStyle\": \"bars\",\n                \"fillOpacity\": 65,\n                \"gradientMode\": \"none\",\n                \"hideFrom\": {\n                  \"legend\": false,\n                  \"tooltip\": false,\n                  \"viz\": false\n                },\n                \"insertNulls\": false,\n                \"lineInterpolation\": \"linear\",\n                \"lineWidth\": 1,\n                \"pointSize\": 5,\n                \"scaleDistribution\": {\n                  \"type\": \"linear\"\n                },\n                \"showPoints\": \"auto\",\n                \"spanNulls\": false,\n                \"stacking\": {\n                  \"group\": \"A\",\n                  \"mode\": \"normal\"\n                },\n                \"thresholdsStyle\": {\n                  \"mode\": \"off\"\n                }\n              },\n              \"mappings\": [],\n              \"thresholds\": {\n                \"mode\": \"absolute\",\n                \"steps\": [\n                  {\n                    \"color\": \"green\"\n                  },\n                  {\n                    \"color\": \"red\",\n                    \"value\": 80\n                  }\n                ]\n              },\n              \"unit\": \"none\"\n            },\n            \"overrides\": []\n          },\n          \"gridPos\": {\n            \"h\": 9,\n            \"w\": 12,\n            \"x\": 0,\n            \"y\": 1411\n          },\n          \"id\": 241,\n          \"options\": {\n            \"legend\": {\n              \"calcs\": [\n                \"min\",\n                \"max\",\n                \"mean\",\n                \"last\"\n              ],\n              \"displayMode\": \"table\",\n              \"placement\": \"bottom\",\n              \"showLegend\": true,\n              \"sortBy\": \"Last\",\n              \"sortDesc\": true\n            },\n            \"timezone\": [\n              \"Africa/Addis_Ababa\"\n            ],\n            \"tooltip\": {\n              \"hideZeros\": false,\n              \"mode\": \"single\",\n              \"sort\": \"none\"\n            }\n          },\n          \"pluginVersion\": \"12.0.2\",\n          \"targets\": [\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"PBFA97CFB590B2093\"\n              },\n              \"editorMode\": \"code\",\n              \"exemplar\": true,\n              \"expr\": \"rate(besu_blockchain_get_account_flat_database{instance=~\\\"$system\\\"}[$__rate_interval]) or rate(besu_blockchain_get_account_flat_database_total{instance=~\\\"$system\\\"}[$__rate_interval])\",\n              \"interval\": \"\",\n              \"legendFormat\": \"number of calls to the flat database - accounts {{instance}}\",\n              \"range\": true,\n              \"refId\": \"A\"\n            },\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"PBFA97CFB590B2093\"\n              },\n              \"editorMode\": \"code\",\n              \"exemplar\": true,\n              \"expr\": \"rate(besu_blockchain_get_account_merkle_trie{instance=~\\\"$system\\\"}[$__rate_interval]) or rate(besu_blockchain_get_account_merkle_trie_total{instance=~\\\"$system\\\"}[$__rate_interval])\",\n              \"hide\": false,\n              \"interval\": \"\",\n              \"legendFormat\": \"number of calls to the trie - accounts {{instance}}\",\n              \"range\": true,\n              \"refId\": \"B\"\n            },\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"PBFA97CFB590B2093\"\n              },\n              \"editorMode\": \"code\",\n              \"exemplar\": true,\n              \"expr\": \"rate(besu_blockchain_get_account_missing_merkle_trie{instance=~\\\"$system\\\"}[$__rate_interval]) or rate(besu_blockchain_get_account_missing_merkle_trie_total{instance=~\\\"$system\\\"}[$__rate_interval])\",\n              \"hide\": false,\n              \"interval\": \"\",\n              \"legendFormat\": \"number of calls to the trie with missing result - accounts {{instance}}\",\n              \"range\": true,\n              \"refId\": \"C\"\n            }\n          ],\n          \"title\": \"Account Flat Database - number of calls\",\n          \"type\": \"timeseries\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"fieldConfig\": {\n            \"defaults\": {\n              \"color\": {\n                \"mode\": \"palette-classic\"\n              },\n              \"custom\": {\n                \"axisBorderShow\": false,\n                \"axisCenteredZero\": false,\n                \"axisColorMode\": \"text\",\n                \"axisLabel\": \"\",\n                \"axisPlacement\": \"auto\",\n                \"barAlignment\": 0,\n                \"barWidthFactor\": 0.6,\n                \"drawStyle\": \"bars\",\n                \"fillOpacity\": 65,\n                \"gradientMode\": \"none\",\n                \"hideFrom\": {\n                  \"legend\": false,\n                  \"tooltip\": false,\n                  \"viz\": false\n                },\n                \"insertNulls\": false,\n                \"lineInterpolation\": \"linear\",\n                \"lineWidth\": 1,\n                \"pointSize\": 5,\n                \"scaleDistribution\": {\n                  \"type\": \"linear\"\n                },\n                \"showPoints\": \"auto\",\n                \"spanNulls\": false,\n                \"stacking\": {\n                  \"group\": \"A\",\n                  \"mode\": \"normal\"\n                },\n                \"thresholdsStyle\": {\n                  \"mode\": \"off\"\n                }\n              },\n              \"mappings\": [],\n              \"thresholds\": {\n                \"mode\": \"absolute\",\n                \"steps\": [\n                  {\n                    \"color\": \"green\"\n                  },\n                  {\n                    \"color\": \"red\",\n                    \"value\": 80\n                  }\n                ]\n              },\n              \"unit\": \"none\"\n            },\n            \"overrides\": []\n          },\n          \"gridPos\": {\n            \"h\": 9,\n            \"w\": 12,\n            \"x\": 12,\n            \"y\": 1411\n          },\n          \"id\": 242,\n          \"options\": {\n            \"legend\": {\n              \"calcs\": [\n                \"min\",\n                \"max\",\n                \"mean\",\n                \"last\"\n              ],\n              \"displayMode\": \"table\",\n              \"placement\": \"bottom\",\n              \"showLegend\": true\n            },\n            \"timezone\": [\n              \"Africa/Addis_Ababa\"\n            ],\n            \"tooltip\": {\n              \"hideZeros\": false,\n              \"mode\": \"single\",\n              \"sort\": \"none\"\n            }\n          },\n          \"pluginVersion\": \"12.0.2\",\n          \"targets\": [\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"PBFA97CFB590B2093\"\n              },\n              \"editorMode\": \"code\",\n              \"exemplar\": true,\n              \"expr\": \"irate(besu_blockchain_get_storagevalue_flat_database{instance=~\\\"$system\\\"}[$__rate_interval]) or irate(besu_blockchain_get_storagevalue_flat_database_total{instance=~\\\"$system\\\"}[$__rate_interval])\",\n              \"interval\": \"\",\n              \"legendFormat\": \"number of calls to the flat database - storage {{instance}}\",\n              \"range\": true,\n              \"refId\": \"A\"\n            },\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"PBFA97CFB590B2093\"\n              },\n              \"editorMode\": \"code\",\n              \"exemplar\": true,\n              \"expr\": \"irate(besu_blockchain_get_storagevalue_merkle_trie{instance=~\\\"$system\\\"}[$__rate_interval]) or irate(besu_blockchain_get_storagevalue_merkle_trie_total{instance=~\\\"$system\\\"}[$__rate_interval])\",\n              \"hide\": false,\n              \"interval\": \"\",\n              \"legendFormat\": \"number of calls to the trie - storage {{instance}}\",\n              \"range\": true,\n              \"refId\": \"B\"\n            },\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"PBFA97CFB590B2093\"\n              },\n              \"editorMode\": \"code\",\n              \"exemplar\": true,\n              \"expr\": \"irate(besu_blockchain_get_storagevalue_missing_merkle_trie{instance=~\\\"$system\\\"}[$__rate_interval]) or irate(besu_blockchain_get_storagevalue_missing_merkle_trie_total{instance=~\\\"$system\\\"}[$__rate_interval])\",\n              \"hide\": false,\n              \"interval\": \"\",\n              \"legendFormat\": \"number of calls to the trie with missing result- storage {{instance}}\",\n              \"range\": true,\n              \"refId\": \"C\"\n            }\n          ],\n          \"title\": \"Storage Flat Database - number of calls\",\n          \"type\": \"timeseries\"\n        }\n      ],\n      \"title\": \"Flat database and Preload caches\",\n      \"type\": \"row\"\n    },\n    {\n      \"collapsed\": true,\n      \"gridPos\": {\n        \"h\": 1,\n        \"w\": 24,\n        \"x\": 0,\n        \"y\": 41\n      },\n      \"id\": 478,\n      \"panels\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"fieldConfig\": {\n            \"defaults\": {\n              \"color\": {\n                \"mode\": \"palette-classic\"\n              },\n              \"custom\": {\n                \"axisBorderShow\": false,\n                \"axisCenteredZero\": false,\n                \"axisColorMode\": \"text\",\n                \"axisLabel\": \"\",\n                \"axisPlacement\": \"auto\",\n                \"barAlignment\": 0,\n                \"barWidthFactor\": 0.6,\n                \"drawStyle\": \"line\",\n                \"fillOpacity\": 10,\n                \"gradientMode\": \"none\",\n                \"hideFrom\": {\n                  \"legend\": false,\n                  \"tooltip\": false,\n                  \"viz\": false\n                },\n                \"insertNulls\": false,\n                \"lineInterpolation\": \"linear\",\n                \"lineWidth\": 1,\n                \"pointSize\": 5,\n                \"scaleDistribution\": {\n                  \"type\": \"linear\"\n                },\n                \"showPoints\": \"never\",\n                \"spanNulls\": false,\n                \"stacking\": {\n                  \"group\": \"A\",\n                  \"mode\": \"none\"\n                },\n                \"thresholdsStyle\": {\n                  \"mode\": \"off\"\n                }\n              },\n              \"links\": [],\n              \"mappings\": [],\n              \"thresholds\": {\n                \"mode\": \"absolute\",\n                \"steps\": [\n                  {\n                    \"color\": \"green\"\n                  },\n                  {\n                    \"color\": \"red\",\n                    \"value\": 80\n                  }\n                ]\n              },\n              \"unit\": \"bytes\"\n            },\n            \"overrides\": []\n          },\n          \"gridPos\": {\n            \"h\": 8,\n            \"w\": 12,\n            \"x\": 0,\n            \"y\": 42\n          },\n          \"id\": 142,\n          \"options\": {\n            \"legend\": {\n              \"calcs\": [\n                \"mean\",\n                \"lastNotNull\",\n                \"max\",\n                \"min\"\n              ],\n              \"displayMode\": \"table\",\n              \"placement\": \"bottom\",\n              \"showLegend\": true\n            },\n            \"tooltip\": {\n              \"hideZeros\": false,\n              \"mode\": \"multi\",\n              \"sort\": \"none\"\n            }\n          },\n          \"pluginVersion\": \"12.0.2\",\n          \"targets\": [\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"PBFA97CFB590B2093\"\n              },\n              \"expr\": \"node_filesystem_size_bytes{mountpoint=\\\"/data\\\", instance=~\\\"$system\\\"} \",\n              \"interval\": \"\",\n              \"legendFormat\": \"{{instance}} \",\n              \"refId\": \"A\"\n            }\n          ],\n          \"title\": \"Total disk on /data\",\n          \"type\": \"timeseries\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"fieldConfig\": {\n            \"defaults\": {\n              \"color\": {\n                \"mode\": \"palette-classic\"\n              },\n              \"custom\": {\n                \"axisBorderShow\": false,\n                \"axisCenteredZero\": false,\n                \"axisColorMode\": \"text\",\n                \"axisLabel\": \"\",\n                \"axisPlacement\": \"auto\",\n                \"barAlignment\": 0,\n                \"barWidthFactor\": 0.6,\n                \"drawStyle\": \"line\",\n                \"fillOpacity\": 10,\n                \"gradientMode\": \"none\",\n                \"hideFrom\": {\n                  \"legend\": false,\n                  \"tooltip\": false,\n                  \"viz\": false\n                },\n                \"insertNulls\": false,\n                \"lineInterpolation\": \"linear\",\n                \"lineWidth\": 1,\n                \"pointSize\": 5,\n                \"scaleDistribution\": {\n                  \"type\": \"linear\"\n                },\n                \"showPoints\": \"never\",\n                \"spanNulls\": false,\n                \"stacking\": {\n                  \"group\": \"A\",\n                  \"mode\": \"none\"\n                },\n                \"thresholdsStyle\": {\n                  \"mode\": \"off\"\n                }\n              },\n              \"links\": [],\n              \"mappings\": [],\n              \"thresholds\": {\n                \"mode\": \"absolute\",\n                \"steps\": [\n                  {\n                    \"color\": \"green\"\n                  },\n                  {\n                    \"color\": \"red\",\n                    \"value\": 80\n                  }\n                ]\n              },\n              \"unit\": \"percentunit\"\n            },\n            \"overrides\": []\n          },\n          \"gridPos\": {\n            \"h\": 8,\n            \"w\": 12,\n            \"x\": 12,\n            \"y\": 42\n          },\n          \"id\": 17,\n          \"options\": {\n            \"legend\": {\n              \"calcs\": [\n                \"mean\",\n                \"lastNotNull\",\n                \"max\",\n                \"min\"\n              ],\n              \"displayMode\": \"list\",\n              \"placement\": \"bottom\",\n              \"showLegend\": true\n            },\n            \"tooltip\": {\n              \"hideZeros\": false,\n              \"mode\": \"multi\",\n              \"sort\": \"none\"\n            }\n          },\n          \"pluginVersion\": \"12.0.2\",\n          \"targets\": [\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"PBFA97CFB590B2093\"\n              },\n              \"expr\": \"1 - node_filesystem_avail_bytes{mountpoint=\\\"/data\\\", instance=~\\\"$system\\\"} / node_filesystem_size_bytes{mountpoint=\\\"/data\\\", instance=~\\\"$system\\\"}\",\n              \"interval\": \"\",\n              \"legendFormat\": \"{{instance}} Percent\",\n              \"refId\": \"A\"\n            }\n          ],\n          \"title\": \"Disk Usage (%)\",\n          \"type\": \"timeseries\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"description\": \"\",\n          \"fieldConfig\": {\n            \"defaults\": {\n              \"color\": {\n                \"mode\": \"palette-classic\"\n              },\n              \"custom\": {\n                \"axisBorderShow\": false,\n                \"axisCenteredZero\": false,\n                \"axisColorMode\": \"text\",\n                \"axisLabel\": \"\",\n                \"axisPlacement\": \"auto\",\n                \"barAlignment\": 0,\n                \"barWidthFactor\": 0.6,\n                \"drawStyle\": \"line\",\n                \"fillOpacity\": 10,\n                \"gradientMode\": \"none\",\n                \"hideFrom\": {\n                  \"legend\": false,\n                  \"tooltip\": false,\n                  \"viz\": false\n                },\n                \"insertNulls\": false,\n                \"lineInterpolation\": \"linear\",\n                \"lineWidth\": 1,\n                \"pointSize\": 5,\n                \"scaleDistribution\": {\n                  \"type\": \"linear\"\n                },\n                \"showPoints\": \"never\",\n                \"spanNulls\": false,\n                \"stacking\": {\n                  \"group\": \"A\",\n                  \"mode\": \"none\"\n                },\n                \"thresholdsStyle\": {\n                  \"mode\": \"off\"\n                }\n              },\n              \"links\": [],\n              \"mappings\": [],\n              \"thresholds\": {\n                \"mode\": \"absolute\",\n                \"steps\": [\n                  {\n                    \"color\": \"green\"\n                  },\n                  {\n                    \"color\": \"red\",\n                    \"value\": 80\n                  }\n                ]\n              },\n              \"unit\": \"bytes\"\n            },\n            \"overrides\": []\n          },\n          \"gridPos\": {\n            \"h\": 8,\n            \"w\": 12,\n            \"x\": 0,\n            \"y\": 50\n          },\n          \"id\": 140,\n          \"options\": {\n            \"legend\": {\n              \"calcs\": [\n                \"mean\",\n                \"lastNotNull\",\n                \"max\",\n                \"min\"\n              ],\n              \"displayMode\": \"table\",\n              \"placement\": \"bottom\",\n              \"showLegend\": true\n            },\n            \"tooltip\": {\n              \"hideZeros\": false,\n              \"mode\": \"multi\",\n              \"sort\": \"none\"\n            }\n          },\n          \"pluginVersion\": \"12.0.2\",\n          \"targets\": [\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"PBFA97CFB590B2093\"\n              },\n              \"expr\": \"node_filesystem_size_bytes{mountpoint=\\\"/data\\\", instance=~\\\"$system\\\"} - node_filesystem_avail_bytes{mountpoint=\\\"/data\\\", instance=~\\\"$system\\\"}\",\n              \"interval\": \"\",\n              \"legendFormat\": \"{{instance}} \",\n              \"refId\": \"A\"\n            }\n          ],\n          \"title\": \"Disk Usage\",\n          \"type\": \"timeseries\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"fieldConfig\": {\n            \"defaults\": {\n              \"color\": {\n                \"mode\": \"palette-classic\"\n              },\n              \"custom\": {\n                \"axisBorderShow\": false,\n                \"axisCenteredZero\": false,\n                \"axisColorMode\": \"text\",\n                \"axisLabel\": \"\",\n                \"axisPlacement\": \"auto\",\n                \"barAlignment\": 0,\n                \"barWidthFactor\": 0.6,\n                \"drawStyle\": \"line\",\n                \"fillOpacity\": 10,\n                \"gradientMode\": \"none\",\n                \"hideFrom\": {\n                  \"legend\": false,\n                  \"tooltip\": false,\n                  \"viz\": false\n                },\n                \"insertNulls\": false,\n                \"lineInterpolation\": \"linear\",\n                \"lineWidth\": 1,\n                \"pointSize\": 5,\n                \"scaleDistribution\": {\n                  \"type\": \"linear\"\n                },\n                \"showPoints\": \"never\",\n                \"spanNulls\": false,\n                \"stacking\": {\n                  \"group\": \"A\",\n                  \"mode\": \"none\"\n                },\n                \"thresholdsStyle\": {\n                  \"mode\": \"off\"\n                }\n              },\n              \"links\": [],\n              \"mappings\": [],\n              \"thresholds\": {\n                \"mode\": \"absolute\",\n                \"steps\": [\n                  {\n                    \"color\": \"green\"\n                  },\n                  {\n                    \"color\": \"red\",\n                    \"value\": 80\n                  }\n                ]\n              },\n              \"unit\": \"bytes\"\n            },\n            \"overrides\": []\n          },\n          \"gridPos\": {\n            \"h\": 8,\n            \"w\": 12,\n            \"x\": 12,\n            \"y\": 50\n          },\n          \"id\": 18,\n          \"options\": {\n            \"legend\": {\n              \"calcs\": [\n                \"mean\",\n                \"lastNotNull\",\n                \"max\",\n                \"min\"\n              ],\n              \"displayMode\": \"table\",\n              \"placement\": \"bottom\",\n              \"showLegend\": true\n            },\n            \"tooltip\": {\n              \"hideZeros\": false,\n              \"mode\": \"multi\",\n              \"sort\": \"none\"\n            }\n          },\n          \"pluginVersion\": \"12.0.2\",\n          \"targets\": [\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"PBFA97CFB590B2093\"\n              },\n              \"expr\": \"node_filesystem_avail_bytes{mountpoint=\\\"/data\\\", instance=~\\\"$system\\\"}\",\n              \"interval\": \"\",\n              \"legendFormat\": \"{{instance}} \",\n              \"refId\": \"A\"\n            }\n          ],\n          \"title\": \"Disk Available\",\n          \"type\": \"timeseries\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"fieldConfig\": {\n            \"defaults\": {\n              \"color\": {\n                \"mode\": \"palette-classic\"\n              },\n              \"custom\": {\n                \"axisBorderShow\": false,\n                \"axisCenteredZero\": false,\n                \"axisColorMode\": \"text\",\n                \"axisLabel\": \"\",\n                \"axisPlacement\": \"auto\",\n                \"barAlignment\": 0,\n                \"barWidthFactor\": 0.6,\n                \"drawStyle\": \"line\",\n                \"fillOpacity\": 10,\n                \"gradientMode\": \"none\",\n                \"hideFrom\": {\n                  \"legend\": false,\n                  \"tooltip\": false,\n                  \"viz\": false\n                },\n                \"insertNulls\": false,\n                \"lineInterpolation\": \"linear\",\n                \"lineWidth\": 1,\n                \"pointSize\": 5,\n                \"scaleDistribution\": {\n                  \"type\": \"linear\"\n                },\n                \"showPoints\": \"never\",\n                \"spanNulls\": false,\n                \"stacking\": {\n                  \"group\": \"A\",\n                  \"mode\": \"none\"\n                },\n                \"thresholdsStyle\": {\n                  \"mode\": \"off\"\n                }\n              },\n              \"links\": [],\n              \"mappings\": [],\n              \"thresholds\": {\n                \"mode\": \"absolute\",\n                \"steps\": [\n                  {\n                    \"color\": \"green\"\n                  },\n                  {\n                    \"color\": \"red\",\n                    \"value\": 80\n                  }\n                ]\n              },\n              \"unit\": \"short\"\n            },\n            \"overrides\": []\n          },\n          \"gridPos\": {\n            \"h\": 11,\n            \"w\": 12,\n            \"x\": 0,\n            \"y\": 58\n          },\n          \"id\": 6,\n          \"options\": {\n            \"legend\": {\n              \"calcs\": [\n                \"mean\",\n                \"lastNotNull\",\n                \"max\",\n                \"min\"\n              ],\n              \"displayMode\": \"table\",\n              \"placement\": \"bottom\",\n              \"showLegend\": true\n            },\n            \"tooltip\": {\n              \"hideZeros\": false,\n              \"mode\": \"multi\",\n              \"sort\": \"none\"\n            }\n          },\n          \"pluginVersion\": \"12.0.2\",\n          \"targets\": [\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"PBFA97CFB590B2093\"\n              },\n              \"editorMode\": \"code\",\n              \"expr\": \"irate(process_cpu_seconds_total{instance=~\\\"$system\\\", job=~\\\".*besu.*|execution.*\\\"}[1m])\",\n              \"format\": \"time_series\",\n              \"interval\": \"\",\n              \"intervalFactor\": 1,\n              \"legendFormat\": \"CPU Time IRate [{{instance}}]\",\n              \"range\": true,\n              \"refId\": \"A\"\n            }\n          ],\n          \"title\": \"CPU\",\n          \"type\": \"timeseries\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"description\": \"\",\n          \"fieldConfig\": {\n            \"defaults\": {\n              \"color\": {\n                \"mode\": \"palette-classic\"\n              },\n              \"custom\": {\n                \"axisBorderShow\": false,\n                \"axisCenteredZero\": false,\n                \"axisColorMode\": \"text\",\n                \"axisLabel\": \"\",\n                \"axisPlacement\": \"auto\",\n                \"barAlignment\": 0,\n                \"barWidthFactor\": 0.6,\n                \"drawStyle\": \"line\",\n                \"fillOpacity\": 0,\n                \"gradientMode\": \"none\",\n                \"hideFrom\": {\n                  \"legend\": false,\n                  \"tooltip\": false,\n                  \"viz\": false\n                },\n                \"insertNulls\": false,\n                \"lineInterpolation\": \"linear\",\n                \"lineWidth\": 1,\n                \"pointSize\": 5,\n                \"scaleDistribution\": {\n                  \"type\": \"linear\"\n                },\n                \"showPoints\": \"never\",\n                \"spanNulls\": false,\n                \"stacking\": {\n                  \"group\": \"A\",\n                  \"mode\": \"none\"\n                },\n                \"thresholdsStyle\": {\n                  \"mode\": \"off\"\n                }\n              },\n              \"links\": [],\n              \"mappings\": [],\n              \"thresholds\": {\n                \"mode\": \"absolute\",\n                \"steps\": [\n                  {\n                    \"color\": \"green\"\n                  },\n                  {\n                    \"color\": \"red\",\n                    \"value\": 80\n                  }\n                ]\n              },\n              \"unit\": \"bytes\"\n            },\n            \"overrides\": []\n          },\n          \"gridPos\": {\n            \"h\": 11,\n            \"w\": 12,\n            \"x\": 12,\n            \"y\": 58\n          },\n          \"id\": 144,\n          \"options\": {\n            \"legend\": {\n              \"calcs\": [\n                \"mean\",\n                \"lastNotNull\",\n                \"max\",\n                \"min\"\n              ],\n              \"displayMode\": \"table\",\n              \"placement\": \"bottom\",\n              \"showLegend\": true\n            },\n            \"tooltip\": {\n              \"hideZeros\": false,\n              \"mode\": \"multi\",\n              \"sort\": \"none\"\n            }\n          },\n          \"pluginVersion\": \"12.0.2\",\n          \"targets\": [\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"PBFA97CFB590B2093\"\n              },\n              \"editorMode\": \"code\",\n              \"exemplar\": true,\n              \"expr\": \"process_resident_memory_bytes{instance=~'$system', job=~\\\".*besu.*|execution.*\\\"}\",\n              \"interval\": \"\",\n              \"legendFormat\": \"{{instance}} resident\",\n              \"range\": true,\n              \"refId\": \"B\"\n            }\n          ],\n          \"title\": \"Physical Memory\",\n          \"type\": \"timeseries\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"description\": \"\",\n          \"fieldConfig\": {\n            \"defaults\": {\n              \"color\": {\n                \"mode\": \"palette-classic\"\n              },\n              \"custom\": {\n                \"axisBorderShow\": false,\n                \"axisCenteredZero\": false,\n                \"axisColorMode\": \"text\",\n                \"axisLabel\": \"bytes read (-) / write (+)\",\n                \"axisPlacement\": \"auto\",\n                \"barAlignment\": 0,\n                \"barWidthFactor\": 0.6,\n                \"drawStyle\": \"line\",\n                \"fillOpacity\": 40,\n                \"gradientMode\": \"none\",\n                \"hideFrom\": {\n                  \"legend\": false,\n                  \"tooltip\": false,\n                  \"viz\": false\n                },\n                \"insertNulls\": false,\n                \"lineInterpolation\": \"linear\",\n                \"lineWidth\": 1,\n                \"pointSize\": 5,\n                \"scaleDistribution\": {\n                  \"type\": \"linear\"\n                },\n                \"showPoints\": \"never\",\n                \"spanNulls\": false,\n                \"stacking\": {\n                  \"group\": \"A\",\n                  \"mode\": \"none\"\n                },\n                \"thresholdsStyle\": {\n                  \"mode\": \"off\"\n                }\n              },\n              \"links\": [],\n              \"mappings\": [],\n              \"thresholds\": {\n                \"mode\": \"absolute\",\n                \"steps\": [\n                  {\n                    \"color\": \"green\"\n                  },\n                  {\n                    \"color\": \"red\",\n                    \"value\": 80\n                  }\n                ]\n              },\n              \"unit\": \"Bps\"\n            },\n            \"overrides\": [\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"io time\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#890F02\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byRegexp\",\n                  \"options\": \"/.*read*./\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"custom.transform\",\n                    \"value\": \"negative-Y\"\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byRegexp\",\n                  \"options\": \"/.*sda.*/\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#7EB26D\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byRegexp\",\n                  \"options\": \"/.*sdb.*/\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#EAB839\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byRegexp\",\n                  \"options\": \"/.*sdc.*/\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#6ED0E0\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byRegexp\",\n                  \"options\": \"/.*sdd.*/\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#EF843C\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byRegexp\",\n                  \"options\": \"/.*sde.*/\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#E24D42\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byType\",\n                  \"options\": \"time\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"custom.axisPlacement\",\n                    \"value\": \"hidden\"\n                  }\n                ]\n              }\n            ]\n          },\n          \"gridPos\": {\n            \"h\": 13,\n            \"w\": 12,\n            \"x\": 0,\n            \"y\": 69\n          },\n          \"id\": 146,\n          \"options\": {\n            \"legend\": {\n              \"calcs\": [\n                \"mean\",\n                \"lastNotNull\",\n                \"max\",\n                \"min\"\n              ],\n              \"displayMode\": \"table\",\n              \"placement\": \"bottom\",\n              \"showLegend\": true\n            },\n            \"tooltip\": {\n              \"hideZeros\": false,\n              \"mode\": \"multi\",\n              \"sort\": \"none\"\n            }\n          },\n          \"pluginVersion\": \"12.0.2\",\n          \"targets\": [\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"PBFA97CFB590B2093\"\n              },\n              \"exemplar\": true,\n              \"expr\": \"rate(node_disk_read_bytes_total{instance=~\\\"$system\\\",device=~\\\"$diskdevices\\\"}[$__rate_interval])\",\n              \"format\": \"time_series\",\n              \"hide\": false,\n              \"interval\": \"\",\n              \"intervalFactor\": 2,\n              \"legendFormat\": \"{{instance}} - {{device}} - Successfully read bytes\",\n              \"refId\": \"A\",\n              \"step\": 240\n            },\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"PBFA97CFB590B2093\"\n              },\n              \"exemplar\": true,\n              \"expr\": \"rate(node_disk_written_bytes_total{instance=~\\\"$system\\\",device=~\\\"$diskdevices\\\"}[$__rate_interval])\",\n              \"format\": \"time_series\",\n              \"hide\": false,\n              \"interval\": \"\",\n              \"intervalFactor\": 2,\n              \"legendFormat\": \"{{instance}} - {{device}} - Successfully written bytes\",\n              \"refId\": \"B\",\n              \"step\": 240\n            }\n          ],\n          \"title\": \"I/O Usage Read / Write\",\n          \"type\": \"timeseries\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"description\": \"\",\n          \"fieldConfig\": {\n            \"defaults\": {\n              \"color\": {\n                \"mode\": \"palette-classic\"\n              },\n              \"custom\": {\n                \"axisBorderShow\": false,\n                \"axisCenteredZero\": false,\n                \"axisColorMode\": \"text\",\n                \"axisLabel\": \"bits out (-) / in (+)\",\n                \"axisPlacement\": \"auto\",\n                \"barAlignment\": 0,\n                \"barWidthFactor\": 0.6,\n                \"drawStyle\": \"line\",\n                \"fillOpacity\": 40,\n                \"gradientMode\": \"none\",\n                \"hideFrom\": {\n                  \"legend\": false,\n                  \"tooltip\": false,\n                  \"viz\": false\n                },\n                \"insertNulls\": false,\n                \"lineInterpolation\": \"linear\",\n                \"lineWidth\": 1,\n                \"pointSize\": 5,\n                \"scaleDistribution\": {\n                  \"type\": \"linear\"\n                },\n                \"showPoints\": \"never\",\n                \"spanNulls\": false,\n                \"stacking\": {\n                  \"group\": \"A\",\n                  \"mode\": \"none\"\n                },\n                \"thresholdsStyle\": {\n                  \"mode\": \"off\"\n                }\n              },\n              \"links\": [],\n              \"mappings\": [],\n              \"thresholds\": {\n                \"mode\": \"absolute\",\n                \"steps\": [\n                  {\n                    \"color\": \"green\"\n                  },\n                  {\n                    \"color\": \"red\",\n                    \"value\": 80\n                  }\n                ]\n              },\n              \"unit\": \"bps\"\n            },\n            \"overrides\": [\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"receive_packets_eth0\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#7EB26D\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"receive_packets_lo\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#E24D42\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"transmit_packets_eth0\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#7EB26D\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"transmit_packets_lo\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#E24D42\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byRegexp\",\n                  \"options\": \"/.*Trans.*/\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"custom.transform\",\n                    \"value\": \"negative-Y\"\n                  }\n                ]\n              }\n            ]\n          },\n          \"gridPos\": {\n            \"h\": 13,\n            \"w\": 12,\n            \"x\": 12,\n            \"y\": 69\n          },\n          \"id\": 148,\n          \"options\": {\n            \"legend\": {\n              \"calcs\": [\n                \"mean\",\n                \"lastNotNull\",\n                \"max\",\n                \"min\"\n              ],\n              \"displayMode\": \"table\",\n              \"placement\": \"bottom\",\n              \"showLegend\": true\n            },\n            \"tooltip\": {\n              \"hideZeros\": false,\n              \"mode\": \"multi\",\n              \"sort\": \"none\"\n            }\n          },\n          \"pluginVersion\": \"12.0.2\",\n          \"targets\": [\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"PBFA97CFB590B2093\"\n              },\n              \"exemplar\": true,\n              \"expr\": \"rate(node_network_receive_bytes_total{instance=~\\\"$system\\\"}[$__rate_interval])\",\n              \"format\": \"time_series\",\n              \"interval\": \"\",\n              \"intervalFactor\": 2,\n              \"legendFormat\": \"{{instance}} - {{device}} - Receive\",\n              \"refId\": \"A\",\n              \"step\": 240\n            },\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"PBFA97CFB590B2093\"\n              },\n              \"exemplar\": true,\n              \"expr\": \"rate(node_network_transmit_bytes_total{instance=~\\\"$system\\\", device=\\\"eth0\\\"}[$__rate_interval])*8\",\n              \"format\": \"time_series\",\n              \"interval\": \"\",\n              \"intervalFactor\": 2,\n              \"legendFormat\": \"{{instance}} - {{device}} - Transmit\",\n              \"refId\": \"B\",\n              \"step\": 240\n            }\n          ],\n          \"title\": \"Network Traffic\",\n          \"type\": \"timeseries\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"fieldConfig\": {\n            \"defaults\": {\n              \"color\": {\n                \"mode\": \"palette-classic\"\n              },\n              \"custom\": {\n                \"axisBorderShow\": false,\n                \"axisCenteredZero\": false,\n                \"axisColorMode\": \"text\",\n                \"axisLabel\": \"\",\n                \"axisPlacement\": \"auto\",\n                \"barAlignment\": 0,\n                \"barWidthFactor\": 0.6,\n                \"drawStyle\": \"line\",\n                \"fillOpacity\": 10,\n                \"gradientMode\": \"none\",\n                \"hideFrom\": {\n                  \"legend\": false,\n                  \"tooltip\": false,\n                  \"viz\": false\n                },\n                \"insertNulls\": false,\n                \"lineInterpolation\": \"linear\",\n                \"lineWidth\": 1,\n                \"pointSize\": 5,\n                \"scaleDistribution\": {\n                  \"type\": \"linear\"\n                },\n                \"showPoints\": \"never\",\n                \"spanNulls\": true,\n                \"stacking\": {\n                  \"group\": \"A\",\n                  \"mode\": \"none\"\n                },\n                \"thresholdsStyle\": {\n                  \"mode\": \"off\"\n                }\n              },\n              \"links\": [],\n              \"mappings\": [],\n              \"thresholds\": {\n                \"mode\": \"absolute\",\n                \"steps\": [\n                  {\n                    \"color\": \"green\"\n                  },\n                  {\n                    \"color\": \"red\",\n                    \"value\": 80\n                  }\n                ]\n              },\n              \"unit\": \"none\"\n            },\n            \"overrides\": []\n          },\n          \"gridPos\": {\n            \"h\": 11,\n            \"w\": 12,\n            \"x\": 0,\n            \"y\": 82\n          },\n          \"id\": 79,\n          \"options\": {\n            \"legend\": {\n              \"calcs\": [\n                \"min\",\n                \"max\",\n                \"mean\",\n                \"lastNotNull\"\n              ],\n              \"displayMode\": \"table\",\n              \"placement\": \"bottom\",\n              \"showLegend\": true\n            },\n            \"tooltip\": {\n              \"hideZeros\": false,\n              \"mode\": \"single\",\n              \"sort\": \"none\"\n            }\n          },\n          \"pluginVersion\": \"12.0.2\",\n          \"targets\": [\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"PBFA97CFB590B2093\"\n              },\n              \"editorMode\": \"code\",\n              \"exemplar\": true,\n              \"expr\": \"process_open_fds{instance=~\\\"$system\\\", job=~\\\".*besu.*|execution.*\\\"}\",\n              \"interval\": \"\",\n              \"legendFormat\": \"{{instance}} \",\n              \"range\": true,\n              \"refId\": \"A\"\n            }\n          ],\n          \"title\": \"Open File Descriptors\",\n          \"type\": \"timeseries\"\n        }\n      ],\n      \"title\": \"System\",\n      \"type\": \"row\"\n    },\n    {\n      \"collapsed\": true,\n      \"gridPos\": {\n        \"h\": 1,\n        \"w\": 24,\n        \"x\": 0,\n        \"y\": 42\n      },\n      \"id\": 479,\n      \"panels\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"fieldConfig\": {\n            \"defaults\": {\n              \"color\": {\n                \"mode\": \"palette-classic\"\n              },\n              \"custom\": {\n                \"axisBorderShow\": false,\n                \"axisCenteredZero\": false,\n                \"axisColorMode\": \"text\",\n                \"axisLabel\": \"\",\n                \"axisPlacement\": \"auto\",\n                \"barAlignment\": 0,\n                \"barWidthFactor\": 0.6,\n                \"drawStyle\": \"line\",\n                \"fillOpacity\": 0,\n                \"gradientMode\": \"none\",\n                \"hideFrom\": {\n                  \"legend\": false,\n                  \"tooltip\": false,\n                  \"viz\": false\n                },\n                \"insertNulls\": false,\n                \"lineInterpolation\": \"linear\",\n                \"lineWidth\": 1,\n                \"pointSize\": 5,\n                \"scaleDistribution\": {\n                  \"type\": \"linear\"\n                },\n                \"showPoints\": \"auto\",\n                \"spanNulls\": false,\n                \"stacking\": {\n                  \"group\": \"A\",\n                  \"mode\": \"none\"\n                },\n                \"thresholdsStyle\": {\n                  \"mode\": \"off\"\n                }\n              },\n              \"mappings\": [],\n              \"thresholds\": {\n                \"mode\": \"absolute\",\n                \"steps\": [\n                  {\n                    \"color\": \"green\"\n                  },\n                  {\n                    \"color\": \"red\",\n                    \"value\": 80\n                  }\n                ]\n              }\n            },\n            \"overrides\": []\n          },\n          \"gridPos\": {\n            \"h\": 8,\n            \"w\": 12,\n            \"x\": 0,\n            \"y\": 2111\n          },\n          \"id\": 261,\n          \"options\": {\n            \"legend\": {\n              \"calcs\": [],\n              \"displayMode\": \"list\",\n              \"placement\": \"bottom\",\n              \"showLegend\": true\n            },\n            \"tooltip\": {\n              \"hideZeros\": false,\n              \"mode\": \"single\",\n              \"sort\": \"none\"\n            }\n          },\n          \"pluginVersion\": \"11.6.0\",\n          \"targets\": [\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"PBFA97CFB590B2093\"\n              },\n              \"editorMode\": \"code\",\n              \"exemplar\": true,\n              \"expr\": \"sum by (instance) (besu_transaction_pool_number_of_transactions{instance=~\\\"$system\\\"})\",\n              \"interval\": \"\",\n              \"legendFormat\": \"{{instance}}\",\n              \"range\": true,\n              \"refId\": \"A\"\n            }\n          ],\n          \"title\": \"Total Transaction Count \",\n          \"type\": \"timeseries\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"fieldConfig\": {\n            \"defaults\": {\n              \"color\": {\n                \"mode\": \"palette-classic\"\n              },\n              \"custom\": {\n                \"axisBorderShow\": false,\n                \"axisCenteredZero\": false,\n                \"axisColorMode\": \"text\",\n                \"axisLabel\": \"\",\n                \"axisPlacement\": \"auto\",\n                \"barAlignment\": 0,\n                \"barWidthFactor\": 0.6,\n                \"drawStyle\": \"line\",\n                \"fillOpacity\": 0,\n                \"gradientMode\": \"none\",\n                \"hideFrom\": {\n                  \"legend\": false,\n                  \"tooltip\": false,\n                  \"viz\": false\n                },\n                \"insertNulls\": false,\n                \"lineInterpolation\": \"linear\",\n                \"lineWidth\": 1,\n                \"pointSize\": 5,\n                \"scaleDistribution\": {\n                  \"type\": \"linear\"\n                },\n                \"showPoints\": \"auto\",\n                \"spanNulls\": false,\n                \"stacking\": {\n                  \"group\": \"A\",\n                  \"mode\": \"none\"\n                },\n                \"thresholdsStyle\": {\n                  \"mode\": \"off\"\n                }\n              },\n              \"mappings\": [],\n              \"thresholds\": {\n                \"mode\": \"absolute\",\n                \"steps\": [\n                  {\n                    \"color\": \"green\"\n                  },\n                  {\n                    \"color\": \"red\",\n                    \"value\": 80\n                  }\n                ]\n              }\n            },\n            \"overrides\": []\n          },\n          \"gridPos\": {\n            \"h\": 8,\n            \"w\": 12,\n            \"x\": 12,\n            \"y\": 2111\n          },\n          \"id\": 372,\n          \"options\": {\n            \"legend\": {\n              \"calcs\": [],\n              \"displayMode\": \"list\",\n              \"placement\": \"bottom\",\n              \"showLegend\": true\n            },\n            \"tooltip\": {\n              \"hideZeros\": false,\n              \"mode\": \"single\",\n              \"sort\": \"none\"\n            }\n          },\n          \"pluginVersion\": \"11.6.0\",\n          \"targets\": [\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"PBFA97CFB590B2093\"\n              },\n              \"editorMode\": \"code\",\n              \"exemplar\": true,\n              \"expr\": \"sum by (instance, type) (besu_transaction_pool_number_of_transactions_by_type{instance=~\\\"$system\\\"})\",\n              \"interval\": \"\",\n              \"legendFormat\": \"{{type}} ({{instance}})\",\n              \"range\": true,\n              \"refId\": \"A\"\n            }\n          ],\n          \"title\": \"Total Transaction Count By Type\",\n          \"type\": \"timeseries\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"fieldConfig\": {\n            \"defaults\": {\n              \"color\": {\n                \"mode\": \"palette-classic\"\n              },\n              \"custom\": {\n                \"axisBorderShow\": false,\n                \"axisCenteredZero\": false,\n                \"axisColorMode\": \"text\",\n                \"axisLabel\": \"\",\n                \"axisPlacement\": \"auto\",\n                \"barAlignment\": 0,\n                \"barWidthFactor\": 0.6,\n                \"drawStyle\": \"line\",\n                \"fillOpacity\": 0,\n                \"gradientMode\": \"none\",\n                \"hideFrom\": {\n                  \"legend\": false,\n                  \"tooltip\": false,\n                  \"viz\": false\n                },\n                \"insertNulls\": false,\n                \"lineInterpolation\": \"linear\",\n                \"lineWidth\": 1,\n                \"pointSize\": 5,\n                \"scaleDistribution\": {\n                  \"type\": \"linear\"\n                },\n                \"showPoints\": \"auto\",\n                \"spanNulls\": false,\n                \"stacking\": {\n                  \"group\": \"A\",\n                  \"mode\": \"none\"\n                },\n                \"thresholdsStyle\": {\n                  \"mode\": \"off\"\n                }\n              },\n              \"mappings\": [],\n              \"thresholds\": {\n                \"mode\": \"absolute\",\n                \"steps\": [\n                  {\n                    \"color\": \"green\"\n                  },\n                  {\n                    \"color\": \"red\",\n                    \"value\": 80\n                  }\n                ]\n              },\n              \"unit\": \"none\"\n            },\n            \"overrides\": []\n          },\n          \"gridPos\": {\n            \"h\": 8,\n            \"w\": 12,\n            \"x\": 0,\n            \"y\": 2279\n          },\n          \"id\": 274,\n          \"options\": {\n            \"legend\": {\n              \"calcs\": [],\n              \"displayMode\": \"list\",\n              \"placement\": \"bottom\",\n              \"showLegend\": true\n            },\n            \"tooltip\": {\n              \"hideZeros\": false,\n              \"mode\": \"single\",\n              \"sort\": \"none\"\n            }\n          },\n          \"pluginVersion\": \"11.6.0\",\n          \"targets\": [\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"PBFA97CFB590B2093\"\n              },\n              \"editorMode\": \"builder\",\n              \"exemplar\": true,\n              \"expr\": \"sum by(instance) (besu_transaction_pool_unique_senders{instance=~\\\"$system\\\"})\",\n              \"interval\": \"\",\n              \"legendFormat\": \"{{instance}}\",\n              \"range\": true,\n              \"refId\": \"A\"\n            }\n          ],\n          \"title\": \"Unique Senders\",\n          \"type\": \"timeseries\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"fieldConfig\": {\n            \"defaults\": {\n              \"color\": {\n                \"mode\": \"palette-classic\"\n              },\n              \"custom\": {\n                \"axisBorderShow\": false,\n                \"axisCenteredZero\": false,\n                \"axisColorMode\": \"text\",\n                \"axisLabel\": \"\",\n                \"axisPlacement\": \"auto\",\n                \"barAlignment\": 0,\n                \"barWidthFactor\": 0.6,\n                \"drawStyle\": \"line\",\n                \"fillOpacity\": 0,\n                \"gradientMode\": \"none\",\n                \"hideFrom\": {\n                  \"legend\": false,\n                  \"tooltip\": false,\n                  \"viz\": false\n                },\n                \"insertNulls\": false,\n                \"lineInterpolation\": \"linear\",\n                \"lineWidth\": 1,\n                \"pointSize\": 5,\n                \"scaleDistribution\": {\n                  \"type\": \"linear\"\n                },\n                \"showPoints\": \"auto\",\n                \"spanNulls\": false,\n                \"stacking\": {\n                  \"group\": \"A\",\n                  \"mode\": \"none\"\n                },\n                \"thresholdsStyle\": {\n                  \"mode\": \"off\"\n                }\n              },\n              \"mappings\": [],\n              \"thresholds\": {\n                \"mode\": \"absolute\",\n                \"steps\": [\n                  {\n                    \"color\": \"green\"\n                  },\n                  {\n                    \"color\": \"red\",\n                    \"value\": 80\n                  }\n                ]\n              },\n              \"unit\": \"decbytes\"\n            },\n            \"overrides\": []\n          },\n          \"gridPos\": {\n            \"h\": 8,\n            \"w\": 12,\n            \"x\": 12,\n            \"y\": 2279\n          },\n          \"id\": 329,\n          \"options\": {\n            \"legend\": {\n              \"calcs\": [],\n              \"displayMode\": \"list\",\n              \"placement\": \"bottom\",\n              \"showLegend\": true\n            },\n            \"tooltip\": {\n              \"hideZeros\": false,\n              \"mode\": \"single\",\n              \"sort\": \"none\"\n            }\n          },\n          \"pluginVersion\": \"11.6.0\",\n          \"targets\": [\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"PBFA97CFB590B2093\"\n              },\n              \"editorMode\": \"code\",\n              \"exemplar\": true,\n              \"expr\": \"sum by (instance) (besu_transaction_pool_space_used{instance=~\\\"$system\\\"})\",\n              \"interval\": \"\",\n              \"legendFormat\": \"{{instance}}\",\n              \"range\": true,\n              \"refId\": \"A\"\n            }\n          ],\n          \"title\": \"Total Memory Used\",\n          \"type\": \"timeseries\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"fieldConfig\": {\n            \"defaults\": {\n              \"color\": {\n                \"mode\": \"palette-classic\"\n              },\n              \"custom\": {\n                \"axisBorderShow\": false,\n                \"axisCenteredZero\": false,\n                \"axisColorMode\": \"text\",\n                \"axisLabel\": \"\",\n                \"axisPlacement\": \"auto\",\n                \"barAlignment\": 0,\n                \"barWidthFactor\": 0.6,\n                \"drawStyle\": \"line\",\n                \"fillOpacity\": 0,\n                \"gradientMode\": \"none\",\n                \"hideFrom\": {\n                  \"legend\": false,\n                  \"tooltip\": false,\n                  \"viz\": false\n                },\n                \"insertNulls\": false,\n                \"lineInterpolation\": \"linear\",\n                \"lineWidth\": 1,\n                \"pointSize\": 5,\n                \"scaleDistribution\": {\n                  \"type\": \"linear\"\n                },\n                \"showPoints\": \"auto\",\n                \"spanNulls\": false,\n                \"stacking\": {\n                  \"group\": \"A\",\n                  \"mode\": \"none\"\n                },\n                \"thresholdsStyle\": {\n                  \"mode\": \"off\"\n                }\n              },\n              \"mappings\": [],\n              \"thresholds\": {\n                \"mode\": \"absolute\",\n                \"steps\": [\n                  {\n                    \"color\": \"green\"\n                  },\n                  {\n                    \"color\": \"red\",\n                    \"value\": 80\n                  }\n                ]\n              }\n            },\n            \"overrides\": []\n          },\n          \"gridPos\": {\n            \"h\": 9,\n            \"w\": 12,\n            \"x\": 0,\n            \"y\": 2287\n          },\n          \"id\": 301,\n          \"options\": {\n            \"legend\": {\n              \"calcs\": [],\n              \"displayMode\": \"list\",\n              \"placement\": \"bottom\",\n              \"showLegend\": true\n            },\n            \"tooltip\": {\n              \"hideZeros\": false,\n              \"mode\": \"single\",\n              \"sort\": \"none\"\n            }\n          },\n          \"pluginVersion\": \"11.6.0\",\n          \"targets\": [\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"PBFA97CFB590B2093\"\n              },\n              \"editorMode\": \"code\",\n              \"exemplar\": true,\n              \"expr\": \"rate(besu_transaction_pool_remote_transactions_already_seen_total{instance=~\\\"$system\\\"}[$__rate_interval])\",\n              \"interval\": \"\",\n              \"legendFormat\": \"{{message}} ({{instance}})\",\n              \"range\": true,\n              \"refId\": \"A\"\n            }\n          ],\n          \"title\": \"Remote Transaction Already Seen\",\n          \"type\": \"timeseries\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"fieldConfig\": {\n            \"defaults\": {\n              \"color\": {\n                \"mode\": \"palette-classic\"\n              },\n              \"custom\": {\n                \"axisBorderShow\": false,\n                \"axisCenteredZero\": false,\n                \"axisColorMode\": \"text\",\n                \"axisLabel\": \"\",\n                \"axisPlacement\": \"auto\",\n                \"barAlignment\": 0,\n                \"barWidthFactor\": 0.6,\n                \"drawStyle\": \"line\",\n                \"fillOpacity\": 0,\n                \"gradientMode\": \"none\",\n                \"hideFrom\": {\n                  \"legend\": false,\n                  \"tooltip\": false,\n                  \"viz\": false\n                },\n                \"insertNulls\": false,\n                \"lineInterpolation\": \"linear\",\n                \"lineWidth\": 1,\n                \"pointSize\": 5,\n                \"scaleDistribution\": {\n                  \"type\": \"linear\"\n                },\n                \"showPoints\": \"auto\",\n                \"spanNulls\": false,\n                \"stacking\": {\n                  \"group\": \"A\",\n                  \"mode\": \"none\"\n                },\n                \"thresholdsStyle\": {\n                  \"mode\": \"off\"\n                }\n              },\n              \"mappings\": [],\n              \"thresholds\": {\n                \"mode\": \"absolute\",\n                \"steps\": [\n                  {\n                    \"color\": \"green\"\n                  },\n                  {\n                    \"color\": \"red\",\n                    \"value\": 80\n                  }\n                ]\n              }\n            },\n            \"overrides\": []\n          },\n          \"gridPos\": {\n            \"h\": 8,\n            \"w\": 12,\n            \"x\": 12,\n            \"y\": 2287\n          },\n          \"id\": 287,\n          \"options\": {\n            \"legend\": {\n              \"calcs\": [],\n              \"displayMode\": \"list\",\n              \"placement\": \"bottom\",\n              \"showLegend\": true\n            },\n            \"tooltip\": {\n              \"hideZeros\": false,\n              \"mode\": \"single\",\n              \"sort\": \"none\"\n            }\n          },\n          \"pluginVersion\": \"11.6.0\",\n          \"targets\": [\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"PBFA97CFB590B2093\"\n              },\n              \"editorMode\": \"code\",\n              \"exemplar\": true,\n              \"expr\": \"sum by(instance) (rate(besu_transaction_pool_removed_total{instance=~\\\"$system\\\", operation=\\\"dropped\\\"}[$__rate_interval]))\",\n              \"interval\": \"\",\n              \"legendFormat\": \"{{instance}}\",\n              \"range\": true,\n              \"refId\": \"A\"\n            }\n          ],\n          \"title\": \"Total Dropped (pool full)\",\n          \"type\": \"timeseries\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"fieldConfig\": {\n            \"defaults\": {\n              \"color\": {\n                \"mode\": \"palette-classic\"\n              },\n              \"custom\": {\n                \"axisBorderShow\": false,\n                \"axisCenteredZero\": false,\n                \"axisColorMode\": \"text\",\n                \"axisLabel\": \"\",\n                \"axisPlacement\": \"auto\",\n                \"barAlignment\": 0,\n                \"barWidthFactor\": 0.6,\n                \"drawStyle\": \"line\",\n                \"fillOpacity\": 0,\n                \"gradientMode\": \"none\",\n                \"hideFrom\": {\n                  \"legend\": false,\n                  \"tooltip\": false,\n                  \"viz\": false\n                },\n                \"insertNulls\": false,\n                \"lineInterpolation\": \"linear\",\n                \"lineWidth\": 1,\n                \"pointSize\": 5,\n                \"scaleDistribution\": {\n                  \"type\": \"linear\"\n                },\n                \"showPoints\": \"auto\",\n                \"spanNulls\": false,\n                \"stacking\": {\n                  \"group\": \"A\",\n                  \"mode\": \"none\"\n                },\n                \"thresholdsStyle\": {\n                  \"mode\": \"off\"\n                }\n              },\n              \"mappings\": [],\n              \"thresholds\": {\n                \"mode\": \"absolute\",\n                \"steps\": [\n                  {\n                    \"color\": \"green\"\n                  },\n                  {\n                    \"color\": \"red\",\n                    \"value\": 80\n                  }\n                ]\n              }\n            },\n            \"overrides\": []\n          },\n          \"gridPos\": {\n            \"h\": 9,\n            \"w\": 12,\n            \"x\": 12,\n            \"y\": 2295\n          },\n          \"id\": 316,\n          \"options\": {\n            \"legend\": {\n              \"calcs\": [],\n              \"displayMode\": \"list\",\n              \"placement\": \"bottom\",\n              \"showLegend\": true\n            },\n            \"tooltip\": {\n              \"hideZeros\": false,\n              \"mode\": \"single\",\n              \"sort\": \"none\"\n            }\n          },\n          \"pluginVersion\": \"11.6.0\",\n          \"targets\": [\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"PBFA97CFB590B2093\"\n              },\n              \"editorMode\": \"code\",\n              \"exemplar\": true,\n              \"expr\": \"rate(besu_transaction_pool_rejected_total{instance=~\\\"$system\\\", layer=~\\\"layertxpool|txpool\\\"}[$__rate_interval])\",\n              \"interval\": \"\",\n              \"legendFormat\": \"{{reason}} ({{instance}})\",\n              \"range\": true,\n              \"refId\": \"A\"\n            }\n          ],\n          \"title\": \"Total Rejected\",\n          \"type\": \"timeseries\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"fieldConfig\": {\n            \"defaults\": {\n              \"color\": {\n                \"mode\": \"palette-classic\"\n              },\n              \"custom\": {\n                \"axisBorderShow\": false,\n                \"axisCenteredZero\": false,\n                \"axisColorMode\": \"text\",\n                \"axisLabel\": \"\",\n                \"axisPlacement\": \"auto\",\n                \"barAlignment\": 0,\n                \"barWidthFactor\": 0.6,\n                \"drawStyle\": \"line\",\n                \"fillOpacity\": 0,\n                \"gradientMode\": \"none\",\n                \"hideFrom\": {\n                  \"legend\": false,\n                  \"tooltip\": false,\n                  \"viz\": false\n                },\n                \"insertNulls\": false,\n                \"lineInterpolation\": \"linear\",\n                \"lineWidth\": 1,\n                \"pointSize\": 5,\n                \"scaleDistribution\": {\n                  \"type\": \"linear\"\n                },\n                \"showPoints\": \"auto\",\n                \"spanNulls\": false,\n                \"stacking\": {\n                  \"group\": \"A\",\n                  \"mode\": \"none\"\n                },\n                \"thresholdsStyle\": {\n                  \"mode\": \"off\"\n                }\n              },\n              \"mappings\": [],\n              \"thresholds\": {\n                \"mode\": \"absolute\",\n                \"steps\": [\n                  {\n                    \"color\": \"green\"\n                  },\n                  {\n                    \"color\": \"red\",\n                    \"value\": 80\n                  }\n                ]\n              }\n            },\n            \"overrides\": []\n          },\n          \"gridPos\": {\n            \"h\": 8,\n            \"w\": 12,\n            \"x\": 0,\n            \"y\": 2296\n          },\n          \"id\": 303,\n          \"options\": {\n            \"legend\": {\n              \"calcs\": [],\n              \"displayMode\": \"list\",\n              \"placement\": \"bottom\",\n              \"showLegend\": true\n            },\n            \"tooltip\": {\n              \"hideZeros\": false,\n              \"mode\": \"single\",\n              \"sort\": \"none\"\n            }\n          },\n          \"pluginVersion\": \"11.6.0\",\n          \"targets\": [\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"PBFA97CFB590B2093\"\n              },\n              \"editorMode\": \"code\",\n              \"exemplar\": true,\n              \"expr\": \"rate(besu_transaction_pool_messages_expired_total{instance=~\\\"$system\\\"}[$__rate_interval])\",\n              \"interval\": \"\",\n              \"legendFormat\": \"{{message}} ({{instance}})\",\n              \"range\": true,\n              \"refId\": \"A\"\n            }\n          ],\n          \"title\": \"Expired Messages\",\n          \"type\": \"timeseries\"\n        }\n      ],\n      \"title\": \"Layered Transaction Pool Totals\",\n      \"type\": \"row\"\n    },\n    {\n      \"collapsed\": true,\n      \"gridPos\": {\n        \"h\": 1,\n        \"w\": 24,\n        \"x\": 0,\n        \"y\": 43\n      },\n      \"id\": 480,\n      \"panels\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"fieldConfig\": {\n            \"defaults\": {\n              \"color\": {\n                \"mode\": \"palette-classic\"\n              },\n              \"custom\": {\n                \"axisBorderShow\": false,\n                \"axisCenteredZero\": false,\n                \"axisColorMode\": \"text\",\n                \"axisLabel\": \"\",\n                \"axisPlacement\": \"auto\",\n                \"barAlignment\": 0,\n                \"drawStyle\": \"line\",\n                \"fillOpacity\": 0,\n                \"gradientMode\": \"none\",\n                \"hideFrom\": {\n                  \"legend\": false,\n                  \"tooltip\": false,\n                  \"viz\": false\n                },\n                \"insertNulls\": false,\n                \"lineInterpolation\": \"linear\",\n                \"lineWidth\": 1,\n                \"pointSize\": 5,\n                \"scaleDistribution\": {\n                  \"type\": \"linear\"\n                },\n                \"showPoints\": \"auto\",\n                \"spanNulls\": false,\n                \"stacking\": {\n                  \"group\": \"A\",\n                  \"mode\": \"none\"\n                },\n                \"thresholdsStyle\": {\n                  \"mode\": \"off\"\n                }\n              },\n              \"mappings\": [],\n              \"thresholds\": {\n                \"mode\": \"absolute\",\n                \"steps\": [\n                  {\n                    \"color\": \"green\"\n                  },\n                  {\n                    \"color\": \"red\",\n                    \"value\": 80\n                  }\n                ]\n              }\n            },\n            \"overrides\": []\n          },\n          \"gridPos\": {\n            \"h\": 7,\n            \"w\": 12,\n            \"x\": 0,\n            \"y\": 3556\n          },\n          \"id\": 343,\n          \"options\": {\n            \"legend\": {\n              \"calcs\": [],\n              \"displayMode\": \"list\",\n              \"placement\": \"bottom\",\n              \"showLegend\": true\n            },\n            \"tooltip\": {\n              \"mode\": \"single\",\n              \"sort\": \"none\"\n            }\n          },\n          \"targets\": [\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"PBFA97CFB590B2093\"\n              },\n              \"editorMode\": \"code\",\n              \"exemplar\": true,\n              \"expr\": \"besu_transaction_pool_number_of_transactions{instance=~\\\"$system\\\",layer=~\\\"$txpool_layer\\\"}\",\n              \"interval\": \"\",\n              \"legendFormat\": \"{{instance}}\",\n              \"range\": true,\n              \"refId\": \"A\"\n            }\n          ],\n          \"title\": \"Transaction Count ($txpool_layer)\",\n          \"type\": \"timeseries\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"fieldConfig\": {\n            \"defaults\": {\n              \"color\": {\n                \"mode\": \"palette-classic\"\n              },\n              \"custom\": {\n                \"axisBorderShow\": false,\n                \"axisCenteredZero\": false,\n                \"axisColorMode\": \"text\",\n                \"axisLabel\": \"\",\n                \"axisPlacement\": \"auto\",\n                \"barAlignment\": 0,\n                \"drawStyle\": \"line\",\n                \"fillOpacity\": 0,\n                \"gradientMode\": \"none\",\n                \"hideFrom\": {\n                  \"legend\": false,\n                  \"tooltip\": false,\n                  \"viz\": false\n                },\n                \"insertNulls\": false,\n                \"lineInterpolation\": \"linear\",\n                \"lineWidth\": 1,\n                \"pointSize\": 5,\n                \"scaleDistribution\": {\n                  \"type\": \"linear\"\n                },\n                \"showPoints\": \"auto\",\n                \"spanNulls\": false,\n                \"stacking\": {\n                  \"group\": \"A\",\n                  \"mode\": \"none\"\n                },\n                \"thresholdsStyle\": {\n                  \"mode\": \"off\"\n                }\n              },\n              \"mappings\": [],\n              \"thresholds\": {\n                \"mode\": \"absolute\",\n                \"steps\": [\n                  {\n                    \"color\": \"green\"\n                  },\n                  {\n                    \"color\": \"red\",\n                    \"value\": 80\n                  }\n                ]\n              }\n            },\n            \"overrides\": []\n          },\n          \"gridPos\": {\n            \"h\": 7,\n            \"w\": 12,\n            \"x\": 12,\n            \"y\": 3556\n          },\n          \"id\": 389,\n          \"options\": {\n            \"legend\": {\n              \"calcs\": [],\n              \"displayMode\": \"list\",\n              \"placement\": \"bottom\",\n              \"showLegend\": true\n            },\n            \"tooltip\": {\n              \"mode\": \"single\",\n              \"sort\": \"none\"\n            }\n          },\n          \"targets\": [\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"PBFA97CFB590B2093\"\n              },\n              \"editorMode\": \"code\",\n              \"exemplar\": true,\n              \"expr\": \"besu_transaction_pool_number_of_transactions_by_type{instance=~\\\"$system\\\",layer=~\\\"$txpool_layer\\\"}\",\n              \"interval\": \"\",\n              \"legendFormat\": \"{{type}} ({{instance}})\",\n              \"range\": true,\n              \"refId\": \"A\"\n            }\n          ],\n          \"title\": \"Transaction Count By Type ($txpool_layer)\",\n          \"type\": \"timeseries\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"fieldConfig\": {\n            \"defaults\": {\n              \"color\": {\n                \"mode\": \"palette-classic\"\n              },\n              \"custom\": {\n                \"axisBorderShow\": false,\n                \"axisCenteredZero\": false,\n                \"axisColorMode\": \"text\",\n                \"axisLabel\": \"\",\n                \"axisPlacement\": \"auto\",\n                \"barAlignment\": 0,\n                \"drawStyle\": \"line\",\n                \"fillOpacity\": 0,\n                \"gradientMode\": \"none\",\n                \"hideFrom\": {\n                  \"legend\": false,\n                  \"tooltip\": false,\n                  \"viz\": false\n                },\n                \"insertNulls\": false,\n                \"lineInterpolation\": \"linear\",\n                \"lineWidth\": 1,\n                \"pointSize\": 5,\n                \"scaleDistribution\": {\n                  \"type\": \"linear\"\n                },\n                \"showPoints\": \"auto\",\n                \"spanNulls\": false,\n                \"stacking\": {\n                  \"group\": \"A\",\n                  \"mode\": \"none\"\n                },\n                \"thresholdsStyle\": {\n                  \"mode\": \"off\"\n                }\n              },\n              \"mappings\": [],\n              \"thresholds\": {\n                \"mode\": \"absolute\",\n                \"steps\": [\n                  {\n                    \"color\": \"green\"\n                  },\n                  {\n                    \"color\": \"red\",\n                    \"value\": 80\n                  }\n                ]\n              }\n            },\n            \"overrides\": []\n          },\n          \"gridPos\": {\n            \"h\": 7,\n            \"w\": 12,\n            \"x\": 0,\n            \"y\": 3563\n          },\n          \"id\": 213,\n          \"options\": {\n            \"legend\": {\n              \"calcs\": [],\n              \"displayMode\": \"list\",\n              \"placement\": \"bottom\",\n              \"showLegend\": true\n            },\n            \"tooltip\": {\n              \"mode\": \"single\",\n              \"sort\": \"none\"\n            }\n          },\n          \"targets\": [\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"PBFA97CFB590B2093\"\n              },\n              \"editorMode\": \"code\",\n              \"exemplar\": true,\n              \"expr\": \"rate(besu_transaction_pool_added_total{instance=~\\\"$system\\\",layer=~\\\"$txpool_layer\\\"}[$__rate_interval])\",\n              \"interval\": \"\",\n              \"legendFormat\": \"{{source}} ({{instance}})\",\n              \"range\": true,\n              \"refId\": \"A\"\n            }\n          ],\n          \"title\": \"Transactions Added ($txpool_layer)\",\n          \"type\": \"timeseries\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"fieldConfig\": {\n            \"defaults\": {\n              \"color\": {\n                \"mode\": \"palette-classic\"\n              },\n              \"custom\": {\n                \"axisBorderShow\": false,\n                \"axisCenteredZero\": false,\n                \"axisColorMode\": \"text\",\n                \"axisLabel\": \"\",\n                \"axisPlacement\": \"auto\",\n                \"barAlignment\": 0,\n                \"drawStyle\": \"line\",\n                \"fillOpacity\": 0,\n                \"gradientMode\": \"none\",\n                \"hideFrom\": {\n                  \"legend\": false,\n                  \"tooltip\": false,\n                  \"viz\": false\n                },\n                \"insertNulls\": false,\n                \"lineInterpolation\": \"linear\",\n                \"lineWidth\": 1,\n                \"pointSize\": 5,\n                \"scaleDistribution\": {\n                  \"type\": \"linear\"\n                },\n                \"showPoints\": \"auto\",\n                \"spanNulls\": false,\n                \"stacking\": {\n                  \"group\": \"A\",\n                  \"mode\": \"none\"\n                },\n                \"thresholdsStyle\": {\n                  \"mode\": \"off\"\n                }\n              },\n              \"mappings\": [],\n              \"thresholds\": {\n                \"mode\": \"absolute\",\n                \"steps\": [\n                  {\n                    \"color\": \"green\"\n                  },\n                  {\n                    \"color\": \"red\",\n                    \"value\": 80\n                  }\n                ]\n              },\n              \"unit\": \"decbytes\"\n            },\n            \"overrides\": []\n          },\n          \"gridPos\": {\n            \"h\": 7,\n            \"w\": 12,\n            \"x\": 12,\n            \"y\": 3563\n          },\n          \"id\": 206,\n          \"options\": {\n            \"legend\": {\n              \"calcs\": [],\n              \"displayMode\": \"list\",\n              \"placement\": \"bottom\",\n              \"showLegend\": true\n            },\n            \"tooltip\": {\n              \"mode\": \"single\",\n              \"sort\": \"none\"\n            }\n          },\n          \"targets\": [\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"PBFA97CFB590B2093\"\n              },\n              \"editorMode\": \"code\",\n              \"exemplar\": true,\n              \"expr\": \"besu_transaction_pool_space_used{instance=~\\\"$system\\\",layer=~\\\"$txpool_layer\\\"}\",\n              \"interval\": \"\",\n              \"legendFormat\": \"{{instance}}\",\n              \"range\": true,\n              \"refId\": \"A\"\n            }\n          ],\n          \"title\": \"Transaction Memory Used ($txpool_layer)\",\n          \"type\": \"timeseries\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"description\": \"\",\n          \"fieldConfig\": {\n            \"defaults\": {\n              \"color\": {\n                \"mode\": \"palette-classic\"\n              },\n              \"custom\": {\n                \"axisBorderShow\": false,\n                \"axisCenteredZero\": false,\n                \"axisColorMode\": \"text\",\n                \"axisLabel\": \"\",\n                \"axisPlacement\": \"auto\",\n                \"barAlignment\": 0,\n                \"drawStyle\": \"line\",\n                \"fillOpacity\": 0,\n                \"gradientMode\": \"none\",\n                \"hideFrom\": {\n                  \"legend\": false,\n                  \"tooltip\": false,\n                  \"viz\": false\n                },\n                \"insertNulls\": false,\n                \"lineInterpolation\": \"linear\",\n                \"lineWidth\": 1,\n                \"pointSize\": 5,\n                \"scaleDistribution\": {\n                  \"type\": \"linear\"\n                },\n                \"showPoints\": \"auto\",\n                \"spanNulls\": false,\n                \"stacking\": {\n                  \"group\": \"A\",\n                  \"mode\": \"none\"\n                },\n                \"thresholdsStyle\": {\n                  \"mode\": \"off\"\n                }\n              },\n              \"mappings\": [],\n              \"thresholds\": {\n                \"mode\": \"absolute\",\n                \"steps\": [\n                  {\n                    \"color\": \"green\"\n                  },\n                  {\n                    \"color\": \"red\",\n                    \"value\": 80\n                  }\n                ]\n              }\n            },\n            \"overrides\": []\n          },\n          \"gridPos\": {\n            \"h\": 7,\n            \"w\": 12,\n            \"x\": 0,\n            \"y\": 3570\n          },\n          \"id\": 233,\n          \"options\": {\n            \"legend\": {\n              \"calcs\": [],\n              \"displayMode\": \"list\",\n              \"placement\": \"bottom\",\n              \"showLegend\": true\n            },\n            \"tooltip\": {\n              \"mode\": \"single\",\n              \"sort\": \"none\"\n            }\n          },\n          \"targets\": [\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"PBFA97CFB590B2093\"\n              },\n              \"editorMode\": \"code\",\n              \"exemplar\": true,\n              \"expr\": \"rate(besu_transaction_pool_removed_total{instance=~\\\"$system\\\",layer=~\\\"$txpool_layer\\\"}[$__rate_interval])\",\n              \"interval\": \"\",\n              \"legendFormat\": \"{{source}} {{operation}} ({{instance}})\",\n              \"range\": true,\n              \"refId\": \"A\"\n            }\n          ],\n          \"title\": \"Transactions Removed ($txpool_layer)\",\n          \"type\": \"timeseries\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"fieldConfig\": {\n            \"defaults\": {\n              \"color\": {\n                \"mode\": \"palette-classic\"\n              },\n              \"custom\": {\n                \"axisBorderShow\": false,\n                \"axisCenteredZero\": false,\n                \"axisColorMode\": \"text\",\n                \"axisLabel\": \"\",\n                \"axisPlacement\": \"auto\",\n                \"barAlignment\": 0,\n                \"drawStyle\": \"line\",\n                \"fillOpacity\": 0,\n                \"gradientMode\": \"none\",\n                \"hideFrom\": {\n                  \"legend\": false,\n                  \"tooltip\": false,\n                  \"viz\": false\n                },\n                \"insertNulls\": false,\n                \"lineInterpolation\": \"linear\",\n                \"lineWidth\": 1,\n                \"pointSize\": 5,\n                \"scaleDistribution\": {\n                  \"type\": \"linear\"\n                },\n                \"showPoints\": \"auto\",\n                \"spanNulls\": false,\n                \"stacking\": {\n                  \"group\": \"A\",\n                  \"mode\": \"none\"\n                },\n                \"thresholdsStyle\": {\n                  \"mode\": \"off\"\n                }\n              },\n              \"mappings\": [],\n              \"thresholds\": {\n                \"mode\": \"absolute\",\n                \"steps\": [\n                  {\n                    \"color\": \"green\"\n                  },\n                  {\n                    \"color\": \"red\",\n                    \"value\": 80\n                  }\n                ]\n              },\n              \"unit\": \"none\"\n            },\n            \"overrides\": []\n          },\n          \"gridPos\": {\n            \"h\": 7,\n            \"w\": 12,\n            \"x\": 12,\n            \"y\": 3570\n          },\n          \"id\": 342,\n          \"options\": {\n            \"legend\": {\n              \"calcs\": [],\n              \"displayMode\": \"list\",\n              \"placement\": \"bottom\",\n              \"showLegend\": true\n            },\n            \"tooltip\": {\n              \"mode\": \"single\",\n              \"sort\": \"none\"\n            }\n          },\n          \"targets\": [\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"PBFA97CFB590B2093\"\n              },\n              \"editorMode\": \"code\",\n              \"exemplar\": true,\n              \"expr\": \"besu_transaction_pool_unique_senders{instance=~\\\"$system\\\",layer=~\\\"$txpool_layer\\\"}\",\n              \"interval\": \"\",\n              \"legendFormat\": \"{{instance}}\",\n              \"range\": true,\n              \"refId\": \"A\"\n            }\n          ],\n          \"title\": \"Unique Senders ($txpool_layer)\",\n          \"type\": \"timeseries\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"description\": \"\",\n          \"fieldConfig\": {\n            \"defaults\": {\n              \"color\": {\n                \"mode\": \"palette-classic\"\n              },\n              \"custom\": {\n                \"axisBorderShow\": false,\n                \"axisCenteredZero\": false,\n                \"axisColorMode\": \"text\",\n                \"axisLabel\": \"\",\n                \"axisPlacement\": \"auto\",\n                \"barAlignment\": 0,\n                \"drawStyle\": \"line\",\n                \"fillOpacity\": 0,\n                \"gradientMode\": \"none\",\n                \"hideFrom\": {\n                  \"legend\": false,\n                  \"tooltip\": false,\n                  \"viz\": false\n                },\n                \"insertNulls\": false,\n                \"lineInterpolation\": \"linear\",\n                \"lineWidth\": 1,\n                \"pointSize\": 5,\n                \"scaleDistribution\": {\n                  \"type\": \"linear\"\n                },\n                \"showPoints\": \"auto\",\n                \"spanNulls\": false,\n                \"stacking\": {\n                  \"group\": \"A\",\n                  \"mode\": \"none\"\n                },\n                \"thresholdsStyle\": {\n                  \"mode\": \"off\"\n                }\n              },\n              \"mappings\": [],\n              \"thresholds\": {\n                \"mode\": \"absolute\",\n                \"steps\": [\n                  {\n                    \"color\": \"green\"\n                  },\n                  {\n                    \"color\": \"red\",\n                    \"value\": 80\n                  }\n                ]\n              }\n            },\n            \"overrides\": []\n          },\n          \"gridPos\": {\n            \"h\": 7,\n            \"w\": 12,\n            \"x\": 12,\n            \"y\": 3577\n          },\n          \"id\": 222,\n          \"options\": {\n            \"legend\": {\n              \"calcs\": [],\n              \"displayMode\": \"list\",\n              \"placement\": \"bottom\",\n              \"showLegend\": true\n            },\n            \"tooltip\": {\n              \"mode\": \"single\",\n              \"sort\": \"none\"\n            }\n          },\n          \"targets\": [\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"PBFA97CFB590B2093\"\n              },\n              \"editorMode\": \"code\",\n              \"exemplar\": true,\n              \"expr\": \"rate(besu_transaction_pool_rejected_total{instance=~\\\"$system\\\",layer=~\\\"$txpool_layer\\\"}[$__rate_interval])\",\n              \"interval\": \"\",\n              \"legendFormat\": \"{{source}} {{reason}} ({{instance}})\",\n              \"range\": true,\n              \"refId\": \"A\"\n            }\n          ],\n          \"title\": \"Transactions Rejected ($txpool_layer)\",\n          \"type\": \"timeseries\"\n        }\n      ],\n      \"repeat\": \"txpool_layer\",\n      \"title\": \"Layered Transaction Pool - $txpool_layer\",\n      \"type\": \"row\"\n    },\n    {\n      \"collapsed\": true,\n      \"gridPos\": {\n        \"h\": 1,\n        \"w\": 24,\n        \"x\": 0,\n        \"y\": 44\n      },\n      \"id\": 481,\n      \"panels\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"fieldConfig\": {\n            \"defaults\": {\n              \"color\": {\n                \"mode\": \"palette-classic\"\n              },\n              \"custom\": {\n                \"axisBorderShow\": false,\n                \"axisCenteredZero\": false,\n                \"axisColorMode\": \"text\",\n                \"axisLabel\": \"\",\n                \"axisPlacement\": \"auto\",\n                \"barAlignment\": 0,\n                \"barWidthFactor\": 0.6,\n                \"drawStyle\": \"line\",\n                \"fillOpacity\": 0,\n                \"gradientMode\": \"none\",\n                \"hideFrom\": {\n                  \"legend\": false,\n                  \"tooltip\": false,\n                  \"viz\": false\n                },\n                \"insertNulls\": false,\n                \"lineInterpolation\": \"linear\",\n                \"lineWidth\": 1,\n                \"pointSize\": 5,\n                \"scaleDistribution\": {\n                  \"type\": \"linear\"\n                },\n                \"showPoints\": \"auto\",\n                \"spanNulls\": false,\n                \"stacking\": {\n                  \"group\": \"A\",\n                  \"mode\": \"none\"\n                },\n                \"thresholdsStyle\": {\n                  \"mode\": \"off\"\n                }\n              },\n              \"mappings\": [],\n              \"thresholds\": {\n                \"mode\": \"absolute\",\n                \"steps\": [\n                  {\n                    \"color\": \"green\"\n                  },\n                  {\n                    \"color\": \"red\",\n                    \"value\": 80\n                  }\n                ]\n              }\n            },\n            \"overrides\": []\n          },\n          \"gridPos\": {\n            \"h\": 8,\n            \"w\": 12,\n            \"x\": 0,\n            \"y\": 29203\n          },\n          \"id\": 26,\n          \"options\": {\n            \"legend\": {\n              \"calcs\": [\n                \"min\",\n                \"max\",\n                \"mean\",\n                \"lastNotNull\"\n              ],\n              \"displayMode\": \"table\",\n              \"placement\": \"bottom\",\n              \"showLegend\": true\n            },\n            \"tooltip\": {\n              \"mode\": \"single\",\n              \"sort\": \"none\"\n            }\n          },\n          \"pluginVersion\": \"11.3.0\",\n          \"targets\": [\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"PBFA97CFB590B2093\"\n              },\n              \"exemplar\": true,\n              \"expr\": \"besu_transaction_pool_transactions{instance=~\\\"$system\\\"}\",\n              \"interval\": \"\",\n              \"legendFormat\": \"{{instance}}\",\n              \"refId\": \"A\"\n            }\n          ],\n          \"title\": \"Poll Size\",\n          \"type\": \"timeseries\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"fieldConfig\": {\n            \"defaults\": {\n              \"color\": {\n                \"mode\": \"palette-classic\"\n              },\n              \"custom\": {\n                \"axisBorderShow\": false,\n                \"axisCenteredZero\": false,\n                \"axisColorMode\": \"text\",\n                \"axisLabel\": \"\",\n                \"axisPlacement\": \"auto\",\n                \"barAlignment\": 0,\n                \"barWidthFactor\": 0.6,\n                \"drawStyle\": \"line\",\n                \"fillOpacity\": 0,\n                \"gradientMode\": \"none\",\n                \"hideFrom\": {\n                  \"legend\": false,\n                  \"tooltip\": false,\n                  \"viz\": false\n                },\n                \"insertNulls\": false,\n                \"lineInterpolation\": \"linear\",\n                \"lineWidth\": 1,\n                \"pointSize\": 5,\n                \"scaleDistribution\": {\n                  \"type\": \"linear\"\n                },\n                \"showPoints\": \"auto\",\n                \"spanNulls\": false,\n                \"stacking\": {\n                  \"group\": \"A\",\n                  \"mode\": \"none\"\n                },\n                \"thresholdsStyle\": {\n                  \"mode\": \"off\"\n                }\n              },\n              \"mappings\": [],\n              \"thresholds\": {\n                \"mode\": \"absolute\",\n                \"steps\": [\n                  {\n                    \"color\": \"green\"\n                  },\n                  {\n                    \"color\": \"red\",\n                    \"value\": 80\n                  }\n                ]\n              }\n            },\n            \"overrides\": []\n          },\n          \"gridPos\": {\n            \"h\": 8,\n            \"w\": 12,\n            \"x\": 12,\n            \"y\": 29203\n          },\n          \"id\": 32,\n          \"options\": {\n            \"legend\": {\n              \"calcs\": [\n                \"min\",\n                \"max\",\n                \"mean\",\n                \"lastNotNull\"\n              ],\n              \"displayMode\": \"table\",\n              \"placement\": \"bottom\",\n              \"showLegend\": true,\n              \"sortBy\": \"Mean\",\n              \"sortDesc\": true\n            },\n            \"tooltip\": {\n              \"mode\": \"single\",\n              \"sort\": \"none\"\n            }\n          },\n          \"pluginVersion\": \"11.3.0\",\n          \"targets\": [\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"PBFA97CFB590B2093\"\n              },\n              \"exemplar\": true,\n              \"expr\": \"rate(besu_transaction_pool_transactions_added_total{instance=~\\\"$system\\\"}[$__rate_interval])\",\n              \"interval\": \"\",\n              \"legendFormat\": \"{{source}} ({{instance}})\",\n              \"refId\": \"A\"\n            }\n          ],\n          \"title\": \"Added\",\n          \"type\": \"timeseries\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"fieldConfig\": {\n            \"defaults\": {\n              \"color\": {\n                \"mode\": \"palette-classic\"\n              },\n              \"custom\": {\n                \"axisBorderShow\": false,\n                \"axisCenteredZero\": false,\n                \"axisColorMode\": \"text\",\n                \"axisLabel\": \"\",\n                \"axisPlacement\": \"auto\",\n                \"barAlignment\": 0,\n                \"barWidthFactor\": 0.6,\n                \"drawStyle\": \"line\",\n                \"fillOpacity\": 0,\n                \"gradientMode\": \"none\",\n                \"hideFrom\": {\n                  \"legend\": false,\n                  \"tooltip\": false,\n                  \"viz\": false\n                },\n                \"insertNulls\": false,\n                \"lineInterpolation\": \"linear\",\n                \"lineWidth\": 1,\n                \"pointSize\": 5,\n                \"scaleDistribution\": {\n                  \"type\": \"linear\"\n                },\n                \"showPoints\": \"auto\",\n                \"spanNulls\": false,\n                \"stacking\": {\n                  \"group\": \"A\",\n                  \"mode\": \"none\"\n                },\n                \"thresholdsStyle\": {\n                  \"mode\": \"off\"\n                }\n              },\n              \"mappings\": [],\n              \"thresholds\": {\n                \"mode\": \"absolute\",\n                \"steps\": [\n                  {\n                    \"color\": \"green\"\n                  },\n                  {\n                    \"color\": \"red\",\n                    \"value\": 80\n                  }\n                ]\n              }\n            },\n            \"overrides\": []\n          },\n          \"gridPos\": {\n            \"h\": 8,\n            \"w\": 12,\n            \"x\": 0,\n            \"y\": 29211\n          },\n          \"id\": 33,\n          \"options\": {\n            \"legend\": {\n              \"calcs\": [\n                \"min\",\n                \"max\",\n                \"mean\",\n                \"lastNotNull\"\n              ],\n              \"displayMode\": \"table\",\n              \"placement\": \"bottom\",\n              \"showLegend\": true\n            },\n            \"tooltip\": {\n              \"mode\": \"single\",\n              \"sort\": \"none\"\n            }\n          },\n          \"pluginVersion\": \"11.3.0\",\n          \"targets\": [\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"PBFA97CFB590B2093\"\n              },\n              \"exemplar\": true,\n              \"expr\": \"rate(besu_transaction_pool_transactions_duplicates_total{instance=~\\\"$system\\\"}[$__rate_interval])\",\n              \"interval\": \"\",\n              \"legendFormat\": \"{{source}} ({{instance}})\",\n              \"refId\": \"A\"\n            }\n          ],\n          \"title\": \"Duplicates\",\n          \"type\": \"timeseries\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"fieldConfig\": {\n            \"defaults\": {\n              \"color\": {\n                \"mode\": \"palette-classic\"\n              },\n              \"custom\": {\n                \"axisBorderShow\": false,\n                \"axisCenteredZero\": false,\n                \"axisColorMode\": \"text\",\n                \"axisLabel\": \"\",\n                \"axisPlacement\": \"auto\",\n                \"barAlignment\": 0,\n                \"barWidthFactor\": 0.6,\n                \"drawStyle\": \"line\",\n                \"fillOpacity\": 0,\n                \"gradientMode\": \"none\",\n                \"hideFrom\": {\n                  \"legend\": false,\n                  \"tooltip\": false,\n                  \"viz\": false\n                },\n                \"insertNulls\": false,\n                \"lineInterpolation\": \"linear\",\n                \"lineWidth\": 1,\n                \"pointSize\": 5,\n                \"scaleDistribution\": {\n                  \"type\": \"linear\"\n                },\n                \"showPoints\": \"auto\",\n                \"spanNulls\": false,\n                \"stacking\": {\n                  \"group\": \"A\",\n                  \"mode\": \"none\"\n                },\n                \"thresholdsStyle\": {\n                  \"mode\": \"off\"\n                }\n              },\n              \"mappings\": [],\n              \"thresholds\": {\n                \"mode\": \"absolute\",\n                \"steps\": [\n                  {\n                    \"color\": \"green\"\n                  },\n                  {\n                    \"color\": \"red\",\n                    \"value\": 80\n                  }\n                ]\n              }\n            },\n            \"overrides\": []\n          },\n          \"gridPos\": {\n            \"h\": 8,\n            \"w\": 12,\n            \"x\": 12,\n            \"y\": 29211\n          },\n          \"id\": 35,\n          \"options\": {\n            \"legend\": {\n              \"calcs\": [\n                \"min\",\n                \"max\",\n                \"mean\",\n                \"lastNotNull\"\n              ],\n              \"displayMode\": \"table\",\n              \"placement\": \"bottom\",\n              \"showLegend\": true\n            },\n            \"tooltip\": {\n              \"mode\": \"single\",\n              \"sort\": \"none\"\n            }\n          },\n          \"pluginVersion\": \"11.3.0\",\n          \"targets\": [\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"PBFA97CFB590B2093\"\n              },\n              \"exemplar\": true,\n              \"expr\": \"rate(besu_transaction_pool_transactions_removed_total{instance=~\\\"$system\\\"}[$__rate_interval])\",\n              \"interval\": \"\",\n              \"legendFormat\": \"{{source}} {{operation}} ({{instance}})\",\n              \"refId\": \"A\"\n            }\n          ],\n          \"title\": \"Removed\",\n          \"type\": \"timeseries\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"fieldConfig\": {\n            \"defaults\": {\n              \"color\": {\n                \"mode\": \"palette-classic\"\n              },\n              \"custom\": {\n                \"axisBorderShow\": false,\n                \"axisCenteredZero\": false,\n                \"axisColorMode\": \"text\",\n                \"axisLabel\": \"\",\n                \"axisPlacement\": \"auto\",\n                \"barAlignment\": 0,\n                \"drawStyle\": \"line\",\n                \"fillOpacity\": 0,\n                \"gradientMode\": \"none\",\n                \"hideFrom\": {\n                  \"legend\": false,\n                  \"tooltip\": false,\n                  \"viz\": false\n                },\n                \"insertNulls\": false,\n                \"lineInterpolation\": \"linear\",\n                \"lineWidth\": 1,\n                \"pointSize\": 5,\n                \"scaleDistribution\": {\n                  \"type\": \"linear\"\n                },\n                \"showPoints\": \"auto\",\n                \"spanNulls\": false,\n                \"stacking\": {\n                  \"group\": \"A\",\n                  \"mode\": \"none\"\n                },\n                \"thresholdsStyle\": {\n                  \"mode\": \"off\"\n                }\n              },\n              \"mappings\": [],\n              \"thresholds\": {\n                \"mode\": \"absolute\",\n                \"steps\": [\n                  {\n                    \"color\": \"green\"\n                  },\n                  {\n                    \"color\": \"red\",\n                    \"value\": 80\n                  }\n                ]\n              }\n            },\n            \"overrides\": []\n          },\n          \"gridPos\": {\n            \"h\": 8,\n            \"w\": 12,\n            \"x\": 0,\n            \"y\": 29219\n          },\n          \"id\": 34,\n          \"options\": {\n            \"legend\": {\n              \"calcs\": [],\n              \"displayMode\": \"list\",\n              \"placement\": \"bottom\",\n              \"showLegend\": true\n            },\n            \"tooltip\": {\n              \"mode\": \"single\",\n              \"sort\": \"none\"\n            }\n          },\n          \"targets\": [\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"PBFA97CFB590B2093\"\n              },\n              \"exemplar\": true,\n              \"expr\": \"rate(besu_transaction_pool_transactions_messages_skipped_total{instance=~\\\"$system\\\"}[$__rate_interval])\",\n              \"interval\": \"\",\n              \"legendFormat\": \"{{instance}}\",\n              \"refId\": \"A\"\n            }\n          ],\n          \"title\": \"Messages Skipped\",\n          \"type\": \"timeseries\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"fieldConfig\": {\n            \"defaults\": {\n              \"color\": {\n                \"mode\": \"palette-classic\"\n              },\n              \"custom\": {\n                \"axisBorderShow\": false,\n                \"axisCenteredZero\": false,\n                \"axisColorMode\": \"text\",\n                \"axisLabel\": \"\",\n                \"axisPlacement\": \"auto\",\n                \"barAlignment\": 0,\n                \"drawStyle\": \"line\",\n                \"fillOpacity\": 0,\n                \"gradientMode\": \"none\",\n                \"hideFrom\": {\n                  \"legend\": false,\n                  \"tooltip\": false,\n                  \"viz\": false\n                },\n                \"insertNulls\": false,\n                \"lineInterpolation\": \"linear\",\n                \"lineWidth\": 1,\n                \"pointSize\": 5,\n                \"scaleDistribution\": {\n                  \"type\": \"linear\"\n                },\n                \"showPoints\": \"auto\",\n                \"spanNulls\": false,\n                \"stacking\": {\n                  \"group\": \"A\",\n                  \"mode\": \"none\"\n                },\n                \"thresholdsStyle\": {\n                  \"mode\": \"off\"\n                }\n              },\n              \"mappings\": [],\n              \"thresholds\": {\n                \"mode\": \"absolute\",\n                \"steps\": [\n                  {\n                    \"color\": \"green\"\n                  },\n                  {\n                    \"color\": \"red\",\n                    \"value\": 80\n                  }\n                ]\n              }\n            },\n            \"overrides\": []\n          },\n          \"gridPos\": {\n            \"h\": 8,\n            \"w\": 12,\n            \"x\": 12,\n            \"y\": 29219\n          },\n          \"id\": 36,\n          \"options\": {\n            \"legend\": {\n              \"calcs\": [],\n              \"displayMode\": \"list\",\n              \"placement\": \"bottom\",\n              \"showLegend\": true\n            },\n            \"tooltip\": {\n              \"mode\": \"single\",\n              \"sort\": \"none\"\n            }\n          },\n          \"targets\": [\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"PBFA97CFB590B2093\"\n              },\n              \"exemplar\": true,\n              \"expr\": \"rate(besu_transaction_pool_pending_transactions_messages_skipped_total{instance=~\\\"$system\\\"}[$__rate_interval])\",\n              \"interval\": \"\",\n              \"legendFormat\": \"{{instance}}\",\n              \"refId\": \"A\"\n            }\n          ],\n          \"title\": \"Pending Transactions Messages Skipped\",\n          \"type\": \"timeseries\"\n        }\n      ],\n      \"title\": \"Transactions\",\n      \"type\": \"row\"\n    },\n    {\n      \"collapsed\": true,\n      \"gridPos\": {\n        \"h\": 1,\n        \"w\": 24,\n        \"x\": 0,\n        \"y\": 45\n      },\n      \"id\": 482,\n      \"panels\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"fieldConfig\": {\n            \"defaults\": {\n              \"color\": {\n                \"mode\": \"thresholds\"\n              },\n              \"custom\": {\n                \"align\": \"auto\",\n                \"cellOptions\": {\n                  \"type\": \"auto\"\n                },\n                \"filterable\": true,\n                \"inspect\": false\n              },\n              \"mappings\": [],\n              \"thresholds\": {\n                \"mode\": \"absolute\",\n                \"steps\": [\n                  {\n                    \"color\": \"green\"\n                  },\n                  {\n                    \"color\": \"red\",\n                    \"value\": 80\n                  }\n                ]\n              },\n              \"unit\": \"dthms\"\n            },\n            \"overrides\": [\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"__name__\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"custom.width\",\n                    \"value\": 508\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"instance\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"custom.width\",\n                    \"value\": 425\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"name\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"custom.width\",\n                    \"value\": 427\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"Network\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"displayName\",\n                    \"value\": \"network\"\n                  },\n                  {\n                    \"id\": \"displayName\"\n                  }\n                ]\n              }\n            ]\n          },\n          \"gridPos\": {\n            \"h\": 8,\n            \"w\": 24,\n            \"x\": 0,\n            \"y\": 9589\n          },\n          \"id\": 494,\n          \"options\": {\n            \"cellHeight\": \"sm\",\n            \"footer\": {\n              \"countRows\": false,\n              \"fields\": \"\",\n              \"reducer\": [\n                \"sum\"\n              ],\n              \"show\": false\n            },\n            \"frameIndex\": 1,\n            \"showHeader\": true,\n            \"sortBy\": []\n          },\n          \"pluginVersion\": \"12.0.2\",\n          \"targets\": [\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"PBFA97CFB590B2093\"\n              },\n              \"editorMode\": \"code\",\n              \"exemplar\": false,\n              \"expr\": \"besu_synchronizer_sync_duration_sum{instance=~\\\"$system\\\"}\",\n              \"format\": \"table\",\n              \"instant\": true,\n              \"legendFormat\": \"__auto\",\n              \"range\": false,\n              \"refId\": \"A\"\n            }\n          ],\n          \"title\": \"Sync Duration\",\n          \"transformations\": [\n            {\n              \"id\": \"organize\",\n              \"options\": {\n                \"excludeByName\": {\n                  \"Time\": true,\n                  \"Time 1\": true,\n                  \"Time 2\": true,\n                  \"__name__\": true,\n                  \"__name__ 1\": true,\n                  \"__name__ 2\": true,\n                  \"alerting\": true,\n                  \"alerting 1\": true,\n                  \"alerting 2\": true,\n                  \"cl_client\": false,\n                  \"cluster\": true,\n                  \"cluster 1\": true,\n                  \"cluster 2\": true,\n                  \"el_client\": false,\n                  \"el_client_name\": true,\n                  \"el_client_name 1\": true,\n                  \"el_client_name 2\": true,\n                  \"env\": true,\n                  \"env 1\": true,\n                  \"env 2\": true,\n                  \"job\": true,\n                  \"job 1\": true,\n                  \"job 2\": true,\n                  \"location\": true,\n                  \"location 1\": true,\n                  \"location 2\": true,\n                  \"name\": false,\n                  \"network\": false,\n                  \"network 1\": true,\n                  \"network 2\": true,\n                  \"origin\": false,\n                  \"origin 1\": true,\n                  \"origin 2\": true,\n                  \"owner\": true,\n                  \"owner 1\": true,\n                  \"owner 2\": true,\n                  \"private_ip\": false,\n                  \"private_ip 1\": true,\n                  \"private_ip 2\": true,\n                  \"prometheus\": true,\n                  \"prometheus 1\": true,\n                  \"prometheus 2\": true,\n                  \"prometheus_replica\": true,\n                  \"prometheus_replica 1\": true,\n                  \"prometheus_replica 2\": true,\n                  \"public_ip\": true,\n                  \"stack_name\": true,\n                  \"stack_name 1\": true,\n                  \"stack_name 2\": true,\n                  \"vnet\": true,\n                  \"vnet 1\": true,\n                  \"vnet 2\": true\n                },\n                \"includeByName\": {},\n                \"indexByName\": {\n                  \"Time\": 0,\n                  \"Value\": 8,\n                  \"__name__\": 1,\n                  \"alerting\": 2,\n                  \"cl_client\": 11,\n                  \"cluster\": 3,\n                  \"el_client\": 10,\n                  \"env\": 4,\n                  \"instance\": 5,\n                  \"instance_id\": 19,\n                  \"job\": 6,\n                  \"name\": 7,\n                  \"network\": 9,\n                  \"origin\": 14,\n                  \"owner\": 12,\n                  \"private_ip\": 13,\n                  \"prometheus\": 15,\n                  \"prometheus_replica\": 16,\n                  \"public_ip\": 17,\n                  \"vnet\": 18,\n                  \"vpc\": 20\n                },\n                \"renameByName\": {\n                  \"Value\": \"Time\",\n                  \"Value #A\": \"Download Time\",\n                  \"Value #B\": \"Healing Time\",\n                  \"instance\": \"\",\n                  \"job\": \"\",\n                  \"name\": \"\",\n                  \"network\": \"\",\n                  \"vnet\": \"\"\n                }\n              }\n            }\n          ],\n          \"type\": \"table\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"fieldConfig\": {\n            \"defaults\": {\n              \"color\": {\n                \"mode\": \"palette-classic\"\n              },\n              \"custom\": {\n                \"axisBorderShow\": false,\n                \"axisCenteredZero\": false,\n                \"axisColorMode\": \"text\",\n                \"axisLabel\": \"\",\n                \"axisPlacement\": \"auto\",\n                \"barAlignment\": 0,\n                \"barWidthFactor\": 0.6,\n                \"drawStyle\": \"line\",\n                \"fillOpacity\": 0,\n                \"gradientMode\": \"none\",\n                \"hideFrom\": {\n                  \"legend\": false,\n                  \"tooltip\": false,\n                  \"viz\": false\n                },\n                \"insertNulls\": false,\n                \"lineInterpolation\": \"linear\",\n                \"lineWidth\": 1,\n                \"pointSize\": 5,\n                \"scaleDistribution\": {\n                  \"type\": \"linear\"\n                },\n                \"showPoints\": \"auto\",\n                \"spanNulls\": false,\n                \"stacking\": {\n                  \"group\": \"A\",\n                  \"mode\": \"none\"\n                },\n                \"thresholdsStyle\": {\n                  \"mode\": \"off\"\n                }\n              },\n              \"mappings\": [],\n              \"thresholds\": {\n                \"mode\": \"absolute\",\n                \"steps\": [\n                  {\n                    \"color\": \"green\"\n                  },\n                  {\n                    \"color\": \"red\",\n                    \"value\": 80\n                  }\n                ]\n              }\n            },\n            \"overrides\": []\n          },\n          \"gridPos\": {\n            \"h\": 11,\n            \"w\": 12,\n            \"x\": 0,\n            \"y\": 9597\n          },\n          \"id\": 40,\n          \"options\": {\n            \"legend\": {\n              \"calcs\": [\n                \"min\",\n                \"max\",\n                \"mean\",\n                \"sum\"\n              ],\n              \"displayMode\": \"table\",\n              \"placement\": \"bottom\",\n              \"showLegend\": true\n            },\n            \"tooltip\": {\n              \"hideZeros\": false,\n              \"mode\": \"single\",\n              \"sort\": \"none\"\n            }\n          },\n          \"pluginVersion\": \"12.0.2\",\n          \"targets\": [\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"PBFA97CFB590B2093\"\n              },\n              \"exemplar\": true,\n              \"expr\": \"rate(besu_synchronizer_chain_download_pipeline_processed_total{instance=~\\\"$system\\\"}[$__rate_interval])\",\n              \"interval\": \"\",\n              \"legendFormat\": \"{{step}} {{action}} ({{instance}})\",\n              \"refId\": \"A\"\n            }\n          ],\n          \"title\": \"Download Pipeline\",\n          \"type\": \"timeseries\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"fieldConfig\": {\n            \"defaults\": {\n              \"color\": {\n                \"mode\": \"palette-classic\"\n              },\n              \"custom\": {\n                \"axisBorderShow\": false,\n                \"axisCenteredZero\": false,\n                \"axisColorMode\": \"text\",\n                \"axisLabel\": \"\",\n                \"axisPlacement\": \"auto\",\n                \"barAlignment\": 0,\n                \"barWidthFactor\": 0.6,\n                \"drawStyle\": \"line\",\n                \"fillOpacity\": 0,\n                \"gradientMode\": \"none\",\n                \"hideFrom\": {\n                  \"legend\": false,\n                  \"tooltip\": false,\n                  \"viz\": false\n                },\n                \"insertNulls\": false,\n                \"lineInterpolation\": \"linear\",\n                \"lineWidth\": 1,\n                \"pointSize\": 5,\n                \"scaleDistribution\": {\n                  \"type\": \"linear\"\n                },\n                \"showPoints\": \"auto\",\n                \"spanNulls\": false,\n                \"stacking\": {\n                  \"group\": \"A\",\n                  \"mode\": \"none\"\n                },\n                \"thresholdsStyle\": {\n                  \"mode\": \"off\"\n                }\n              },\n              \"mappings\": [],\n              \"thresholds\": {\n                \"mode\": \"absolute\",\n                \"steps\": [\n                  {\n                    \"color\": \"green\"\n                  },\n                  {\n                    \"color\": \"red\",\n                    \"value\": 80\n                  }\n                ]\n              }\n            },\n            \"overrides\": []\n          },\n          \"gridPos\": {\n            \"h\": 11,\n            \"w\": 12,\n            \"x\": 12,\n            \"y\": 9597\n          },\n          \"id\": 41,\n          \"options\": {\n            \"legend\": {\n              \"calcs\": [\n                \"min\",\n                \"max\",\n                \"mean\",\n                \"sum\"\n              ],\n              \"displayMode\": \"table\",\n              \"placement\": \"bottom\",\n              \"showLegend\": true\n            },\n            \"tooltip\": {\n              \"hideZeros\": false,\n              \"mode\": \"single\",\n              \"sort\": \"none\"\n            }\n          },\n          \"pluginVersion\": \"12.0.2\",\n          \"targets\": [\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"PBFA97CFB590B2093\"\n              },\n              \"editorMode\": \"code\",\n              \"exemplar\": true,\n              \"expr\": \"rate(besu_synchronizer_chain_download_pipeline_restarts_total{instance=~\\\"$system\\\"}[$__rate_interval])\",\n              \"interval\": \"\",\n              \"legendFormat\": \"{{reason}} ({{instance}})\",\n              \"range\": true,\n              \"refId\": \"A\"\n            }\n          ],\n          \"title\": \"Pipeline Restarts\",\n          \"type\": \"timeseries\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"fieldConfig\": {\n            \"defaults\": {\n              \"color\": {\n                \"mode\": \"palette-classic\"\n              },\n              \"custom\": {\n                \"axisBorderShow\": false,\n                \"axisCenteredZero\": false,\n                \"axisColorMode\": \"text\",\n                \"axisLabel\": \"\",\n                \"axisPlacement\": \"auto\",\n                \"barAlignment\": 0,\n                \"barWidthFactor\": 0.6,\n                \"drawStyle\": \"line\",\n                \"fillOpacity\": 0,\n                \"gradientMode\": \"none\",\n                \"hideFrom\": {\n                  \"legend\": false,\n                  \"tooltip\": false,\n                  \"viz\": false\n                },\n                \"insertNulls\": false,\n                \"lineInterpolation\": \"linear\",\n                \"lineWidth\": 1,\n                \"pointSize\": 5,\n                \"scaleDistribution\": {\n                  \"type\": \"linear\"\n                },\n                \"showPoints\": \"auto\",\n                \"spanNulls\": false,\n                \"stacking\": {\n                  \"group\": \"A\",\n                  \"mode\": \"none\"\n                },\n                \"thresholdsStyle\": {\n                  \"mode\": \"off\"\n                }\n              },\n              \"mappings\": [],\n              \"thresholds\": {\n                \"mode\": \"absolute\",\n                \"steps\": [\n                  {\n                    \"color\": \"green\"\n                  },\n                  {\n                    \"color\": \"red\",\n                    \"value\": 80\n                  }\n                ]\n              },\n              \"unit\": \"reqps\"\n            },\n            \"overrides\": []\n          },\n          \"gridPos\": {\n            \"h\": 11,\n            \"w\": 12,\n            \"x\": 0,\n            \"y\": 9608\n          },\n          \"id\": 51,\n          \"options\": {\n            \"legend\": {\n              \"calcs\": [\n                \"min\",\n                \"max\",\n                \"mean\",\n                \"sum\"\n              ],\n              \"displayMode\": \"table\",\n              \"placement\": \"bottom\",\n              \"showLegend\": true\n            },\n            \"tooltip\": {\n              \"hideZeros\": false,\n              \"mode\": \"single\",\n              \"sort\": \"none\"\n            }\n          },\n          \"pluginVersion\": \"12.0.2\",\n          \"targets\": [\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"PBFA97CFB590B2093\"\n              },\n              \"editorMode\": \"code\",\n              \"exemplar\": true,\n              \"expr\": \"rate(besu_synchronizer_task_count{instance=~\\\"$system\\\"}[$__rate_interval])\",\n              \"interval\": \"\",\n              \"legendFormat\": \"{{taskName}} ({{instance}})\",\n              \"range\": true,\n              \"refId\": \"A\"\n            }\n          ],\n          \"title\": \"AVG number of calls / second\",\n          \"type\": \"timeseries\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"fieldConfig\": {\n            \"defaults\": {\n              \"color\": {\n                \"mode\": \"palette-classic\"\n              },\n              \"custom\": {\n                \"axisBorderShow\": false,\n                \"axisCenteredZero\": false,\n                \"axisColorMode\": \"text\",\n                \"axisLabel\": \"\",\n                \"axisPlacement\": \"auto\",\n                \"barAlignment\": 0,\n                \"barWidthFactor\": 0.6,\n                \"drawStyle\": \"line\",\n                \"fillOpacity\": 0,\n                \"gradientMode\": \"none\",\n                \"hideFrom\": {\n                  \"legend\": false,\n                  \"tooltip\": false,\n                  \"viz\": false\n                },\n                \"insertNulls\": false,\n                \"lineInterpolation\": \"linear\",\n                \"lineWidth\": 1,\n                \"pointSize\": 5,\n                \"scaleDistribution\": {\n                  \"type\": \"linear\"\n                },\n                \"showPoints\": \"auto\",\n                \"spanNulls\": false,\n                \"stacking\": {\n                  \"group\": \"A\",\n                  \"mode\": \"none\"\n                },\n                \"thresholdsStyle\": {\n                  \"mode\": \"off\"\n                }\n              },\n              \"mappings\": [],\n              \"thresholds\": {\n                \"mode\": \"absolute\",\n                \"steps\": [\n                  {\n                    \"color\": \"green\"\n                  },\n                  {\n                    \"color\": \"red\",\n                    \"value\": 80\n                  }\n                ]\n              }\n            },\n            \"overrides\": []\n          },\n          \"gridPos\": {\n            \"h\": 11,\n            \"w\": 12,\n            \"x\": 12,\n            \"y\": 9608\n          },\n          \"id\": 57,\n          \"options\": {\n            \"legend\": {\n              \"calcs\": [\n                \"min\",\n                \"max\",\n                \"mean\",\n                \"sum\"\n              ],\n              \"displayMode\": \"table\",\n              \"placement\": \"bottom\",\n              \"showLegend\": true\n            },\n            \"tooltip\": {\n              \"hideZeros\": false,\n              \"mode\": \"single\",\n              \"sort\": \"none\"\n            }\n          },\n          \"pluginVersion\": \"12.0.2\",\n          \"targets\": [\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"PBFA97CFB590B2093\"\n              },\n              \"editorMode\": \"code\",\n              \"exemplar\": true,\n              \"expr\": \"rate(besu_synchronizer_task_sum{instance=~\\\"$system\\\"}[$__rate_interval])\",\n              \"interval\": \"\",\n              \"legendFormat\": \"{{taskName}} ({{instance}})\",\n              \"range\": true,\n              \"refId\": \"A\"\n            }\n          ],\n          \"title\": \"Task Sum\",\n          \"type\": \"timeseries\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"fieldConfig\": {\n            \"defaults\": {\n              \"color\": {\n                \"mode\": \"palette-classic\"\n              },\n              \"custom\": {\n                \"axisBorderShow\": false,\n                \"axisCenteredZero\": false,\n                \"axisColorMode\": \"text\",\n                \"axisLabel\": \"\",\n                \"axisPlacement\": \"auto\",\n                \"barAlignment\": 0,\n                \"drawStyle\": \"line\",\n                \"fillOpacity\": 0,\n                \"gradientMode\": \"none\",\n                \"hideFrom\": {\n                  \"legend\": false,\n                  \"tooltip\": false,\n                  \"viz\": false\n                },\n                \"insertNulls\": false,\n                \"lineInterpolation\": \"linear\",\n                \"lineWidth\": 1,\n                \"pointSize\": 5,\n                \"scaleDistribution\": {\n                  \"type\": \"linear\"\n                },\n                \"showPoints\": \"auto\",\n                \"spanNulls\": false,\n                \"stacking\": {\n                  \"group\": \"A\",\n                  \"mode\": \"none\"\n                },\n                \"thresholdsStyle\": {\n                  \"mode\": \"off\"\n                }\n              },\n              \"mappings\": [],\n              \"thresholds\": {\n                \"mode\": \"absolute\",\n                \"steps\": [\n                  {\n                    \"color\": \"green\"\n                  },\n                  {\n                    \"color\": \"red\",\n                    \"value\": 80\n                  }\n                ]\n              }\n            },\n            \"overrides\": []\n          },\n          \"gridPos\": {\n            \"h\": 8,\n            \"w\": 24,\n            \"x\": 0,\n            \"y\": 9619\n          },\n          \"id\": 45,\n          \"maxPerRow\": 3,\n          \"options\": {\n            \"legend\": {\n              \"calcs\": [\n                \"min\",\n                \"max\",\n                \"mean\",\n                \"sum\"\n              ],\n              \"displayMode\": \"table\",\n              \"placement\": \"bottom\",\n              \"showLegend\": true\n            },\n            \"tooltip\": {\n              \"mode\": \"single\",\n              \"sort\": \"none\"\n            }\n          },\n          \"repeat\": \"sync_task_quantile\",\n          \"repeatDirection\": \"h\",\n          \"targets\": [\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"PBFA97CFB590B2093\"\n              },\n              \"exemplar\": true,\n              \"expr\": \"besu_synchronizer_task{instance=~\\\"$system\\\", quantile=~\\\"$sync_task_quantile\\\"}\",\n              \"interval\": \"\",\n              \"legendFormat\": \"{{taskName}} ({{instance}})\",\n              \"refId\": \"A\"\n            }\n          ],\n          \"title\": \"Task time (quantile=$sync_task_quantile)\",\n          \"type\": \"timeseries\"\n        }\n      ],\n      \"title\": \"Synchronizer\",\n      \"type\": \"row\"\n    },\n    {\n      \"collapsed\": true,\n      \"gridPos\": {\n        \"h\": 1,\n        \"w\": 24,\n        \"x\": 0,\n        \"y\": 46\n      },\n      \"id\": 483,\n      \"panels\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"fieldConfig\": {\n            \"defaults\": {\n              \"color\": {\n                \"mode\": \"palette-classic\"\n              },\n              \"custom\": {\n                \"axisBorderShow\": false,\n                \"axisCenteredZero\": false,\n                \"axisColorMode\": \"text\",\n                \"axisLabel\": \"\",\n                \"axisPlacement\": \"auto\",\n                \"barAlignment\": 0,\n                \"barWidthFactor\": 0.6,\n                \"drawStyle\": \"line\",\n                \"fillOpacity\": 0,\n                \"gradientMode\": \"none\",\n                \"hideFrom\": {\n                  \"legend\": false,\n                  \"tooltip\": false,\n                  \"viz\": false\n                },\n                \"insertNulls\": false,\n                \"lineInterpolation\": \"linear\",\n                \"lineWidth\": 1,\n                \"pointSize\": 5,\n                \"scaleDistribution\": {\n                  \"type\": \"linear\"\n                },\n                \"showPoints\": \"auto\",\n                \"spanNulls\": false,\n                \"stacking\": {\n                  \"group\": \"A\",\n                  \"mode\": \"none\"\n                },\n                \"thresholdsStyle\": {\n                  \"mode\": \"off\"\n                }\n              },\n              \"mappings\": [],\n              \"thresholds\": {\n                \"mode\": \"absolute\",\n                \"steps\": [\n                  {\n                    \"color\": \"green\"\n                  },\n                  {\n                    \"color\": \"red\",\n                    \"value\": 80\n                  }\n                ]\n              },\n              \"unit\": \"reqps\"\n            },\n            \"overrides\": []\n          },\n          \"gridPos\": {\n            \"h\": 8,\n            \"w\": 12,\n            \"x\": 0,\n            \"y\": 28165\n          },\n          \"id\": 61,\n          \"options\": {\n            \"legend\": {\n              \"calcs\": [\n                \"min\",\n                \"max\",\n                \"mean\",\n                \"sum\"\n              ],\n              \"displayMode\": \"table\",\n              \"placement\": \"bottom\",\n              \"showLegend\": true,\n              \"sortBy\": \"All unique values\",\n              \"sortDesc\": false\n            },\n            \"tooltip\": {\n              \"mode\": \"single\",\n              \"sort\": \"none\"\n            }\n          },\n          \"pluginVersion\": \"11.3.0\",\n          \"targets\": [\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"PBFA97CFB590B2093\"\n              },\n              \"editorMode\": \"code\",\n              \"exemplar\": true,\n              \"expr\": \"rate(besu_rpc_request_time_count{instance=~\\\"$system\\\"}[$__rate_interval])\",\n              \"interval\": \"\",\n              \"legendFormat\": \"{{methodName}} ({{instance}})\",\n              \"range\": true,\n              \"refId\": \"A\"\n            }\n          ],\n          \"title\": \"AVG number of calls / second\",\n          \"type\": \"timeseries\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"fieldConfig\": {\n            \"defaults\": {\n              \"color\": {\n                \"mode\": \"palette-classic\"\n              },\n              \"custom\": {\n                \"axisBorderShow\": false,\n                \"axisCenteredZero\": false,\n                \"axisColorMode\": \"text\",\n                \"axisLabel\": \"\",\n                \"axisPlacement\": \"auto\",\n                \"barAlignment\": 0,\n                \"barWidthFactor\": 0.6,\n                \"drawStyle\": \"line\",\n                \"fillOpacity\": 0,\n                \"gradientMode\": \"none\",\n                \"hideFrom\": {\n                  \"legend\": false,\n                  \"tooltip\": false,\n                  \"viz\": false\n                },\n                \"insertNulls\": false,\n                \"lineInterpolation\": \"linear\",\n                \"lineWidth\": 1,\n                \"pointSize\": 5,\n                \"scaleDistribution\": {\n                  \"type\": \"linear\"\n                },\n                \"showPoints\": \"auto\",\n                \"spanNulls\": false,\n                \"stacking\": {\n                  \"group\": \"A\",\n                  \"mode\": \"none\"\n                },\n                \"thresholdsStyle\": {\n                  \"mode\": \"off\"\n                }\n              },\n              \"mappings\": [],\n              \"thresholds\": {\n                \"mode\": \"absolute\",\n                \"steps\": [\n                  {\n                    \"color\": \"green\"\n                  },\n                  {\n                    \"color\": \"red\",\n                    \"value\": 80\n                  }\n                ]\n              }\n            },\n            \"overrides\": []\n          },\n          \"gridPos\": {\n            \"h\": 8,\n            \"w\": 12,\n            \"x\": 12,\n            \"y\": 28165\n          },\n          \"id\": 464,\n          \"options\": {\n            \"legend\": {\n              \"calcs\": [\n                \"min\",\n                \"max\",\n                \"mean\",\n                \"sum\"\n              ],\n              \"displayMode\": \"table\",\n              \"placement\": \"bottom\",\n              \"showLegend\": true\n            },\n            \"tooltip\": {\n              \"mode\": \"single\",\n              \"sort\": \"none\"\n            }\n          },\n          \"pluginVersion\": \"11.3.0\",\n          \"targets\": [\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"PBFA97CFB590B2093\"\n              },\n              \"editorMode\": \"code\",\n              \"exemplar\": true,\n              \"expr\": \"rate(besu_rpc_errors_count_total{instance=~\\\"$system\\\"}[$__rate_interval])\",\n              \"interval\": \"\",\n              \"legendFormat\": \"{{rpcMethod}} - {{errorType}} ({{instance}})\",\n              \"range\": true,\n              \"refId\": \"A\"\n            }\n          ],\n          \"title\": \"Number of errors per RPC method per type\",\n          \"type\": \"timeseries\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"fieldConfig\": {\n            \"defaults\": {\n              \"color\": {\n                \"mode\": \"palette-classic\"\n              },\n              \"custom\": {\n                \"axisBorderShow\": false,\n                \"axisCenteredZero\": false,\n                \"axisColorMode\": \"text\",\n                \"axisLabel\": \"\",\n                \"axisPlacement\": \"auto\",\n                \"barAlignment\": 0,\n                \"drawStyle\": \"line\",\n                \"fillOpacity\": 0,\n                \"gradientMode\": \"none\",\n                \"hideFrom\": {\n                  \"legend\": false,\n                  \"tooltip\": false,\n                  \"viz\": false\n                },\n                \"insertNulls\": false,\n                \"lineInterpolation\": \"linear\",\n                \"lineWidth\": 1,\n                \"pointSize\": 5,\n                \"scaleDistribution\": {\n                  \"type\": \"linear\"\n                },\n                \"showPoints\": \"auto\",\n                \"spanNulls\": false,\n                \"stacking\": {\n                  \"group\": \"A\",\n                  \"mode\": \"none\"\n                },\n                \"thresholdsStyle\": {\n                  \"mode\": \"off\"\n                }\n              },\n              \"mappings\": [],\n              \"thresholds\": {\n                \"mode\": \"absolute\",\n                \"steps\": [\n                  {\n                    \"color\": \"green\"\n                  },\n                  {\n                    \"color\": \"red\",\n                    \"value\": 80\n                  }\n                ]\n              },\n              \"unit\": \"s\"\n            },\n            \"overrides\": []\n          },\n          \"gridPos\": {\n            \"h\": 8,\n            \"w\": 24,\n            \"x\": 0,\n            \"y\": 28173\n          },\n          \"id\": 68,\n          \"maxPerRow\": 3,\n          \"options\": {\n            \"legend\": {\n              \"calcs\": [\n                \"min\",\n                \"max\",\n                \"mean\",\n                \"sum\"\n              ],\n              \"displayMode\": \"table\",\n              \"placement\": \"bottom\",\n              \"showLegend\": true\n            },\n            \"tooltip\": {\n              \"mode\": \"single\",\n              \"sort\": \"none\"\n            }\n          },\n          \"repeat\": \"sync_task_quantile\",\n          \"repeatDirection\": \"h\",\n          \"targets\": [\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"PBFA97CFB590B2093\"\n              },\n              \"editorMode\": \"code\",\n              \"exemplar\": true,\n              \"expr\": \"besu_rpc_request_time{instance=~\\\"$system\\\", quantile=~\\\"$sync_task_quantile\\\"}\",\n              \"interval\": \"\",\n              \"legendFormat\": \"{{methodName}} ({{instance}})\",\n              \"range\": true,\n              \"refId\": \"A\"\n            }\n          ],\n          \"title\": \"Task time (quantile=$sync_task_quantile)\",\n          \"type\": \"timeseries\"\n        }\n      ],\n      \"title\": \"RPC\",\n      \"type\": \"row\"\n    },\n    {\n      \"collapsed\": true,\n      \"gridPos\": {\n        \"h\": 1,\n        \"w\": 24,\n        \"x\": 0,\n        \"y\": 47\n      },\n      \"id\": 484,\n      \"panels\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"description\": \"\",\n          \"fieldConfig\": {\n            \"defaults\": {\n              \"color\": {\n                \"mode\": \"palette-classic\"\n              },\n              \"custom\": {\n                \"axisBorderShow\": false,\n                \"axisCenteredZero\": false,\n                \"axisColorMode\": \"text\",\n                \"axisLabel\": \"\",\n                \"axisPlacement\": \"auto\",\n                \"barAlignment\": 0,\n                \"barWidthFactor\": 1,\n                \"drawStyle\": \"line\",\n                \"fillOpacity\": 100,\n                \"gradientMode\": \"none\",\n                \"hideFrom\": {\n                  \"legend\": false,\n                  \"tooltip\": false,\n                  \"viz\": false\n                },\n                \"insertNulls\": false,\n                \"lineInterpolation\": \"stepBefore\",\n                \"lineStyle\": {\n                  \"fill\": \"solid\"\n                },\n                \"lineWidth\": 1,\n                \"pointSize\": 1,\n                \"scaleDistribution\": {\n                  \"type\": \"linear\"\n                },\n                \"showPoints\": \"auto\",\n                \"spanNulls\": false,\n                \"stacking\": {\n                  \"group\": \"A\",\n                  \"mode\": \"normal\"\n                },\n                \"thresholdsStyle\": {\n                  \"mode\": \"off\"\n                }\n              },\n              \"fieldMinMax\": false,\n              \"links\": [],\n              \"mappings\": [],\n              \"thresholds\": {\n                \"mode\": \"absolute\",\n                \"steps\": [\n                  {\n                    \"color\": \"green\"\n                  }\n                ]\n              },\n              \"unit\": \"none\"\n            },\n            \"overrides\": [\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"Reth\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"purple\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"Unknown\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#797979\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              }\n            ]\n          },\n          \"gridPos\": {\n            \"h\": 18,\n            \"w\": 12,\n            \"x\": 0,\n            \"y\": 15511\n          },\n          \"id\": 493,\n          \"options\": {\n            \"legend\": {\n              \"calcs\": [\n                \"last\"\n              ],\n              \"displayMode\": \"table\",\n              \"placement\": \"bottom\",\n              \"showLegend\": true,\n              \"sortBy\": \"Last\",\n              \"sortDesc\": true\n            },\n            \"timezone\": [\n              \"utc\"\n            ],\n            \"tooltip\": {\n              \"hideZeros\": false,\n              \"mode\": \"single\",\n              \"sort\": \"none\"\n            }\n          },\n          \"pluginVersion\": \"11.6.0\",\n          \"targets\": [\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"PBFA97CFB590B2093\"\n              },\n              \"editorMode\": \"code\",\n              \"exemplar\": false,\n              \"expr\": \"sum by (client) (besu_peers_peer_count_by_client{instance=~\\\"$system\\\"})\",\n              \"format\": \"time_series\",\n              \"hide\": false,\n              \"instant\": false,\n              \"legendFormat\": \"{{client}}\",\n              \"range\": true,\n              \"refId\": \"C\"\n            }\n          ],\n          \"title\": \"Connected by Client\",\n          \"type\": \"timeseries\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"description\": \"\",\n          \"fieldConfig\": {\n            \"defaults\": {\n              \"color\": {\n                \"mode\": \"palette-classic\"\n              },\n              \"custom\": {\n                \"axisBorderShow\": false,\n                \"axisCenteredZero\": false,\n                \"axisColorMode\": \"text\",\n                \"axisLabel\": \"\",\n                \"axisPlacement\": \"auto\",\n                \"barAlignment\": 0,\n                \"barWidthFactor\": 0.6,\n                \"drawStyle\": \"line\",\n                \"fillOpacity\": 10,\n                \"gradientMode\": \"none\",\n                \"hideFrom\": {\n                  \"legend\": false,\n                  \"tooltip\": false,\n                  \"viz\": false\n                },\n                \"insertNulls\": false,\n                \"lineInterpolation\": \"linear\",\n                \"lineWidth\": 1,\n                \"pointSize\": 5,\n                \"scaleDistribution\": {\n                  \"type\": \"linear\"\n                },\n                \"showPoints\": \"never\",\n                \"spanNulls\": true,\n                \"stacking\": {\n                  \"group\": \"A\",\n                  \"mode\": \"none\"\n                },\n                \"thresholdsStyle\": {\n                  \"mode\": \"off\"\n                }\n              },\n              \"links\": [],\n              \"mappings\": [],\n              \"thresholds\": {\n                \"mode\": \"absolute\",\n                \"steps\": [\n                  {\n                    \"color\": \"green\"\n                  }\n                ]\n              },\n              \"unit\": \"none\"\n            },\n            \"overrides\": [\n              {\n                \"matcher\": {\n                  \"id\": \"byFrameRefID\",\n                  \"options\": \"B\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"custom.drawStyle\",\n                    \"value\": \"line\"\n                  },\n                  {\n                    \"id\": \"custom.fillOpacity\",\n                    \"value\": 0\n                  }\n                ]\n              }\n            ]\n          },\n          \"gridPos\": {\n            \"h\": 9,\n            \"w\": 12,\n            \"x\": 12,\n            \"y\": 15511\n          },\n          \"id\": 98,\n          \"options\": {\n            \"legend\": {\n              \"calcs\": [],\n              \"displayMode\": \"list\",\n              \"placement\": \"bottom\",\n              \"showLegend\": true\n            },\n            \"tooltip\": {\n              \"hideZeros\": false,\n              \"mode\": \"single\",\n              \"sort\": \"none\"\n            }\n          },\n          \"pluginVersion\": \"11.6.0\",\n          \"targets\": [\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"PBFA97CFB590B2093\"\n              },\n              \"exemplar\": true,\n              \"expr\": \"(ethereum_peer_count{instance=~\\\"$system\\\"} or besu_peer_count{instance=~\\\"$system\\\"})\",\n              \"hide\": false,\n              \"interval\": \"\",\n              \"legendFormat\": \"current {{instance}}\",\n              \"refId\": \"A\"\n            },\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"PBFA97CFB590B2093\"\n              },\n              \"exemplar\": true,\n              \"expr\": \"(ethereum_peer_limit{instance=~\\\"$system\\\"} or besu_peer_limit{instance=~\\\"$system\\\"})\",\n              \"hide\": false,\n              \"interval\": \"\",\n              \"legendFormat\": \"limit {{instance}}\",\n              \"refId\": \"B\"\n            }\n          ],\n          \"title\": \"Connected Peers\",\n          \"type\": \"timeseries\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"fieldConfig\": {\n            \"defaults\": {\n              \"color\": {\n                \"mode\": \"palette-classic\"\n              },\n              \"custom\": {\n                \"axisBorderShow\": false,\n                \"axisCenteredZero\": false,\n                \"axisColorMode\": \"text\",\n                \"axisLabel\": \"\",\n                \"axisPlacement\": \"auto\",\n                \"barAlignment\": 0,\n                \"barWidthFactor\": 0.6,\n                \"drawStyle\": \"line\",\n                \"fillOpacity\": 0,\n                \"gradientMode\": \"none\",\n                \"hideFrom\": {\n                  \"legend\": false,\n                  \"tooltip\": false,\n                  \"viz\": false\n                },\n                \"insertNulls\": false,\n                \"lineInterpolation\": \"linear\",\n                \"lineWidth\": 1,\n                \"pointSize\": 5,\n                \"scaleDistribution\": {\n                  \"type\": \"linear\"\n                },\n                \"showPoints\": \"auto\",\n                \"spanNulls\": false,\n                \"stacking\": {\n                  \"group\": \"A\",\n                  \"mode\": \"none\"\n                },\n                \"thresholdsStyle\": {\n                  \"mode\": \"off\"\n                }\n              },\n              \"mappings\": [],\n              \"thresholds\": {\n                \"mode\": \"absolute\",\n                \"steps\": [\n                  {\n                    \"color\": \"green\"\n                  },\n                  {\n                    \"color\": \"red\",\n                    \"value\": 80\n                  }\n                ]\n              }\n            },\n            \"overrides\": []\n          },\n          \"gridPos\": {\n            \"h\": 9,\n            \"w\": 12,\n            \"x\": 12,\n            \"y\": 15520\n          },\n          \"id\": 75,\n          \"options\": {\n            \"legend\": {\n              \"calcs\": [],\n              \"displayMode\": \"list\",\n              \"placement\": \"bottom\",\n              \"showLegend\": true\n            },\n            \"tooltip\": {\n              \"hideZeros\": false,\n              \"mode\": \"single\",\n              \"sort\": \"none\"\n            }\n          },\n          \"pluginVersion\": \"11.6.0\",\n          \"targets\": [\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"PBFA97CFB590B2093\"\n              },\n              \"editorMode\": \"code\",\n              \"exemplar\": true,\n              \"expr\": \"rate(besu_peers_connected_total{instance=~\\\"$system\\\"}[$__rate_interval])\",\n              \"interval\": \"\",\n              \"legendFormat\": \"{{instance}}\",\n              \"range\": true,\n              \"refId\": \"A\"\n            }\n          ],\n          \"title\": \"Connected Total\",\n          \"type\": \"timeseries\"\n        }\n      ],\n      \"title\": \"Peers\",\n      \"type\": \"row\"\n    },\n    {\n      \"collapsed\": true,\n      \"gridPos\": {\n        \"h\": 1,\n        \"w\": 24,\n        \"x\": 0,\n        \"y\": 48\n      },\n      \"id\": 485,\n      \"panels\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"fieldConfig\": {\n            \"defaults\": {\n              \"color\": {\n                \"mode\": \"palette-classic\"\n              },\n              \"custom\": {\n                \"axisBorderShow\": false,\n                \"axisCenteredZero\": false,\n                \"axisColorMode\": \"text\",\n                \"axisLabel\": \"\",\n                \"axisPlacement\": \"auto\",\n                \"barAlignment\": 0,\n                \"drawStyle\": \"line\",\n                \"fillOpacity\": 0,\n                \"gradientMode\": \"none\",\n                \"hideFrom\": {\n                  \"legend\": false,\n                  \"tooltip\": false,\n                  \"viz\": false\n                },\n                \"insertNulls\": false,\n                \"lineInterpolation\": \"linear\",\n                \"lineWidth\": 1,\n                \"pointSize\": 5,\n                \"scaleDistribution\": {\n                  \"type\": \"linear\"\n                },\n                \"showPoints\": \"auto\",\n                \"spanNulls\": false,\n                \"stacking\": {\n                  \"group\": \"A\",\n                  \"mode\": \"none\"\n                },\n                \"thresholdsStyle\": {\n                  \"mode\": \"off\"\n                }\n              },\n              \"mappings\": [],\n              \"thresholds\": {\n                \"mode\": \"absolute\",\n                \"steps\": [\n                  {\n                    \"color\": \"green\"\n                  },\n                  {\n                    \"color\": \"red\",\n                    \"value\": 80\n                  }\n                ]\n              }\n            },\n            \"overrides\": []\n          },\n          \"gridPos\": {\n            \"h\": 17,\n            \"w\": 12,\n            \"x\": 0,\n            \"y\": 29777\n          },\n          \"id\": 31,\n          \"options\": {\n            \"legend\": {\n              \"calcs\": [\n                \"min\",\n                \"max\",\n                \"mean\",\n                \"sum\"\n              ],\n              \"displayMode\": \"table\",\n              \"placement\": \"bottom\",\n              \"showLegend\": true,\n              \"sortBy\": \"Total\",\n              \"sortDesc\": true\n            },\n            \"tooltip\": {\n              \"mode\": \"single\",\n              \"sort\": \"none\"\n            }\n          },\n          \"targets\": [\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"PBFA97CFB590B2093\"\n              },\n              \"exemplar\": true,\n              \"expr\": \"rate(besu_peers_disconnected_total{initiator=\\\"local\\\", instance=~\\\"$system\\\"}[$__rate_interval])\",\n              \"interval\": \"\",\n              \"legendFormat\": \"{{disconnectReason}} ({{instance}})\",\n              \"refId\": \"A\"\n            }\n          ],\n          \"title\": \"Initiator Local\",\n          \"type\": \"timeseries\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"fieldConfig\": {\n            \"defaults\": {\n              \"color\": {\n                \"mode\": \"palette-classic\"\n              },\n              \"custom\": {\n                \"axisBorderShow\": false,\n                \"axisCenteredZero\": false,\n                \"axisColorMode\": \"text\",\n                \"axisLabel\": \"\",\n                \"axisPlacement\": \"auto\",\n                \"barAlignment\": 0,\n                \"drawStyle\": \"line\",\n                \"fillOpacity\": 0,\n                \"gradientMode\": \"none\",\n                \"hideFrom\": {\n                  \"legend\": false,\n                  \"tooltip\": false,\n                  \"viz\": false\n                },\n                \"insertNulls\": false,\n                \"lineInterpolation\": \"linear\",\n                \"lineWidth\": 1,\n                \"pointSize\": 5,\n                \"scaleDistribution\": {\n                  \"type\": \"linear\"\n                },\n                \"showPoints\": \"auto\",\n                \"spanNulls\": false,\n                \"stacking\": {\n                  \"group\": \"A\",\n                  \"mode\": \"none\"\n                },\n                \"thresholdsStyle\": {\n                  \"mode\": \"off\"\n                }\n              },\n              \"mappings\": [],\n              \"thresholds\": {\n                \"mode\": \"absolute\",\n                \"steps\": [\n                  {\n                    \"color\": \"green\"\n                  },\n                  {\n                    \"color\": \"red\",\n                    \"value\": 80\n                  }\n                ]\n              }\n            },\n            \"overrides\": []\n          },\n          \"gridPos\": {\n            \"h\": 17,\n            \"w\": 12,\n            \"x\": 12,\n            \"y\": 29777\n          },\n          \"id\": 344,\n          \"options\": {\n            \"legend\": {\n              \"calcs\": [\n                \"min\",\n                \"max\",\n                \"mean\",\n                \"sum\"\n              ],\n              \"displayMode\": \"table\",\n              \"placement\": \"bottom\",\n              \"showLegend\": true,\n              \"sortBy\": \"Mean\",\n              \"sortDesc\": false\n            },\n            \"tooltip\": {\n              \"mode\": \"single\",\n              \"sort\": \"none\"\n            }\n          },\n          \"targets\": [\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"PBFA97CFB590B2093\"\n              },\n              \"exemplar\": true,\n              \"expr\": \"rate(besu_peers_disconnected_total{initiator=\\\"remote\\\", instance=~\\\"$system\\\"}[$__rate_interval])\",\n              \"interval\": \"\",\n              \"legendFormat\": \"{{disconnectReason}} ({{instance}})\",\n              \"refId\": \"A\"\n            }\n          ],\n          \"title\": \"Initiator Remote\",\n          \"type\": \"timeseries\"\n        }\n      ],\n      \"title\": \"Peers (Disconnections)\",\n      \"type\": \"row\"\n    },\n    {\n      \"collapsed\": true,\n      \"gridPos\": {\n        \"h\": 1,\n        \"w\": 24,\n        \"x\": 0,\n        \"y\": 49\n      },\n      \"id\": 486,\n      \"panels\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"fieldConfig\": {\n            \"defaults\": {\n              \"color\": {\n                \"mode\": \"palette-classic\"\n              },\n              \"custom\": {\n                \"axisBorderShow\": false,\n                \"axisCenteredZero\": false,\n                \"axisColorMode\": \"text\",\n                \"axisLabel\": \"\",\n                \"axisPlacement\": \"auto\",\n                \"barAlignment\": 0,\n                \"drawStyle\": \"line\",\n                \"fillOpacity\": 0,\n                \"gradientMode\": \"none\",\n                \"hideFrom\": {\n                  \"legend\": false,\n                  \"tooltip\": false,\n                  \"viz\": false\n                },\n                \"insertNulls\": false,\n                \"lineInterpolation\": \"linear\",\n                \"lineWidth\": 1,\n                \"pointSize\": 5,\n                \"scaleDistribution\": {\n                  \"type\": \"linear\"\n                },\n                \"showPoints\": \"auto\",\n                \"spanNulls\": false,\n                \"stacking\": {\n                  \"group\": \"A\",\n                  \"mode\": \"none\"\n                },\n                \"thresholdsStyle\": {\n                  \"mode\": \"off\"\n                }\n              },\n              \"mappings\": [],\n              \"thresholds\": {\n                \"mode\": \"absolute\",\n                \"steps\": [\n                  {\n                    \"color\": \"green\"\n                  },\n                  {\n                    \"color\": \"red\",\n                    \"value\": 80\n                  }\n                ]\n              }\n            },\n            \"overrides\": []\n          },\n          \"gridPos\": {\n            \"h\": 14,\n            \"w\": 12,\n            \"x\": 0,\n            \"y\": 29778\n          },\n          \"id\": 345,\n          \"options\": {\n            \"legend\": {\n              \"calcs\": [\n                \"min\",\n                \"max\",\n                \"mean\",\n                \"sum\"\n              ],\n              \"displayMode\": \"table\",\n              \"placement\": \"bottom\",\n              \"showLegend\": true,\n              \"sortBy\": \"Total\",\n              \"sortDesc\": true\n            },\n            \"tooltip\": {\n              \"mode\": \"single\",\n              \"sort\": \"none\"\n            }\n          },\n          \"targets\": [\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"PBFA97CFB590B2093\"\n              },\n              \"editorMode\": \"code\",\n              \"exemplar\": true,\n              \"expr\": \"rate(besu_network_discovery_messages_inbound{instance=~\\\"$system\\\"}[$__rate_interval]) or rate(besu_network_discovery_messages_inbound_total{instance=~\\\"$system\\\"}[$__rate_interval])\",\n              \"interval\": \"\",\n              \"legendFormat\": \"{{name}} ({{instance}})\",\n              \"range\": true,\n              \"refId\": \"A\"\n            }\n          ],\n          \"title\": \"Inbound Messages\",\n          \"type\": \"timeseries\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"fieldConfig\": {\n            \"defaults\": {\n              \"color\": {\n                \"mode\": \"palette-classic\"\n              },\n              \"custom\": {\n                \"axisBorderShow\": false,\n                \"axisCenteredZero\": false,\n                \"axisColorMode\": \"text\",\n                \"axisLabel\": \"\",\n                \"axisPlacement\": \"auto\",\n                \"barAlignment\": 0,\n                \"drawStyle\": \"line\",\n                \"fillOpacity\": 0,\n                \"gradientMode\": \"none\",\n                \"hideFrom\": {\n                  \"legend\": false,\n                  \"tooltip\": false,\n                  \"viz\": false\n                },\n                \"insertNulls\": false,\n                \"lineInterpolation\": \"linear\",\n                \"lineWidth\": 1,\n                \"pointSize\": 5,\n                \"scaleDistribution\": {\n                  \"type\": \"linear\"\n                },\n                \"showPoints\": \"auto\",\n                \"spanNulls\": false,\n                \"stacking\": {\n                  \"group\": \"A\",\n                  \"mode\": \"none\"\n                },\n                \"thresholdsStyle\": {\n                  \"mode\": \"off\"\n                }\n              },\n              \"mappings\": [],\n              \"thresholds\": {\n                \"mode\": \"absolute\",\n                \"steps\": [\n                  {\n                    \"color\": \"green\"\n                  },\n                  {\n                    \"color\": \"red\",\n                    \"value\": 80\n                  }\n                ]\n              }\n            },\n            \"overrides\": []\n          },\n          \"gridPos\": {\n            \"h\": 14,\n            \"w\": 12,\n            \"x\": 12,\n            \"y\": 29778\n          },\n          \"id\": 346,\n          \"options\": {\n            \"legend\": {\n              \"calcs\": [\n                \"min\",\n                \"max\",\n                \"mean\",\n                \"sum\"\n              ],\n              \"displayMode\": \"table\",\n              \"placement\": \"bottom\",\n              \"showLegend\": true,\n              \"sortBy\": \"Total\",\n              \"sortDesc\": true\n            },\n            \"tooltip\": {\n              \"mode\": \"single\",\n              \"sort\": \"none\"\n            }\n          },\n          \"targets\": [\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"PBFA97CFB590B2093\"\n              },\n              \"editorMode\": \"code\",\n              \"exemplar\": true,\n              \"expr\": \"rate(besu_network_discovery_messages_outbound{instance=~\\\"$system\\\"}[$__rate_interval]) or rate(besu_network_discovery_messages_outbound_total{instance=~\\\"$system\\\"}[$__rate_interval])\",\n              \"interval\": \"\",\n              \"legendFormat\": \"{{name}} ({{instance}})\",\n              \"range\": true,\n              \"refId\": \"A\"\n            }\n          ],\n          \"title\": \"Outbound Messages\",\n          \"type\": \"timeseries\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"fieldConfig\": {\n            \"defaults\": {\n              \"color\": {\n                \"mode\": \"palette-classic\"\n              },\n              \"custom\": {\n                \"axisBorderShow\": false,\n                \"axisCenteredZero\": false,\n                \"axisColorMode\": \"text\",\n                \"axisLabel\": \"\",\n                \"axisPlacement\": \"auto\",\n                \"barAlignment\": 0,\n                \"drawStyle\": \"line\",\n                \"fillOpacity\": 0,\n                \"gradientMode\": \"none\",\n                \"hideFrom\": {\n                  \"legend\": false,\n                  \"tooltip\": false,\n                  \"viz\": false\n                },\n                \"insertNulls\": false,\n                \"lineInterpolation\": \"linear\",\n                \"lineWidth\": 1,\n                \"pointSize\": 5,\n                \"scaleDistribution\": {\n                  \"type\": \"linear\"\n                },\n                \"showPoints\": \"auto\",\n                \"spanNulls\": false,\n                \"stacking\": {\n                  \"group\": \"A\",\n                  \"mode\": \"none\"\n                },\n                \"thresholdsStyle\": {\n                  \"mode\": \"off\"\n                }\n              },\n              \"mappings\": [],\n              \"thresholds\": {\n                \"mode\": \"absolute\",\n                \"steps\": [\n                  {\n                    \"color\": \"green\"\n                  },\n                  {\n                    \"color\": \"red\",\n                    \"value\": 80\n                  }\n                ]\n              }\n            },\n            \"overrides\": []\n          },\n          \"gridPos\": {\n            \"h\": 14,\n            \"w\": 12,\n            \"x\": 0,\n            \"y\": 29792\n          },\n          \"id\": 65,\n          \"options\": {\n            \"legend\": {\n              \"calcs\": [\n                \"min\",\n                \"max\",\n                \"mean\",\n                \"sum\"\n              ],\n              \"displayMode\": \"table\",\n              \"placement\": \"bottom\",\n              \"showLegend\": true,\n              \"sortBy\": \"Total\",\n              \"sortDesc\": true\n            },\n            \"tooltip\": {\n              \"mode\": \"single\",\n              \"sort\": \"none\"\n            }\n          },\n          \"targets\": [\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"PBFA97CFB590B2093\"\n              },\n              \"editorMode\": \"code\",\n              \"exemplar\": true,\n              \"expr\": \"rate(besu_network_discovery_interaction_count{instance=~\\\"$system\\\"}[$__rate_interval]) or rate(besu_network_discovery_interaction_count_total{instance=~\\\"$system\\\"}[$__rate_interval])\",\n              \"interval\": \"\",\n              \"legendFormat\": \"{{type}} ({{instance}})\",\n              \"range\": true,\n              \"refId\": \"A\"\n            }\n          ],\n          \"title\": \"Interaction Count\",\n          \"type\": \"timeseries\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"fieldConfig\": {\n            \"defaults\": {\n              \"color\": {\n                \"mode\": \"palette-classic\"\n              },\n              \"custom\": {\n                \"axisBorderShow\": false,\n                \"axisCenteredZero\": false,\n                \"axisColorMode\": \"text\",\n                \"axisLabel\": \"\",\n                \"axisPlacement\": \"auto\",\n                \"barAlignment\": 0,\n                \"drawStyle\": \"line\",\n                \"fillOpacity\": 0,\n                \"gradientMode\": \"none\",\n                \"hideFrom\": {\n                  \"legend\": false,\n                  \"tooltip\": false,\n                  \"viz\": false\n                },\n                \"insertNulls\": false,\n                \"lineInterpolation\": \"linear\",\n                \"lineWidth\": 1,\n                \"pointSize\": 5,\n                \"scaleDistribution\": {\n                  \"type\": \"linear\"\n                },\n                \"showPoints\": \"auto\",\n                \"spanNulls\": false,\n                \"stacking\": {\n                  \"group\": \"A\",\n                  \"mode\": \"none\"\n                },\n                \"thresholdsStyle\": {\n                  \"mode\": \"off\"\n                }\n              },\n              \"mappings\": [],\n              \"thresholds\": {\n                \"mode\": \"absolute\",\n                \"steps\": [\n                  {\n                    \"color\": \"green\"\n                  },\n                  {\n                    \"color\": \"red\",\n                    \"value\": 80\n                  }\n                ]\n              }\n            },\n            \"overrides\": []\n          },\n          \"gridPos\": {\n            \"h\": 14,\n            \"w\": 12,\n            \"x\": 12,\n            \"y\": 29792\n          },\n          \"id\": 66,\n          \"options\": {\n            \"legend\": {\n              \"calcs\": [\n                \"min\",\n                \"max\",\n                \"mean\",\n                \"sum\"\n              ],\n              \"displayMode\": \"table\",\n              \"placement\": \"bottom\",\n              \"showLegend\": true,\n              \"sortBy\": \"Total\",\n              \"sortDesc\": true\n            },\n            \"tooltip\": {\n              \"mode\": \"single\",\n              \"sort\": \"none\"\n            }\n          },\n          \"targets\": [\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"PBFA97CFB590B2093\"\n              },\n              \"editorMode\": \"code\",\n              \"exemplar\": true,\n              \"expr\": \"rate(besu_network_discovery_interaction_retry_count{instance=~\\\"$system\\\"}[$__rate_interval]) or rate(besu_network_discovery_interaction_retry_count_total{instance=~\\\"$system\\\"}[$__rate_interval])\",\n              \"interval\": \"\",\n              \"legendFormat\": \"{{type}} ({{instance}})\",\n              \"range\": true,\n              \"refId\": \"A\"\n            }\n          ],\n          \"title\": \"Interaction Retry Count\",\n          \"type\": \"timeseries\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"fieldConfig\": {\n            \"defaults\": {\n              \"color\": {\n                \"mode\": \"palette-classic\"\n              },\n              \"custom\": {\n                \"axisBorderShow\": false,\n                \"axisCenteredZero\": false,\n                \"axisColorMode\": \"text\",\n                \"axisLabel\": \"\",\n                \"axisPlacement\": \"auto\",\n                \"barAlignment\": 0,\n                \"drawStyle\": \"line\",\n                \"fillOpacity\": 0,\n                \"gradientMode\": \"none\",\n                \"hideFrom\": {\n                  \"legend\": false,\n                  \"tooltip\": false,\n                  \"viz\": false\n                },\n                \"insertNulls\": false,\n                \"lineInterpolation\": \"linear\",\n                \"lineWidth\": 1,\n                \"pointSize\": 5,\n                \"scaleDistribution\": {\n                  \"type\": \"linear\"\n                },\n                \"showPoints\": \"auto\",\n                \"spanNulls\": false,\n                \"stacking\": {\n                  \"group\": \"A\",\n                  \"mode\": \"none\"\n                },\n                \"thresholdsStyle\": {\n                  \"mode\": \"off\"\n                }\n              },\n              \"mappings\": [],\n              \"thresholds\": {\n                \"mode\": \"absolute\",\n                \"steps\": [\n                  {\n                    \"color\": \"green\"\n                  },\n                  {\n                    \"color\": \"red\",\n                    \"value\": 80\n                  }\n                ]\n              }\n            },\n            \"overrides\": []\n          },\n          \"gridPos\": {\n            \"h\": 8,\n            \"w\": 12,\n            \"x\": 0,\n            \"y\": 29806\n          },\n          \"id\": 64,\n          \"options\": {\n            \"legend\": {\n              \"calcs\": [],\n              \"displayMode\": \"list\",\n              \"placement\": \"bottom\",\n              \"showLegend\": true\n            },\n            \"tooltip\": {\n              \"mode\": \"single\",\n              \"sort\": \"none\"\n            }\n          },\n          \"targets\": [\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"PBFA97CFB590B2093\"\n              },\n              \"exemplar\": true,\n              \"expr\": \"besu_network_discovery_inflight_interactions_current{instance=~\\\"$system\\\"}\",\n              \"interval\": \"\",\n              \"legendFormat\": \"{{instance}}\",\n              \"refId\": \"A\"\n            }\n          ],\n          \"title\": \"Inflight Interactions\",\n          \"type\": \"timeseries\"\n        }\n      ],\n      \"title\": \"Peers (Discovery)\",\n      \"type\": \"row\"\n    },\n    {\n      \"collapsed\": true,\n      \"gridPos\": {\n        \"h\": 1,\n        \"w\": 24,\n        \"x\": 0,\n        \"y\": 50\n      },\n      \"id\": 487,\n      \"panels\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"description\": \"\",\n          \"fieldConfig\": {\n            \"defaults\": {\n              \"color\": {\n                \"mode\": \"palette-classic\"\n              },\n              \"custom\": {\n                \"axisBorderShow\": false,\n                \"axisCenteredZero\": false,\n                \"axisColorMode\": \"text\",\n                \"axisLabel\": \"\",\n                \"axisPlacement\": \"auto\",\n                \"barAlignment\": 0,\n                \"barWidthFactor\": 0.6,\n                \"drawStyle\": \"line\",\n                \"fillOpacity\": 10,\n                \"gradientMode\": \"none\",\n                \"hideFrom\": {\n                  \"legend\": false,\n                  \"tooltip\": false,\n                  \"viz\": false\n                },\n                \"insertNulls\": false,\n                \"lineInterpolation\": \"linear\",\n                \"lineWidth\": 1,\n                \"pointSize\": 5,\n                \"scaleDistribution\": {\n                  \"type\": \"linear\"\n                },\n                \"showPoints\": \"never\",\n                \"spanNulls\": true,\n                \"stacking\": {\n                  \"group\": \"A\",\n                  \"mode\": \"none\"\n                },\n                \"thresholdsStyle\": {\n                  \"mode\": \"off\"\n                }\n              },\n              \"links\": [],\n              \"mappings\": [],\n              \"thresholds\": {\n                \"mode\": \"absolute\",\n                \"steps\": [\n                  {\n                    \"color\": \"green\"\n                  },\n                  {\n                    \"color\": \"red\",\n                    \"value\": 80\n                  }\n                ]\n              },\n              \"unit\": \"short\"\n            },\n            \"overrides\": []\n          },\n          \"gridPos\": {\n            \"h\": 16,\n            \"w\": 24,\n            \"x\": 0,\n            \"y\": 20831\n          },\n          \"id\": 7,\n          \"maxPerRow\": 2,\n          \"options\": {\n            \"legend\": {\n              \"calcs\": [\n                \"min\",\n                \"max\",\n                \"mean\",\n                \"sum\"\n              ],\n              \"displayMode\": \"table\",\n              \"placement\": \"bottom\",\n              \"showLegend\": true\n            },\n            \"tooltip\": {\n              \"hideZeros\": false,\n              \"mode\": \"single\",\n              \"sort\": \"none\"\n            }\n          },\n          \"pluginVersion\": \"11.5.2\",\n          \"repeat\": \"protocol_inbound\",\n          \"repeatDirection\": \"h\",\n          \"targets\": [\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"PBFA97CFB590B2093\"\n              },\n              \"editorMode\": \"code\",\n              \"exemplar\": true,\n              \"expr\": \"increase(besu_network_p2p_messages_inbound{instance=~\\\"$system\\\", protocol=\\\"$protocol_inbound\\\"}[$__rate_interval]) or increase(besu_network_p2p_messages_inbound_total{instance=~\\\"$system\\\", protocol=\\\"$protocol_inbound\\\"}[$__rate_interval])\",\n              \"interval\": \"\",\n              \"legendFormat\": \"{{name}} {{protocol}} ({{instance}})\",\n              \"range\": true,\n              \"refId\": \"A\"\n            }\n          ],\n          \"title\": \"Inbound $protocol_inbound\",\n          \"type\": \"timeseries\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"description\": \"\",\n          \"fieldConfig\": {\n            \"defaults\": {\n              \"color\": {\n                \"mode\": \"palette-classic\"\n              },\n              \"custom\": {\n                \"axisBorderShow\": false,\n                \"axisCenteredZero\": false,\n                \"axisColorMode\": \"text\",\n                \"axisLabel\": \"\",\n                \"axisPlacement\": \"auto\",\n                \"barAlignment\": 0,\n                \"drawStyle\": \"line\",\n                \"fillOpacity\": 10,\n                \"gradientMode\": \"none\",\n                \"hideFrom\": {\n                  \"legend\": false,\n                  \"tooltip\": false,\n                  \"viz\": false\n                },\n                \"insertNulls\": false,\n                \"lineInterpolation\": \"linear\",\n                \"lineWidth\": 1,\n                \"pointSize\": 5,\n                \"scaleDistribution\": {\n                  \"type\": \"linear\"\n                },\n                \"showPoints\": \"never\",\n                \"spanNulls\": true,\n                \"stacking\": {\n                  \"group\": \"A\",\n                  \"mode\": \"none\"\n                },\n                \"thresholdsStyle\": {\n                  \"mode\": \"off\"\n                }\n              },\n              \"links\": [],\n              \"mappings\": [],\n              \"thresholds\": {\n                \"mode\": \"absolute\",\n                \"steps\": [\n                  {\n                    \"color\": \"green\"\n                  },\n                  {\n                    \"color\": \"red\",\n                    \"value\": 80\n                  }\n                ]\n              },\n              \"unit\": \"short\"\n            },\n            \"overrides\": []\n          },\n          \"gridPos\": {\n            \"h\": 16,\n            \"w\": 24,\n            \"x\": 0,\n            \"y\": 20895\n          },\n          \"id\": 11,\n          \"maxPerRow\": 2,\n          \"options\": {\n            \"legend\": {\n              \"calcs\": [\n                \"min\",\n                \"max\",\n                \"mean\",\n                \"sum\"\n              ],\n              \"displayMode\": \"table\",\n              \"placement\": \"bottom\",\n              \"showLegend\": true\n            },\n            \"tooltip\": {\n              \"mode\": \"single\",\n              \"sort\": \"none\"\n            }\n          },\n          \"pluginVersion\": \"9.1.3\",\n          \"repeat\": \"protocol_outbound\",\n          \"repeatDirection\": \"h\",\n          \"targets\": [\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"PBFA97CFB590B2093\"\n              },\n              \"editorMode\": \"code\",\n              \"exemplar\": true,\n              \"expr\": \"increase(besu_network_p2p_messages_outbound{instance=~\\\"$system\\\", protocol=\\\"$protocol_outbound\\\"}[$__rate_interval]) or increase(besu_network_p2p_messages_outbound_total{instance=~\\\"$system\\\", protocol=\\\"$protocol_outbound\\\"}[$__rate_interval])\",\n              \"interval\": \"\",\n              \"legendFormat\": \"{{name}} {{protocol}} ({{instance}})\",\n              \"range\": true,\n              \"refId\": \"A\"\n            }\n          ],\n          \"title\": \"Outbound $protocol_outbound\",\n          \"type\": \"timeseries\"\n        }\n      ],\n      \"title\": \"Peers (Messages)\",\n      \"type\": \"row\"\n    },\n    {\n      \"collapsed\": true,\n      \"gridPos\": {\n        \"h\": 1,\n        \"w\": 24,\n        \"x\": 0,\n        \"y\": 51\n      },\n      \"id\": 488,\n      \"panels\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"fieldConfig\": {\n            \"defaults\": {\n              \"color\": {\n                \"mode\": \"palette-classic\"\n              },\n              \"custom\": {\n                \"axisBorderShow\": false,\n                \"axisCenteredZero\": false,\n                \"axisColorMode\": \"text\",\n                \"axisLabel\": \"\",\n                \"axisPlacement\": \"auto\",\n                \"barAlignment\": 0,\n                \"drawStyle\": \"line\",\n                \"fillOpacity\": 0,\n                \"gradientMode\": \"none\",\n                \"hideFrom\": {\n                  \"legend\": false,\n                  \"tooltip\": false,\n                  \"viz\": false\n                },\n                \"insertNulls\": false,\n                \"lineInterpolation\": \"linear\",\n                \"lineWidth\": 1,\n                \"pointSize\": 5,\n                \"scaleDistribution\": {\n                  \"type\": \"linear\"\n                },\n                \"showPoints\": \"auto\",\n                \"spanNulls\": false,\n                \"stacking\": {\n                  \"group\": \"A\",\n                  \"mode\": \"none\"\n                },\n                \"thresholdsStyle\": {\n                  \"mode\": \"off\"\n                }\n              },\n              \"mappings\": [],\n              \"thresholds\": {\n                \"mode\": \"absolute\",\n                \"steps\": [\n                  {\n                    \"color\": \"green\"\n                  },\n                  {\n                    \"color\": \"red\",\n                    \"value\": 80\n                  }\n                ]\n              }\n            },\n            \"overrides\": []\n          },\n          \"gridPos\": {\n            \"h\": 12,\n            \"w\": 12,\n            \"x\": 0,\n            \"y\": 29780\n          },\n          \"id\": 348,\n          \"options\": {\n            \"legend\": {\n              \"calcs\": [],\n              \"displayMode\": \"list\",\n              \"placement\": \"bottom\",\n              \"showLegend\": true\n            },\n            \"tooltip\": {\n              \"mode\": \"single\",\n              \"sort\": \"none\"\n            }\n          },\n          \"targets\": [\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"PBFA97CFB590B2093\"\n              },\n              \"exemplar\": true,\n              \"expr\": \"jvm_threads_current{instance=~\\\"$system\\\"}\",\n              \"interval\": \"\",\n              \"legendFormat\": \"current ({{instance}})\",\n              \"refId\": \"A\"\n            },\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"PBFA97CFB590B2093\"\n              },\n              \"exemplar\": true,\n              \"expr\": \"jvm_threads_peak{instance=~\\\"$system\\\"}\",\n              \"hide\": false,\n              \"interval\": \"\",\n              \"legendFormat\": \"peak ({{instance}})\",\n              \"refId\": \"B\"\n            },\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"PBFA97CFB590B2093\"\n              },\n              \"exemplar\": true,\n              \"expr\": \"jvm_threads_daemon{instance=~\\\"$system\\\"}\",\n              \"hide\": false,\n              \"interval\": \"\",\n              \"legendFormat\": \"daemon ({{instance}})\",\n              \"refId\": \"C\"\n            },\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"PBFA97CFB590B2093\"\n              },\n              \"exemplar\": true,\n              \"expr\": \"jvm_threads_deadlocked{instance=~\\\"$system\\\"}\",\n              \"hide\": false,\n              \"interval\": \"\",\n              \"legendFormat\": \"deadlocked ({{instance}})\",\n              \"refId\": \"D\"\n            },\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"PBFA97CFB590B2093\"\n              },\n              \"exemplar\": true,\n              \"expr\": \"jvm_threads_deadlocked_monitor{instance=~\\\"$system\\\"}\",\n              \"hide\": false,\n              \"interval\": \"\",\n              \"legendFormat\": \"deadlocked monitor ({{instance}})\",\n              \"refId\": \"E\"\n            }\n          ],\n          \"title\": \"Overview\",\n          \"type\": \"timeseries\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"description\": \"Java threads\",\n          \"fieldConfig\": {\n            \"defaults\": {\n              \"color\": {\n                \"mode\": \"palette-classic\"\n              },\n              \"custom\": {\n                \"axisBorderShow\": false,\n                \"axisCenteredZero\": false,\n                \"axisColorMode\": \"text\",\n                \"axisLabel\": \"\",\n                \"axisPlacement\": \"auto\",\n                \"barAlignment\": 0,\n                \"drawStyle\": \"line\",\n                \"fillOpacity\": 0,\n                \"gradientMode\": \"none\",\n                \"hideFrom\": {\n                  \"legend\": false,\n                  \"tooltip\": false,\n                  \"viz\": false\n                },\n                \"insertNulls\": false,\n                \"lineInterpolation\": \"linear\",\n                \"lineWidth\": 1,\n                \"pointSize\": 5,\n                \"scaleDistribution\": {\n                  \"type\": \"linear\"\n                },\n                \"showPoints\": \"auto\",\n                \"spanNulls\": false,\n                \"stacking\": {\n                  \"group\": \"A\",\n                  \"mode\": \"none\"\n                },\n                \"thresholdsStyle\": {\n                  \"mode\": \"off\"\n                }\n              },\n              \"mappings\": [],\n              \"thresholds\": {\n                \"mode\": \"absolute\",\n                \"steps\": [\n                  {\n                    \"color\": \"green\"\n                  },\n                  {\n                    \"color\": \"red\",\n                    \"value\": 80\n                  }\n                ]\n              }\n            },\n            \"overrides\": []\n          },\n          \"gridPos\": {\n            \"h\": 12,\n            \"w\": 12,\n            \"x\": 12,\n            \"y\": 29780\n          },\n          \"id\": 349,\n          \"options\": {\n            \"legend\": {\n              \"calcs\": [],\n              \"displayMode\": \"list\",\n              \"placement\": \"bottom\",\n              \"showLegend\": true\n            },\n            \"tooltip\": {\n              \"mode\": \"single\",\n              \"sort\": \"none\"\n            }\n          },\n          \"targets\": [\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"PBFA97CFB590B2093\"\n              },\n              \"exemplar\": true,\n              \"expr\": \"jvm_threads_state{instance=~\\\"$system\\\"}\",\n              \"interval\": \"\",\n              \"legendFormat\": \"{{state}}({{instance}})\",\n              \"refId\": \"A\"\n            }\n          ],\n          \"title\": \"State\",\n          \"type\": \"timeseries\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"fieldConfig\": {\n            \"defaults\": {\n              \"color\": {\n                \"mode\": \"palette-classic\"\n              },\n              \"custom\": {\n                \"axisBorderShow\": false,\n                \"axisCenteredZero\": false,\n                \"axisColorMode\": \"text\",\n                \"axisLabel\": \"\",\n                \"axisPlacement\": \"auto\",\n                \"barAlignment\": 0,\n                \"drawStyle\": \"line\",\n                \"fillOpacity\": 0,\n                \"gradientMode\": \"none\",\n                \"hideFrom\": {\n                  \"legend\": false,\n                  \"tooltip\": false,\n                  \"viz\": false\n                },\n                \"insertNulls\": false,\n                \"lineInterpolation\": \"linear\",\n                \"lineWidth\": 1,\n                \"pointSize\": 5,\n                \"scaleDistribution\": {\n                  \"type\": \"linear\"\n                },\n                \"showPoints\": \"auto\",\n                \"spanNulls\": false,\n                \"stacking\": {\n                  \"group\": \"A\",\n                  \"mode\": \"none\"\n                },\n                \"thresholdsStyle\": {\n                  \"mode\": \"off\"\n                }\n              },\n              \"mappings\": [],\n              \"thresholds\": {\n                \"mode\": \"absolute\",\n                \"steps\": [\n                  {\n                    \"color\": \"green\"\n                  },\n                  {\n                    \"color\": \"red\",\n                    \"value\": 80\n                  }\n                ]\n              }\n            },\n            \"overrides\": []\n          },\n          \"gridPos\": {\n            \"h\": 4,\n            \"w\": 24,\n            \"x\": 0,\n            \"y\": 29792\n          },\n          \"id\": 350,\n          \"options\": {\n            \"legend\": {\n              \"calcs\": [],\n              \"displayMode\": \"list\",\n              \"placement\": \"bottom\",\n              \"showLegend\": true\n            },\n            \"tooltip\": {\n              \"mode\": \"single\",\n              \"sort\": \"none\"\n            }\n          },\n          \"targets\": [\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"PBFA97CFB590B2093\"\n              },\n              \"exemplar\": true,\n              \"expr\": \"jvm_threads_started_total{instance=~\\\"$system\\\"}\",\n              \"interval\": \"\",\n              \"legendFormat\": \"total ({{instance}})\",\n              \"refId\": \"A\"\n            }\n          ],\n          \"title\": \"Started\",\n          \"type\": \"timeseries\"\n        }\n      ],\n      \"title\": \"JVM Threads\",\n      \"type\": \"row\"\n    },\n    {\n      \"collapsed\": true,\n      \"gridPos\": {\n        \"h\": 1,\n        \"w\": 24,\n        \"x\": 0,\n        \"y\": 52\n      },\n      \"id\": 489,\n      \"panels\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"description\": \"\",\n          \"fieldConfig\": {\n            \"defaults\": {\n              \"color\": {\n                \"mode\": \"palette-classic\"\n              },\n              \"custom\": {\n                \"axisBorderShow\": false,\n                \"axisCenteredZero\": false,\n                \"axisColorMode\": \"text\",\n                \"axisLabel\": \"\",\n                \"axisPlacement\": \"auto\",\n                \"barAlignment\": 0,\n                \"drawStyle\": \"line\",\n                \"fillOpacity\": 0,\n                \"gradientMode\": \"none\",\n                \"hideFrom\": {\n                  \"legend\": false,\n                  \"tooltip\": false,\n                  \"viz\": false\n                },\n                \"insertNulls\": false,\n                \"lineInterpolation\": \"linear\",\n                \"lineWidth\": 1,\n                \"pointSize\": 5,\n                \"scaleDistribution\": {\n                  \"type\": \"linear\"\n                },\n                \"showPoints\": \"auto\",\n                \"spanNulls\": false,\n                \"stacking\": {\n                  \"group\": \"A\",\n                  \"mode\": \"none\"\n                },\n                \"thresholdsStyle\": {\n                  \"mode\": \"off\"\n                }\n              },\n              \"mappings\": [],\n              \"thresholds\": {\n                \"mode\": \"absolute\",\n                \"steps\": [\n                  {\n                    \"color\": \"green\"\n                  },\n                  {\n                    \"color\": \"red\",\n                    \"value\": 80\n                  }\n                ]\n              }\n            },\n            \"overrides\": []\n          },\n          \"gridPos\": {\n            \"h\": 8,\n            \"w\": 24,\n            \"x\": 0,\n            \"y\": 20833\n          },\n          \"id\": 52,\n          \"maxPerRow\": 2,\n          \"options\": {\n            \"legend\": {\n              \"calcs\": [],\n              \"displayMode\": \"list\",\n              \"placement\": \"bottom\",\n              \"showLegend\": true\n            },\n            \"tooltip\": {\n              \"mode\": \"single\",\n              \"sort\": \"none\"\n            }\n          },\n          \"repeat\": \"executor\",\n          \"repeatDirection\": \"h\",\n          \"targets\": [\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"PBFA97CFB590B2093\"\n              },\n              \"exemplar\": true,\n              \"expr\": \"besu_executors_ethscheduler_${executor}_active_threads_current{instance=~\\\"$system\\\"}\",\n              \"interval\": \"\",\n              \"legendFormat\": \"active ({{instance}})\",\n              \"refId\": \"A\"\n            },\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"PBFA97CFB590B2093\"\n              },\n              \"exemplar\": true,\n              \"expr\": \"rate(besu_executors_ethscheduler_${executor}_completed_tasks_total{instance=~\\\"$system\\\"}[$__rate_interval])\",\n              \"hide\": false,\n              \"interval\": \"\",\n              \"legendFormat\": \"completed tasks/sec ({{instance}})\",\n              \"refId\": \"B\"\n            },\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"PBFA97CFB590B2093\"\n              },\n              \"exemplar\": true,\n              \"expr\": \"besu_executors_ethscheduler_${executor}_pool_size_current{instance=~\\\"$system\\\"}\",\n              \"hide\": false,\n              \"interval\": \"\",\n              \"legendFormat\": \"pool size ({{instance}})\",\n              \"refId\": \"C\"\n            },\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"PBFA97CFB590B2093\"\n              },\n              \"exemplar\": true,\n              \"expr\": \"besu_executors_ethscheduler_${executor}_queue_length_current{instance=~\\\"$system\\\"}\",\n              \"hide\": false,\n              \"interval\": \"\",\n              \"legendFormat\": \"queue length ({{instance}})\",\n              \"refId\": \"D\"\n            },\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"PBFA97CFB590B2093\"\n              },\n              \"exemplar\": true,\n              \"expr\": \"rate(besu_executors_ethscheduler_${executor}_rejected_tasks_total{instance=~\\\"$system\\\"}[$__rate_interval])\",\n              \"hide\": false,\n              \"interval\": \"\",\n              \"legendFormat\": \"rejected tasks/sec ({{instance}})\",\n              \"refId\": \"E\"\n            },\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"PBFA97CFB590B2093\"\n              },\n              \"exemplar\": true,\n              \"expr\": \"rate(besu_executors_ethscheduler_${executor}_submitted_tasks_total{instance=~\\\"$system\\\"}[$__rate_interval])\",\n              \"hide\": false,\n              \"interval\": \"\",\n              \"legendFormat\": \"submitted tasks/sec ({{instance}})\",\n              \"refId\": \"F\"\n            }\n          ],\n          \"title\": \"$executor\",\n          \"type\": \"timeseries\"\n        }\n      ],\n      \"title\": \"Executors\",\n      \"type\": \"row\"\n    },\n    {\n      \"collapsed\": true,\n      \"gridPos\": {\n        \"h\": 1,\n        \"w\": 24,\n        \"x\": 0,\n        \"y\": 53\n      },\n      \"id\": 490,\n      \"panels\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"fieldConfig\": {\n            \"defaults\": {\n              \"color\": {\n                \"mode\": \"palette-classic\"\n              },\n              \"custom\": {\n                \"axisBorderShow\": false,\n                \"axisCenteredZero\": false,\n                \"axisColorMode\": \"text\",\n                \"axisLabel\": \"\",\n                \"axisPlacement\": \"auto\",\n                \"barAlignment\": 0,\n                \"barWidthFactor\": 0.6,\n                \"drawStyle\": \"line\",\n                \"fillOpacity\": 0,\n                \"gradientMode\": \"none\",\n                \"hideFrom\": {\n                  \"legend\": false,\n                  \"tooltip\": false,\n                  \"viz\": false\n                },\n                \"insertNulls\": false,\n                \"lineInterpolation\": \"linear\",\n                \"lineWidth\": 1,\n                \"pointSize\": 5,\n                \"scaleDistribution\": {\n                  \"type\": \"linear\"\n                },\n                \"showPoints\": \"auto\",\n                \"spanNulls\": false,\n                \"stacking\": {\n                  \"group\": \"A\",\n                  \"mode\": \"none\"\n                },\n                \"thresholdsStyle\": {\n                  \"mode\": \"off\"\n                }\n              },\n              \"mappings\": [],\n              \"thresholds\": {\n                \"mode\": \"absolute\",\n                \"steps\": [\n                  {\n                    \"color\": \"green\"\n                  },\n                  {\n                    \"color\": \"red\",\n                    \"value\": 80\n                  }\n                ]\n              }\n            },\n            \"overrides\": []\n          },\n          \"gridPos\": {\n            \"h\": 8,\n            \"w\": 12,\n            \"x\": 0,\n            \"y\": 28172\n          },\n          \"id\": 58,\n          \"options\": {\n            \"legend\": {\n              \"calcs\": [],\n              \"displayMode\": \"list\",\n              \"placement\": \"bottom\",\n              \"showLegend\": true\n            },\n            \"tooltip\": {\n              \"mode\": \"single\",\n              \"sort\": \"none\"\n            }\n          },\n          \"pluginVersion\": \"11.3.0\",\n          \"targets\": [\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"PBFA97CFB590B2093\"\n              },\n              \"exemplar\": true,\n              \"expr\": \"besu_network_vertx_eventloop_pending_tasks{instance=~\\\"$system\\\"}\",\n              \"interval\": \"\",\n              \"legendFormat\": \"{{instance}}\",\n              \"refId\": \"A\"\n            }\n          ],\n          \"title\": \"Eventloop pending tasks\",\n          \"type\": \"timeseries\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"description\": \"\",\n          \"fieldConfig\": {\n            \"defaults\": {\n              \"color\": {\n                \"mode\": \"palette-classic\"\n              },\n              \"custom\": {\n                \"axisBorderShow\": false,\n                \"axisCenteredZero\": false,\n                \"axisColorMode\": \"text\",\n                \"axisLabel\": \"\",\n                \"axisPlacement\": \"auto\",\n                \"barAlignment\": 0,\n                \"drawStyle\": \"line\",\n                \"fillOpacity\": 0,\n                \"gradientMode\": \"none\",\n                \"hideFrom\": {\n                  \"legend\": false,\n                  \"tooltip\": false,\n                  \"viz\": false\n                },\n                \"insertNulls\": false,\n                \"lineInterpolation\": \"linear\",\n                \"lineWidth\": 1,\n                \"pointSize\": 5,\n                \"scaleDistribution\": {\n                  \"type\": \"linear\"\n                },\n                \"showPoints\": \"auto\",\n                \"spanNulls\": false,\n                \"stacking\": {\n                  \"group\": \"A\",\n                  \"mode\": \"none\"\n                },\n                \"thresholdsStyle\": {\n                  \"mode\": \"off\"\n                }\n              },\n              \"mappings\": [],\n              \"thresholds\": {\n                \"mode\": \"absolute\",\n                \"steps\": [\n                  {\n                    \"color\": \"green\"\n                  },\n                  {\n                    \"color\": \"red\",\n                    \"value\": 80\n                  }\n                ]\n              }\n            },\n            \"overrides\": []\n          },\n          \"gridPos\": {\n            \"h\": 8,\n            \"w\": 24,\n            \"x\": 0,\n            \"y\": 28180\n          },\n          \"id\": 352,\n          \"maxPerRow\": 2,\n          \"options\": {\n            \"legend\": {\n              \"calcs\": [],\n              \"displayMode\": \"list\",\n              \"placement\": \"bottom\",\n              \"showLegend\": true\n            },\n            \"tooltip\": {\n              \"mode\": \"single\",\n              \"sort\": \"none\"\n            }\n          },\n          \"repeat\": \"vertx_pool_name\",\n          \"repeatDirection\": \"h\",\n          \"targets\": [\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"PBFA97CFB590B2093\"\n              },\n              \"exemplar\": true,\n              \"expr\": \"rate(besu_network_vertx_worker_pool_completed_total{instance=~\\\"$system\\\", poolName=~\\\"$vertx_pool_name\\\"}[$__rate_interval])\",\n              \"hide\": false,\n              \"interval\": \"\",\n              \"legendFormat\": \"completed/sec ({{instance}})\",\n              \"refId\": \"B\"\n            },\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"PBFA97CFB590B2093\"\n              },\n              \"exemplar\": true,\n              \"expr\": \"rate(besu_network_vertx_worker_pool_rejected_total{instance=~\\\"$system\\\", poolName=~\\\"$vertx_pool_name\\\"}[$__rate_interval])\",\n              \"hide\": false,\n              \"interval\": \"\",\n              \"legendFormat\": \"rejected/sec ({{instance}})\",\n              \"refId\": \"C\"\n            },\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"PBFA97CFB590B2093\"\n              },\n              \"exemplar\": true,\n              \"expr\": \"rate(besu_network_vertx_worker_pool_submitted_total{instance=~\\\"$system\\\", poolName=~\\\"$vertx_pool_name\\\"}[$__rate_interval])\",\n              \"hide\": false,\n              \"interval\": \"\",\n              \"legendFormat\": \"submitted/sec ({{instance}})\",\n              \"refId\": \"D\"\n            }\n          ],\n          \"title\": \"$vertx_pool_name\",\n          \"type\": \"timeseries\"\n        }\n      ],\n      \"title\": \"Vert.x\",\n      \"type\": \"row\"\n    },\n    {\n      \"collapsed\": true,\n      \"gridPos\": {\n        \"h\": 1,\n        \"w\": 24,\n        \"x\": 0,\n        \"y\": 54\n      },\n      \"id\": 491,\n      \"panels\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"fieldConfig\": {\n            \"defaults\": {\n              \"color\": {\n                \"mode\": \"palette-classic\"\n              },\n              \"custom\": {\n                \"axisBorderShow\": false,\n                \"axisCenteredZero\": false,\n                \"axisColorMode\": \"text\",\n                \"axisLabel\": \"\",\n                \"axisPlacement\": \"auto\",\n                \"barAlignment\": 0,\n                \"drawStyle\": \"line\",\n                \"fillOpacity\": 0,\n                \"gradientMode\": \"none\",\n                \"hideFrom\": {\n                  \"legend\": false,\n                  \"tooltip\": false,\n                  \"viz\": false\n                },\n                \"insertNulls\": false,\n                \"lineInterpolation\": \"linear\",\n                \"lineWidth\": 1,\n                \"pointSize\": 5,\n                \"scaleDistribution\": {\n                  \"type\": \"linear\"\n                },\n                \"showPoints\": \"auto\",\n                \"spanNulls\": false,\n                \"stacking\": {\n                  \"group\": \"A\",\n                  \"mode\": \"none\"\n                },\n                \"thresholdsStyle\": {\n                  \"mode\": \"off\"\n                }\n              },\n              \"mappings\": [],\n              \"thresholds\": {\n                \"mode\": \"absolute\",\n                \"steps\": [\n                  {\n                    \"color\": \"green\"\n                  },\n                  {\n                    \"color\": \"red\",\n                    \"value\": 80\n                  }\n                ]\n              }\n            },\n            \"overrides\": []\n          },\n          \"gridPos\": {\n            \"h\": 8,\n            \"w\": 12,\n            \"x\": 0,\n            \"y\": 29783\n          },\n          \"id\": 73,\n          \"options\": {\n            \"legend\": {\n              \"calcs\": [],\n              \"displayMode\": \"list\",\n              \"placement\": \"bottom\",\n              \"showLegend\": true\n            },\n            \"tooltip\": {\n              \"mode\": \"single\",\n              \"sort\": \"none\"\n            }\n          },\n          \"targets\": [\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"PBFA97CFB590B2093\"\n              },\n              \"exemplar\": true,\n              \"expr\": \"besu_network_netty_boss_pending_tasks{instance=~\\\"$system\\\"}\",\n              \"interval\": \"\",\n              \"legendFormat\": \"boss {{instance}}\",\n              \"refId\": \"A\"\n            },\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"PBFA97CFB590B2093\"\n              },\n              \"exemplar\": true,\n              \"expr\": \"besu_network_netty_worker_pending_tasks{instance=~\\\"$system\\\"}\",\n              \"hide\": false,\n              \"interval\": \"\",\n              \"legendFormat\": \"worker {{instance}}\",\n              \"refId\": \"B\"\n            }\n          ],\n          \"title\": \"Pending Tasks\",\n          \"type\": \"timeseries\"\n        }\n      ],\n      \"title\": \"Netty\",\n      \"type\": \"row\"\n    },\n    {\n      \"collapsed\": true,\n      \"gridPos\": {\n        \"h\": 1,\n        \"w\": 24,\n        \"x\": 0,\n        \"y\": 55\n      },\n      \"id\": 492,\n      \"panels\": [\n        {\n          \"fieldConfig\": {\n            \"defaults\": {},\n            \"overrides\": []\n          },\n          \"gridPos\": {\n            \"h\": 4,\n            \"w\": 24,\n            \"x\": 0,\n            \"y\": 29340\n          },\n          \"id\": 190,\n          \"options\": {\n            \"code\": {\n              \"language\": \"plaintext\",\n              \"showLineNumbers\": false,\n              \"showMiniMap\": false\n            },\n            \"content\": \"# !!! WARNING !!!\\n\\nThe panels in this section will be empty if you didn't enable RocksDB metrics. RocksDB metrics have some overhead on Besu Performance. Please check this PR [#4038](https://github.com/hyperledger/besu/pull/4038) for more details.\\n\\nTo enable RocksDB metrics, you should add these config options to your besu command : \\n***--metrics-protocol=PROMETHEUS --metrics-category=JVM,PROCESS,BLOCKCHAIN,ETHEREUM,EXECUTORS,NETWORK,PEERS,KVSTORE_ROCKSDB,KVSTORE_ROCKSDB_STATS,PRUNER,RPC,SYNCHRONIZER,TRANSACTION_POOL,STRATUM***\\n\\n\",\n            \"mode\": \"markdown\"\n          },\n          \"pluginVersion\": \"11.3.0\",\n          \"title\": \"\",\n          \"type\": \"text\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"fieldConfig\": {\n            \"defaults\": {\n              \"color\": {\n                \"mode\": \"palette-classic\"\n              },\n              \"custom\": {\n                \"axisBorderShow\": false,\n                \"axisCenteredZero\": false,\n                \"axisColorMode\": \"text\",\n                \"axisLabel\": \"\",\n                \"axisPlacement\": \"auto\",\n                \"barAlignment\": 0,\n                \"barWidthFactor\": 0.6,\n                \"drawStyle\": \"line\",\n                \"fillOpacity\": 0,\n                \"gradientMode\": \"none\",\n                \"hideFrom\": {\n                  \"legend\": false,\n                  \"tooltip\": false,\n                  \"viz\": false\n                },\n                \"insertNulls\": false,\n                \"lineInterpolation\": \"linear\",\n                \"lineWidth\": 1,\n                \"pointSize\": 5,\n                \"scaleDistribution\": {\n                  \"type\": \"linear\"\n                },\n                \"showPoints\": \"auto\",\n                \"spanNulls\": false,\n                \"stacking\": {\n                  \"group\": \"A\",\n                  \"mode\": \"none\"\n                },\n                \"thresholdsStyle\": {\n                  \"mode\": \"off\"\n                }\n              },\n              \"mappings\": [],\n              \"thresholds\": {\n                \"mode\": \"absolute\",\n                \"steps\": [\n                  {\n                    \"color\": \"green\"\n                  },\n                  {\n                    \"color\": \"red\",\n                    \"value\": 80\n                  }\n                ]\n              },\n              \"unit\": \"percentunit\"\n            },\n            \"overrides\": []\n          },\n          \"gridPos\": {\n            \"h\": 9,\n            \"w\": 12,\n            \"x\": 0,\n            \"y\": 29344\n          },\n          \"id\": 152,\n          \"options\": {\n            \"legend\": {\n              \"calcs\": [\n                \"min\",\n                \"max\",\n                \"mean\",\n                \"last\"\n              ],\n              \"displayMode\": \"table\",\n              \"placement\": \"bottom\",\n              \"showLegend\": true,\n              \"sortBy\": \"Mean\",\n              \"sortDesc\": false\n            },\n            \"tooltip\": {\n              \"mode\": \"single\",\n              \"sort\": \"none\"\n            }\n          },\n          \"pluginVersion\": \"11.3.0\",\n          \"targets\": [\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"PBFA97CFB590B2093\"\n              },\n              \"exemplar\": true,\n              \"expr\": \"rocksdb_memtable_hit{instance=~\\\"$system\\\"}/(rocksdb_memtable_miss{instance=~\\\"$system\\\"}+rocksdb_memtable_hit{instance=~\\\"$system\\\"})\",\n              \"interval\": \"\",\n              \"legendFormat\": \"rocksdb_memtable_miss- instance {{instance}}\",\n              \"refId\": \"A\"\n            }\n          ],\n          \"title\": \"Memtable Hit Ratio\",\n          \"type\": \"timeseries\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"fieldConfig\": {\n            \"defaults\": {\n              \"color\": {\n                \"mode\": \"palette-classic\"\n              },\n              \"custom\": {\n                \"axisBorderShow\": false,\n                \"axisCenteredZero\": false,\n                \"axisColorMode\": \"text\",\n                \"axisLabel\": \"\",\n                \"axisPlacement\": \"auto\",\n                \"barAlignment\": 0,\n                \"barWidthFactor\": 0.6,\n                \"drawStyle\": \"line\",\n                \"fillOpacity\": 0,\n                \"gradientMode\": \"none\",\n                \"hideFrom\": {\n                  \"legend\": false,\n                  \"tooltip\": false,\n                  \"viz\": false\n                },\n                \"insertNulls\": false,\n                \"lineInterpolation\": \"linear\",\n                \"lineWidth\": 1,\n                \"pointSize\": 5,\n                \"scaleDistribution\": {\n                  \"type\": \"linear\"\n                },\n                \"showPoints\": \"auto\",\n                \"spanNulls\": false,\n                \"stacking\": {\n                  \"group\": \"A\",\n                  \"mode\": \"none\"\n                },\n                \"thresholdsStyle\": {\n                  \"mode\": \"off\"\n                }\n              },\n              \"mappings\": [],\n              \"thresholds\": {\n                \"mode\": \"absolute\",\n                \"steps\": [\n                  {\n                    \"color\": \"green\"\n                  },\n                  {\n                    \"color\": \"red\",\n                    \"value\": 80\n                  }\n                ]\n              },\n              \"unit\": \"percentunit\"\n            },\n            \"overrides\": []\n          },\n          \"gridPos\": {\n            \"h\": 9,\n            \"w\": 12,\n            \"x\": 12,\n            \"y\": 29344\n          },\n          \"id\": 191,\n          \"options\": {\n            \"legend\": {\n              \"calcs\": [\n                \"min\",\n                \"max\",\n                \"mean\",\n                \"last\"\n              ],\n              \"displayMode\": \"table\",\n              \"placement\": \"bottom\",\n              \"showLegend\": true,\n              \"sortBy\": \"Mean\",\n              \"sortDesc\": true\n            },\n            \"tooltip\": {\n              \"mode\": \"multi\",\n              \"sort\": \"none\"\n            }\n          },\n          \"pluginVersion\": \"11.3.0\",\n          \"targets\": [\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"PBFA97CFB590B2093\"\n              },\n              \"editorMode\": \"code\",\n              \"exemplar\": true,\n              \"expr\": \"rocksdb_block_cache_data_hit{instance=~\\\"$system\\\"}/(rocksdb_block_cache_data_hit{instance=~\\\"$system\\\"}+rocksdb_block_cache_data_miss{instance=~\\\"$system\\\"})\",\n              \"interval\": \"\",\n              \"legendFormat\": \"block cache data hit ratio - instance {{instance}}\",\n              \"range\": true,\n              \"refId\": \"A\"\n            }\n          ],\n          \"title\": \"Block cache data hit ratio\",\n          \"type\": \"timeseries\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"fieldConfig\": {\n            \"defaults\": {\n              \"color\": {\n                \"mode\": \"palette-classic\"\n              },\n              \"custom\": {\n                \"axisBorderShow\": false,\n                \"axisCenteredZero\": false,\n                \"axisColorMode\": \"text\",\n                \"axisLabel\": \"\",\n                \"axisPlacement\": \"left\",\n                \"barAlignment\": 0,\n                \"barWidthFactor\": 0.6,\n                \"drawStyle\": \"line\",\n                \"fillOpacity\": 0,\n                \"gradientMode\": \"none\",\n                \"hideFrom\": {\n                  \"legend\": false,\n                  \"tooltip\": false,\n                  \"viz\": false\n                },\n                \"insertNulls\": false,\n                \"lineInterpolation\": \"linear\",\n                \"lineWidth\": 1,\n                \"pointSize\": 5,\n                \"scaleDistribution\": {\n                  \"type\": \"linear\"\n                },\n                \"showPoints\": \"auto\",\n                \"spanNulls\": false,\n                \"stacking\": {\n                  \"group\": \"A\",\n                  \"mode\": \"none\"\n                },\n                \"thresholdsStyle\": {\n                  \"mode\": \"off\"\n                }\n              },\n              \"mappings\": [],\n              \"thresholds\": {\n                \"mode\": \"absolute\",\n                \"steps\": [\n                  {\n                    \"color\": \"green\"\n                  },\n                  {\n                    \"color\": \"red\",\n                    \"value\": 80\n                  }\n                ]\n              },\n              \"unit\": \"percentunit\"\n            },\n            \"overrides\": []\n          },\n          \"gridPos\": {\n            \"h\": 9,\n            \"w\": 12,\n            \"x\": 0,\n            \"y\": 29353\n          },\n          \"id\": 156,\n          \"options\": {\n            \"legend\": {\n              \"calcs\": [\n                \"min\",\n                \"max\",\n                \"mean\",\n                \"last\"\n              ],\n              \"displayMode\": \"table\",\n              \"placement\": \"bottom\",\n              \"showLegend\": true\n            },\n            \"tooltip\": {\n              \"mode\": \"single\",\n              \"sort\": \"none\"\n            }\n          },\n          \"pluginVersion\": \"11.3.0\",\n          \"targets\": [\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"PBFA97CFB590B2093\"\n              },\n              \"exemplar\": true,\n              \"expr\": \"rocksdb_block_cache_index_hit{instance=~\\\"$system\\\"} / (rocksdb_block_cache_index_hit{instance=~\\\"$system\\\"} + rocksdb_block_cache_index_miss{instance=~\\\"$system\\\"} )\",\n              \"interval\": \"\",\n              \"legendFormat\": \"Block cache index hit ratio- {{instance}}\",\n              \"refId\": \"A\"\n            }\n          ],\n          \"title\": \"Block cache index hit ratio\",\n          \"type\": \"timeseries\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"fieldConfig\": {\n            \"defaults\": {\n              \"color\": {\n                \"mode\": \"palette-classic\"\n              },\n              \"custom\": {\n                \"axisBorderShow\": false,\n                \"axisCenteredZero\": false,\n                \"axisColorMode\": \"text\",\n                \"axisLabel\": \"\",\n                \"axisPlacement\": \"left\",\n                \"barAlignment\": 0,\n                \"barWidthFactor\": 0.6,\n                \"drawStyle\": \"line\",\n                \"fillOpacity\": 0,\n                \"gradientMode\": \"none\",\n                \"hideFrom\": {\n                  \"legend\": false,\n                  \"tooltip\": false,\n                  \"viz\": false\n                },\n                \"insertNulls\": false,\n                \"lineInterpolation\": \"linear\",\n                \"lineWidth\": 1,\n                \"pointSize\": 5,\n                \"scaleDistribution\": {\n                  \"type\": \"linear\"\n                },\n                \"showPoints\": \"auto\",\n                \"spanNulls\": false,\n                \"stacking\": {\n                  \"group\": \"A\",\n                  \"mode\": \"none\"\n                },\n                \"thresholdsStyle\": {\n                  \"mode\": \"off\"\n                }\n              },\n              \"mappings\": [],\n              \"thresholds\": {\n                \"mode\": \"absolute\",\n                \"steps\": [\n                  {\n                    \"color\": \"green\"\n                  },\n                  {\n                    \"color\": \"red\",\n                    \"value\": 80\n                  }\n                ]\n              },\n              \"unit\": \"percentunit\"\n            },\n            \"overrides\": []\n          },\n          \"gridPos\": {\n            \"h\": 9,\n            \"w\": 12,\n            \"x\": 12,\n            \"y\": 29353\n          },\n          \"id\": 158,\n          \"options\": {\n            \"legend\": {\n              \"calcs\": [\n                \"min\",\n                \"max\",\n                \"mean\",\n                \"last\"\n              ],\n              \"displayMode\": \"table\",\n              \"placement\": \"bottom\",\n              \"showLegend\": true\n            },\n            \"tooltip\": {\n              \"mode\": \"single\",\n              \"sort\": \"none\"\n            }\n          },\n          \"pluginVersion\": \"11.3.0\",\n          \"targets\": [\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"PBFA97CFB590B2093\"\n              },\n              \"editorMode\": \"code\",\n              \"exemplar\": true,\n              \"expr\": \"rocksdb_block_cache_filter_hit{instance=~\\\"$system\\\"} / (rocksdb_block_cache_filter_hit{instance=~\\\"$system\\\"} + rocksdb_block_cache_filter_miss{instance=~\\\"$system\\\"})\",\n              \"interval\": \"\",\n              \"legendFormat\": \"Block cache filter hit ratio - {{instance}}\",\n              \"range\": true,\n              \"refId\": \"A\"\n            }\n          ],\n          \"title\": \"Block cache filter hit ratio\",\n          \"type\": \"timeseries\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"fieldConfig\": {\n            \"defaults\": {\n              \"color\": {\n                \"mode\": \"palette-classic\"\n              },\n              \"custom\": {\n                \"axisBorderShow\": false,\n                \"axisCenteredZero\": false,\n                \"axisColorMode\": \"text\",\n                \"axisLabel\": \"\",\n                \"axisPlacement\": \"left\",\n                \"barAlignment\": 0,\n                \"barWidthFactor\": 0.6,\n                \"drawStyle\": \"line\",\n                \"fillOpacity\": 0,\n                \"gradientMode\": \"none\",\n                \"hideFrom\": {\n                  \"legend\": false,\n                  \"tooltip\": false,\n                  \"viz\": false\n                },\n                \"insertNulls\": false,\n                \"lineInterpolation\": \"linear\",\n                \"lineWidth\": 1,\n                \"pointSize\": 5,\n                \"scaleDistribution\": {\n                  \"type\": \"linear\"\n                },\n                \"showPoints\": \"auto\",\n                \"spanNulls\": false,\n                \"stacking\": {\n                  \"group\": \"A\",\n                  \"mode\": \"none\"\n                },\n                \"thresholdsStyle\": {\n                  \"mode\": \"off\"\n                }\n              },\n              \"mappings\": [],\n              \"thresholds\": {\n                \"mode\": \"absolute\",\n                \"steps\": [\n                  {\n                    \"color\": \"green\"\n                  },\n                  {\n                    \"color\": \"red\",\n                    \"value\": 80\n                  }\n                ]\n              },\n              \"unit\": \"s\"\n            },\n            \"overrides\": []\n          },\n          \"gridPos\": {\n            \"h\": 9,\n            \"w\": 12,\n            \"x\": 0,\n            \"y\": 29362\n          },\n          \"id\": 164,\n          \"options\": {\n            \"legend\": {\n              \"calcs\": [\n                \"min\",\n                \"max\",\n                \"mean\",\n                \"last\"\n              ],\n              \"displayMode\": \"table\",\n              \"placement\": \"bottom\",\n              \"showLegend\": true,\n              \"sortBy\": \"Mean\",\n              \"sortDesc\": false\n            },\n            \"tooltip\": {\n              \"mode\": \"single\",\n              \"sort\": \"none\"\n            }\n          },\n          \"pluginVersion\": \"11.3.0\",\n          \"targets\": [\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"PBFA97CFB590B2093\"\n              },\n              \"editorMode\": \"code\",\n              \"exemplar\": true,\n              \"expr\": \"besu_rocksdb_read_latency_seconds{instance=~\\\"$system\\\", quantile=\\\"0.5\\\"}\",\n              \"interval\": \"\",\n              \"legendFormat\": \"quantile=\\\"0.5\\\" - {{instance}}\",\n              \"range\": true,\n              \"refId\": \"A\"\n            }\n          ],\n          \"title\": \"Besu RocksDB Get Latency 50th Percentile\",\n          \"type\": \"timeseries\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"fieldConfig\": {\n            \"defaults\": {\n              \"color\": {\n                \"mode\": \"palette-classic\"\n              },\n              \"custom\": {\n                \"axisBorderShow\": false,\n                \"axisCenteredZero\": false,\n                \"axisColorMode\": \"text\",\n                \"axisLabel\": \"\",\n                \"axisPlacement\": \"left\",\n                \"barAlignment\": 0,\n                \"barWidthFactor\": 0.6,\n                \"drawStyle\": \"line\",\n                \"fillOpacity\": 0,\n                \"gradientMode\": \"none\",\n                \"hideFrom\": {\n                  \"legend\": false,\n                  \"tooltip\": false,\n                  \"viz\": false\n                },\n                \"insertNulls\": false,\n                \"lineInterpolation\": \"linear\",\n                \"lineWidth\": 1,\n                \"pointSize\": 5,\n                \"scaleDistribution\": {\n                  \"type\": \"linear\"\n                },\n                \"showPoints\": \"auto\",\n                \"spanNulls\": false,\n                \"stacking\": {\n                  \"group\": \"A\",\n                  \"mode\": \"none\"\n                },\n                \"thresholdsStyle\": {\n                  \"mode\": \"off\"\n                }\n              },\n              \"mappings\": [],\n              \"thresholds\": {\n                \"mode\": \"absolute\",\n                \"steps\": [\n                  {\n                    \"color\": \"green\"\n                  },\n                  {\n                    \"color\": \"red\",\n                    \"value\": 80\n                  }\n                ]\n              },\n              \"unit\": \"s\"\n            },\n            \"overrides\": []\n          },\n          \"gridPos\": {\n            \"h\": 9,\n            \"w\": 12,\n            \"x\": 12,\n            \"y\": 29362\n          },\n          \"id\": 218,\n          \"options\": {\n            \"legend\": {\n              \"calcs\": [\n                \"min\",\n                \"max\",\n                \"mean\",\n                \"last\"\n              ],\n              \"displayMode\": \"table\",\n              \"placement\": \"bottom\",\n              \"showLegend\": true\n            },\n            \"tooltip\": {\n              \"mode\": \"single\",\n              \"sort\": \"none\"\n            }\n          },\n          \"pluginVersion\": \"11.3.0\",\n          \"targets\": [\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"PBFA97CFB590B2093\"\n              },\n              \"editorMode\": \"code\",\n              \"exemplar\": true,\n              \"expr\": \"besu_rocksdb_read_latency_seconds{instance=~\\\"$system\\\", quantile=\\\"0.95\\\"}\",\n              \"hide\": false,\n              \"interval\": \"\",\n              \"legendFormat\": \" quantile=\\\"0.95\\\" - {{instance}}\",\n              \"range\": true,\n              \"refId\": \"C\"\n            }\n          ],\n          \"title\": \"Besu RocksDB Get Latency 95th Percentile\",\n          \"type\": \"timeseries\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"fieldConfig\": {\n            \"defaults\": {\n              \"color\": {\n                \"mode\": \"palette-classic\"\n              },\n              \"custom\": {\n                \"axisBorderShow\": false,\n                \"axisCenteredZero\": false,\n                \"axisColorMode\": \"text\",\n                \"axisLabel\": \"\",\n                \"axisPlacement\": \"left\",\n                \"barAlignment\": 0,\n                \"barWidthFactor\": 0.6,\n                \"drawStyle\": \"line\",\n                \"fillOpacity\": 0,\n                \"gradientMode\": \"none\",\n                \"hideFrom\": {\n                  \"legend\": false,\n                  \"tooltip\": false,\n                  \"viz\": false\n                },\n                \"insertNulls\": false,\n                \"lineInterpolation\": \"linear\",\n                \"lineWidth\": 1,\n                \"pointSize\": 5,\n                \"scaleDistribution\": {\n                  \"type\": \"linear\"\n                },\n                \"showPoints\": \"auto\",\n                \"spanNulls\": false,\n                \"stacking\": {\n                  \"group\": \"A\",\n                  \"mode\": \"none\"\n                },\n                \"thresholdsStyle\": {\n                  \"mode\": \"off\"\n                }\n              },\n              \"mappings\": [],\n              \"thresholds\": {\n                \"mode\": \"absolute\",\n                \"steps\": [\n                  {\n                    \"color\": \"green\"\n                  },\n                  {\n                    \"color\": \"red\",\n                    \"value\": 80\n                  }\n                ]\n              },\n              \"unit\": \"s\"\n            },\n            \"overrides\": []\n          },\n          \"gridPos\": {\n            \"h\": 10,\n            \"w\": 24,\n            \"x\": 0,\n            \"y\": 29371\n          },\n          \"id\": 219,\n          \"options\": {\n            \"legend\": {\n              \"calcs\": [\n                \"min\",\n                \"max\",\n                \"mean\",\n                \"last\"\n              ],\n              \"displayMode\": \"table\",\n              \"placement\": \"bottom\",\n              \"showLegend\": true,\n              \"sortBy\": \"Mean\",\n              \"sortDesc\": true\n            },\n            \"tooltip\": {\n              \"mode\": \"single\",\n              \"sort\": \"none\"\n            }\n          },\n          \"pluginVersion\": \"11.3.0\",\n          \"targets\": [\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"PBFA97CFB590B2093\"\n              },\n              \"editorMode\": \"code\",\n              \"exemplar\": true,\n              \"expr\": \"besu_rocksdb_read_latency_seconds{instance=~\\\"$system\\\", quantile=\\\"0.99\\\"}\",\n              \"hide\": false,\n              \"interval\": \"\",\n              \"legendFormat\": \" quantile=\\\"0.99\\\" - {{instance}}\",\n              \"range\": true,\n              \"refId\": \"C\"\n            }\n          ],\n          \"title\": \"Besu RocksDB Get Latency 99th Percentile\",\n          \"type\": \"timeseries\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"fieldConfig\": {\n            \"defaults\": {\n              \"color\": {\n                \"mode\": \"palette-classic\"\n              },\n              \"custom\": {\n                \"axisBorderShow\": false,\n                \"axisCenteredZero\": false,\n                \"axisColorMode\": \"text\",\n                \"axisLabel\": \"\",\n                \"axisPlacement\": \"left\",\n                \"barAlignment\": 0,\n                \"barWidthFactor\": 0.6,\n                \"drawStyle\": \"line\",\n                \"fillOpacity\": 0,\n                \"gradientMode\": \"none\",\n                \"hideFrom\": {\n                  \"legend\": false,\n                  \"tooltip\": false,\n                  \"viz\": false\n                },\n                \"insertNulls\": false,\n                \"lineInterpolation\": \"linear\",\n                \"lineWidth\": 1,\n                \"pointSize\": 5,\n                \"scaleDistribution\": {\n                  \"type\": \"linear\"\n                },\n                \"showPoints\": \"auto\",\n                \"spanNulls\": false,\n                \"stacking\": {\n                  \"group\": \"A\",\n                  \"mode\": \"none\"\n                },\n                \"thresholdsStyle\": {\n                  \"mode\": \"off\"\n                }\n              },\n              \"mappings\": [],\n              \"thresholds\": {\n                \"mode\": \"absolute\",\n                \"steps\": [\n                  {\n                    \"color\": \"green\"\n                  },\n                  {\n                    \"color\": \"red\",\n                    \"value\": 80\n                  }\n                ]\n              },\n              \"unit\": \"µs\"\n            },\n            \"overrides\": []\n          },\n          \"gridPos\": {\n            \"h\": 9,\n            \"w\": 12,\n            \"x\": 0,\n            \"y\": 29381\n          },\n          \"id\": 162,\n          \"options\": {\n            \"legend\": {\n              \"calcs\": [\n                \"min\",\n                \"max\",\n                \"mean\",\n                \"last\"\n              ],\n              \"displayMode\": \"table\",\n              \"placement\": \"bottom\",\n              \"showLegend\": true,\n              \"sortBy\": \"Mean\",\n              \"sortDesc\": true\n            },\n            \"tooltip\": {\n              \"mode\": \"single\",\n              \"sort\": \"none\"\n            }\n          },\n          \"pluginVersion\": \"11.3.0\",\n          \"targets\": [\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"PBFA97CFB590B2093\"\n              },\n              \"exemplar\": true,\n              \"expr\": \"rocksdb_db_get{instance=~\\\"$system\\\", quantile=\\\"0.5\\\"}\",\n              \"interval\": \"\",\n              \"legendFormat\": \"quantile=\\\"0.5\\\" - {{instance}}\",\n              \"refId\": \"A\"\n            }\n          ],\n          \"title\": \"RocksDB Get Latency (internal metric) 50th Percentile\",\n          \"type\": \"timeseries\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"fieldConfig\": {\n            \"defaults\": {\n              \"color\": {\n                \"mode\": \"palette-classic\"\n              },\n              \"custom\": {\n                \"axisBorderShow\": false,\n                \"axisCenteredZero\": false,\n                \"axisColorMode\": \"text\",\n                \"axisLabel\": \"\",\n                \"axisPlacement\": \"left\",\n                \"barAlignment\": 0,\n                \"barWidthFactor\": 0.6,\n                \"drawStyle\": \"line\",\n                \"fillOpacity\": 0,\n                \"gradientMode\": \"none\",\n                \"hideFrom\": {\n                  \"legend\": false,\n                  \"tooltip\": false,\n                  \"viz\": false\n                },\n                \"insertNulls\": false,\n                \"lineInterpolation\": \"linear\",\n                \"lineWidth\": 1,\n                \"pointSize\": 5,\n                \"scaleDistribution\": {\n                  \"type\": \"linear\"\n                },\n                \"showPoints\": \"auto\",\n                \"spanNulls\": false,\n                \"stacking\": {\n                  \"group\": \"A\",\n                  \"mode\": \"none\"\n                },\n                \"thresholdsStyle\": {\n                  \"mode\": \"off\"\n                }\n              },\n              \"mappings\": [],\n              \"thresholds\": {\n                \"mode\": \"absolute\",\n                \"steps\": [\n                  {\n                    \"color\": \"green\"\n                  },\n                  {\n                    \"color\": \"red\",\n                    \"value\": 80\n                  }\n                ]\n              },\n              \"unit\": \"µs\"\n            },\n            \"overrides\": []\n          },\n          \"gridPos\": {\n            \"h\": 9,\n            \"w\": 12,\n            \"x\": 12,\n            \"y\": 29381\n          },\n          \"id\": 220,\n          \"options\": {\n            \"legend\": {\n              \"calcs\": [\n                \"min\",\n                \"max\",\n                \"mean\",\n                \"last\"\n              ],\n              \"displayMode\": \"table\",\n              \"placement\": \"bottom\",\n              \"showLegend\": true,\n              \"sortBy\": \"Mean\",\n              \"sortDesc\": false\n            },\n            \"tooltip\": {\n              \"mode\": \"single\",\n              \"sort\": \"none\"\n            }\n          },\n          \"pluginVersion\": \"11.3.0\",\n          \"targets\": [\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"PBFA97CFB590B2093\"\n              },\n              \"editorMode\": \"code\",\n              \"exemplar\": true,\n              \"expr\": \"rocksdb_db_get{instance=~\\\"$system\\\", quantile=\\\"0.95\\\"}\",\n              \"interval\": \"\",\n              \"legendFormat\": \"quantile=\\\"0.95\\\" - {{instance}}\",\n              \"range\": true,\n              \"refId\": \"A\"\n            }\n          ],\n          \"title\": \"RocksDB Get Latency (internal metric) 95th Percentile\",\n          \"type\": \"timeseries\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"fieldConfig\": {\n            \"defaults\": {\n              \"color\": {\n                \"mode\": \"palette-classic\"\n              },\n              \"custom\": {\n                \"axisBorderShow\": false,\n                \"axisCenteredZero\": false,\n                \"axisColorMode\": \"text\",\n                \"axisLabel\": \"\",\n                \"axisPlacement\": \"left\",\n                \"barAlignment\": 0,\n                \"barWidthFactor\": 0.6,\n                \"drawStyle\": \"line\",\n                \"fillOpacity\": 0,\n                \"gradientMode\": \"none\",\n                \"hideFrom\": {\n                  \"legend\": false,\n                  \"tooltip\": false,\n                  \"viz\": false\n                },\n                \"insertNulls\": false,\n                \"lineInterpolation\": \"linear\",\n                \"lineWidth\": 1,\n                \"pointSize\": 5,\n                \"scaleDistribution\": {\n                  \"type\": \"linear\"\n                },\n                \"showPoints\": \"auto\",\n                \"spanNulls\": false,\n                \"stacking\": {\n                  \"group\": \"A\",\n                  \"mode\": \"none\"\n                },\n                \"thresholdsStyle\": {\n                  \"mode\": \"off\"\n                }\n              },\n              \"mappings\": [],\n              \"thresholds\": {\n                \"mode\": \"absolute\",\n                \"steps\": [\n                  {\n                    \"color\": \"green\"\n                  },\n                  {\n                    \"color\": \"red\",\n                    \"value\": 80\n                  }\n                ]\n              },\n              \"unit\": \"µs\"\n            },\n            \"overrides\": []\n          },\n          \"gridPos\": {\n            \"h\": 11,\n            \"w\": 24,\n            \"x\": 0,\n            \"y\": 29390\n          },\n          \"id\": 221,\n          \"options\": {\n            \"legend\": {\n              \"calcs\": [\n                \"min\",\n                \"max\",\n                \"mean\",\n                \"last\"\n              ],\n              \"displayMode\": \"table\",\n              \"placement\": \"bottom\",\n              \"showLegend\": true\n            },\n            \"tooltip\": {\n              \"mode\": \"single\",\n              \"sort\": \"none\"\n            }\n          },\n          \"pluginVersion\": \"11.3.0\",\n          \"targets\": [\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"PBFA97CFB590B2093\"\n              },\n              \"editorMode\": \"code\",\n              \"exemplar\": true,\n              \"expr\": \"rocksdb_db_get{instance=~\\\"$system\\\", quantile=\\\"0.99\\\"}\",\n              \"interval\": \"\",\n              \"legendFormat\": \"quantile=\\\"0.99\\\" - {{instance}}\",\n              \"range\": true,\n              \"refId\": \"A\"\n            }\n          ],\n          \"title\": \"RocksDB Get Latency (internal metric) 99th Percentile\",\n          \"type\": \"timeseries\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"fieldConfig\": {\n            \"defaults\": {\n              \"color\": {\n                \"mode\": \"palette-classic\"\n              },\n              \"custom\": {\n                \"axisBorderShow\": false,\n                \"axisCenteredZero\": false,\n                \"axisColorMode\": \"text\",\n                \"axisLabel\": \"\",\n                \"axisPlacement\": \"left\",\n                \"barAlignment\": 0,\n                \"barWidthFactor\": 0.6,\n                \"drawStyle\": \"bars\",\n                \"fillOpacity\": 50,\n                \"gradientMode\": \"none\",\n                \"hideFrom\": {\n                  \"legend\": false,\n                  \"tooltip\": false,\n                  \"viz\": false\n                },\n                \"insertNulls\": false,\n                \"lineInterpolation\": \"linear\",\n                \"lineWidth\": 1,\n                \"pointSize\": 5,\n                \"scaleDistribution\": {\n                  \"type\": \"linear\"\n                },\n                \"showPoints\": \"never\",\n                \"spanNulls\": false,\n                \"stacking\": {\n                  \"group\": \"A\",\n                  \"mode\": \"normal\"\n                },\n                \"thresholdsStyle\": {\n                  \"mode\": \"off\"\n                }\n              },\n              \"mappings\": [],\n              \"thresholds\": {\n                \"mode\": \"absolute\",\n                \"steps\": [\n                  {\n                    \"color\": \"green\"\n                  },\n                  {\n                    \"color\": \"red\",\n                    \"value\": 80\n                  }\n                ]\n              },\n              \"unit\": \"none\"\n            },\n            \"overrides\": []\n          },\n          \"gridPos\": {\n            \"h\": 9,\n            \"w\": 12,\n            \"x\": 0,\n            \"y\": 29401\n          },\n          \"id\": 160,\n          \"options\": {\n            \"legend\": {\n              \"calcs\": [\n                \"min\",\n                \"max\",\n                \"mean\",\n                \"last\"\n              ],\n              \"displayMode\": \"table\",\n              \"placement\": \"bottom\",\n              \"showLegend\": true,\n              \"sortBy\": \"Max\",\n              \"sortDesc\": true\n            },\n            \"tooltip\": {\n              \"mode\": \"single\",\n              \"sort\": \"none\"\n            }\n          },\n          \"pluginVersion\": \"11.3.0\",\n          \"targets\": [\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"PBFA97CFB590B2093\"\n              },\n              \"editorMode\": \"code\",\n              \"exemplar\": false,\n              \"expr\": \"irate (rocksdb_get_hit_l0{instance=~\\\"$system\\\"}[1m])\",\n              \"instant\": false,\n              \"interval\": \"\",\n              \"legendFormat\": \"#Get() served by L0 - {{instance}}\",\n              \"range\": true,\n              \"refId\": \"A\"\n            }\n          ],\n          \"title\": \"Number of Get queries served by L0\",\n          \"type\": \"timeseries\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"fieldConfig\": {\n            \"defaults\": {\n              \"color\": {\n                \"mode\": \"palette-classic\"\n              },\n              \"custom\": {\n                \"axisBorderShow\": false,\n                \"axisCenteredZero\": false,\n                \"axisColorMode\": \"text\",\n                \"axisLabel\": \"\",\n                \"axisPlacement\": \"left\",\n                \"barAlignment\": 0,\n                \"barWidthFactor\": 0.6,\n                \"drawStyle\": \"bars\",\n                \"fillOpacity\": 50,\n                \"gradientMode\": \"none\",\n                \"hideFrom\": {\n                  \"legend\": false,\n                  \"tooltip\": false,\n                  \"viz\": false\n                },\n                \"insertNulls\": false,\n                \"lineInterpolation\": \"linear\",\n                \"lineWidth\": 1,\n                \"pointSize\": 5,\n                \"scaleDistribution\": {\n                  \"type\": \"linear\"\n                },\n                \"showPoints\": \"never\",\n                \"spanNulls\": false,\n                \"stacking\": {\n                  \"group\": \"A\",\n                  \"mode\": \"normal\"\n                },\n                \"thresholdsStyle\": {\n                  \"mode\": \"off\"\n                }\n              },\n              \"mappings\": [],\n              \"thresholds\": {\n                \"mode\": \"absolute\",\n                \"steps\": [\n                  {\n                    \"color\": \"green\"\n                  },\n                  {\n                    \"color\": \"red\",\n                    \"value\": 80\n                  }\n                ]\n              },\n              \"unit\": \"none\"\n            },\n            \"overrides\": []\n          },\n          \"gridPos\": {\n            \"h\": 9,\n            \"w\": 12,\n            \"x\": 12,\n            \"y\": 29401\n          },\n          \"id\": 225,\n          \"options\": {\n            \"legend\": {\n              \"calcs\": [\n                \"min\",\n                \"max\",\n                \"mean\",\n                \"last\"\n              ],\n              \"displayMode\": \"table\",\n              \"placement\": \"bottom\",\n              \"showLegend\": true,\n              \"sortBy\": \"Max\",\n              \"sortDesc\": true\n            },\n            \"tooltip\": {\n              \"mode\": \"single\",\n              \"sort\": \"none\"\n            }\n          },\n          \"pluginVersion\": \"11.3.0\",\n          \"targets\": [\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"PBFA97CFB590B2093\"\n              },\n              \"editorMode\": \"code\",\n              \"exemplar\": false,\n              \"expr\": \"irate (rocksdb_get_hit_l1{instance=~\\\"$system\\\"}[1m])\",\n              \"instant\": false,\n              \"interval\": \"\",\n              \"legendFormat\": \"#Get() served by L1 - {{instance}}\",\n              \"range\": true,\n              \"refId\": \"A\"\n            }\n          ],\n          \"title\": \"Number of Get queries served by L1\",\n          \"type\": \"timeseries\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"fieldConfig\": {\n            \"defaults\": {\n              \"color\": {\n                \"mode\": \"palette-classic\"\n              },\n              \"custom\": {\n                \"axisBorderShow\": false,\n                \"axisCenteredZero\": false,\n                \"axisColorMode\": \"text\",\n                \"axisLabel\": \"\",\n                \"axisPlacement\": \"left\",\n                \"barAlignment\": 0,\n                \"barWidthFactor\": 0.6,\n                \"drawStyle\": \"bars\",\n                \"fillOpacity\": 50,\n                \"gradientMode\": \"none\",\n                \"hideFrom\": {\n                  \"legend\": false,\n                  \"tooltip\": false,\n                  \"viz\": false\n                },\n                \"insertNulls\": false,\n                \"lineInterpolation\": \"linear\",\n                \"lineWidth\": 1,\n                \"pointSize\": 5,\n                \"scaleDistribution\": {\n                  \"type\": \"linear\"\n                },\n                \"showPoints\": \"never\",\n                \"spanNulls\": false,\n                \"stacking\": {\n                  \"group\": \"A\",\n                  \"mode\": \"normal\"\n                },\n                \"thresholdsStyle\": {\n                  \"mode\": \"off\"\n                }\n              },\n              \"mappings\": [],\n              \"thresholds\": {\n                \"mode\": \"absolute\",\n                \"steps\": [\n                  {\n                    \"color\": \"green\"\n                  },\n                  {\n                    \"color\": \"red\",\n                    \"value\": 80\n                  }\n                ]\n              },\n              \"unit\": \"none\"\n            },\n            \"overrides\": []\n          },\n          \"gridPos\": {\n            \"h\": 9,\n            \"w\": 12,\n            \"x\": 0,\n            \"y\": 29410\n          },\n          \"id\": 224,\n          \"options\": {\n            \"legend\": {\n              \"calcs\": [\n                \"min\",\n                \"max\",\n                \"mean\",\n                \"last\"\n              ],\n              \"displayMode\": \"table\",\n              \"placement\": \"bottom\",\n              \"showLegend\": true,\n              \"sortBy\": \"Max\",\n              \"sortDesc\": true\n            },\n            \"tooltip\": {\n              \"mode\": \"single\",\n              \"sort\": \"none\"\n            }\n          },\n          \"pluginVersion\": \"11.3.0\",\n          \"targets\": [\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"PBFA97CFB590B2093\"\n              },\n              \"editorMode\": \"code\",\n              \"exemplar\": false,\n              \"expr\": \"irate (rocksdb_get_hit_l2_and_up{instance=~\\\"$system\\\"}[1m])\",\n              \"hide\": false,\n              \"instant\": false,\n              \"interval\": \"\",\n              \"legendFormat\": \"#Get() served by L2 and up - {{instance}}\",\n              \"range\": true,\n              \"refId\": \"C\"\n            }\n          ],\n          \"title\": \"Number of Get queries served by L2 and up\",\n          \"type\": \"timeseries\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"fieldConfig\": {\n            \"defaults\": {\n              \"color\": {\n                \"mode\": \"palette-classic\"\n              },\n              \"custom\": {\n                \"axisBorderShow\": false,\n                \"axisCenteredZero\": false,\n                \"axisColorMode\": \"text\",\n                \"axisLabel\": \"\",\n                \"axisPlacement\": \"left\",\n                \"barAlignment\": 0,\n                \"barWidthFactor\": 0.6,\n                \"drawStyle\": \"line\",\n                \"fillOpacity\": 0,\n                \"gradientMode\": \"none\",\n                \"hideFrom\": {\n                  \"legend\": false,\n                  \"tooltip\": false,\n                  \"viz\": false\n                },\n                \"insertNulls\": false,\n                \"lineInterpolation\": \"linear\",\n                \"lineWidth\": 1,\n                \"pointSize\": 5,\n                \"scaleDistribution\": {\n                  \"type\": \"linear\"\n                },\n                \"showPoints\": \"auto\",\n                \"spanNulls\": false,\n                \"stacking\": {\n                  \"group\": \"A\",\n                  \"mode\": \"none\"\n                },\n                \"thresholdsStyle\": {\n                  \"mode\": \"off\"\n                }\n              },\n              \"mappings\": [],\n              \"thresholds\": {\n                \"mode\": \"absolute\",\n                \"steps\": [\n                  {\n                    \"color\": \"green\"\n                  },\n                  {\n                    \"color\": \"red\",\n                    \"value\": 80\n                  }\n                ]\n              },\n              \"unit\": \"µs\"\n            },\n            \"overrides\": []\n          },\n          \"gridPos\": {\n            \"h\": 9,\n            \"w\": 12,\n            \"x\": 12,\n            \"y\": 29410\n          },\n          \"id\": 166,\n          \"options\": {\n            \"legend\": {\n              \"calcs\": [\n                \"min\",\n                \"max\",\n                \"mean\",\n                \"last\"\n              ],\n              \"displayMode\": \"table\",\n              \"placement\": \"bottom\",\n              \"showLegend\": true,\n              \"sortBy\": \"Mean\",\n              \"sortDesc\": true\n            },\n            \"tooltip\": {\n              \"mode\": \"single\",\n              \"sort\": \"none\"\n            }\n          },\n          \"pluginVersion\": \"11.3.0\",\n          \"targets\": [\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"PBFA97CFB590B2093\"\n              },\n              \"editorMode\": \"code\",\n              \"exemplar\": true,\n              \"expr\": \"rocksdb_read_block_get_micros{instance=~\\\"$system\\\", quantile=\\\"0.5\\\"}\",\n              \"interval\": \"\",\n              \"legendFormat\": \"quantile=\\\"0.5\\\" - {{instance}}\",\n              \"range\": true,\n              \"refId\": \"A\"\n            }\n          ],\n          \"title\": \"RocksDB Block Get Latency 50th Percentile\",\n          \"type\": \"timeseries\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"fieldConfig\": {\n            \"defaults\": {\n              \"color\": {\n                \"mode\": \"palette-classic\"\n              },\n              \"custom\": {\n                \"axisBorderShow\": false,\n                \"axisCenteredZero\": false,\n                \"axisColorMode\": \"text\",\n                \"axisLabel\": \"\",\n                \"axisPlacement\": \"left\",\n                \"barAlignment\": 0,\n                \"barWidthFactor\": 0.6,\n                \"drawStyle\": \"line\",\n                \"fillOpacity\": 0,\n                \"gradientMode\": \"none\",\n                \"hideFrom\": {\n                  \"legend\": false,\n                  \"tooltip\": false,\n                  \"viz\": false\n                },\n                \"insertNulls\": false,\n                \"lineInterpolation\": \"linear\",\n                \"lineWidth\": 1,\n                \"pointSize\": 5,\n                \"scaleDistribution\": {\n                  \"type\": \"linear\"\n                },\n                \"showPoints\": \"auto\",\n                \"spanNulls\": false,\n                \"stacking\": {\n                  \"group\": \"A\",\n                  \"mode\": \"none\"\n                },\n                \"thresholdsStyle\": {\n                  \"mode\": \"off\"\n                }\n              },\n              \"mappings\": [],\n              \"thresholds\": {\n                \"mode\": \"absolute\",\n                \"steps\": [\n                  {\n                    \"color\": \"green\"\n                  },\n                  {\n                    \"color\": \"red\",\n                    \"value\": 80\n                  }\n                ]\n              },\n              \"unit\": \"µs\"\n            },\n            \"overrides\": []\n          },\n          \"gridPos\": {\n            \"h\": 9,\n            \"w\": 12,\n            \"x\": 0,\n            \"y\": 29419\n          },\n          \"id\": 353,\n          \"options\": {\n            \"legend\": {\n              \"calcs\": [\n                \"min\",\n                \"max\",\n                \"mean\",\n                \"last\"\n              ],\n              \"displayMode\": \"table\",\n              \"placement\": \"bottom\",\n              \"showLegend\": true\n            },\n            \"tooltip\": {\n              \"mode\": \"single\",\n              \"sort\": \"none\"\n            }\n          },\n          \"pluginVersion\": \"11.3.0\",\n          \"targets\": [\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"PBFA97CFB590B2093\"\n              },\n              \"editorMode\": \"code\",\n              \"exemplar\": true,\n              \"expr\": \"rocksdb_read_block_get_micros{instance=~\\\"$system\\\", quantile=\\\"0.95\\\"}\",\n              \"interval\": \"\",\n              \"legendFormat\": \"quantile=\\\"0.95\\\" - {{instance}}\",\n              \"range\": true,\n              \"refId\": \"A\"\n            }\n          ],\n          \"title\": \"RocksDB Block Get Latency 95th Percentile\",\n          \"type\": \"timeseries\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"fieldConfig\": {\n            \"defaults\": {\n              \"color\": {\n                \"mode\": \"palette-classic\"\n              },\n              \"custom\": {\n                \"axisBorderShow\": false,\n                \"axisCenteredZero\": false,\n                \"axisColorMode\": \"text\",\n                \"axisLabel\": \"\",\n                \"axisPlacement\": \"left\",\n                \"barAlignment\": 0,\n                \"barWidthFactor\": 0.6,\n                \"drawStyle\": \"line\",\n                \"fillOpacity\": 0,\n                \"gradientMode\": \"none\",\n                \"hideFrom\": {\n                  \"legend\": false,\n                  \"tooltip\": false,\n                  \"viz\": false\n                },\n                \"insertNulls\": false,\n                \"lineInterpolation\": \"linear\",\n                \"lineWidth\": 1,\n                \"pointSize\": 5,\n                \"scaleDistribution\": {\n                  \"type\": \"linear\"\n                },\n                \"showPoints\": \"auto\",\n                \"spanNulls\": false,\n                \"stacking\": {\n                  \"group\": \"A\",\n                  \"mode\": \"none\"\n                },\n                \"thresholdsStyle\": {\n                  \"mode\": \"off\"\n                }\n              },\n              \"mappings\": [],\n              \"thresholds\": {\n                \"mode\": \"absolute\",\n                \"steps\": [\n                  {\n                    \"color\": \"green\"\n                  },\n                  {\n                    \"color\": \"red\",\n                    \"value\": 80\n                  }\n                ]\n              },\n              \"unit\": \"µs\"\n            },\n            \"overrides\": []\n          },\n          \"gridPos\": {\n            \"h\": 9,\n            \"w\": 12,\n            \"x\": 12,\n            \"y\": 29419\n          },\n          \"id\": 223,\n          \"options\": {\n            \"legend\": {\n              \"calcs\": [\n                \"min\",\n                \"max\",\n                \"mean\",\n                \"last\"\n              ],\n              \"displayMode\": \"table\",\n              \"placement\": \"bottom\",\n              \"showLegend\": true\n            },\n            \"tooltip\": {\n              \"mode\": \"single\",\n              \"sort\": \"none\"\n            }\n          },\n          \"pluginVersion\": \"11.3.0\",\n          \"targets\": [\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"PBFA97CFB590B2093\"\n              },\n              \"editorMode\": \"code\",\n              \"exemplar\": true,\n              \"expr\": \"rocksdb_read_block_get_micros{instance=~\\\"$system\\\", quantile=\\\"0.99\\\"}\",\n              \"interval\": \"\",\n              \"legendFormat\": \"quantile=\\\"0.99\\\" - {{instance}}\",\n              \"range\": true,\n              \"refId\": \"A\"\n            }\n          ],\n          \"title\": \"RocksDB Block Get Latency 99th Percentile\",\n          \"type\": \"timeseries\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"fieldConfig\": {\n            \"defaults\": {\n              \"color\": {\n                \"mode\": \"palette-classic\"\n              },\n              \"custom\": {\n                \"axisBorderShow\": false,\n                \"axisCenteredZero\": false,\n                \"axisColorMode\": \"text\",\n                \"axisLabel\": \"\",\n                \"axisPlacement\": \"left\",\n                \"barAlignment\": 0,\n                \"barWidthFactor\": 0.6,\n                \"drawStyle\": \"line\",\n                \"fillOpacity\": 0,\n                \"gradientMode\": \"none\",\n                \"hideFrom\": {\n                  \"legend\": false,\n                  \"tooltip\": false,\n                  \"viz\": false\n                },\n                \"insertNulls\": false,\n                \"lineInterpolation\": \"linear\",\n                \"lineWidth\": 1,\n                \"pointSize\": 5,\n                \"scaleDistribution\": {\n                  \"type\": \"linear\"\n                },\n                \"showPoints\": \"auto\",\n                \"spanNulls\": false,\n                \"stacking\": {\n                  \"group\": \"A\",\n                  \"mode\": \"none\"\n                },\n                \"thresholdsStyle\": {\n                  \"mode\": \"off\"\n                }\n              },\n              \"mappings\": [],\n              \"thresholds\": {\n                \"mode\": \"absolute\",\n                \"steps\": [\n                  {\n                    \"color\": \"green\"\n                  },\n                  {\n                    \"color\": \"red\",\n                    \"value\": 80\n                  }\n                ]\n              },\n              \"unit\": \"µs\"\n            },\n            \"overrides\": []\n          },\n          \"gridPos\": {\n            \"h\": 9,\n            \"w\": 12,\n            \"x\": 0,\n            \"y\": 29428\n          },\n          \"id\": 168,\n          \"options\": {\n            \"legend\": {\n              \"calcs\": [\n                \"min\",\n                \"max\",\n                \"mean\",\n                \"last\"\n              ],\n              \"displayMode\": \"table\",\n              \"placement\": \"bottom\",\n              \"showLegend\": true,\n              \"sortBy\": \"Mean\",\n              \"sortDesc\": false\n            },\n            \"tooltip\": {\n              \"mode\": \"single\",\n              \"sort\": \"none\"\n            }\n          },\n          \"pluginVersion\": \"11.3.0\",\n          \"targets\": [\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"PBFA97CFB590B2093\"\n              },\n              \"exemplar\": true,\n              \"expr\": \"rocksdb_sst_read_micros{instance=~\\\"$system\\\", quantile=\\\"0.5\\\"}\",\n              \"interval\": \"\",\n              \"legendFormat\": \"quantile=\\\"0.5\\\" - {{instance}}\",\n              \"refId\": \"A\"\n            }\n          ],\n          \"title\": \"SST Read Latency 50th Percentile\",\n          \"type\": \"timeseries\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"fieldConfig\": {\n            \"defaults\": {\n              \"color\": {\n                \"mode\": \"palette-classic\"\n              },\n              \"custom\": {\n                \"axisBorderShow\": false,\n                \"axisCenteredZero\": false,\n                \"axisColorMode\": \"text\",\n                \"axisLabel\": \"\",\n                \"axisPlacement\": \"left\",\n                \"barAlignment\": 0,\n                \"barWidthFactor\": 0.6,\n                \"drawStyle\": \"line\",\n                \"fillOpacity\": 0,\n                \"gradientMode\": \"none\",\n                \"hideFrom\": {\n                  \"legend\": false,\n                  \"tooltip\": false,\n                  \"viz\": false\n                },\n                \"insertNulls\": false,\n                \"lineInterpolation\": \"linear\",\n                \"lineWidth\": 1,\n                \"pointSize\": 5,\n                \"scaleDistribution\": {\n                  \"type\": \"linear\"\n                },\n                \"showPoints\": \"auto\",\n                \"spanNulls\": false,\n                \"stacking\": {\n                  \"group\": \"A\",\n                  \"mode\": \"none\"\n                },\n                \"thresholdsStyle\": {\n                  \"mode\": \"off\"\n                }\n              },\n              \"mappings\": [],\n              \"thresholds\": {\n                \"mode\": \"absolute\",\n                \"steps\": [\n                  {\n                    \"color\": \"green\"\n                  },\n                  {\n                    \"color\": \"red\",\n                    \"value\": 80\n                  }\n                ]\n              },\n              \"unit\": \"µs\"\n            },\n            \"overrides\": []\n          },\n          \"gridPos\": {\n            \"h\": 9,\n            \"w\": 12,\n            \"x\": 12,\n            \"y\": 29428\n          },\n          \"id\": 226,\n          \"options\": {\n            \"legend\": {\n              \"calcs\": [\n                \"min\",\n                \"max\",\n                \"mean\",\n                \"last\"\n              ],\n              \"displayMode\": \"table\",\n              \"placement\": \"bottom\",\n              \"showLegend\": true\n            },\n            \"tooltip\": {\n              \"mode\": \"single\",\n              \"sort\": \"none\"\n            }\n          },\n          \"pluginVersion\": \"11.3.0\",\n          \"targets\": [\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"PBFA97CFB590B2093\"\n              },\n              \"exemplar\": true,\n              \"expr\": \"rocksdb_sst_read_micros{instance=~\\\"$system\\\", quantile=\\\"0.95\\\"}\",\n              \"hide\": false,\n              \"interval\": \"\",\n              \"legendFormat\": \" quantile=\\\"0.95\\\" - {{instance}}\",\n              \"refId\": \"B\"\n            }\n          ],\n          \"title\": \"SST Read Latency 95th Percentile\",\n          \"type\": \"timeseries\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"fieldConfig\": {\n            \"defaults\": {\n              \"color\": {\n                \"mode\": \"palette-classic\"\n              },\n              \"custom\": {\n                \"axisBorderShow\": false,\n                \"axisCenteredZero\": false,\n                \"axisColorMode\": \"text\",\n                \"axisLabel\": \"\",\n                \"axisPlacement\": \"left\",\n                \"barAlignment\": 0,\n                \"barWidthFactor\": 0.6,\n                \"drawStyle\": \"line\",\n                \"fillOpacity\": 0,\n                \"gradientMode\": \"none\",\n                \"hideFrom\": {\n                  \"legend\": false,\n                  \"tooltip\": false,\n                  \"viz\": false\n                },\n                \"insertNulls\": false,\n                \"lineInterpolation\": \"linear\",\n                \"lineWidth\": 1,\n                \"pointSize\": 5,\n                \"scaleDistribution\": {\n                  \"type\": \"linear\"\n                },\n                \"showPoints\": \"auto\",\n                \"spanNulls\": false,\n                \"stacking\": {\n                  \"group\": \"A\",\n                  \"mode\": \"none\"\n                },\n                \"thresholdsStyle\": {\n                  \"mode\": \"off\"\n                }\n              },\n              \"mappings\": [],\n              \"thresholds\": {\n                \"mode\": \"absolute\",\n                \"steps\": [\n                  {\n                    \"color\": \"green\"\n                  },\n                  {\n                    \"color\": \"red\",\n                    \"value\": 80\n                  }\n                ]\n              },\n              \"unit\": \"µs\"\n            },\n            \"overrides\": []\n          },\n          \"gridPos\": {\n            \"h\": 9,\n            \"w\": 12,\n            \"x\": 0,\n            \"y\": 29437\n          },\n          \"id\": 227,\n          \"options\": {\n            \"legend\": {\n              \"calcs\": [\n                \"min\",\n                \"max\",\n                \"mean\",\n                \"last\"\n              ],\n              \"displayMode\": \"table\",\n              \"placement\": \"bottom\",\n              \"showLegend\": true,\n              \"sortBy\": \"Mean\",\n              \"sortDesc\": false\n            },\n            \"tooltip\": {\n              \"mode\": \"single\",\n              \"sort\": \"none\"\n            }\n          },\n          \"pluginVersion\": \"11.3.0\",\n          \"targets\": [\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"PBFA97CFB590B2093\"\n              },\n              \"exemplar\": true,\n              \"expr\": \"rocksdb_sst_read_micros{instance=~\\\"$system\\\", quantile=\\\"0.99\\\"}\",\n              \"hide\": false,\n              \"interval\": \"\",\n              \"legendFormat\": \" quantile=\\\"0.99\\\" - {{instance}}\",\n              \"refId\": \"C\"\n            }\n          ],\n          \"title\": \"SST Read Latency 99th Percentile\",\n          \"type\": \"timeseries\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"fieldConfig\": {\n            \"defaults\": {\n              \"color\": {\n                \"mode\": \"palette-classic\"\n              },\n              \"custom\": {\n                \"axisBorderShow\": false,\n                \"axisCenteredZero\": false,\n                \"axisColorMode\": \"text\",\n                \"axisLabel\": \"\",\n                \"axisPlacement\": \"left\",\n                \"barAlignment\": 0,\n                \"barWidthFactor\": 0.6,\n                \"drawStyle\": \"bars\",\n                \"fillOpacity\": 50,\n                \"gradientMode\": \"none\",\n                \"hideFrom\": {\n                  \"legend\": false,\n                  \"tooltip\": false,\n                  \"viz\": false\n                },\n                \"insertNulls\": false,\n                \"lineInterpolation\": \"linear\",\n                \"lineWidth\": 1,\n                \"pointSize\": 5,\n                \"scaleDistribution\": {\n                  \"type\": \"linear\"\n                },\n                \"showPoints\": \"auto\",\n                \"spanNulls\": false,\n                \"stacking\": {\n                  \"group\": \"A\",\n                  \"mode\": \"normal\"\n                },\n                \"thresholdsStyle\": {\n                  \"mode\": \"off\"\n                }\n              },\n              \"mappings\": [],\n              \"thresholds\": {\n                \"mode\": \"absolute\",\n                \"steps\": [\n                  {\n                    \"color\": \"green\"\n                  },\n                  {\n                    \"color\": \"red\",\n                    \"value\": 80\n                  }\n                ]\n              },\n              \"unit\": \"none\"\n            },\n            \"overrides\": []\n          },\n          \"gridPos\": {\n            \"h\": 9,\n            \"w\": 12,\n            \"x\": 12,\n            \"y\": 29437\n          },\n          \"id\": 170,\n          \"options\": {\n            \"legend\": {\n              \"calcs\": [\n                \"min\",\n                \"max\",\n                \"mean\",\n                \"last\"\n              ],\n              \"displayMode\": \"table\",\n              \"placement\": \"bottom\",\n              \"showLegend\": true,\n              \"sortBy\": \"Last\",\n              \"sortDesc\": true\n            },\n            \"tooltip\": {\n              \"mode\": \"single\",\n              \"sort\": \"none\"\n            }\n          },\n          \"pluginVersion\": \"11.3.0\",\n          \"targets\": [\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"PBFA97CFB590B2093\"\n              },\n              \"editorMode\": \"code\",\n              \"exemplar\": false,\n              \"expr\": \"irate(rocksdb_number_keys_read{instance=~\\\"$system\\\"}[1m])\",\n              \"instant\": false,\n              \"interval\": \"\",\n              \"legendFormat\": \"Number of keys read - {{instance}}\",\n              \"range\": true,\n              \"refId\": \"A\"\n            }\n          ],\n          \"title\": \"Number of read keys (AVG)\",\n          \"type\": \"timeseries\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"fieldConfig\": {\n            \"defaults\": {\n              \"color\": {\n                \"mode\": \"palette-classic\"\n              },\n              \"custom\": {\n                \"axisBorderShow\": false,\n                \"axisCenteredZero\": false,\n                \"axisColorMode\": \"text\",\n                \"axisLabel\": \"\",\n                \"axisPlacement\": \"auto\",\n                \"barAlignment\": 0,\n                \"barWidthFactor\": 0.6,\n                \"drawStyle\": \"line\",\n                \"fillOpacity\": 0,\n                \"gradientMode\": \"none\",\n                \"hideFrom\": {\n                  \"legend\": false,\n                  \"tooltip\": false,\n                  \"viz\": false\n                },\n                \"insertNulls\": false,\n                \"lineInterpolation\": \"linear\",\n                \"lineWidth\": 1,\n                \"pointSize\": 5,\n                \"scaleDistribution\": {\n                  \"type\": \"linear\"\n                },\n                \"showPoints\": \"auto\",\n                \"spanNulls\": false,\n                \"stacking\": {\n                  \"group\": \"A\",\n                  \"mode\": \"none\"\n                },\n                \"thresholdsStyle\": {\n                  \"mode\": \"off\"\n                }\n              },\n              \"mappings\": [],\n              \"thresholds\": {\n                \"mode\": \"absolute\",\n                \"steps\": [\n                  {\n                    \"color\": \"green\"\n                  },\n                  {\n                    \"color\": \"red\",\n                    \"value\": 80\n                  }\n                ]\n              },\n              \"unit\": \"s\"\n            },\n            \"overrides\": []\n          },\n          \"gridPos\": {\n            \"h\": 9,\n            \"w\": 12,\n            \"x\": 0,\n            \"y\": 29446\n          },\n          \"id\": 172,\n          \"options\": {\n            \"legend\": {\n              \"calcs\": [\n                \"min\",\n                \"max\",\n                \"mean\",\n                \"last\"\n              ],\n              \"displayMode\": \"table\",\n              \"placement\": \"bottom\",\n              \"showLegend\": true,\n              \"sortBy\": \"Mean\",\n              \"sortDesc\": true\n            },\n            \"tooltip\": {\n              \"mode\": \"single\",\n              \"sort\": \"none\"\n            }\n          },\n          \"pluginVersion\": \"11.3.0\",\n          \"targets\": [\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"PBFA97CFB590B2093\"\n              },\n              \"editorMode\": \"code\",\n              \"exemplar\": true,\n              \"expr\": \"besu_rocksdb_write_latency_seconds{database=\\\"blockchain\\\",instance=~\\\"$system\\\",quantile=\\\"0.5\\\"}\",\n              \"interval\": \"\",\n              \"legendFormat\": \"Quantile 0.5 - instance {{instance}}\",\n              \"range\": true,\n              \"refId\": \"A\"\n            }\n          ],\n          \"title\": \"RocksDB write latency 50th Percentile\",\n          \"type\": \"timeseries\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"fieldConfig\": {\n            \"defaults\": {\n              \"color\": {\n                \"mode\": \"palette-classic\"\n              },\n              \"custom\": {\n                \"axisBorderShow\": false,\n                \"axisCenteredZero\": false,\n                \"axisColorMode\": \"text\",\n                \"axisLabel\": \"\",\n                \"axisPlacement\": \"auto\",\n                \"barAlignment\": 0,\n                \"barWidthFactor\": 0.6,\n                \"drawStyle\": \"line\",\n                \"fillOpacity\": 0,\n                \"gradientMode\": \"none\",\n                \"hideFrom\": {\n                  \"legend\": false,\n                  \"tooltip\": false,\n                  \"viz\": false\n                },\n                \"insertNulls\": false,\n                \"lineInterpolation\": \"linear\",\n                \"lineWidth\": 1,\n                \"pointSize\": 5,\n                \"scaleDistribution\": {\n                  \"type\": \"linear\"\n                },\n                \"showPoints\": \"auto\",\n                \"spanNulls\": false,\n                \"stacking\": {\n                  \"group\": \"A\",\n                  \"mode\": \"none\"\n                },\n                \"thresholdsStyle\": {\n                  \"mode\": \"off\"\n                }\n              },\n              \"mappings\": [],\n              \"thresholds\": {\n                \"mode\": \"absolute\",\n                \"steps\": [\n                  {\n                    \"color\": \"green\"\n                  },\n                  {\n                    \"color\": \"red\",\n                    \"value\": 80\n                  }\n                ]\n              },\n              \"unit\": \"s\"\n            },\n            \"overrides\": []\n          },\n          \"gridPos\": {\n            \"h\": 9,\n            \"w\": 12,\n            \"x\": 12,\n            \"y\": 29446\n          },\n          \"id\": 228,\n          \"options\": {\n            \"legend\": {\n              \"calcs\": [\n                \"min\",\n                \"max\",\n                \"mean\",\n                \"last\"\n              ],\n              \"displayMode\": \"table\",\n              \"placement\": \"bottom\",\n              \"showLegend\": true\n            },\n            \"tooltip\": {\n              \"mode\": \"single\",\n              \"sort\": \"none\"\n            }\n          },\n          \"pluginVersion\": \"11.3.0\",\n          \"targets\": [\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"PBFA97CFB590B2093\"\n              },\n              \"editorMode\": \"code\",\n              \"exemplar\": true,\n              \"expr\": \"besu_rocksdb_write_latency_seconds{database=\\\"blockchain\\\",quantile=\\\"0.95\\\",instance=~\\\"$system\\\"}\",\n              \"hide\": false,\n              \"interval\": \"\",\n              \"legendFormat\": \"Quantile 0.95 - instance {{instance}}\",\n              \"range\": true,\n              \"refId\": \"B\"\n            }\n          ],\n          \"title\": \"RocksDB write latency 95th Percentile\",\n          \"type\": \"timeseries\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"fieldConfig\": {\n            \"defaults\": {\n              \"color\": {\n                \"mode\": \"palette-classic\"\n              },\n              \"custom\": {\n                \"axisBorderShow\": false,\n                \"axisCenteredZero\": false,\n                \"axisColorMode\": \"text\",\n                \"axisLabel\": \"\",\n                \"axisPlacement\": \"auto\",\n                \"barAlignment\": 0,\n                \"barWidthFactor\": 0.6,\n                \"drawStyle\": \"line\",\n                \"fillOpacity\": 0,\n                \"gradientMode\": \"none\",\n                \"hideFrom\": {\n                  \"legend\": false,\n                  \"tooltip\": false,\n                  \"viz\": false\n                },\n                \"insertNulls\": false,\n                \"lineInterpolation\": \"linear\",\n                \"lineWidth\": 1,\n                \"pointSize\": 5,\n                \"scaleDistribution\": {\n                  \"type\": \"linear\"\n                },\n                \"showPoints\": \"auto\",\n                \"spanNulls\": false,\n                \"stacking\": {\n                  \"group\": \"A\",\n                  \"mode\": \"none\"\n                },\n                \"thresholdsStyle\": {\n                  \"mode\": \"off\"\n                }\n              },\n              \"mappings\": [],\n              \"thresholds\": {\n                \"mode\": \"absolute\",\n                \"steps\": [\n                  {\n                    \"color\": \"green\"\n                  },\n                  {\n                    \"color\": \"red\",\n                    \"value\": 80\n                  }\n                ]\n              },\n              \"unit\": \"s\"\n            },\n            \"overrides\": []\n          },\n          \"gridPos\": {\n            \"h\": 9,\n            \"w\": 12,\n            \"x\": 0,\n            \"y\": 29455\n          },\n          \"id\": 229,\n          \"options\": {\n            \"legend\": {\n              \"calcs\": [\n                \"min\",\n                \"max\",\n                \"mean\",\n                \"last\"\n              ],\n              \"displayMode\": \"table\",\n              \"placement\": \"bottom\",\n              \"showLegend\": true\n            },\n            \"tooltip\": {\n              \"mode\": \"single\",\n              \"sort\": \"none\"\n            }\n          },\n          \"pluginVersion\": \"11.3.0\",\n          \"targets\": [\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"PBFA97CFB590B2093\"\n              },\n              \"editorMode\": \"code\",\n              \"exemplar\": true,\n              \"expr\": \"besu_rocksdb_write_latency_seconds{database=\\\"blockchain\\\",instance=~\\\"$system\\\", quantile=\\\"0.99\\\"}\",\n              \"hide\": false,\n              \"interval\": \"\",\n              \"legendFormat\": \"Quantile 0.99 - instance {{instance}}\",\n              \"range\": true,\n              \"refId\": \"C\"\n            }\n          ],\n          \"title\": \"RocksDB write latency 99th Percentile\",\n          \"type\": \"timeseries\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"fieldConfig\": {\n            \"defaults\": {\n              \"color\": {\n                \"mode\": \"palette-classic\"\n              },\n              \"custom\": {\n                \"axisBorderShow\": false,\n                \"axisCenteredZero\": false,\n                \"axisColorMode\": \"text\",\n                \"axisLabel\": \"\",\n                \"axisPlacement\": \"left\",\n                \"axisSoftMin\": 0,\n                \"barAlignment\": 0,\n                \"barWidthFactor\": 0.6,\n                \"drawStyle\": \"bars\",\n                \"fillOpacity\": 50,\n                \"gradientMode\": \"none\",\n                \"hideFrom\": {\n                  \"legend\": false,\n                  \"tooltip\": false,\n                  \"viz\": false\n                },\n                \"insertNulls\": false,\n                \"lineInterpolation\": \"linear\",\n                \"lineWidth\": 1,\n                \"pointSize\": 5,\n                \"scaleDistribution\": {\n                  \"type\": \"linear\"\n                },\n                \"showPoints\": \"auto\",\n                \"spanNulls\": false,\n                \"stacking\": {\n                  \"group\": \"A\",\n                  \"mode\": \"normal\"\n                },\n                \"thresholdsStyle\": {\n                  \"mode\": \"off\"\n                }\n              },\n              \"mappings\": [],\n              \"thresholds\": {\n                \"mode\": \"absolute\",\n                \"steps\": [\n                  {\n                    \"color\": \"green\"\n                  },\n                  {\n                    \"color\": \"red\",\n                    \"value\": 80\n                  }\n                ]\n              },\n              \"unit\": \"bytes\"\n            },\n            \"overrides\": []\n          },\n          \"gridPos\": {\n            \"h\": 9,\n            \"w\": 12,\n            \"x\": 12,\n            \"y\": 29455\n          },\n          \"id\": 174,\n          \"options\": {\n            \"legend\": {\n              \"calcs\": [\n                \"min\",\n                \"max\",\n                \"mean\",\n                \"last\"\n              ],\n              \"displayMode\": \"table\",\n              \"placement\": \"bottom\",\n              \"showLegend\": true,\n              \"sortBy\": \"Last\",\n              \"sortDesc\": false\n            },\n            \"tooltip\": {\n              \"mode\": \"single\",\n              \"sort\": \"none\"\n            }\n          },\n          \"pluginVersion\": \"11.3.0\",\n          \"targets\": [\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"PBFA97CFB590B2093\"\n              },\n              \"editorMode\": \"code\",\n              \"exemplar\": true,\n              \"expr\": \"rocksdb_bytes_per_write{quantile=\\\"0.5\\\", instance=~\\\"$system\\\"}\",\n              \"hide\": false,\n              \"interval\": \"\",\n              \"legendFormat\": \" quantile=\\\"0.5\\\" - {{instance}}\",\n              \"range\": true,\n              \"refId\": \"B\"\n            }\n          ],\n          \"title\": \"Number of bytes per RocksDB write 50th Percentile\",\n          \"type\": \"timeseries\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"fieldConfig\": {\n            \"defaults\": {\n              \"color\": {\n                \"mode\": \"palette-classic\"\n              },\n              \"custom\": {\n                \"axisBorderShow\": false,\n                \"axisCenteredZero\": false,\n                \"axisColorMode\": \"text\",\n                \"axisLabel\": \"\",\n                \"axisPlacement\": \"left\",\n                \"axisSoftMin\": 0,\n                \"barAlignment\": 0,\n                \"barWidthFactor\": 0.6,\n                \"drawStyle\": \"bars\",\n                \"fillOpacity\": 50,\n                \"gradientMode\": \"none\",\n                \"hideFrom\": {\n                  \"legend\": false,\n                  \"tooltip\": false,\n                  \"viz\": false\n                },\n                \"insertNulls\": false,\n                \"lineInterpolation\": \"linear\",\n                \"lineWidth\": 1,\n                \"pointSize\": 5,\n                \"scaleDistribution\": {\n                  \"type\": \"linear\"\n                },\n                \"showPoints\": \"auto\",\n                \"spanNulls\": false,\n                \"stacking\": {\n                  \"group\": \"A\",\n                  \"mode\": \"normal\"\n                },\n                \"thresholdsStyle\": {\n                  \"mode\": \"off\"\n                }\n              },\n              \"mappings\": [],\n              \"thresholds\": {\n                \"mode\": \"absolute\",\n                \"steps\": [\n                  {\n                    \"color\": \"green\"\n                  },\n                  {\n                    \"color\": \"red\",\n                    \"value\": 80\n                  }\n                ]\n              },\n              \"unit\": \"bytes\"\n            },\n            \"overrides\": []\n          },\n          \"gridPos\": {\n            \"h\": 9,\n            \"w\": 12,\n            \"x\": 0,\n            \"y\": 29464\n          },\n          \"id\": 230,\n          \"options\": {\n            \"legend\": {\n              \"calcs\": [\n                \"min\",\n                \"max\",\n                \"mean\",\n                \"last\"\n              ],\n              \"displayMode\": \"table\",\n              \"placement\": \"bottom\",\n              \"showLegend\": true,\n              \"sortBy\": \"Last\",\n              \"sortDesc\": false\n            },\n            \"tooltip\": {\n              \"mode\": \"single\",\n              \"sort\": \"none\"\n            }\n          },\n          \"pluginVersion\": \"11.3.0\",\n          \"targets\": [\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"PBFA97CFB590B2093\"\n              },\n              \"editorMode\": \"code\",\n              \"exemplar\": true,\n              \"expr\": \"rocksdb_bytes_per_write{quantile=\\\"0.95\\\", instance=~\\\"$system\\\"}\",\n              \"hide\": false,\n              \"interval\": \"\",\n              \"legendFormat\": \" quantile=\\\"0.95\\\" - {{instance}}\",\n              \"range\": true,\n              \"refId\": \"B\"\n            }\n          ],\n          \"title\": \"Number of bytes per RocksDB write 95th Percentile\",\n          \"type\": \"timeseries\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"fieldConfig\": {\n            \"defaults\": {\n              \"color\": {\n                \"mode\": \"palette-classic\"\n              },\n              \"custom\": {\n                \"axisBorderShow\": false,\n                \"axisCenteredZero\": false,\n                \"axisColorMode\": \"text\",\n                \"axisLabel\": \"\",\n                \"axisPlacement\": \"left\",\n                \"axisSoftMin\": 0,\n                \"barAlignment\": 0,\n                \"barWidthFactor\": 0.6,\n                \"drawStyle\": \"bars\",\n                \"fillOpacity\": 50,\n                \"gradientMode\": \"none\",\n                \"hideFrom\": {\n                  \"legend\": false,\n                  \"tooltip\": false,\n                  \"viz\": false\n                },\n                \"insertNulls\": false,\n                \"lineInterpolation\": \"linear\",\n                \"lineWidth\": 1,\n                \"pointSize\": 5,\n                \"scaleDistribution\": {\n                  \"type\": \"linear\"\n                },\n                \"showPoints\": \"auto\",\n                \"spanNulls\": false,\n                \"stacking\": {\n                  \"group\": \"A\",\n                  \"mode\": \"normal\"\n                },\n                \"thresholdsStyle\": {\n                  \"mode\": \"off\"\n                }\n              },\n              \"mappings\": [],\n              \"thresholds\": {\n                \"mode\": \"absolute\",\n                \"steps\": [\n                  {\n                    \"color\": \"green\"\n                  },\n                  {\n                    \"color\": \"red\",\n                    \"value\": 80\n                  }\n                ]\n              },\n              \"unit\": \"bytes\"\n            },\n            \"overrides\": []\n          },\n          \"gridPos\": {\n            \"h\": 9,\n            \"w\": 12,\n            \"x\": 12,\n            \"y\": 29464\n          },\n          \"id\": 231,\n          \"options\": {\n            \"legend\": {\n              \"calcs\": [\n                \"min\",\n                \"max\",\n                \"mean\",\n                \"last\"\n              ],\n              \"displayMode\": \"table\",\n              \"placement\": \"bottom\",\n              \"showLegend\": true,\n              \"sortBy\": \"Last\",\n              \"sortDesc\": false\n            },\n            \"tooltip\": {\n              \"mode\": \"single\",\n              \"sort\": \"none\"\n            }\n          },\n          \"pluginVersion\": \"11.3.0\",\n          \"targets\": [\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"PBFA97CFB590B2093\"\n              },\n              \"editorMode\": \"code\",\n              \"exemplar\": true,\n              \"expr\": \"rocksdb_bytes_per_write{quantile=\\\"0.99\\\", instance=~\\\"$system\\\"}\",\n              \"hide\": false,\n              \"interval\": \"\",\n              \"legendFormat\": \" quantile=\\\"0.99\\\" - {{instance}}\",\n              \"range\": true,\n              \"refId\": \"B\"\n            }\n          ],\n          \"title\": \"Number of bytes per RocksDB write 99th Percentile\",\n          \"type\": \"timeseries\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"fieldConfig\": {\n            \"defaults\": {\n              \"color\": {\n                \"mode\": \"palette-classic\"\n              },\n              \"custom\": {\n                \"axisBorderShow\": false,\n                \"axisCenteredZero\": false,\n                \"axisColorMode\": \"text\",\n                \"axisLabel\": \"\",\n                \"axisPlacement\": \"left\",\n                \"barAlignment\": 0,\n                \"barWidthFactor\": 0.6,\n                \"drawStyle\": \"bars\",\n                \"fillOpacity\": 50,\n                \"gradientMode\": \"none\",\n                \"hideFrom\": {\n                  \"legend\": false,\n                  \"tooltip\": false,\n                  \"viz\": false\n                },\n                \"insertNulls\": false,\n                \"lineInterpolation\": \"linear\",\n                \"lineWidth\": 1,\n                \"pointSize\": 5,\n                \"scaleDistribution\": {\n                  \"type\": \"linear\"\n                },\n                \"showPoints\": \"auto\",\n                \"spanNulls\": false,\n                \"stacking\": {\n                  \"group\": \"A\",\n                  \"mode\": \"normal\"\n                },\n                \"thresholdsStyle\": {\n                  \"mode\": \"off\"\n                }\n              },\n              \"mappings\": [],\n              \"thresholds\": {\n                \"mode\": \"absolute\",\n                \"steps\": [\n                  {\n                    \"color\": \"green\"\n                  },\n                  {\n                    \"color\": \"red\",\n                    \"value\": 80\n                  }\n                ]\n              },\n              \"unit\": \"short\"\n            },\n            \"overrides\": []\n          },\n          \"gridPos\": {\n            \"h\": 9,\n            \"w\": 12,\n            \"x\": 0,\n            \"y\": 29473\n          },\n          \"id\": 176,\n          \"options\": {\n            \"legend\": {\n              \"calcs\": [\n                \"min\",\n                \"max\",\n                \"mean\",\n                \"last\"\n              ],\n              \"displayMode\": \"table\",\n              \"placement\": \"bottom\",\n              \"showLegend\": true\n            },\n            \"tooltip\": {\n              \"mode\": \"single\",\n              \"sort\": \"none\"\n            }\n          },\n          \"pluginVersion\": \"11.3.0\",\n          \"targets\": [\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"PBFA97CFB590B2093\"\n              },\n              \"exemplar\": true,\n              \"expr\": \"irate (rocksdb_block_cache_add{instance=~\\\"$system\\\"}[1m])\",\n              \"interval\": \"\",\n              \"legendFormat\": \"rocksdb_block_cache_add - {{instance}}\",\n              \"refId\": \"A\"\n            }\n          ],\n          \"title\": \"Number of Blocks added to block cache\",\n          \"type\": \"timeseries\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"fieldConfig\": {\n            \"defaults\": {\n              \"color\": {\n                \"mode\": \"palette-classic\"\n              },\n              \"custom\": {\n                \"axisBorderShow\": false,\n                \"axisCenteredZero\": false,\n                \"axisColorMode\": \"text\",\n                \"axisLabel\": \"\",\n                \"axisPlacement\": \"left\",\n                \"barAlignment\": 0,\n                \"barWidthFactor\": 0.6,\n                \"drawStyle\": \"line\",\n                \"fillOpacity\": 0,\n                \"gradientMode\": \"none\",\n                \"hideFrom\": {\n                  \"legend\": false,\n                  \"tooltip\": false,\n                  \"viz\": false\n                },\n                \"insertNulls\": false,\n                \"lineInterpolation\": \"linear\",\n                \"lineWidth\": 1,\n                \"pointSize\": 5,\n                \"scaleDistribution\": {\n                  \"type\": \"linear\"\n                },\n                \"showPoints\": \"auto\",\n                \"spanNulls\": false,\n                \"stacking\": {\n                  \"group\": \"A\",\n                  \"mode\": \"none\"\n                },\n                \"thresholdsStyle\": {\n                  \"mode\": \"off\"\n                }\n              },\n              \"mappings\": [],\n              \"thresholds\": {\n                \"mode\": \"absolute\",\n                \"steps\": [\n                  {\n                    \"color\": \"green\"\n                  },\n                  {\n                    \"color\": \"red\",\n                    \"value\": 80\n                  }\n                ]\n              },\n              \"unit\": \"short\"\n            },\n            \"overrides\": []\n          },\n          \"gridPos\": {\n            \"h\": 9,\n            \"w\": 12,\n            \"x\": 12,\n            \"y\": 29473\n          },\n          \"id\": 178,\n          \"options\": {\n            \"legend\": {\n              \"calcs\": [\n                \"min\",\n                \"max\",\n                \"mean\",\n                \"last\"\n              ],\n              \"displayMode\": \"table\",\n              \"placement\": \"bottom\",\n              \"showLegend\": true\n            },\n            \"tooltip\": {\n              \"mode\": \"single\",\n              \"sort\": \"none\"\n            }\n          },\n          \"pluginVersion\": \"11.3.0\",\n          \"targets\": [\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"PBFA97CFB590B2093\"\n              },\n              \"editorMode\": \"code\",\n              \"exemplar\": true,\n              \"expr\": \"rocksdb_block_cache_filter_add{instance=~\\\"$system\\\"}\",\n              \"interval\": \"\",\n              \"legendFormat\": \"rocksdb_block_cache_filter_add - {{instance}}\",\n              \"range\": true,\n              \"refId\": \"A\"\n            }\n          ],\n          \"title\": \"Number of Filter blocks added to block cache\",\n          \"type\": \"timeseries\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"fieldConfig\": {\n            \"defaults\": {\n              \"color\": {\n                \"mode\": \"palette-classic\"\n              },\n              \"custom\": {\n                \"axisBorderShow\": false,\n                \"axisCenteredZero\": false,\n                \"axisColorMode\": \"text\",\n                \"axisLabel\": \"\",\n                \"axisPlacement\": \"left\",\n                \"barAlignment\": 0,\n                \"barWidthFactor\": 0.6,\n                \"drawStyle\": \"bars\",\n                \"fillOpacity\": 0,\n                \"gradientMode\": \"none\",\n                \"hideFrom\": {\n                  \"legend\": false,\n                  \"tooltip\": false,\n                  \"viz\": false\n                },\n                \"insertNulls\": false,\n                \"lineInterpolation\": \"linear\",\n                \"lineWidth\": 1,\n                \"pointSize\": 5,\n                \"scaleDistribution\": {\n                  \"type\": \"linear\"\n                },\n                \"showPoints\": \"auto\",\n                \"spanNulls\": false,\n                \"stacking\": {\n                  \"group\": \"A\",\n                  \"mode\": \"none\"\n                },\n                \"thresholdsStyle\": {\n                  \"mode\": \"off\"\n                }\n              },\n              \"mappings\": [],\n              \"thresholds\": {\n                \"mode\": \"absolute\",\n                \"steps\": [\n                  {\n                    \"color\": \"green\"\n                  },\n                  {\n                    \"color\": \"red\",\n                    \"value\": 80\n                  }\n                ]\n              },\n              \"unit\": \"short\"\n            },\n            \"overrides\": []\n          },\n          \"gridPos\": {\n            \"h\": 9,\n            \"w\": 12,\n            \"x\": 0,\n            \"y\": 29482\n          },\n          \"id\": 180,\n          \"options\": {\n            \"legend\": {\n              \"calcs\": [\n                \"min\",\n                \"max\",\n                \"mean\",\n                \"last\"\n              ],\n              \"displayMode\": \"table\",\n              \"placement\": \"bottom\",\n              \"showLegend\": true\n            },\n            \"tooltip\": {\n              \"mode\": \"single\",\n              \"sort\": \"none\"\n            }\n          },\n          \"pluginVersion\": \"11.3.0\",\n          \"targets\": [\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"PBFA97CFB590B2093\"\n              },\n              \"editorMode\": \"code\",\n              \"exemplar\": true,\n              \"expr\": \"irate(rocksdb_block_cache_index_add{instance=~\\\"$system\\\"}[1m])\",\n              \"interval\": \"\",\n              \"legendFormat\": \"rocksdb_block_cache_index_add - {{instance}}\",\n              \"range\": true,\n              \"refId\": \"A\"\n            }\n          ],\n          \"title\": \"Number of Index blocks added to block cache (Avg)\",\n          \"type\": \"timeseries\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"fieldConfig\": {\n            \"defaults\": {\n              \"color\": {\n                \"mode\": \"palette-classic\"\n              },\n              \"custom\": {\n                \"axisBorderShow\": false,\n                \"axisCenteredZero\": false,\n                \"axisColorMode\": \"text\",\n                \"axisLabel\": \"\",\n                \"axisPlacement\": \"left\",\n                \"barAlignment\": 0,\n                \"barWidthFactor\": 0.6,\n                \"drawStyle\": \"line\",\n                \"fillOpacity\": 0,\n                \"gradientMode\": \"none\",\n                \"hideFrom\": {\n                  \"legend\": false,\n                  \"tooltip\": false,\n                  \"viz\": false\n                },\n                \"insertNulls\": false,\n                \"lineInterpolation\": \"linear\",\n                \"lineWidth\": 1,\n                \"pointSize\": 5,\n                \"scaleDistribution\": {\n                  \"type\": \"linear\"\n                },\n                \"showPoints\": \"auto\",\n                \"spanNulls\": false,\n                \"stacking\": {\n                  \"group\": \"A\",\n                  \"mode\": \"none\"\n                },\n                \"thresholdsStyle\": {\n                  \"mode\": \"off\"\n                }\n              },\n              \"mappings\": [],\n              \"thresholds\": {\n                \"mode\": \"absolute\",\n                \"steps\": [\n                  {\n                    \"color\": \"green\"\n                  },\n                  {\n                    \"color\": \"red\",\n                    \"value\": 80\n                  }\n                ]\n              },\n              \"unit\": \"bytes\"\n            },\n            \"overrides\": []\n          },\n          \"gridPos\": {\n            \"h\": 9,\n            \"w\": 12,\n            \"x\": 12,\n            \"y\": 29482\n          },\n          \"id\": 182,\n          \"options\": {\n            \"legend\": {\n              \"calcs\": [\n                \"min\",\n                \"max\",\n                \"mean\",\n                \"last\"\n              ],\n              \"displayMode\": \"table\",\n              \"placement\": \"bottom\",\n              \"showLegend\": true\n            },\n            \"tooltip\": {\n              \"mode\": \"single\",\n              \"sort\": \"none\"\n            }\n          },\n          \"pluginVersion\": \"11.3.0\",\n          \"targets\": [\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"PBFA97CFB590B2093\"\n              },\n              \"exemplar\": true,\n              \"expr\": \"irate (rocksdb_block_cache_bytes_write{instance=~\\\"$system\\\"}[1m])\",\n              \"interval\": \"\",\n              \"legendFormat\": \"rocksdb_block_cache_bytes_write - {{instance}}\",\n              \"refId\": \"A\"\n            }\n          ],\n          \"title\": \"Block cache bytes write (Avg)\",\n          \"type\": \"timeseries\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"fieldConfig\": {\n            \"defaults\": {\n              \"color\": {\n                \"mode\": \"palette-classic\"\n              },\n              \"custom\": {\n                \"axisBorderShow\": false,\n                \"axisCenteredZero\": false,\n                \"axisColorMode\": \"text\",\n                \"axisLabel\": \"\",\n                \"axisPlacement\": \"left\",\n                \"barAlignment\": 0,\n                \"barWidthFactor\": 0.6,\n                \"drawStyle\": \"line\",\n                \"fillOpacity\": 0,\n                \"gradientMode\": \"none\",\n                \"hideFrom\": {\n                  \"legend\": false,\n                  \"tooltip\": false,\n                  \"viz\": false\n                },\n                \"insertNulls\": false,\n                \"lineInterpolation\": \"linear\",\n                \"lineWidth\": 1,\n                \"pointSize\": 5,\n                \"scaleDistribution\": {\n                  \"type\": \"linear\"\n                },\n                \"showPoints\": \"auto\",\n                \"spanNulls\": false,\n                \"stacking\": {\n                  \"group\": \"A\",\n                  \"mode\": \"none\"\n                },\n                \"thresholdsStyle\": {\n                  \"mode\": \"off\"\n                }\n              },\n              \"mappings\": [],\n              \"thresholds\": {\n                \"mode\": \"absolute\",\n                \"steps\": [\n                  {\n                    \"color\": \"green\"\n                  },\n                  {\n                    \"color\": \"red\",\n                    \"value\": 80\n                  }\n                ]\n              },\n              \"unit\": \"bytes\"\n            },\n            \"overrides\": []\n          },\n          \"gridPos\": {\n            \"h\": 9,\n            \"w\": 12,\n            \"x\": 0,\n            \"y\": 29491\n          },\n          \"id\": 184,\n          \"options\": {\n            \"legend\": {\n              \"calcs\": [\n                \"min\",\n                \"max\",\n                \"mean\",\n                \"last\"\n              ],\n              \"displayMode\": \"table\",\n              \"placement\": \"bottom\",\n              \"showLegend\": true\n            },\n            \"tooltip\": {\n              \"mode\": \"single\",\n              \"sort\": \"none\"\n            }\n          },\n          \"pluginVersion\": \"11.3.0\",\n          \"targets\": [\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"PBFA97CFB590B2093\"\n              },\n              \"exemplar\": true,\n              \"expr\": \"irate (rocksdb_block_cache_bytes_read{instance=~\\\"$system\\\"} [1m])\",\n              \"interval\": \"\",\n              \"legendFormat\": \"rocksdb_block_cache_bytes_read - {{instance}}\",\n              \"refId\": \"A\"\n            }\n          ],\n          \"title\": \"Block cache bytes read (Avg)\",\n          \"type\": \"timeseries\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"fieldConfig\": {\n            \"defaults\": {\n              \"color\": {\n                \"mode\": \"palette-classic\"\n              },\n              \"custom\": {\n                \"axisBorderShow\": false,\n                \"axisCenteredZero\": false,\n                \"axisColorMode\": \"text\",\n                \"axisLabel\": \"\",\n                \"axisPlacement\": \"left\",\n                \"barAlignment\": 0,\n                \"barWidthFactor\": 0.6,\n                \"drawStyle\": \"line\",\n                \"fillOpacity\": 0,\n                \"gradientMode\": \"none\",\n                \"hideFrom\": {\n                  \"legend\": false,\n                  \"tooltip\": false,\n                  \"viz\": false\n                },\n                \"insertNulls\": false,\n                \"lineInterpolation\": \"linear\",\n                \"lineWidth\": 1,\n                \"pointSize\": 5,\n                \"scaleDistribution\": {\n                  \"type\": \"linear\"\n                },\n                \"showPoints\": \"auto\",\n                \"spanNulls\": false,\n                \"stacking\": {\n                  \"group\": \"A\",\n                  \"mode\": \"none\"\n                },\n                \"thresholdsStyle\": {\n                  \"mode\": \"off\"\n                }\n              },\n              \"mappings\": [],\n              \"thresholds\": {\n                \"mode\": \"absolute\",\n                \"steps\": [\n                  {\n                    \"color\": \"green\"\n                  },\n                  {\n                    \"color\": \"red\",\n                    \"value\": 80\n                  }\n                ]\n              },\n              \"unit\": \"bytes\"\n            },\n            \"overrides\": []\n          },\n          \"gridPos\": {\n            \"h\": 9,\n            \"w\": 12,\n            \"x\": 12,\n            \"y\": 29491\n          },\n          \"id\": 186,\n          \"options\": {\n            \"legend\": {\n              \"calcs\": [\n                \"min\",\n                \"max\",\n                \"mean\",\n                \"last\"\n              ],\n              \"displayMode\": \"table\",\n              \"placement\": \"bottom\",\n              \"showLegend\": true\n            },\n            \"tooltip\": {\n              \"mode\": \"single\",\n              \"sort\": \"none\"\n            }\n          },\n          \"pluginVersion\": \"11.3.0\",\n          \"targets\": [\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"PBFA97CFB590B2093\"\n              },\n              \"editorMode\": \"code\",\n              \"exemplar\": true,\n              \"expr\": \"rocksdb_block_cache_filter_bytes_insert{instance=~\\\"$system\\\"}\",\n              \"interval\": \"\",\n              \"legendFormat\": \"rocksdb_block_cache_filter_bytes_insert - {{instance}}\",\n              \"range\": true,\n              \"refId\": \"A\"\n            }\n          ],\n          \"title\": \"Block cache filter bytes insert\",\n          \"type\": \"timeseries\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"fieldConfig\": {\n            \"defaults\": {\n              \"color\": {\n                \"mode\": \"palette-classic\"\n              },\n              \"custom\": {\n                \"axisBorderShow\": false,\n                \"axisCenteredZero\": false,\n                \"axisColorMode\": \"text\",\n                \"axisLabel\": \"\",\n                \"axisPlacement\": \"left\",\n                \"barAlignment\": 0,\n                \"barWidthFactor\": 0.6,\n                \"drawStyle\": \"line\",\n                \"fillOpacity\": 0,\n                \"gradientMode\": \"none\",\n                \"hideFrom\": {\n                  \"legend\": false,\n                  \"tooltip\": false,\n                  \"viz\": false\n                },\n                \"insertNulls\": false,\n                \"lineInterpolation\": \"linear\",\n                \"lineWidth\": 1,\n                \"pointSize\": 5,\n                \"scaleDistribution\": {\n                  \"type\": \"linear\"\n                },\n                \"showPoints\": \"auto\",\n                \"spanNulls\": false,\n                \"stacking\": {\n                  \"group\": \"A\",\n                  \"mode\": \"none\"\n                },\n                \"thresholdsStyle\": {\n                  \"mode\": \"off\"\n                }\n              },\n              \"mappings\": [],\n              \"thresholds\": {\n                \"mode\": \"absolute\",\n                \"steps\": [\n                  {\n                    \"color\": \"green\"\n                  },\n                  {\n                    \"color\": \"red\",\n                    \"value\": 80\n                  }\n                ]\n              },\n              \"unit\": \"bytes\"\n            },\n            \"overrides\": []\n          },\n          \"gridPos\": {\n            \"h\": 9,\n            \"w\": 12,\n            \"x\": 0,\n            \"y\": 29500\n          },\n          \"id\": 188,\n          \"options\": {\n            \"legend\": {\n              \"calcs\": [\n                \"min\",\n                \"max\",\n                \"mean\",\n                \"last\"\n              ],\n              \"displayMode\": \"table\",\n              \"placement\": \"bottom\",\n              \"showLegend\": true\n            },\n            \"tooltip\": {\n              \"mode\": \"single\",\n              \"sort\": \"none\"\n            }\n          },\n          \"pluginVersion\": \"11.3.0\",\n          \"targets\": [\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"PBFA97CFB590B2093\"\n              },\n              \"editorMode\": \"code\",\n              \"exemplar\": true,\n              \"expr\": \"rocksdb_block_cache_index_bytes_insert{instance=~\\\"$system\\\"}\",\n              \"interval\": \"\",\n              \"legendFormat\": \"rocksdb_block_cache_index_bytes_insert - {{instance}}\",\n              \"range\": true,\n              \"refId\": \"A\"\n            }\n          ],\n          \"title\": \"Block cache index bytes insert\",\n          \"type\": \"timeseries\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"fieldConfig\": {\n            \"defaults\": {\n              \"color\": {\n                \"mode\": \"palette-classic\"\n              },\n              \"custom\": {\n                \"axisBorderShow\": false,\n                \"axisCenteredZero\": false,\n                \"axisColorMode\": \"text\",\n                \"axisLabel\": \"\",\n                \"axisPlacement\": \"left\",\n                \"barAlignment\": 0,\n                \"barWidthFactor\": 0.6,\n                \"drawStyle\": \"bars\",\n                \"fillOpacity\": 50,\n                \"gradientMode\": \"none\",\n                \"hideFrom\": {\n                  \"legend\": false,\n                  \"tooltip\": false,\n                  \"viz\": false\n                },\n                \"insertNulls\": false,\n                \"lineInterpolation\": \"linear\",\n                \"lineWidth\": 1,\n                \"pointSize\": 5,\n                \"scaleDistribution\": {\n                  \"type\": \"linear\"\n                },\n                \"showPoints\": \"auto\",\n                \"spanNulls\": false,\n                \"stacking\": {\n                  \"group\": \"A\",\n                  \"mode\": \"normal\"\n                },\n                \"thresholdsStyle\": {\n                  \"mode\": \"off\"\n                }\n              },\n              \"mappings\": [],\n              \"thresholds\": {\n                \"mode\": \"absolute\",\n                \"steps\": [\n                  {\n                    \"color\": \"green\"\n                  },\n                  {\n                    \"color\": \"red\",\n                    \"value\": 80\n                  }\n                ]\n              }\n            },\n            \"overrides\": []\n          },\n          \"gridPos\": {\n            \"h\": 9,\n            \"w\": 12,\n            \"x\": 12,\n            \"y\": 29500\n          },\n          \"id\": 232,\n          \"options\": {\n            \"legend\": {\n              \"calcs\": [\n                \"min\",\n                \"max\",\n                \"mean\",\n                \"last\"\n              ],\n              \"displayMode\": \"table\",\n              \"placement\": \"bottom\",\n              \"showLegend\": true\n            },\n            \"tooltip\": {\n              \"mode\": \"single\",\n              \"sort\": \"none\"\n            }\n          },\n          \"pluginVersion\": \"11.3.0\",\n          \"targets\": [\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"PBFA97CFB590B2093\"\n              },\n              \"editorMode\": \"code\",\n              \"exemplar\": true,\n              \"expr\": \"rocksdb_num_files_in_single_compaction{instance=~\\\"$system\\\", quantile=\\\"0.5\\\"}\",\n              \"interval\": \"\",\n              \"legendFormat\": \"{{instance}}\",\n              \"range\": true,\n              \"refId\": \"A\"\n            }\n          ],\n          \"title\": \"Number of files in a single compaction 50th Percentile\",\n          \"type\": \"timeseries\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"fieldConfig\": {\n            \"defaults\": {\n              \"color\": {\n                \"mode\": \"palette-classic\"\n              },\n              \"custom\": {\n                \"axisBorderShow\": false,\n                \"axisCenteredZero\": false,\n                \"axisColorMode\": \"text\",\n                \"axisLabel\": \"\",\n                \"axisPlacement\": \"left\",\n                \"barAlignment\": 0,\n                \"barWidthFactor\": 0.6,\n                \"drawStyle\": \"bars\",\n                \"fillOpacity\": 50,\n                \"gradientMode\": \"none\",\n                \"hideFrom\": {\n                  \"legend\": false,\n                  \"tooltip\": false,\n                  \"viz\": false\n                },\n                \"insertNulls\": false,\n                \"lineInterpolation\": \"linear\",\n                \"lineWidth\": 1,\n                \"pointSize\": 5,\n                \"scaleDistribution\": {\n                  \"type\": \"linear\"\n                },\n                \"showPoints\": \"auto\",\n                \"spanNulls\": false,\n                \"stacking\": {\n                  \"group\": \"A\",\n                  \"mode\": \"normal\"\n                },\n                \"thresholdsStyle\": {\n                  \"mode\": \"off\"\n                }\n              },\n              \"mappings\": [],\n              \"thresholds\": {\n                \"mode\": \"absolute\",\n                \"steps\": [\n                  {\n                    \"color\": \"green\"\n                  },\n                  {\n                    \"color\": \"red\",\n                    \"value\": 80\n                  }\n                ]\n              }\n            },\n            \"overrides\": []\n          },\n          \"gridPos\": {\n            \"h\": 9,\n            \"w\": 12,\n            \"x\": 0,\n            \"y\": 29509\n          },\n          \"id\": 234,\n          \"options\": {\n            \"legend\": {\n              \"calcs\": [\n                \"min\",\n                \"max\",\n                \"mean\",\n                \"last\"\n              ],\n              \"displayMode\": \"table\",\n              \"placement\": \"bottom\",\n              \"showLegend\": true,\n              \"sortBy\": \"Mean\",\n              \"sortDesc\": true\n            },\n            \"tooltip\": {\n              \"mode\": \"single\",\n              \"sort\": \"none\"\n            }\n          },\n          \"pluginVersion\": \"11.3.0\",\n          \"targets\": [\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"PBFA97CFB590B2093\"\n              },\n              \"editorMode\": \"code\",\n              \"exemplar\": true,\n              \"expr\": \"rocksdb_num_files_in_single_compaction{instance=~\\\"$system\\\", quantile=\\\"0.95\\\"}\",\n              \"interval\": \"\",\n              \"legendFormat\": \" {{instance}}\",\n              \"range\": true,\n              \"refId\": \"A\"\n            }\n          ],\n          \"title\": \"Number of files in a single compaction 95th Percentile\",\n          \"type\": \"timeseries\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"fieldConfig\": {\n            \"defaults\": {\n              \"color\": {\n                \"mode\": \"palette-classic\"\n              },\n              \"custom\": {\n                \"axisBorderShow\": false,\n                \"axisCenteredZero\": false,\n                \"axisColorMode\": \"text\",\n                \"axisLabel\": \"\",\n                \"axisPlacement\": \"left\",\n                \"barAlignment\": 0,\n                \"barWidthFactor\": 0.6,\n                \"drawStyle\": \"bars\",\n                \"fillOpacity\": 50,\n                \"gradientMode\": \"none\",\n                \"hideFrom\": {\n                  \"legend\": false,\n                  \"tooltip\": false,\n                  \"viz\": false\n                },\n                \"insertNulls\": false,\n                \"lineInterpolation\": \"linear\",\n                \"lineWidth\": 1,\n                \"pointSize\": 5,\n                \"scaleDistribution\": {\n                  \"type\": \"linear\"\n                },\n                \"showPoints\": \"auto\",\n                \"spanNulls\": false,\n                \"stacking\": {\n                  \"group\": \"A\",\n                  \"mode\": \"normal\"\n                },\n                \"thresholdsStyle\": {\n                  \"mode\": \"off\"\n                }\n              },\n              \"mappings\": [],\n              \"thresholds\": {\n                \"mode\": \"absolute\",\n                \"steps\": [\n                  {\n                    \"color\": \"green\"\n                  },\n                  {\n                    \"color\": \"red\",\n                    \"value\": 80\n                  }\n                ]\n              }\n            },\n            \"overrides\": []\n          },\n          \"gridPos\": {\n            \"h\": 9,\n            \"w\": 12,\n            \"x\": 12,\n            \"y\": 29509\n          },\n          \"id\": 354,\n          \"options\": {\n            \"legend\": {\n              \"calcs\": [\n                \"min\",\n                \"max\",\n                \"mean\",\n                \"last\"\n              ],\n              \"displayMode\": \"table\",\n              \"placement\": \"bottom\",\n              \"showLegend\": true,\n              \"sortBy\": \"Mean\",\n              \"sortDesc\": true\n            },\n            \"tooltip\": {\n              \"mode\": \"single\",\n              \"sort\": \"none\"\n            }\n          },\n          \"pluginVersion\": \"11.3.0\",\n          \"targets\": [\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"PBFA97CFB590B2093\"\n              },\n              \"editorMode\": \"code\",\n              \"exemplar\": true,\n              \"expr\": \"rocksdb_num_files_in_single_compaction{instance=~\\\"$system\\\", quantile=\\\"0.99\\\"}\",\n              \"interval\": \"\",\n              \"legendFormat\": \"{{instance}}\",\n              \"range\": true,\n              \"refId\": \"A\"\n            }\n          ],\n          \"title\": \"Number of files in a single compaction 99th Percentile\",\n          \"type\": \"timeseries\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"description\": \"\",\n          \"fieldConfig\": {\n            \"defaults\": {\n              \"color\": {\n                \"mode\": \"palette-classic\"\n              },\n              \"custom\": {\n                \"axisBorderShow\": false,\n                \"axisCenteredZero\": false,\n                \"axisColorMode\": \"text\",\n                \"axisLabel\": \"\",\n                \"axisPlacement\": \"left\",\n                \"barAlignment\": 0,\n                \"barWidthFactor\": 0.6,\n                \"drawStyle\": \"line\",\n                \"fillOpacity\": 0,\n                \"gradientMode\": \"none\",\n                \"hideFrom\": {\n                  \"legend\": false,\n                  \"tooltip\": false,\n                  \"viz\": false\n                },\n                \"insertNulls\": false,\n                \"lineInterpolation\": \"linear\",\n                \"lineWidth\": 1,\n                \"pointSize\": 5,\n                \"scaleDistribution\": {\n                  \"type\": \"linear\"\n                },\n                \"showPoints\": \"auto\",\n                \"spanNulls\": false,\n                \"stacking\": {\n                  \"group\": \"A\",\n                  \"mode\": \"none\"\n                },\n                \"thresholdsStyle\": {\n                  \"mode\": \"off\"\n                }\n              },\n              \"mappings\": [],\n              \"thresholds\": {\n                \"mode\": \"absolute\",\n                \"steps\": [\n                  {\n                    \"color\": \"green\"\n                  },\n                  {\n                    \"color\": \"red\",\n                    \"value\": 80\n                  }\n                ]\n              },\n              \"unit\": \"µs\"\n            },\n            \"overrides\": []\n          },\n          \"gridPos\": {\n            \"h\": 9,\n            \"w\": 12,\n            \"x\": 0,\n            \"y\": 29518\n          },\n          \"id\": 211,\n          \"options\": {\n            \"legend\": {\n              \"calcs\": [\n                \"min\",\n                \"max\",\n                \"mean\",\n                \"last\"\n              ],\n              \"displayMode\": \"table\",\n              \"placement\": \"bottom\",\n              \"showLegend\": true\n            },\n            \"tooltip\": {\n              \"mode\": \"single\",\n              \"sort\": \"none\"\n            }\n          },\n          \"pluginVersion\": \"11.3.0\",\n          \"targets\": [\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"PBFA97CFB590B2093\"\n              },\n              \"editorMode\": \"code\",\n              \"exemplar\": true,\n              \"expr\": \"rocksdb_compaction_outfile_sync_micros{instance=~\\\"$system\\\", quantile=\\\"0.5\\\"}\",\n              \"interval\": \"\",\n              \"legendFormat\": \"{{instance}}\",\n              \"range\": true,\n              \"refId\": \"A\"\n            }\n          ],\n          \"title\": \"Compaction outfile sync time 50 Percentile\",\n          \"type\": \"timeseries\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"description\": \"\",\n          \"fieldConfig\": {\n            \"defaults\": {\n              \"color\": {\n                \"mode\": \"palette-classic\"\n              },\n              \"custom\": {\n                \"axisBorderShow\": false,\n                \"axisCenteredZero\": false,\n                \"axisColorMode\": \"text\",\n                \"axisLabel\": \"\",\n                \"axisPlacement\": \"left\",\n                \"barAlignment\": 0,\n                \"barWidthFactor\": 0.6,\n                \"drawStyle\": \"line\",\n                \"fillOpacity\": 0,\n                \"gradientMode\": \"none\",\n                \"hideFrom\": {\n                  \"legend\": false,\n                  \"tooltip\": false,\n                  \"viz\": false\n                },\n                \"insertNulls\": false,\n                \"lineInterpolation\": \"linear\",\n                \"lineWidth\": 1,\n                \"pointSize\": 5,\n                \"scaleDistribution\": {\n                  \"type\": \"linear\"\n                },\n                \"showPoints\": \"auto\",\n                \"spanNulls\": false,\n                \"stacking\": {\n                  \"group\": \"A\",\n                  \"mode\": \"none\"\n                },\n                \"thresholdsStyle\": {\n                  \"mode\": \"off\"\n                }\n              },\n              \"mappings\": [],\n              \"thresholds\": {\n                \"mode\": \"absolute\",\n                \"steps\": [\n                  {\n                    \"color\": \"green\"\n                  },\n                  {\n                    \"color\": \"red\",\n                    \"value\": 80\n                  }\n                ]\n              },\n              \"unit\": \"µs\"\n            },\n            \"overrides\": []\n          },\n          \"gridPos\": {\n            \"h\": 9,\n            \"w\": 12,\n            \"x\": 12,\n            \"y\": 29518\n          },\n          \"id\": 235,\n          \"options\": {\n            \"legend\": {\n              \"calcs\": [\n                \"min\",\n                \"max\",\n                \"mean\",\n                \"last\"\n              ],\n              \"displayMode\": \"table\",\n              \"placement\": \"bottom\",\n              \"showLegend\": true\n            },\n            \"tooltip\": {\n              \"mode\": \"single\",\n              \"sort\": \"none\"\n            }\n          },\n          \"pluginVersion\": \"11.3.0\",\n          \"targets\": [\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"PBFA97CFB590B2093\"\n              },\n              \"editorMode\": \"code\",\n              \"exemplar\": true,\n              \"expr\": \"rocksdb_compaction_outfile_sync_micros{instance=~\\\"$system\\\", quantile=\\\"0.95\\\"}\",\n              \"interval\": \"\",\n              \"legendFormat\": \"{{instance}}\",\n              \"range\": true,\n              \"refId\": \"A\"\n            }\n          ],\n          \"title\": \"Compaction outfile sync time 95 Percentile\",\n          \"type\": \"timeseries\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"description\": \"\",\n          \"fieldConfig\": {\n            \"defaults\": {\n              \"color\": {\n                \"mode\": \"palette-classic\"\n              },\n              \"custom\": {\n                \"axisBorderShow\": false,\n                \"axisCenteredZero\": false,\n                \"axisColorMode\": \"text\",\n                \"axisLabel\": \"\",\n                \"axisPlacement\": \"left\",\n                \"barAlignment\": 0,\n                \"barWidthFactor\": 0.6,\n                \"drawStyle\": \"line\",\n                \"fillOpacity\": 0,\n                \"gradientMode\": \"none\",\n                \"hideFrom\": {\n                  \"legend\": false,\n                  \"tooltip\": false,\n                  \"viz\": false\n                },\n                \"insertNulls\": false,\n                \"lineInterpolation\": \"linear\",\n                \"lineWidth\": 1,\n                \"pointSize\": 5,\n                \"scaleDistribution\": {\n                  \"type\": \"linear\"\n                },\n                \"showPoints\": \"auto\",\n                \"spanNulls\": false,\n                \"stacking\": {\n                  \"group\": \"A\",\n                  \"mode\": \"none\"\n                },\n                \"thresholdsStyle\": {\n                  \"mode\": \"off\"\n                }\n              },\n              \"mappings\": [],\n              \"thresholds\": {\n                \"mode\": \"absolute\",\n                \"steps\": [\n                  {\n                    \"color\": \"green\"\n                  },\n                  {\n                    \"color\": \"red\",\n                    \"value\": 80\n                  }\n                ]\n              },\n              \"unit\": \"µs\"\n            },\n            \"overrides\": []\n          },\n          \"gridPos\": {\n            \"h\": 9,\n            \"w\": 12,\n            \"x\": 0,\n            \"y\": 29527\n          },\n          \"id\": 236,\n          \"options\": {\n            \"legend\": {\n              \"calcs\": [\n                \"min\",\n                \"max\",\n                \"mean\",\n                \"lastNotNull\"\n              ],\n              \"displayMode\": \"table\",\n              \"placement\": \"bottom\",\n              \"showLegend\": true\n            },\n            \"tooltip\": {\n              \"mode\": \"single\",\n              \"sort\": \"none\"\n            }\n          },\n          \"pluginVersion\": \"11.3.0\",\n          \"targets\": [\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"PBFA97CFB590B2093\"\n              },\n              \"editorMode\": \"code\",\n              \"exemplar\": true,\n              \"expr\": \"rocksdb_compaction_outfile_sync_micros{instance=~\\\"$system\\\", quantile=\\\"0.99\\\"}\",\n              \"interval\": \"\",\n              \"legendFormat\": \"{{instance}}\",\n              \"range\": true,\n              \"refId\": \"A\"\n            }\n          ],\n          \"title\": \"Compaction outfile sync time 99 Percentile\",\n          \"type\": \"timeseries\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"description\": \"\",\n          \"fieldConfig\": {\n            \"defaults\": {\n              \"color\": {\n                \"mode\": \"palette-classic\"\n              },\n              \"custom\": {\n                \"axisBorderShow\": false,\n                \"axisCenteredZero\": false,\n                \"axisColorMode\": \"text\",\n                \"axisLabel\": \"\",\n                \"axisPlacement\": \"left\",\n                \"barAlignment\": 0,\n                \"barWidthFactor\": 0.6,\n                \"drawStyle\": \"line\",\n                \"fillOpacity\": 0,\n                \"gradientMode\": \"none\",\n                \"hideFrom\": {\n                  \"legend\": false,\n                  \"tooltip\": false,\n                  \"viz\": false\n                },\n                \"insertNulls\": false,\n                \"lineInterpolation\": \"linear\",\n                \"lineWidth\": 1,\n                \"pointSize\": 5,\n                \"scaleDistribution\": {\n                  \"type\": \"linear\"\n                },\n                \"showPoints\": \"auto\",\n                \"spanNulls\": false,\n                \"stacking\": {\n                  \"group\": \"A\",\n                  \"mode\": \"none\"\n                },\n                \"thresholdsStyle\": {\n                  \"mode\": \"off\"\n                }\n              },\n              \"mappings\": [],\n              \"thresholds\": {\n                \"mode\": \"absolute\",\n                \"steps\": [\n                  {\n                    \"color\": \"green\"\n                  },\n                  {\n                    \"color\": \"red\",\n                    \"value\": 80\n                  }\n                ]\n              },\n              \"unit\": \"µs\"\n            },\n            \"overrides\": []\n          },\n          \"gridPos\": {\n            \"h\": 9,\n            \"w\": 12,\n            \"x\": 12,\n            \"y\": 29527\n          },\n          \"id\": 216,\n          \"options\": {\n            \"legend\": {\n              \"calcs\": [\n                \"min\",\n                \"max\",\n                \"mean\",\n                \"last\"\n              ],\n              \"displayMode\": \"table\",\n              \"placement\": \"bottom\",\n              \"showLegend\": true\n            },\n            \"tooltip\": {\n              \"mode\": \"single\",\n              \"sort\": \"none\"\n            }\n          },\n          \"pluginVersion\": \"11.3.0\",\n          \"targets\": [\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"PBFA97CFB590B2093\"\n              },\n              \"editorMode\": \"code\",\n              \"exemplar\": true,\n              \"expr\": \"rocksdb_subcompaction_setup_time{instance=~\\\"$system\\\", quantile=\\\"0.5\\\"}\",\n              \"interval\": \"\",\n              \"legendFormat\": \"{{instance}}\",\n              \"range\": true,\n              \"refId\": \"A\"\n            }\n          ],\n          \"title\": \"Subcompaction setup time 50 Percentile\",\n          \"type\": \"timeseries\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"description\": \"\",\n          \"fieldConfig\": {\n            \"defaults\": {\n              \"color\": {\n                \"mode\": \"palette-classic\"\n              },\n              \"custom\": {\n                \"axisBorderShow\": false,\n                \"axisCenteredZero\": false,\n                \"axisColorMode\": \"text\",\n                \"axisLabel\": \"\",\n                \"axisPlacement\": \"left\",\n                \"barAlignment\": 0,\n                \"barWidthFactor\": 0.6,\n                \"drawStyle\": \"line\",\n                \"fillOpacity\": 0,\n                \"gradientMode\": \"none\",\n                \"hideFrom\": {\n                  \"legend\": false,\n                  \"tooltip\": false,\n                  \"viz\": false\n                },\n                \"insertNulls\": false,\n                \"lineInterpolation\": \"linear\",\n                \"lineWidth\": 1,\n                \"pointSize\": 5,\n                \"scaleDistribution\": {\n                  \"type\": \"linear\"\n                },\n                \"showPoints\": \"auto\",\n                \"spanNulls\": false,\n                \"stacking\": {\n                  \"group\": \"A\",\n                  \"mode\": \"none\"\n                },\n                \"thresholdsStyle\": {\n                  \"mode\": \"off\"\n                }\n              },\n              \"mappings\": [],\n              \"thresholds\": {\n                \"mode\": \"absolute\",\n                \"steps\": [\n                  {\n                    \"color\": \"green\"\n                  },\n                  {\n                    \"color\": \"red\",\n                    \"value\": 80\n                  }\n                ]\n              },\n              \"unit\": \"µs\"\n            },\n            \"overrides\": []\n          },\n          \"gridPos\": {\n            \"h\": 9,\n            \"w\": 12,\n            \"x\": 0,\n            \"y\": 29536\n          },\n          \"id\": 237,\n          \"options\": {\n            \"legend\": {\n              \"calcs\": [\n                \"min\",\n                \"max\",\n                \"mean\",\n                \"last\"\n              ],\n              \"displayMode\": \"table\",\n              \"placement\": \"bottom\",\n              \"showLegend\": true\n            },\n            \"tooltip\": {\n              \"mode\": \"single\",\n              \"sort\": \"none\"\n            }\n          },\n          \"pluginVersion\": \"11.3.0\",\n          \"targets\": [\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"PBFA97CFB590B2093\"\n              },\n              \"editorMode\": \"code\",\n              \"exemplar\": true,\n              \"expr\": \"rocksdb_subcompaction_setup_time{instance=~\\\"$system\\\", quantile=\\\"0.95\\\"}\",\n              \"interval\": \"\",\n              \"legendFormat\": \"{{instance}}\",\n              \"range\": true,\n              \"refId\": \"A\"\n            }\n          ],\n          \"title\": \"Subcompaction setup time 95 Percentile\",\n          \"type\": \"timeseries\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"description\": \"\",\n          \"fieldConfig\": {\n            \"defaults\": {\n              \"color\": {\n                \"mode\": \"palette-classic\"\n              },\n              \"custom\": {\n                \"axisBorderShow\": false,\n                \"axisCenteredZero\": false,\n                \"axisColorMode\": \"text\",\n                \"axisLabel\": \"\",\n                \"axisPlacement\": \"left\",\n                \"barAlignment\": 0,\n                \"barWidthFactor\": 0.6,\n                \"drawStyle\": \"line\",\n                \"fillOpacity\": 0,\n                \"gradientMode\": \"none\",\n                \"hideFrom\": {\n                  \"legend\": false,\n                  \"tooltip\": false,\n                  \"viz\": false\n                },\n                \"insertNulls\": false,\n                \"lineInterpolation\": \"linear\",\n                \"lineWidth\": 1,\n                \"pointSize\": 5,\n                \"scaleDistribution\": {\n                  \"type\": \"linear\"\n                },\n                \"showPoints\": \"auto\",\n                \"spanNulls\": false,\n                \"stacking\": {\n                  \"group\": \"A\",\n                  \"mode\": \"none\"\n                },\n                \"thresholdsStyle\": {\n                  \"mode\": \"off\"\n                }\n              },\n              \"mappings\": [],\n              \"thresholds\": {\n                \"mode\": \"absolute\",\n                \"steps\": [\n                  {\n                    \"color\": \"green\"\n                  },\n                  {\n                    \"color\": \"red\",\n                    \"value\": 80\n                  }\n                ]\n              },\n              \"unit\": \"µs\"\n            },\n            \"overrides\": []\n          },\n          \"gridPos\": {\n            \"h\": 9,\n            \"w\": 12,\n            \"x\": 12,\n            \"y\": 29536\n          },\n          \"id\": 238,\n          \"options\": {\n            \"legend\": {\n              \"calcs\": [\n                \"min\",\n                \"max\",\n                \"mean\",\n                \"last\"\n              ],\n              \"displayMode\": \"table\",\n              \"placement\": \"bottom\",\n              \"showLegend\": true\n            },\n            \"tooltip\": {\n              \"mode\": \"single\",\n              \"sort\": \"none\"\n            }\n          },\n          \"pluginVersion\": \"11.3.0\",\n          \"targets\": [\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"PBFA97CFB590B2093\"\n              },\n              \"editorMode\": \"code\",\n              \"exemplar\": true,\n              \"expr\": \"rocksdb_subcompaction_setup_time{instance=~\\\"$system\\\", quantile=\\\"0.99\\\"}\",\n              \"interval\": \"\",\n              \"legendFormat\": \"{{instance}}\",\n              \"range\": true,\n              \"refId\": \"A\"\n            }\n          ],\n          \"title\": \"Subcompaction setup time 99 Percentile\",\n          \"type\": \"timeseries\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"description\": \"\",\n          \"fieldConfig\": {\n            \"defaults\": {\n              \"color\": {\n                \"mode\": \"palette-classic\"\n              },\n              \"custom\": {\n                \"axisBorderShow\": false,\n                \"axisCenteredZero\": false,\n                \"axisColorMode\": \"text\",\n                \"axisLabel\": \"\",\n                \"axisPlacement\": \"left\",\n                \"barAlignment\": 0,\n                \"barWidthFactor\": 0.6,\n                \"drawStyle\": \"line\",\n                \"fillOpacity\": 0,\n                \"gradientMode\": \"none\",\n                \"hideFrom\": {\n                  \"legend\": false,\n                  \"tooltip\": false,\n                  \"viz\": false\n                },\n                \"insertNulls\": false,\n                \"lineInterpolation\": \"linear\",\n                \"lineWidth\": 1,\n                \"pointSize\": 5,\n                \"scaleDistribution\": {\n                  \"type\": \"linear\"\n                },\n                \"showPoints\": \"auto\",\n                \"spanNulls\": false,\n                \"stacking\": {\n                  \"group\": \"A\",\n                  \"mode\": \"none\"\n                },\n                \"thresholdsStyle\": {\n                  \"mode\": \"off\"\n                }\n              },\n              \"mappings\": [],\n              \"thresholds\": {\n                \"mode\": \"absolute\",\n                \"steps\": [\n                  {\n                    \"color\": \"green\"\n                  },\n                  {\n                    \"color\": \"red\",\n                    \"value\": 80\n                  }\n                ]\n              },\n              \"unit\": \"decbytes\"\n            },\n            \"overrides\": []\n          },\n          \"gridPos\": {\n            \"h\": 9,\n            \"w\": 12,\n            \"x\": 0,\n            \"y\": 29545\n          },\n          \"id\": 217,\n          \"options\": {\n            \"legend\": {\n              \"calcs\": [\n                \"min\",\n                \"max\",\n                \"mean\",\n                \"last\"\n              ],\n              \"displayMode\": \"table\",\n              \"placement\": \"bottom\",\n              \"showLegend\": true,\n              \"sortBy\": \"Max\",\n              \"sortDesc\": true\n            },\n            \"tooltip\": {\n              \"mode\": \"single\",\n              \"sort\": \"none\"\n            }\n          },\n          \"pluginVersion\": \"11.3.0\",\n          \"targets\": [\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"PBFA97CFB590B2093\"\n              },\n              \"editorMode\": \"code\",\n              \"exemplar\": true,\n              \"expr\": \"irate(rocksdb_compact_read_bytes{instance=~\\\"$system\\\"}[$__rate_interval])\",\n              \"interval\": \"\",\n              \"legendFormat\": \"rocksdb_compact_read_bytes - {{instance}}\",\n              \"range\": true,\n              \"refId\": \"A\"\n            }\n          ],\n          \"title\": \"Bytes Read during compaction\",\n          \"type\": \"timeseries\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"description\": \"\",\n          \"fieldConfig\": {\n            \"defaults\": {\n              \"color\": {\n                \"mode\": \"palette-classic\"\n              },\n              \"custom\": {\n                \"axisBorderShow\": false,\n                \"axisCenteredZero\": false,\n                \"axisColorMode\": \"text\",\n                \"axisLabel\": \"\",\n                \"axisPlacement\": \"left\",\n                \"barAlignment\": 0,\n                \"barWidthFactor\": 0.6,\n                \"drawStyle\": \"line\",\n                \"fillOpacity\": 0,\n                \"gradientMode\": \"none\",\n                \"hideFrom\": {\n                  \"legend\": false,\n                  \"tooltip\": false,\n                  \"viz\": false\n                },\n                \"insertNulls\": false,\n                \"lineInterpolation\": \"linear\",\n                \"lineWidth\": 1,\n                \"pointSize\": 5,\n                \"scaleDistribution\": {\n                  \"type\": \"linear\"\n                },\n                \"showPoints\": \"auto\",\n                \"spanNulls\": false,\n                \"stacking\": {\n                  \"group\": \"A\",\n                  \"mode\": \"none\"\n                },\n                \"thresholdsStyle\": {\n                  \"mode\": \"off\"\n                }\n              },\n              \"mappings\": [],\n              \"thresholds\": {\n                \"mode\": \"absolute\",\n                \"steps\": [\n                  {\n                    \"color\": \"green\"\n                  },\n                  {\n                    \"color\": \"red\",\n                    \"value\": 80\n                  }\n                ]\n              },\n              \"unit\": \"decbytes\"\n            },\n            \"overrides\": []\n          },\n          \"gridPos\": {\n            \"h\": 9,\n            \"w\": 12,\n            \"x\": 12,\n            \"y\": 29545\n          },\n          \"id\": 212,\n          \"options\": {\n            \"legend\": {\n              \"calcs\": [\n                \"min\",\n                \"max\",\n                \"mean\",\n                \"last\"\n              ],\n              \"displayMode\": \"table\",\n              \"placement\": \"bottom\",\n              \"showLegend\": true\n            },\n            \"tooltip\": {\n              \"mode\": \"single\",\n              \"sort\": \"none\"\n            }\n          },\n          \"pluginVersion\": \"11.3.0\",\n          \"targets\": [\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"PBFA97CFB590B2093\"\n              },\n              \"editorMode\": \"code\",\n              \"exemplar\": true,\n              \"expr\": \"irate(rocksdb_compact_write_bytes{instance=~\\\"$system\\\"}[$__rate_interval])\",\n              \"interval\": \"\",\n              \"legendFormat\": \"rocksdb_compact_write_bytes - {{instance}}\",\n              \"range\": true,\n              \"refId\": \"A\"\n            }\n          ],\n          \"title\": \"Bytes written during compaction\",\n          \"type\": \"timeseries\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"description\": \"\",\n          \"fieldConfig\": {\n            \"defaults\": {\n              \"color\": {\n                \"mode\": \"palette-classic\"\n              },\n              \"custom\": {\n                \"axisBorderShow\": false,\n                \"axisCenteredZero\": false,\n                \"axisColorMode\": \"text\",\n                \"axisLabel\": \"\",\n                \"axisPlacement\": \"left\",\n                \"barAlignment\": 0,\n                \"barWidthFactor\": 0.6,\n                \"drawStyle\": \"bars\",\n                \"fillOpacity\": 0,\n                \"gradientMode\": \"none\",\n                \"hideFrom\": {\n                  \"legend\": false,\n                  \"tooltip\": false,\n                  \"viz\": false\n                },\n                \"insertNulls\": false,\n                \"lineInterpolation\": \"linear\",\n                \"lineWidth\": 1,\n                \"pointSize\": 5,\n                \"scaleDistribution\": {\n                  \"type\": \"linear\"\n                },\n                \"showPoints\": \"auto\",\n                \"spanNulls\": false,\n                \"stacking\": {\n                  \"group\": \"A\",\n                  \"mode\": \"none\"\n                },\n                \"thresholdsStyle\": {\n                  \"mode\": \"off\"\n                }\n              },\n              \"mappings\": [],\n              \"thresholds\": {\n                \"mode\": \"absolute\",\n                \"steps\": [\n                  {\n                    \"color\": \"green\"\n                  },\n                  {\n                    \"color\": \"red\",\n                    \"value\": 80\n                  }\n                ]\n              },\n              \"unit\": \"none\"\n            },\n            \"overrides\": []\n          },\n          \"gridPos\": {\n            \"h\": 9,\n            \"w\": 12,\n            \"x\": 0,\n            \"y\": 29554\n          },\n          \"id\": 355,\n          \"options\": {\n            \"legend\": {\n              \"calcs\": [\n                \"min\",\n                \"max\",\n                \"mean\",\n                \"last\"\n              ],\n              \"displayMode\": \"table\",\n              \"placement\": \"bottom\",\n              \"showLegend\": true,\n              \"sortBy\": \"Mean\",\n              \"sortDesc\": false\n            },\n            \"tooltip\": {\n              \"mode\": \"single\",\n              \"sort\": \"none\"\n            }\n          },\n          \"pluginVersion\": \"11.3.0\",\n          \"targets\": [\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"PBFA97CFB590B2093\"\n              },\n              \"editorMode\": \"code\",\n              \"exemplar\": true,\n              \"expr\": \"irate(rocksdb_compaction_key_drop_newer_entry{instance=~\\\"$system\\\"}[$__rate_interval])\",\n              \"interval\": \"\",\n              \"legendFormat\": \"{{instance}}\",\n              \"range\": true,\n              \"refId\": \"A\"\n            }\n          ],\n          \"title\": \"Compaction key drop cause of newer entry\",\n          \"type\": \"timeseries\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"description\": \"\",\n          \"fieldConfig\": {\n            \"defaults\": {\n              \"color\": {\n                \"mode\": \"palette-classic\"\n              },\n              \"custom\": {\n                \"axisBorderShow\": false,\n                \"axisCenteredZero\": false,\n                \"axisColorMode\": \"text\",\n                \"axisLabel\": \"\",\n                \"axisPlacement\": \"left\",\n                \"barAlignment\": 0,\n                \"barWidthFactor\": 0.6,\n                \"drawStyle\": \"line\",\n                \"fillOpacity\": 0,\n                \"gradientMode\": \"none\",\n                \"hideFrom\": {\n                  \"legend\": false,\n                  \"tooltip\": false,\n                  \"viz\": false\n                },\n                \"insertNulls\": false,\n                \"lineInterpolation\": \"linear\",\n                \"lineWidth\": 1,\n                \"pointSize\": 5,\n                \"scaleDistribution\": {\n                  \"type\": \"linear\"\n                },\n                \"showPoints\": \"auto\",\n                \"spanNulls\": false,\n                \"stacking\": {\n                  \"group\": \"A\",\n                  \"mode\": \"none\"\n                },\n                \"thresholdsStyle\": {\n                  \"mode\": \"off\"\n                }\n              },\n              \"mappings\": [],\n              \"thresholds\": {\n                \"mode\": \"absolute\",\n                \"steps\": [\n                  {\n                    \"color\": \"green\"\n                  },\n                  {\n                    \"color\": \"red\",\n                    \"value\": 80\n                  }\n                ]\n              },\n              \"unit\": \"none\"\n            },\n            \"overrides\": []\n          },\n          \"gridPos\": {\n            \"h\": 9,\n            \"w\": 12,\n            \"x\": 12,\n            \"y\": 29554\n          },\n          \"id\": 215,\n          \"options\": {\n            \"legend\": {\n              \"calcs\": [\n                \"min\",\n                \"max\",\n                \"mean\",\n                \"last\"\n              ],\n              \"displayMode\": \"table\",\n              \"placement\": \"bottom\",\n              \"showLegend\": true,\n              \"sortBy\": \"Max\",\n              \"sortDesc\": true\n            },\n            \"tooltip\": {\n              \"mode\": \"single\",\n              \"sort\": \"none\"\n            }\n          },\n          \"pluginVersion\": \"11.3.0\",\n          \"targets\": [\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"PBFA97CFB590B2093\"\n              },\n              \"editorMode\": \"code\",\n              \"exemplar\": true,\n              \"expr\": \"irate(rocksdb_compaction_key_drop_obsolete{instance=~\\\"$system\\\"}[$__rate_interval])\",\n              \"interval\": \"\",\n              \"legendFormat\": \"{{instance}}\",\n              \"range\": true,\n              \"refId\": \"A\"\n            }\n          ],\n          \"title\": \"Compaction key drop cause obsolete\",\n          \"type\": \"timeseries\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"description\": \"\",\n          \"fieldConfig\": {\n            \"defaults\": {\n              \"color\": {\n                \"mode\": \"palette-classic\"\n              },\n              \"custom\": {\n                \"axisBorderShow\": false,\n                \"axisCenteredZero\": false,\n                \"axisColorMode\": \"text\",\n                \"axisLabel\": \"\",\n                \"axisPlacement\": \"left\",\n                \"barAlignment\": 0,\n                \"barWidthFactor\": 0.6,\n                \"drawStyle\": \"line\",\n                \"fillOpacity\": 0,\n                \"gradientMode\": \"none\",\n                \"hideFrom\": {\n                  \"legend\": false,\n                  \"tooltip\": false,\n                  \"viz\": false\n                },\n                \"insertNulls\": false,\n                \"lineInterpolation\": \"linear\",\n                \"lineWidth\": 1,\n                \"pointSize\": 5,\n                \"scaleDistribution\": {\n                  \"type\": \"linear\"\n                },\n                \"showPoints\": \"auto\",\n                \"spanNulls\": false,\n                \"stacking\": {\n                  \"group\": \"A\",\n                  \"mode\": \"none\"\n                },\n                \"thresholdsStyle\": {\n                  \"mode\": \"off\"\n                }\n              },\n              \"mappings\": [],\n              \"thresholds\": {\n                \"mode\": \"absolute\",\n                \"steps\": [\n                  {\n                    \"color\": \"green\"\n                  },\n                  {\n                    \"color\": \"red\",\n                    \"value\": 80\n                  }\n                ]\n              },\n              \"unit\": \"none\"\n            },\n            \"overrides\": []\n          },\n          \"gridPos\": {\n            \"h\": 9,\n            \"w\": 12,\n            \"x\": 0,\n            \"y\": 29563\n          },\n          \"id\": 214,\n          \"options\": {\n            \"legend\": {\n              \"calcs\": [\n                \"min\",\n                \"max\",\n                \"mean\",\n                \"last\"\n              ],\n              \"displayMode\": \"table\",\n              \"placement\": \"bottom\",\n              \"showLegend\": true\n            },\n            \"tooltip\": {\n              \"mode\": \"single\",\n              \"sort\": \"none\"\n            }\n          },\n          \"pluginVersion\": \"11.3.0\",\n          \"targets\": [\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"PBFA97CFB590B2093\"\n              },\n              \"editorMode\": \"code\",\n              \"exemplar\": true,\n              \"expr\": \"irate(rocksdb_compaction_key_drop_user{instance=~\\\"$system\\\"}[$__rate_interval])\",\n              \"interval\": \"\",\n              \"legendFormat\": \"{{instance}}\",\n              \"range\": true,\n              \"refId\": \"A\"\n            }\n          ],\n          \"title\": \"Compaction key drop cause of user\",\n          \"type\": \"timeseries\"\n        }\n      ],\n      \"title\": \"RocksDB metrics\",\n      \"type\": \"row\"\n    }\n  ],\n  \"refresh\": \"1m\",\n  \"schemaVersion\": 41,\n  \"tags\": [\n    \"besu\",\n    \"ethereum\"\n  ],\n  \"templating\": {\n    \"list\": [\n      {\n        \"current\": {},\n        \"datasource\": {\n          \"type\": \"prometheus\",\n          \"uid\": \"PBFA97CFB590B2093\"\n        },\n        \"definition\": \"ethereum_blockchain_height{network=~\\\"$network\\\"}\",\n        \"includeAll\": true,\n        \"label\": \"System\",\n        \"multi\": true,\n        \"name\": \"system\",\n        \"options\": [],\n        \"query\": {\n          \"query\": \"ethereum_blockchain_height{network=~\\\"$network\\\"}\",\n          \"refId\": \"StandardVariableQuery\"\n        },\n        \"refresh\": 2,\n        \"regex\": \"/instance=\\\"([^\\\"]*)\\\"/\",\n        \"sort\": 5,\n        \"type\": \"query\"\n      },\n      {\n        \"current\": {},\n        \"datasource\": {\n          \"type\": \"prometheus\",\n          \"uid\": \"PBFA97CFB590B2093\"\n        },\n        \"definition\": \"label_values(besu_synchronizer_task,quantile)\",\n        \"hide\": 2,\n        \"includeAll\": true,\n        \"label\": \"Synchronizer Task Quantile\",\n        \"multi\": true,\n        \"name\": \"sync_task_quantile\",\n        \"options\": [],\n        \"query\": {\n          \"query\": \"label_values(besu_synchronizer_task,quantile)\",\n          \"refId\": \"StandardVariableQuery\"\n        },\n        \"refresh\": 1,\n        \"regex\": \"\",\n        \"type\": \"query\"\n      },\n      {\n        \"current\": {},\n        \"datasource\": {\n          \"type\": \"prometheus\",\n          \"uid\": \"PBFA97CFB590B2093\"\n        },\n        \"definition\": \"metrics(besu_executors_ethscheduler)\",\n        \"hide\": 2,\n        \"includeAll\": true,\n        \"label\": \"Executors\",\n        \"multi\": true,\n        \"name\": \"executor\",\n        \"options\": [],\n        \"query\": {\n          \"query\": \"metrics(besu_executors_ethscheduler)\",\n          \"refId\": \"StandardVariableQuery\"\n        },\n        \"refresh\": 1,\n        \"regex\": \"/besu_executors_ethscheduler_([^_]*)_.*/\",\n        \"sort\": 5,\n        \"type\": \"query\"\n      },\n      {\n        \"current\": {},\n        \"datasource\": {\n          \"type\": \"prometheus\",\n          \"uid\": \"PBFA97CFB590B2093\"\n        },\n        \"definition\": \"label_values(besu_network_vertx_worker_pool_completed_total, poolName)\",\n        \"hide\": 2,\n        \"includeAll\": true,\n        \"label\": \"Vert.x Pool Name\",\n        \"multi\": true,\n        \"name\": \"vertx_pool_name\",\n        \"options\": [],\n        \"query\": {\n          \"query\": \"label_values(besu_network_vertx_worker_pool_completed_total, poolName)\",\n          \"refId\": \"StandardVariableQuery\"\n        },\n        \"refresh\": 1,\n        \"regex\": \"\",\n        \"sort\": 5,\n        \"type\": \"query\"\n      },\n      {\n        \"current\": {},\n        \"datasource\": {\n          \"type\": \"prometheus\",\n          \"uid\": \"PBFA97CFB590B2093\"\n        },\n        \"definition\": \"label_values(besu_network_p2p_messages_inbound_total,protocol)\",\n        \"hide\": 2,\n        \"includeAll\": true,\n        \"label\": \"Protocol Inbound\",\n        \"multi\": true,\n        \"name\": \"protocol_inbound\",\n        \"options\": [],\n        \"query\": {\n          \"qryType\": 1,\n          \"query\": \"label_values(besu_network_p2p_messages_inbound_total,protocol)\",\n          \"refId\": \"PrometheusVariableQueryEditor-VariableQuery\"\n        },\n        \"refresh\": 1,\n        \"regex\": \"\",\n        \"sort\": 1,\n        \"type\": \"query\"\n      },\n      {\n        \"current\": {},\n        \"datasource\": {\n          \"type\": \"prometheus\",\n          \"uid\": \"PBFA97CFB590B2093\"\n        },\n        \"definition\": \"label_values(besu_network_p2p_messages_outbound_total,protocol)\",\n        \"hide\": 2,\n        \"includeAll\": true,\n        \"label\": \"Protocol Outbound\",\n        \"multi\": true,\n        \"name\": \"protocol_outbound\",\n        \"options\": [],\n        \"query\": {\n          \"qryType\": 1,\n          \"query\": \"label_values(besu_network_p2p_messages_outbound_total,protocol)\",\n          \"refId\": \"PrometheusVariableQueryEditor-VariableQuery\"\n        },\n        \"refresh\": 1,\n        \"regex\": \"\",\n        \"sort\": 1,\n        \"type\": \"query\"\n      },\n      {\n        \"current\": {\n          \"text\": \"[a-z]+|nvme[0-9]+n[0-9]+\",\n          \"value\": \"[a-z]+|nvme[0-9]+n[0-9]+\"\n        },\n        \"hide\": 2,\n        \"includeAll\": false,\n        \"name\": \"diskdevices\",\n        \"options\": [\n          {\n            \"selected\": true,\n            \"text\": \"[a-z]+|nvme[0-9]+n[0-9]+\",\n            \"value\": \"[a-z]+|nvme[0-9]+n[0-9]+\"\n          }\n        ],\n        \"query\": \"[a-z]+|nvme[0-9]+n[0-9]+\",\n        \"type\": \"custom\"\n      },\n      {\n        \"current\": {\n          \"text\": [\n            \"$__all\"\n          ],\n          \"value\": [\n            \"$__all\"\n          ]\n        },\n        \"hide\": 2,\n        \"includeAll\": true,\n        \"multi\": true,\n        \"name\": \"overview_engine_percentiles\",\n        \"options\": [\n          {\n            \"selected\": false,\n            \"text\": \"0.5\",\n            \"value\": \"0.5\"\n          },\n          {\n            \"selected\": false,\n            \"text\": \"0.95\",\n            \"value\": \"0.95\"\n          }\n        ],\n        \"query\": \"0.5, 0.95\",\n        \"type\": \"custom\"\n      },\n      {\n        \"current\": {},\n        \"datasource\": {\n          \"type\": \"prometheus\",\n          \"uid\": \"PBFA97CFB590B2093\"\n        },\n        \"definition\": \"label_values(besu_transaction_pool_number_of_transactions, layer)\",\n        \"hide\": 2,\n        \"includeAll\": true,\n        \"label\": \"TxPool Layer\",\n        \"multi\": true,\n        \"name\": \"txpool_layer\",\n        \"options\": [],\n        \"query\": {\n          \"query\": \"label_values(besu_transaction_pool_number_of_transactions, layer)\",\n          \"refId\": \"StandardVariableQuery\"\n        },\n        \"refresh\": 1,\n        \"regex\": \"\",\n        \"type\": \"query\"\n      },\n      {\n        \"allowCustomValue\": false,\n        \"current\": {},\n        \"definition\": \"label_values(ethereum_blockchain_height,network)\",\n        \"includeAll\": true,\n        \"label\": \"Network\",\n        \"multi\": true,\n        \"name\": \"network\",\n        \"options\": [],\n        \"query\": {\n          \"query\": \"label_values(ethereum_blockchain_height,network)\",\n          \"refId\": \"StandardVariableQuery\"\n        },\n        \"refresh\": 1,\n        \"regex\": \"\",\n        \"sort\": 1,\n        \"type\": \"query\"\n      },\n      {\n        \"baseFilters\": [],\n        \"datasource\": {\n          \"type\": \"prometheus\",\n          \"uid\": \"ljwa6Go4k\"\n        },\n        \"filters\": [],\n        \"name\": \"Filters\",\n        \"type\": \"adhoc\"\n      }\n    ]\n  },\n  \"time\": {\n    \"from\": \"now-15m\",\n    \"to\": \"now\"\n  },\n  \"timepicker\": {},\n  \"timezone\": \"utc\",\n  \"title\": \"Besu Full\",\n  \"uid\": \"_Mqt4ksnz\",\n  \"version\": 74,\n  \"weekStart\": \"\",\n  \"gnetId\": 16455\n}"
  },
  {
    "path": "static_files/grafana-config/dashboards/default.json",
    "content": "{\n  \"annotations\": {\n    \"list\": [\n      {\n        \"builtIn\": 1,\n        \"datasource\": {\n          \"type\": \"datasource\",\n          \"uid\": \"grafana\"\n        },\n        \"enable\": true,\n        \"hide\": true,\n        \"iconColor\": \"rgba(0, 211, 255, 1)\",\n        \"name\": \"Annotations & Alerts\",\n        \"target\": {\n          \"limit\": 100,\n          \"matchAny\": false,\n          \"tags\": [],\n          \"type\": \"dashboard\"\n        },\n        \"type\": \"dashboard\"\n      }\n    ]\n  },\n  \"editable\": true,\n  \"fiscalYearStartMonth\": 0,\n  \"graphTooltip\": 0,\n  \"id\": 2,\n  \"links\": [],\n  \"liveNow\": false,\n  \"panels\": [\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"palette-classic\"\n          },\n          \"custom\": {\n            \"axisCenteredZero\": false,\n            \"axisColorMode\": \"text\",\n            \"axisLabel\": \"\",\n            \"axisPlacement\": \"auto\",\n            \"barAlignment\": 0,\n            \"drawStyle\": \"line\",\n            \"fillOpacity\": 0,\n            \"gradientMode\": \"none\",\n            \"hideFrom\": {\n              \"legend\": false,\n              \"tooltip\": false,\n              \"viz\": false\n            },\n            \"lineInterpolation\": \"linear\",\n            \"lineWidth\": 1,\n            \"pointSize\": 5,\n            \"scaleDistribution\": {\n              \"type\": \"linear\"\n            },\n            \"showPoints\": \"auto\",\n            \"spanNulls\": false,\n            \"stacking\": {\n              \"group\": \"A\",\n              \"mode\": \"none\"\n            },\n            \"thresholdsStyle\": {\n              \"mode\": \"off\"\n            }\n          },\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\",\n                \"value\": null\n              },\n              {\n                \"color\": \"red\",\n                \"value\": 80\n              }\n            ]\n          }\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 8,\n        \"w\": 12,\n        \"x\": 0,\n        \"y\": 0\n      },\n      \"id\": 12,\n      \"options\": {\n        \"legend\": {\n          \"calcs\": [],\n          \"displayMode\": \"list\",\n          \"placement\": \"bottom\",\n          \"showLegend\": true\n        },\n        \"tooltip\": {\n          \"mode\": \"single\",\n          \"sort\": \"none\"\n        }\n      },\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"editorMode\": \"code\",\n          \"expr\": \"rate(replay_blocks_count_sum{job=~\\\"cl-.*-prysm-geth|cl-.*-lighthouse-geth\\\"}[$__rate_interval])\",\n          \"legendFormat\": \"{{job}}\",\n          \"range\": true,\n          \"refId\": \"A\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"editorMode\": \"code\",\n          \"expr\": \"\",\n          \"hide\": false,\n          \"legendFormat\": \"__auto\",\n          \"range\": true,\n          \"refId\": \"C\"\n        }\n      ],\n      \"title\": \"replay blocks count\",\n      \"type\": \"timeseries\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"palette-classic\"\n          },\n          \"custom\": {\n            \"axisCenteredZero\": false,\n            \"axisColorMode\": \"text\",\n            \"axisLabel\": \"\",\n            \"axisPlacement\": \"auto\",\n            \"barAlignment\": 0,\n            \"drawStyle\": \"line\",\n            \"fillOpacity\": 0,\n            \"gradientMode\": \"none\",\n            \"hideFrom\": {\n              \"legend\": false,\n              \"tooltip\": false,\n              \"viz\": false\n            },\n            \"lineInterpolation\": \"linear\",\n            \"lineWidth\": 1,\n            \"pointSize\": 5,\n            \"scaleDistribution\": {\n              \"type\": \"linear\"\n            },\n            \"showPoints\": \"auto\",\n            \"spanNulls\": false,\n            \"stacking\": {\n              \"group\": \"A\",\n              \"mode\": \"none\"\n            },\n            \"thresholdsStyle\": {\n              \"mode\": \"off\"\n            }\n          },\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\",\n                \"value\": null\n              },\n              {\n                \"color\": \"red\",\n                \"value\": 80\n              }\n            ]\n          }\n        },\n        \"overrides\": [\n          {\n            \"__systemRef\": \"hideSeriesFrom\",\n            \"matcher\": {\n              \"id\": \"byNames\",\n              \"options\": {\n                \"mode\": \"exclude\",\n                \"names\": [\n                  \"cl-3-prysm-geth\",\n                  \"cl-6-prysm-geth\",\n                  \"cl-1-lighthouse-geth\",\n                  \"cl-2-lighthouse-geth\",\n                  \"cl-5-prysm-geth\",\n                  \"cl-4-prysm-geth\"\n                ],\n                \"prefix\": \"All except:\",\n                \"readOnly\": true\n              }\n            },\n            \"properties\": [\n              {\n                \"id\": \"custom.hideFrom\",\n                \"value\": {\n                  \"legend\": false,\n                  \"tooltip\": false,\n                  \"viz\": true\n                }\n              }\n            ]\n          }\n        ]\n      },\n      \"gridPos\": {\n        \"h\": 8,\n        \"w\": 12,\n        \"x\": 12,\n        \"y\": 0\n      },\n      \"id\": 2,\n      \"options\": {\n        \"legend\": {\n          \"calcs\": [],\n          \"displayMode\": \"list\",\n          \"placement\": \"bottom\",\n          \"showLegend\": true\n        },\n        \"tooltip\": {\n          \"mode\": \"single\",\n          \"sort\": \"none\"\n        }\n      },\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"editorMode\": \"code\",\n          \"exemplar\": true,\n          \"expr\": \"beacon_head_slot{job=~\\\"cl-.*-prysm-geth|cl-.*-lighthouse-geth\\\"}\",\n          \"interval\": \"\",\n          \"legendFormat\": \"{{job}}\",\n          \"range\": true,\n          \"refId\": \"A\"\n        }\n      ],\n      \"title\": \"Beacon Head Slot\",\n      \"type\": \"timeseries\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"palette-classic\"\n          },\n          \"custom\": {\n            \"axisCenteredZero\": false,\n            \"axisColorMode\": \"text\",\n            \"axisLabel\": \"\",\n            \"axisPlacement\": \"auto\",\n            \"barAlignment\": 0,\n            \"drawStyle\": \"line\",\n            \"fillOpacity\": 0,\n            \"gradientMode\": \"none\",\n            \"hideFrom\": {\n              \"legend\": false,\n              \"tooltip\": false,\n              \"viz\": false\n            },\n            \"lineInterpolation\": \"linear\",\n            \"lineWidth\": 1,\n            \"pointSize\": 5,\n            \"scaleDistribution\": {\n              \"type\": \"linear\"\n            },\n            \"showPoints\": \"auto\",\n            \"spanNulls\": false,\n            \"stacking\": {\n              \"group\": \"A\",\n              \"mode\": \"none\"\n            },\n            \"thresholdsStyle\": {\n              \"mode\": \"off\"\n            }\n          },\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\",\n                \"value\": null\n              },\n              {\n                \"color\": \"red\",\n                \"value\": 80\n              }\n            ]\n          }\n        },\n        \"overrides\": [\n          {\n            \"__systemRef\": \"hideSeriesFrom\",\n            \"matcher\": {\n              \"id\": \"byNames\",\n              \"options\": {\n                \"mode\": \"exclude\",\n                \"names\": [\n                  \"cl-5-prysm-geth\",\n                  \"cl-6-prysm-geth\",\n                  \"cl-4-prysm-geth\",\n                  \"cl-1-lighthouse-geth\",\n                  \"cl-3-prysm-geth\",\n                  \"cl-2-prysm-geth\",\n                  \"cl-2-lighthouse-geth\"\n                ],\n                \"prefix\": \"All except:\",\n                \"readOnly\": true\n              }\n            },\n            \"properties\": [\n              {\n                \"id\": \"custom.hideFrom\",\n                \"value\": {\n                  \"legend\": false,\n                  \"tooltip\": false,\n                  \"viz\": true\n                }\n              }\n            ]\n          }\n        ]\n      },\n      \"gridPos\": {\n        \"h\": 8,\n        \"w\": 12,\n        \"x\": 0,\n        \"y\": 8\n      },\n      \"id\": 8,\n      \"options\": {\n        \"legend\": {\n          \"calcs\": [],\n          \"displayMode\": \"list\",\n          \"placement\": \"bottom\",\n          \"showLegend\": true\n        },\n        \"tooltip\": {\n          \"mode\": \"single\",\n          \"sort\": \"none\"\n        }\n      },\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"editorMode\": \"code\",\n          \"expr\": \"beacon_finalized_epoch{job=~\\\"cl-.*-prysm-geth|cl-.*-lighthouse-geth\\\"}\",\n          \"hide\": false,\n          \"legendFormat\": \"{{job}}\",\n          \"range\": true,\n          \"refId\": \"B\"\n        }\n      ],\n      \"title\": \"finalized epoch head\",\n      \"type\": \"timeseries\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"palette-classic\"\n          },\n          \"custom\": {\n            \"axisCenteredZero\": false,\n            \"axisColorMode\": \"text\",\n            \"axisLabel\": \"\",\n            \"axisPlacement\": \"auto\",\n            \"barAlignment\": 0,\n            \"drawStyle\": \"line\",\n            \"fillOpacity\": 0,\n            \"gradientMode\": \"none\",\n            \"hideFrom\": {\n              \"legend\": false,\n              \"tooltip\": false,\n              \"viz\": false\n            },\n            \"lineInterpolation\": \"linear\",\n            \"lineWidth\": 1,\n            \"pointSize\": 5,\n            \"scaleDistribution\": {\n              \"type\": \"linear\"\n            },\n            \"showPoints\": \"auto\",\n            \"spanNulls\": false,\n            \"stacking\": {\n              \"group\": \"A\",\n              \"mode\": \"none\"\n            },\n            \"thresholdsStyle\": {\n              \"mode\": \"off\"\n            }\n          },\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\",\n                \"value\": null\n              },\n              {\n                \"color\": \"red\",\n                \"value\": 80\n              }\n            ]\n          }\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 6,\n        \"w\": 6,\n        \"x\": 12,\n        \"y\": 8\n      },\n      \"id\": 16,\n      \"options\": {\n        \"legend\": {\n          \"calcs\": [],\n          \"displayMode\": \"list\",\n          \"placement\": \"bottom\",\n          \"showLegend\": true\n        },\n        \"tooltip\": {\n          \"mode\": \"single\",\n          \"sort\": \"none\"\n        }\n      },\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"editorMode\": \"code\",\n          \"expr\": \"rate(hot_state_cache_hit{job=~\\\"cl-.*-prysm-geth\\\"}[1m])/(rate(hot_state_cache_miss{job=~\\\"cl-.*-prysm-geth\\\"}[1m])+rate(hot_state_cache_hit{job=~\\\"cl-.*-prysm-geth\\\"}[1m]))\",\n          \"legendFormat\": \"{{job}}\",\n          \"range\": true,\n          \"refId\": \"A\"\n        }\n      ],\n      \"title\": \"Hot State Cache Hit Rate\",\n      \"type\": \"timeseries\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"palette-classic\"\n          },\n          \"custom\": {\n            \"axisCenteredZero\": false,\n            \"axisColorMode\": \"text\",\n            \"axisLabel\": \"\",\n            \"axisPlacement\": \"auto\",\n            \"barAlignment\": 0,\n            \"drawStyle\": \"line\",\n            \"fillOpacity\": 0,\n            \"gradientMode\": \"none\",\n            \"hideFrom\": {\n              \"legend\": false,\n              \"tooltip\": false,\n              \"viz\": false\n            },\n            \"lineInterpolation\": \"linear\",\n            \"lineWidth\": 1,\n            \"pointSize\": 5,\n            \"scaleDistribution\": {\n              \"type\": \"linear\"\n            },\n            \"showPoints\": \"auto\",\n            \"spanNulls\": false,\n            \"stacking\": {\n              \"group\": \"A\",\n              \"mode\": \"none\"\n            },\n            \"thresholdsStyle\": {\n              \"mode\": \"off\"\n            }\n          },\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\",\n                \"value\": null\n              },\n              {\n                \"color\": \"red\",\n                \"value\": 80\n              }\n            ]\n          }\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 6,\n        \"w\": 6,\n        \"x\": 18,\n        \"y\": 8\n      },\n      \"id\": 18,\n      \"options\": {\n        \"legend\": {\n          \"calcs\": [],\n          \"displayMode\": \"list\",\n          \"placement\": \"bottom\",\n          \"showLegend\": true\n        },\n        \"tooltip\": {\n          \"mode\": \"single\",\n          \"sort\": \"none\"\n        }\n      },\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"editorMode\": \"code\",\n          \"expr\": \"rate(next_slot_cache_hit{job=~\\\"cl-.*-prysm-geth\\\"}[1m])/(rate(next_slot_cache_miss{job=~\\\"cl-.*-prysm-geth\\\"}[1m])+rate(next_slot_cache_hit{job=~\\\"cl-.*-prysm-geth\\\"}[1m]))\",\n          \"legendFormat\": \"{{job}}\",\n          \"range\": true,\n          \"refId\": \"A\"\n        }\n      ],\n      \"title\": \"Next Slot Cache Hit %\",\n      \"type\": \"timeseries\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"palette-classic\"\n          },\n          \"custom\": {\n            \"axisCenteredZero\": false,\n            \"axisColorMode\": \"text\",\n            \"axisLabel\": \"\",\n            \"axisPlacement\": \"auto\",\n            \"barAlignment\": 0,\n            \"drawStyle\": \"line\",\n            \"fillOpacity\": 0,\n            \"gradientMode\": \"none\",\n            \"hideFrom\": {\n              \"legend\": false,\n              \"tooltip\": false,\n              \"viz\": false\n            },\n            \"lineInterpolation\": \"linear\",\n            \"lineWidth\": 1,\n            \"pointSize\": 5,\n            \"scaleDistribution\": {\n              \"type\": \"linear\"\n            },\n            \"showPoints\": \"auto\",\n            \"spanNulls\": false,\n            \"stacking\": {\n              \"group\": \"A\",\n              \"mode\": \"none\"\n            },\n            \"thresholdsStyle\": {\n              \"mode\": \"off\"\n            }\n          },\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\",\n                \"value\": null\n              },\n              {\n                \"color\": \"red\",\n                \"value\": 80\n              }\n            ]\n          }\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 6,\n        \"w\": 6,\n        \"x\": 12,\n        \"y\": 14\n      },\n      \"id\": 14,\n      \"options\": {\n        \"legend\": {\n          \"calcs\": [],\n          \"displayMode\": \"list\",\n          \"placement\": \"bottom\",\n          \"showLegend\": true\n        },\n        \"tooltip\": {\n          \"mode\": \"single\",\n          \"sort\": \"none\"\n        }\n      },\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"editorMode\": \"code\",\n          \"expr\": \"rate(attestation_cache_hit{job=~\\\"cl-.*-prysm-geth\\\"}[1m])/(rate(attestation_cache_miss{job=~\\\"cl-.*-prysm-geth\\\"}[1m])+rate(attestation_cache_hit{job=~\\\"cl-.*-prysm-geth\\\"}[1m]))\",\n          \"legendFormat\": \"{{job}}\",\n          \"range\": true,\n          \"refId\": \"A\"\n        }\n      ],\n      \"title\": \"Att Cache Hit Rate\",\n      \"type\": \"timeseries\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"palette-classic\"\n          },\n          \"custom\": {\n            \"axisCenteredZero\": false,\n            \"axisColorMode\": \"text\",\n            \"axisLabel\": \"\",\n            \"axisPlacement\": \"auto\",\n            \"barAlignment\": 0,\n            \"drawStyle\": \"line\",\n            \"fillOpacity\": 0,\n            \"gradientMode\": \"none\",\n            \"hideFrom\": {\n              \"legend\": false,\n              \"tooltip\": false,\n              \"viz\": false\n            },\n            \"lineInterpolation\": \"linear\",\n            \"lineWidth\": 1,\n            \"pointSize\": 5,\n            \"scaleDistribution\": {\n              \"type\": \"linear\"\n            },\n            \"showPoints\": \"auto\",\n            \"spanNulls\": false,\n            \"stacking\": {\n              \"group\": \"A\",\n              \"mode\": \"none\"\n            },\n            \"thresholdsStyle\": {\n              \"mode\": \"off\"\n            }\n          },\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\",\n                \"value\": null\n              },\n              {\n                \"color\": \"red\",\n                \"value\": 80\n              }\n            ]\n          }\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 6,\n        \"w\": 12,\n        \"x\": 0,\n        \"y\": 16\n      },\n      \"id\": 6,\n      \"options\": {\n        \"legend\": {\n          \"calcs\": [],\n          \"displayMode\": \"list\",\n          \"placement\": \"bottom\",\n          \"showLegend\": true\n        },\n        \"tooltip\": {\n          \"mode\": \"single\",\n          \"sort\": \"none\"\n        }\n      },\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"exemplar\": true,\n          \"expr\": \"beacon_participation_prev_epoch_target_attesting_gwei_total/beacon_participation_prev_epoch_active_gwei_total\",\n          \"interval\": \"\",\n          \"legendFormat\": \"\",\n          \"refId\": \"A\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"exemplar\": true,\n          \"expr\": \"beacon_previous_live_validators / beacon_previous_active_validators\",\n          \"hide\": false,\n          \"interval\": \"\",\n          \"legendFormat\": \"\",\n          \"refId\": \"B\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"exemplar\": true,\n          \"expr\": \"beacon_previous_correct_validators / beacon_previous_active_validators\",\n          \"hide\": false,\n          \"interval\": \"\",\n          \"legendFormat\": \"\",\n          \"refId\": \"C\"\n        }\n      ],\n      \"title\": \"Partipants\",\n      \"type\": \"timeseries\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\",\n                \"value\": null\n              },\n              {\n                \"color\": \"red\",\n                \"value\": 80\n              }\n            ]\n          },\n          \"unit\": \"short\"\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 8,\n        \"w\": 12,\n        \"x\": 0,\n        \"y\": 22\n      },\n      \"id\": 4,\n      \"options\": {\n        \"colorMode\": \"background\",\n        \"graphMode\": \"none\",\n        \"justifyMode\": \"auto\",\n        \"orientation\": \"auto\",\n        \"reduceOptions\": {\n          \"calcs\": [\n            \"lastNotNull\"\n          ],\n          \"fields\": \"\",\n          \"values\": false\n        },\n        \"textMode\": \"auto\"\n      },\n      \"pluginVersion\": \"9.2.3\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"exemplar\": true,\n          \"expr\": \"libp2p_peers{}\",\n          \"interval\": \"\",\n          \"legendFormat\": \"{{job}}\",\n          \"refId\": \"A\"\n        }\n      ],\n      \"title\": \"Peers\",\n      \"type\": \"stat\"\n    }\n  ],\n  \"schemaVersion\": 37,\n  \"style\": \"dark\",\n  \"tags\": [],\n  \"templating\": {\n    \"list\": []\n  },\n  \"time\": {\n    \"from\": \"now-30m\",\n    \"to\": \"now\"\n  },\n  \"timepicker\": {},\n  \"timezone\": \"\",\n  \"title\": \"Eth2 Merge Kurtosis Module Dashboard\",\n  \"uid\": \"QdTOwy-nz\",\n  \"version\": 11,\n  \"weekStart\": \"\"\n}\n"
  },
  {
    "path": "static_files/grafana-config/dashboards/ethereum-metrics-exporter-overview.json",
    "content": "{\n  \"annotations\": {\n    \"list\": [\n      {\n        \"builtIn\": 1,\n        \"datasource\": {\n          \"type\": \"datasource\",\n          \"uid\": \"grafana\"\n        },\n        \"enable\": true,\n        \"hide\": true,\n        \"iconColor\": \"rgba(0, 211, 255, 1)\",\n        \"name\": \"Annotations & Alerts\",\n        \"target\": {\n          \"limit\": 100,\n          \"matchAny\": false,\n          \"tags\": [],\n          \"type\": \"dashboard\"\n        },\n        \"type\": \"dashboard\"\n      }\n    ]\n  },\n  \"description\": \"Companion dashboard for https://github.com/ethpandaops/ethereum-metrics-exporter\",\n  \"editable\": true,\n  \"fiscalYearStartMonth\": 0,\n  \"gnetId\": 16277,\n  \"graphTooltip\": 0,\n  \"id\": 1,\n  \"links\": [],\n  \"liveNow\": false,\n  \"panels\": [\n    {\n      \"collapsed\": true,\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"UhcO3vy7z\"\n      },\n      \"gridPos\": {\n        \"h\": 1,\n        \"w\": 24,\n        \"x\": 0,\n        \"y\": 0\n      },\n      \"id\": 42,\n      \"panels\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"fieldConfig\": {\n            \"defaults\": {\n              \"color\": {\n                \"mode\": \"continuous-GrYlRd\"\n              },\n              \"custom\": {\n                \"align\": \"auto\",\n                \"cellOptions\": {\n                  \"type\": \"auto\"\n                },\n                \"inspect\": false\n              },\n              \"mappings\": [],\n              \"thresholds\": {\n                \"mode\": \"absolute\",\n                \"steps\": [\n                  {\n                    \"color\": \"green\"\n                  },\n                  {\n                    \"color\": \"red\",\n                    \"value\": 80\n                  }\n                ]\n              }\n            },\n            \"overrides\": []\n          },\n          \"gridPos\": {\n            \"h\": 13,\n            \"w\": 24,\n            \"x\": 0,\n            \"y\": 56\n          },\n          \"id\": 44,\n          \"options\": {\n            \"cellHeight\": \"sm\",\n            \"footer\": {\n              \"countRows\": false,\n              \"fields\": \"\",\n              \"reducer\": [\n                \"sum\"\n              ],\n              \"show\": false\n            },\n            \"showHeader\": false\n          },\n          \"pluginVersion\": \"9.5.12\",\n          \"targets\": [\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"PBFA97CFB590B2093\"\n              },\n              \"editorMode\": \"code\",\n              \"exemplar\": false,\n              \"expr\": \"max by (spec)(\\n    label_replace(\\n        {__name__=~\\\"eth_con_spec.*\\\"},\\n        \\\"spec\\\",\\n        \\\"$1\\\",\\n        \\\"__name__\\\",\\n        \\\"eth_con_spec_(.*)\\\"\\n    )\\n)\",\n              \"format\": \"table\",\n              \"instant\": true,\n              \"interval\": \"\",\n              \"legendFormat\": \"{{ spec }}\",\n              \"refId\": \"A\"\n            }\n          ],\n          \"title\": \"Consensus Spec\",\n          \"transformations\": [\n            {\n              \"id\": \"organize\",\n              \"options\": {\n                \"excludeByName\": {\n                  \"Time\": true\n                },\n                \"indexByName\": {},\n                \"renameByName\": {}\n              }\n            }\n          ],\n          \"type\": \"table\"\n        }\n      ],\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"UhcO3vy7z\"\n          },\n          \"refId\": \"A\"\n        }\n      ],\n      \"title\": \"Consensus Spec\",\n      \"type\": \"row\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"UhcO3vy7z\"\n      },\n      \"gridPos\": {\n        \"h\": 1,\n        \"w\": 24,\n        \"x\": 0,\n        \"y\": 1\n      },\n      \"id\": 5,\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"UhcO3vy7z\"\n          },\n          \"refId\": \"A\"\n        }\n      ],\n      \"title\": \"Overview\",\n      \"type\": \"row\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"palette-classic\"\n          },\n          \"custom\": {\n            \"axisCenteredZero\": false,\n            \"axisColorMode\": \"text\",\n            \"axisLabel\": \"\",\n            \"axisPlacement\": \"auto\",\n            \"barAlignment\": 0,\n            \"drawStyle\": \"line\",\n            \"fillOpacity\": 0,\n            \"gradientMode\": \"none\",\n            \"hideFrom\": {\n              \"legend\": false,\n              \"tooltip\": false,\n              \"viz\": false\n            },\n            \"lineInterpolation\": \"linear\",\n            \"lineWidth\": 1,\n            \"pointSize\": 5,\n            \"scaleDistribution\": {\n              \"type\": \"linear\"\n            },\n            \"showPoints\": \"never\",\n            \"spanNulls\": false,\n            \"stacking\": {\n              \"group\": \"A\",\n              \"mode\": \"none\"\n            },\n            \"thresholdsStyle\": {\n              \"mode\": \"off\"\n            }\n          },\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\",\n                \"value\": null\n              },\n              {\n                \"color\": \"red\",\n                \"value\": 80\n              }\n            ]\n          },\n          \"unit\": \"Cores\"\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 8,\n        \"w\": 12,\n        \"x\": 0,\n        \"y\": 2\n      },\n      \"id\": 57,\n      \"options\": {\n        \"legend\": {\n          \"calcs\": [],\n          \"displayMode\": \"list\",\n          \"placement\": \"bottom\",\n          \"showLegend\": true\n        },\n        \"tooltip\": {\n          \"mode\": \"single\",\n          \"sort\": \"none\"\n        }\n      },\n      \"pluginVersion\": \"8.4.2\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"editorMode\": \"code\",\n          \"exemplar\": true,\n          \"expr\": \"(rate(process_cpu_seconds_total[1m]))\\n\",\n          \"interval\": \"\",\n          \"legendFormat\": \"{{ job }}\",\n          \"range\": true,\n          \"refId\": \"A\"\n        }\n      ],\n      \"title\": \"CPU Usage\",\n      \"type\": \"timeseries\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"palette-classic\"\n          },\n          \"custom\": {\n            \"axisCenteredZero\": false,\n            \"axisColorMode\": \"text\",\n            \"axisLabel\": \"\",\n            \"axisPlacement\": \"auto\",\n            \"barAlignment\": 0,\n            \"drawStyle\": \"line\",\n            \"fillOpacity\": 0,\n            \"gradientMode\": \"none\",\n            \"hideFrom\": {\n              \"legend\": false,\n              \"tooltip\": false,\n              \"viz\": false\n            },\n            \"lineInterpolation\": \"linear\",\n            \"lineWidth\": 1,\n            \"pointSize\": 5,\n            \"scaleDistribution\": {\n              \"type\": \"linear\"\n            },\n            \"showPoints\": \"never\",\n            \"spanNulls\": false,\n            \"stacking\": {\n              \"group\": \"A\",\n              \"mode\": \"none\"\n            },\n            \"thresholdsStyle\": {\n              \"mode\": \"off\"\n            }\n          },\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\",\n                \"value\": null\n              },\n              {\n                \"color\": \"red\",\n                \"value\": 80\n              }\n            ]\n          },\n          \"unit\": \"bytes\"\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 8,\n        \"w\": 12,\n        \"x\": 12,\n        \"y\": 2\n      },\n      \"id\": 58,\n      \"options\": {\n        \"legend\": {\n          \"calcs\": [],\n          \"displayMode\": \"list\",\n          \"placement\": \"bottom\",\n          \"showLegend\": true\n        },\n        \"tooltip\": {\n          \"mode\": \"single\",\n          \"sort\": \"none\"\n        }\n      },\n      \"pluginVersion\": \"8.4.2\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"editorMode\": \"code\",\n          \"exemplar\": true,\n          \"expr\": \"process_resident_memory_bytes\",\n          \"interval\": \"\",\n          \"legendFormat\": \"{{ job }}\",\n          \"range\": true,\n          \"refId\": \"A\"\n        }\n      ],\n      \"title\": \"Memory Usage\",\n      \"type\": \"timeseries\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"palette-classic\"\n          },\n          \"custom\": {\n            \"axisCenteredZero\": false,\n            \"axisColorMode\": \"text\",\n            \"axisLabel\": \"\",\n            \"axisPlacement\": \"auto\",\n            \"barAlignment\": 0,\n            \"drawStyle\": \"line\",\n            \"fillOpacity\": 0,\n            \"gradientMode\": \"none\",\n            \"hideFrom\": {\n              \"legend\": false,\n              \"tooltip\": false,\n              \"viz\": false\n            },\n            \"lineInterpolation\": \"linear\",\n            \"lineStyle\": {\n              \"fill\": \"solid\"\n            },\n            \"lineWidth\": 1,\n            \"pointSize\": 5,\n            \"scaleDistribution\": {\n              \"type\": \"linear\"\n            },\n            \"showPoints\": \"never\",\n            \"spanNulls\": false,\n            \"stacking\": {\n              \"group\": \"A\",\n              \"mode\": \"normal\"\n            },\n            \"thresholdsStyle\": {\n              \"mode\": \"off\"\n            }\n          },\n          \"mappings\": [],\n          \"min\": 0,\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\",\n                \"value\": null\n              },\n              {\n                \"color\": \"red\",\n                \"value\": 80\n              }\n            ]\n          },\n          \"unit\": \"none\"\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 7,\n        \"w\": 4,\n        \"x\": 0,\n        \"y\": 10\n      },\n      \"id\": 10,\n      \"options\": {\n        \"legend\": {\n          \"calcs\": [],\n          \"displayMode\": \"list\",\n          \"placement\": \"bottom\",\n          \"showLegend\": true\n        },\n        \"tooltip\": {\n          \"mode\": \"single\",\n          \"sort\": \"none\"\n        }\n      },\n      \"pluginVersion\": \"8.4.2\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"exemplar\": true,\n          \"expr\": \"sum by (version)(eth_exe_web3_client_version)\",\n          \"interval\": \"\",\n          \"legendFormat\": \"{{ version }}\",\n          \"refId\": \"A\"\n        }\n      ],\n      \"title\": \"Execution Clients (stacked)\",\n      \"type\": \"timeseries\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"palette-classic\"\n          },\n          \"custom\": {\n            \"axisCenteredZero\": false,\n            \"axisColorMode\": \"text\",\n            \"axisLabel\": \"\",\n            \"axisPlacement\": \"auto\",\n            \"barAlignment\": 0,\n            \"drawStyle\": \"line\",\n            \"fillOpacity\": 0,\n            \"gradientMode\": \"none\",\n            \"hideFrom\": {\n              \"legend\": false,\n              \"tooltip\": false,\n              \"viz\": false\n            },\n            \"lineInterpolation\": \"linear\",\n            \"lineWidth\": 1,\n            \"pointSize\": 5,\n            \"scaleDistribution\": {\n              \"type\": \"linear\"\n            },\n            \"showPoints\": \"never\",\n            \"spanNulls\": false,\n            \"stacking\": {\n              \"group\": \"A\",\n              \"mode\": \"normal\"\n            },\n            \"thresholdsStyle\": {\n              \"mode\": \"off\"\n            }\n          },\n          \"mappings\": [],\n          \"min\": 0,\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\",\n                \"value\": null\n              },\n              {\n                \"color\": \"red\",\n                \"value\": 80\n              }\n            ]\n          },\n          \"unit\": \"none\"\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 7,\n        \"w\": 4,\n        \"x\": 4,\n        \"y\": 10\n      },\n      \"id\": 31,\n      \"options\": {\n        \"legend\": {\n          \"calcs\": [],\n          \"displayMode\": \"list\",\n          \"placement\": \"bottom\",\n          \"showLegend\": true\n        },\n        \"tooltip\": {\n          \"mode\": \"single\",\n          \"sort\": \"none\"\n        }\n      },\n      \"pluginVersion\": \"8.4.2\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"editorMode\": \"code\",\n          \"exemplar\": true,\n          \"expr\": \"sum by (version)(eth_con_node_version)\",\n          \"interval\": \"\",\n          \"legendFormat\": \"{{ version }}\",\n          \"range\": true,\n          \"refId\": \"A\"\n        }\n      ],\n      \"title\": \"Consensus Clients (stacked)\",\n      \"type\": \"timeseries\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"palette-classic\"\n          },\n          \"custom\": {\n            \"axisCenteredZero\": false,\n            \"axisColorMode\": \"text\",\n            \"axisLabel\": \"\",\n            \"axisPlacement\": \"auto\",\n            \"barAlignment\": 0,\n            \"drawStyle\": \"line\",\n            \"fillOpacity\": 0,\n            \"gradientMode\": \"none\",\n            \"hideFrom\": {\n              \"legend\": false,\n              \"tooltip\": false,\n              \"viz\": false\n            },\n            \"lineInterpolation\": \"linear\",\n            \"lineWidth\": 1,\n            \"pointSize\": 5,\n            \"scaleDistribution\": {\n              \"type\": \"linear\"\n            },\n            \"showPoints\": \"never\",\n            \"spanNulls\": false,\n            \"stacking\": {\n              \"group\": \"A\",\n              \"mode\": \"none\"\n            },\n            \"thresholdsStyle\": {\n              \"mode\": \"off\"\n            }\n          },\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\",\n                \"value\": null\n              },\n              {\n                \"color\": \"red\",\n                \"value\": 80\n              }\n            ]\n          }\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 7,\n        \"w\": 4,\n        \"x\": 8,\n        \"y\": 10\n      },\n      \"id\": 61,\n      \"options\": {\n        \"legend\": {\n          \"calcs\": [],\n          \"displayMode\": \"list\",\n          \"placement\": \"bottom\",\n          \"showLegend\": true\n        },\n        \"tooltip\": {\n          \"mode\": \"single\",\n          \"sort\": \"none\"\n        }\n      },\n      \"pluginVersion\": \"9.5.12\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"editorMode\": \"code\",\n          \"expr\": \"eth_exe_chain_id\",\n          \"legendFormat\": \"{{instance}}\",\n          \"range\": true,\n          \"refId\": \"A\"\n        }\n      ],\n      \"title\": \"Execution Chain ID\",\n      \"type\": \"timeseries\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"blue\",\n                \"value\": null\n              }\n            ]\n          },\n          \"unit\": \"short\"\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 7,\n        \"w\": 6,\n        \"x\": 12,\n        \"y\": 10\n      },\n      \"id\": 73,\n      \"options\": {\n        \"colorMode\": \"value\",\n        \"graphMode\": \"none\",\n        \"justifyMode\": \"auto\",\n        \"orientation\": \"horizontal\",\n        \"reduceOptions\": {\n          \"calcs\": [\n            \"lastNotNull\"\n          ],\n          \"fields\": \"\",\n          \"values\": false\n        },\n        \"textMode\": \"value_and_name\"\n      },\n      \"pluginVersion\": \"9.5.12\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"editorMode\": \"code\",\n          \"exemplar\": true,\n          \"expr\": \"count(eth_con_node_version{version=~\\\".*Lighthouse.*\\\"})\",\n          \"interval\": \"\",\n          \"legendFormat\": \"Lighthouse\",\n          \"range\": true,\n          \"refId\": \"A\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"editorMode\": \"code\",\n          \"exemplar\": true,\n          \"expr\": \"count(eth_con_node_version{version=~\\\".*Nimbus.*\\\"})\",\n          \"hide\": false,\n          \"interval\": \"\",\n          \"legendFormat\": \"Nimbus\",\n          \"range\": true,\n          \"refId\": \"B\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"editorMode\": \"code\",\n          \"exemplar\": true,\n          \"expr\": \"count(eth_con_node_version{version=~\\\".*teku.*\\\"})\",\n          \"hide\": false,\n          \"interval\": \"\",\n          \"legendFormat\": \"Teku\",\n          \"range\": true,\n          \"refId\": \"C\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"editorMode\": \"code\",\n          \"exemplar\": true,\n          \"expr\": \"count(eth_con_node_version{version=~\\\".*Lodestar.*\\\"})\",\n          \"hide\": false,\n          \"interval\": \"\",\n          \"legendFormat\": \"Lodestar\",\n          \"range\": true,\n          \"refId\": \"D\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"editorMode\": \"code\",\n          \"exemplar\": true,\n          \"expr\": \"count(eth_con_node_version{version=~\\\".*Grandine.*\\\"})\",\n          \"hide\": false,\n          \"interval\": \"\",\n          \"legendFormat\": \"Grandine\",\n          \"range\": true,\n          \"refId\": \"E\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"editorMode\": \"code\",\n          \"exemplar\": true,\n          \"expr\": \"count(eth_con_node_version{version=~\\\".*Prysm.*\\\"})\",\n          \"hide\": false,\n          \"interval\": \"\",\n          \"legendFormat\": \"Prysm\",\n          \"range\": true,\n          \"refId\": \"F\"\n        }\n      ],\n      \"title\": \"Consensus Clients\",\n      \"type\": \"stat\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"blue\",\n                \"value\": null\n              }\n            ]\n          },\n          \"unit\": \"short\"\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 7,\n        \"w\": 6,\n        \"x\": 18,\n        \"y\": 10\n      },\n      \"id\": 74,\n      \"options\": {\n        \"colorMode\": \"value\",\n        \"graphMode\": \"none\",\n        \"justifyMode\": \"auto\",\n        \"orientation\": \"horizontal\",\n        \"reduceOptions\": {\n          \"calcs\": [\n            \"lastNotNull\"\n          ],\n          \"fields\": \"\",\n          \"values\": false\n        },\n        \"textMode\": \"value_and_name\"\n      },\n      \"pluginVersion\": \"9.5.12\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"editorMode\": \"code\",\n          \"exemplar\": true,\n          \"expr\": \"count(eth_exe_web3_client_version{version=~\\\".*Geth.*\\\"})\",\n          \"interval\": \"\",\n          \"legendFormat\": \"Geth\",\n          \"range\": true,\n          \"refId\": \"A\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"editorMode\": \"code\",\n          \"exemplar\": true,\n          \"expr\": \"count(eth_exe_web3_client_version{version=~\\\".*Nethermind.*\\\"})\",\n          \"hide\": false,\n          \"interval\": \"\",\n          \"legendFormat\": \"Nethermind\",\n          \"range\": true,\n          \"refId\": \"B\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"editorMode\": \"code\",\n          \"exemplar\": true,\n          \"expr\": \"count(eth_exe_web3_client_version{version=~\\\".*besu.*\\\"})\",\n          \"hide\": false,\n          \"interval\": \"\",\n          \"legendFormat\": \"Besu\",\n          \"range\": true,\n          \"refId\": \"C\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"editorMode\": \"code\",\n          \"exemplar\": true,\n          \"expr\": \"count(eth_exe_web3_client_version{version=~\\\".*erigon.*\\\"})\",\n          \"hide\": false,\n          \"interval\": \"\",\n          \"legendFormat\": \"Erigon\",\n          \"range\": true,\n          \"refId\": \"D\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"editorMode\": \"code\",\n          \"exemplar\": true,\n          \"expr\": \"count(eth_exe_web3_client_version{version=~\\\".*reth.*\\\"})\",\n          \"hide\": false,\n          \"interval\": \"\",\n          \"legendFormat\": \"Reth\",\n          \"range\": true,\n          \"refId\": \"E\"\n        }\n      ],\n      \"title\": \"Execution Clients\",\n      \"type\": \"stat\"\n    },\n    {\n      \"collapsed\": false,\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"UhcO3vy7z\"\n      },\n      \"gridPos\": {\n        \"h\": 1,\n        \"w\": 24,\n        \"x\": 0,\n        \"y\": 17\n      },\n      \"id\": 7,\n      \"panels\": [],\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"UhcO3vy7z\"\n          },\n          \"refId\": \"A\"\n        }\n      ],\n      \"title\": \"Consensus Layer\",\n      \"type\": \"row\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"palette-classic\"\n          },\n          \"custom\": {\n            \"axisCenteredZero\": false,\n            \"axisColorMode\": \"text\",\n            \"axisLabel\": \"\",\n            \"axisPlacement\": \"auto\",\n            \"barAlignment\": 0,\n            \"drawStyle\": \"line\",\n            \"fillOpacity\": 0,\n            \"gradientMode\": \"none\",\n            \"hideFrom\": {\n              \"legend\": false,\n              \"tooltip\": false,\n              \"viz\": false\n            },\n            \"lineInterpolation\": \"linear\",\n            \"lineWidth\": 1,\n            \"pointSize\": 1,\n            \"scaleDistribution\": {\n              \"type\": \"linear\"\n            },\n            \"showPoints\": \"auto\",\n            \"spanNulls\": false,\n            \"stacking\": {\n              \"group\": \"A\",\n              \"mode\": \"none\"\n            },\n            \"thresholdsStyle\": {\n              \"mode\": \"off\"\n            }\n          },\n          \"decimals\": 0,\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\",\n                \"value\": null\n              },\n              {\n                \"color\": \"red\",\n                \"value\": 80\n              }\n            ]\n          },\n          \"unit\": \"none\"\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 6,\n        \"w\": 6,\n        \"x\": 0,\n        \"y\": 18\n      },\n      \"id\": 21,\n      \"options\": {\n        \"legend\": {\n          \"calcs\": [],\n          \"displayMode\": \"list\",\n          \"placement\": \"bottom\",\n          \"showLegend\": false\n        },\n        \"tooltip\": {\n          \"mode\": \"single\",\n          \"sort\": \"none\"\n        }\n      },\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"editorMode\": \"code\",\n          \"exemplar\": true,\n          \"expr\": \"count(count by (instance)(eth_con_sync_is_syncing))\",\n          \"interval\": \"\",\n          \"legendFormat\": \"\",\n          \"range\": true,\n          \"refId\": \"A\"\n        }\n      ],\n      \"title\": \"Nodes\",\n      \"type\": \"timeseries\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"palette-classic\"\n          },\n          \"custom\": {\n            \"axisCenteredZero\": false,\n            \"axisColorMode\": \"text\",\n            \"axisLabel\": \"\",\n            \"axisPlacement\": \"auto\",\n            \"barAlignment\": 0,\n            \"drawStyle\": \"line\",\n            \"fillOpacity\": 0,\n            \"gradientMode\": \"none\",\n            \"hideFrom\": {\n              \"legend\": false,\n              \"tooltip\": false,\n              \"viz\": false\n            },\n            \"lineInterpolation\": \"linear\",\n            \"lineWidth\": 1,\n            \"pointSize\": 1,\n            \"scaleDistribution\": {\n              \"type\": \"linear\"\n            },\n            \"showPoints\": \"auto\",\n            \"spanNulls\": false,\n            \"stacking\": {\n              \"group\": \"A\",\n              \"mode\": \"none\"\n            },\n            \"thresholdsStyle\": {\n              \"mode\": \"off\"\n            }\n          },\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\",\n                \"value\": null\n              }\n            ]\n          },\n          \"unit\": \"none\"\n        },\n        \"overrides\": [\n          {\n            \"matcher\": {\n              \"id\": \"byName\",\n              \"options\": \"Synced\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"color\",\n                \"value\": {\n                  \"fixedColor\": \"semi-dark-green\",\n                  \"mode\": \"fixed\"\n                }\n              }\n            ]\n          },\n          {\n            \"matcher\": {\n              \"id\": \"byName\",\n              \"options\": \"Out of sync\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"color\",\n                \"value\": {\n                  \"fixedColor\": \"dark-red\",\n                  \"mode\": \"fixed\"\n                }\n              }\n            ]\n          }\n        ]\n      },\n      \"gridPos\": {\n        \"h\": 6,\n        \"w\": 3,\n        \"x\": 6,\n        \"y\": 18\n      },\n      \"id\": 22,\n      \"options\": {\n        \"legend\": {\n          \"calcs\": [],\n          \"displayMode\": \"list\",\n          \"placement\": \"bottom\",\n          \"showLegend\": true\n        },\n        \"tooltip\": {\n          \"mode\": \"single\",\n          \"sort\": \"none\"\n        }\n      },\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"editorMode\": \"code\",\n          \"expr\": \"count(count by (instance)(eth_con_sync_is_syncing{} == 0))\",\n          \"legendFormat\": \"Synced\",\n          \"range\": true,\n          \"refId\": \"A\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"editorMode\": \"code\",\n          \"expr\": \"count(count by (instance)(eth_con_sync_is_syncing{} == 1))\",\n          \"hide\": false,\n          \"legendFormat\": \"Out of sync\",\n          \"range\": true,\n          \"refId\": \"B\"\n        }\n      ],\n      \"title\": \"Sync Status\",\n      \"type\": \"timeseries\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"palette-classic\"\n          },\n          \"custom\": {\n            \"axisCenteredZero\": false,\n            \"axisColorMode\": \"text\",\n            \"axisLabel\": \"\",\n            \"axisPlacement\": \"auto\",\n            \"barAlignment\": 0,\n            \"drawStyle\": \"line\",\n            \"fillOpacity\": 0,\n            \"gradientMode\": \"none\",\n            \"hideFrom\": {\n              \"legend\": false,\n              \"tooltip\": false,\n              \"viz\": false\n            },\n            \"lineInterpolation\": \"linear\",\n            \"lineWidth\": 1,\n            \"pointSize\": 5,\n            \"scaleDistribution\": {\n              \"type\": \"linear\"\n            },\n            \"showPoints\": \"never\",\n            \"spanNulls\": false,\n            \"stacking\": {\n              \"group\": \"A\",\n              \"mode\": \"none\"\n            },\n            \"thresholdsStyle\": {\n              \"mode\": \"off\"\n            }\n          },\n          \"decimals\": 0,\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\",\n                \"value\": null\n              },\n              {\n                \"color\": \"red\",\n                \"value\": 80\n              }\n            ]\n          }\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 6,\n        \"w\": 4,\n        \"x\": 9,\n        \"y\": 18\n      },\n      \"id\": 12,\n      \"options\": {\n        \"legend\": {\n          \"calcs\": [],\n          \"displayMode\": \"list\",\n          \"placement\": \"bottom\",\n          \"showLegend\": true\n        },\n        \"tooltip\": {\n          \"mode\": \"single\",\n          \"sort\": \"none\"\n        }\n      },\n      \"pluginVersion\": \"9.5.12\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"editorMode\": \"code\",\n          \"exemplar\": true,\n          \"expr\": \"eth_con_beacon_slot{block_id=\\\"head\\\"}\",\n          \"interval\": \"\",\n          \"legendFormat\": \"{{ instance }}\",\n          \"range\": true,\n          \"refId\": \"A\"\n        }\n      ],\n      \"title\": \"Head Slot\",\n      \"type\": \"timeseries\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"palette-classic\"\n          },\n          \"custom\": {\n            \"axisCenteredZero\": false,\n            \"axisColorMode\": \"text\",\n            \"axisLabel\": \"\",\n            \"axisPlacement\": \"auto\",\n            \"barAlignment\": 0,\n            \"drawStyle\": \"line\",\n            \"fillOpacity\": 0,\n            \"gradientMode\": \"none\",\n            \"hideFrom\": {\n              \"legend\": false,\n              \"tooltip\": false,\n              \"viz\": false\n            },\n            \"lineInterpolation\": \"linear\",\n            \"lineWidth\": 1,\n            \"pointSize\": 1,\n            \"scaleDistribution\": {\n              \"type\": \"linear\"\n            },\n            \"showPoints\": \"auto\",\n            \"spanNulls\": false,\n            \"stacking\": {\n              \"group\": \"A\",\n              \"mode\": \"none\"\n            },\n            \"thresholdsStyle\": {\n              \"mode\": \"off\"\n            }\n          },\n          \"decimals\": 0,\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\",\n                \"value\": null\n              },\n              {\n                \"color\": \"red\",\n                \"value\": 80\n              }\n            ]\n          }\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 6,\n        \"w\": 4,\n        \"x\": 13,\n        \"y\": 18\n      },\n      \"id\": 70,\n      \"options\": {\n        \"legend\": {\n          \"calcs\": [],\n          \"displayMode\": \"list\",\n          \"placement\": \"bottom\",\n          \"showLegend\": true\n        },\n        \"tooltip\": {\n          \"mode\": \"single\",\n          \"sort\": \"none\"\n        }\n      },\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"editorMode\": \"code\",\n          \"exemplar\": true,\n          \"expr\": \"floor(max by (instance)(eth_con_beacon_slot{block_id=\\\"head\\\"}) / max by (instance)(eth_con_spec_slots_per_epoch))\",\n          \"interval\": \"\",\n          \"legendFormat\": \"{{ instance }}\",\n          \"range\": true,\n          \"refId\": \"A\"\n        }\n      ],\n      \"title\": \"Epoch\",\n      \"type\": \"timeseries\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"palette-classic\"\n          },\n          \"custom\": {\n            \"axisCenteredZero\": false,\n            \"axisColorMode\": \"text\",\n            \"axisLabel\": \"\",\n            \"axisPlacement\": \"auto\",\n            \"barAlignment\": 0,\n            \"drawStyle\": \"line\",\n            \"fillOpacity\": 0,\n            \"gradientMode\": \"none\",\n            \"hideFrom\": {\n              \"legend\": false,\n              \"tooltip\": false,\n              \"viz\": false\n            },\n            \"lineInterpolation\": \"linear\",\n            \"lineWidth\": 1,\n            \"pointSize\": 1,\n            \"scaleDistribution\": {\n              \"type\": \"linear\"\n            },\n            \"showPoints\": \"auto\",\n            \"spanNulls\": false,\n            \"stacking\": {\n              \"group\": \"A\",\n              \"mode\": \"none\"\n            },\n            \"thresholdsStyle\": {\n              \"mode\": \"off\"\n            }\n          },\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\",\n                \"value\": null\n              },\n              {\n                \"color\": \"red\",\n                \"value\": 80\n              }\n            ]\n          }\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 6,\n        \"w\": 7,\n        \"x\": 17,\n        \"y\": 18\n      },\n      \"id\": 59,\n      \"options\": {\n        \"legend\": {\n          \"calcs\": [],\n          \"displayMode\": \"list\",\n          \"placement\": \"bottom\",\n          \"showLegend\": true\n        },\n        \"tooltip\": {\n          \"mode\": \"single\",\n          \"sort\": \"none\"\n        }\n      },\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"editorMode\": \"code\",\n          \"exemplar\": true,\n          \"expr\": \"eth_con_beacon_finality_checkpoint_epochs{checkpoint=\\\"finalized\\\"}\",\n          \"interval\": \"\",\n          \"legendFormat\": \"{{ instance }}\",\n          \"range\": true,\n          \"refId\": \"A\"\n        }\n      ],\n      \"title\": \"Finalized Checkpoint\",\n      \"type\": \"timeseries\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"palette-classic\"\n          },\n          \"custom\": {\n            \"axisCenteredZero\": false,\n            \"axisColorMode\": \"text\",\n            \"axisLabel\": \"\",\n            \"axisPlacement\": \"auto\",\n            \"barAlignment\": 0,\n            \"drawStyle\": \"line\",\n            \"fillOpacity\": 0,\n            \"gradientMode\": \"none\",\n            \"hideFrom\": {\n              \"legend\": false,\n              \"tooltip\": false,\n              \"viz\": false\n            },\n            \"lineInterpolation\": \"linear\",\n            \"lineWidth\": 1,\n            \"pointSize\": 1,\n            \"scaleDistribution\": {\n              \"type\": \"linear\"\n            },\n            \"showPoints\": \"auto\",\n            \"spanNulls\": false,\n            \"stacking\": {\n              \"group\": \"A\",\n              \"mode\": \"none\"\n            },\n            \"thresholdsStyle\": {\n              \"mode\": \"off\"\n            }\n          },\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\",\n                \"value\": null\n              },\n              {\n                \"color\": \"red\",\n                \"value\": 80\n              }\n            ]\n          },\n          \"unit\": \"Slots\"\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 7,\n        \"w\": 5,\n        \"x\": 0,\n        \"y\": 24\n      },\n      \"id\": 15,\n      \"options\": {\n        \"legend\": {\n          \"calcs\": [],\n          \"displayMode\": \"list\",\n          \"placement\": \"bottom\",\n          \"showLegend\": true\n        },\n        \"tooltip\": {\n          \"mode\": \"single\",\n          \"sort\": \"none\"\n        }\n      },\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"editorMode\": \"code\",\n          \"exemplar\": true,\n          \"expr\": \"sum by (instance)(\\n    eth_con_beacon_slot{block_id=\\\"head\\\"}\\n)\\n-\\nsum by (instance) (\\n    eth_con_beacon_slot{block_id=\\\"finalized\\\"}\\n) != 0\",\n          \"hide\": false,\n          \"interval\": \"1m\",\n          \"legendFormat\": \"{{ instance }}\",\n          \"range\": true,\n          \"refId\": \"B\"\n        }\n      ],\n      \"title\": \"Finalized -> Head Slot distance\",\n      \"type\": \"timeseries\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"palette-classic\"\n          },\n          \"custom\": {\n            \"axisCenteredZero\": false,\n            \"axisColorMode\": \"text\",\n            \"axisLabel\": \"\",\n            \"axisPlacement\": \"auto\",\n            \"barAlignment\": 0,\n            \"drawStyle\": \"line\",\n            \"fillOpacity\": 0,\n            \"gradientMode\": \"none\",\n            \"hideFrom\": {\n              \"legend\": false,\n              \"tooltip\": false,\n              \"viz\": false\n            },\n            \"lineInterpolation\": \"linear\",\n            \"lineWidth\": 1,\n            \"pointSize\": 1,\n            \"scaleDistribution\": {\n              \"type\": \"linear\"\n            },\n            \"showPoints\": \"auto\",\n            \"spanNulls\": false,\n            \"stacking\": {\n              \"group\": \"A\",\n              \"mode\": \"none\"\n            },\n            \"thresholdsStyle\": {\n              \"mode\": \"off\"\n            }\n          },\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\",\n                \"value\": null\n              },\n              {\n                \"color\": \"red\",\n                \"value\": 80\n              }\n            ]\n          },\n          \"unit\": \"none\"\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 7,\n        \"w\": 5,\n        \"x\": 5,\n        \"y\": 24\n      },\n      \"id\": 60,\n      \"options\": {\n        \"legend\": {\n          \"calcs\": [],\n          \"displayMode\": \"list\",\n          \"placement\": \"bottom\",\n          \"showLegend\": true\n        },\n        \"tooltip\": {\n          \"mode\": \"single\",\n          \"sort\": \"none\"\n        }\n      },\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"UhcO3vy7z\"\n          },\n          \"editorMode\": \"code\",\n          \"exemplar\": true,\n          \"expr\": \"sum by (instance)(eth_con_peers)\",\n          \"interval\": \"\",\n          \"legendFormat\": \"{{ instance }}\",\n          \"range\": true,\n          \"refId\": \"A\"\n        }\n      ],\n      \"title\": \"Peers\",\n      \"type\": \"timeseries\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"palette-classic\"\n          },\n          \"custom\": {\n            \"axisCenteredZero\": false,\n            \"axisColorMode\": \"text\",\n            \"axisLabel\": \"\",\n            \"axisPlacement\": \"auto\",\n            \"barAlignment\": 0,\n            \"drawStyle\": \"line\",\n            \"fillOpacity\": 0,\n            \"gradientMode\": \"none\",\n            \"hideFrom\": {\n              \"legend\": false,\n              \"tooltip\": false,\n              \"viz\": false\n            },\n            \"lineInterpolation\": \"linear\",\n            \"lineWidth\": 1,\n            \"pointSize\": 1,\n            \"scaleDistribution\": {\n              \"type\": \"linear\"\n            },\n            \"showPoints\": \"auto\",\n            \"spanNulls\": false,\n            \"stacking\": {\n              \"group\": \"A\",\n              \"mode\": \"none\"\n            },\n            \"thresholdsStyle\": {\n              \"mode\": \"off\"\n            }\n          },\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\",\n                \"value\": null\n              },\n              {\n                \"color\": \"red\",\n                \"value\": 80\n              }\n            ]\n          },\n          \"unit\": \"none\"\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 7,\n        \"w\": 5,\n        \"x\": 10,\n        \"y\": 24\n      },\n      \"id\": 28,\n      \"options\": {\n        \"legend\": {\n          \"calcs\": [],\n          \"displayMode\": \"list\",\n          \"placement\": \"bottom\",\n          \"showLegend\": true\n        },\n        \"tooltip\": {\n          \"mode\": \"single\",\n          \"sort\": \"none\"\n        }\n      },\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"UhcO3vy7z\"\n          },\n          \"editorMode\": \"code\",\n          \"exemplar\": true,\n          \"expr\": \"eth_con_fork_epoch{fork!=\\\"GENESIS\\\"}\",\n          \"interval\": \"\",\n          \"legendFormat\": \"{{instance }} {{ fork }}\",\n          \"range\": true,\n          \"refId\": \"A\"\n        }\n      ],\n      \"title\": \"Fork Epochs\",\n      \"type\": \"timeseries\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"custom\": {\n            \"hideFrom\": {\n              \"legend\": false,\n              \"tooltip\": false,\n              \"viz\": false\n            },\n            \"scaleDistribution\": {\n              \"type\": \"linear\"\n            }\n          }\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 7,\n        \"w\": 9,\n        \"x\": 15,\n        \"y\": 24\n      },\n      \"id\": 67,\n      \"options\": {\n        \"calculate\": true,\n        \"calculation\": {\n          \"xBuckets\": {\n            \"mode\": \"size\"\n          },\n          \"yBuckets\": {\n            \"mode\": \"count\",\n            \"value\": \"15\"\n          }\n        },\n        \"cellGap\": 1,\n        \"color\": {\n          \"exponent\": 0.5,\n          \"fill\": \"dark-orange\",\n          \"mode\": \"scheme\",\n          \"reverse\": false,\n          \"scale\": \"exponential\",\n          \"scheme\": \"Oranges\",\n          \"steps\": 128\n        },\n        \"exemplars\": {\n          \"color\": \"rgba(255,0,255,0.7)\"\n        },\n        \"filterValues\": {\n          \"le\": 1e-9\n        },\n        \"legend\": {\n          \"show\": true\n        },\n        \"rowsFrame\": {\n          \"layout\": \"auto\"\n        },\n        \"tooltip\": {\n          \"show\": true,\n          \"yHistogram\": false\n        },\n        \"yAxis\": {\n          \"axisPlacement\": \"left\",\n          \"max\": \"12\",\n          \"min\": 0,\n          \"reverse\": false,\n          \"unit\": \"s\"\n        }\n      },\n      \"pluginVersion\": \"9.5.12\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"editorMode\": \"code\",\n          \"exemplar\": false,\n          \"expr\": \"avg(increase(eth_con_beacon_proposer_delay_bucket{}[1m])) by (le)\",\n          \"interval\": \"1m\",\n          \"legendFormat\": \"{{ instance }}\",\n          \"range\": true,\n          \"refId\": \"A\"\n        }\n      ],\n      \"title\": \"Proposer delay\",\n      \"type\": \"heatmap\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"palette-classic\"\n          },\n          \"custom\": {\n            \"axisCenteredZero\": false,\n            \"axisColorMode\": \"text\",\n            \"axisLabel\": \"\",\n            \"axisPlacement\": \"auto\",\n            \"barAlignment\": 0,\n            \"drawStyle\": \"line\",\n            \"fillOpacity\": 0,\n            \"gradientMode\": \"none\",\n            \"hideFrom\": {\n              \"legend\": false,\n              \"tooltip\": false,\n              \"viz\": false\n            },\n            \"lineInterpolation\": \"linear\",\n            \"lineWidth\": 1,\n            \"pointSize\": 1,\n            \"scaleDistribution\": {\n              \"type\": \"linear\"\n            },\n            \"showPoints\": \"auto\",\n            \"spanNulls\": false,\n            \"stacking\": {\n              \"group\": \"A\",\n              \"mode\": \"none\"\n            },\n            \"thresholdsStyle\": {\n              \"mode\": \"off\"\n            }\n          },\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\",\n                \"value\": null\n              },\n              {\n                \"color\": \"red\",\n                \"value\": 80\n              }\n            ]\n          },\n          \"unit\": \"none\"\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 6,\n        \"w\": 3,\n        \"x\": 0,\n        \"y\": 31\n      },\n      \"id\": 62,\n      \"options\": {\n        \"legend\": {\n          \"calcs\": [],\n          \"displayMode\": \"list\",\n          \"placement\": \"bottom\",\n          \"showLegend\": true\n        },\n        \"tooltip\": {\n          \"mode\": \"single\",\n          \"sort\": \"none\"\n        }\n      },\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"editorMode\": \"code\",\n          \"exemplar\": true,\n          \"expr\": \"sum by (instance)(increase(eth_con_event_count{event=\\\"attestation\\\"}[1m]))\",\n          \"hide\": false,\n          \"interval\": \"1m\",\n          \"legendFormat\": \"{{ instance }}\",\n          \"range\": true,\n          \"refId\": \"A\"\n        }\n      ],\n      \"title\": \"Attestation Events\",\n      \"type\": \"timeseries\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"palette-classic\"\n          },\n          \"custom\": {\n            \"axisCenteredZero\": false,\n            \"axisColorMode\": \"text\",\n            \"axisLabel\": \"\",\n            \"axisPlacement\": \"auto\",\n            \"barAlignment\": 0,\n            \"drawStyle\": \"line\",\n            \"fillOpacity\": 0,\n            \"gradientMode\": \"none\",\n            \"hideFrom\": {\n              \"legend\": false,\n              \"tooltip\": false,\n              \"viz\": false\n            },\n            \"lineInterpolation\": \"linear\",\n            \"lineWidth\": 1,\n            \"pointSize\": 1,\n            \"scaleDistribution\": {\n              \"type\": \"linear\"\n            },\n            \"showPoints\": \"auto\",\n            \"spanNulls\": false,\n            \"stacking\": {\n              \"group\": \"A\",\n              \"mode\": \"none\"\n            },\n            \"thresholdsStyle\": {\n              \"mode\": \"off\"\n            }\n          },\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\",\n                \"value\": null\n              },\n              {\n                \"color\": \"red\",\n                \"value\": 80\n              }\n            ]\n          },\n          \"unit\": \"none\"\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 6,\n        \"w\": 3,\n        \"x\": 3,\n        \"y\": 31\n      },\n      \"id\": 63,\n      \"options\": {\n        \"legend\": {\n          \"calcs\": [],\n          \"displayMode\": \"list\",\n          \"placement\": \"bottom\",\n          \"showLegend\": true\n        },\n        \"tooltip\": {\n          \"mode\": \"single\",\n          \"sort\": \"none\"\n        }\n      },\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"editorMode\": \"code\",\n          \"exemplar\": true,\n          \"expr\": \"sum by (instance)(increase(eth_con_event_count{event=\\\"head\\\"}[1m]))\",\n          \"hide\": false,\n          \"interval\": \"1m\",\n          \"legendFormat\": \"{{ instance }}\",\n          \"range\": true,\n          \"refId\": \"A\"\n        }\n      ],\n      \"title\": \"Head Events\",\n      \"type\": \"timeseries\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"palette-classic\"\n          },\n          \"custom\": {\n            \"axisCenteredZero\": false,\n            \"axisColorMode\": \"text\",\n            \"axisLabel\": \"\",\n            \"axisPlacement\": \"auto\",\n            \"barAlignment\": 0,\n            \"drawStyle\": \"line\",\n            \"fillOpacity\": 0,\n            \"gradientMode\": \"none\",\n            \"hideFrom\": {\n              \"legend\": false,\n              \"tooltip\": false,\n              \"viz\": false\n            },\n            \"lineInterpolation\": \"linear\",\n            \"lineWidth\": 1,\n            \"pointSize\": 1,\n            \"scaleDistribution\": {\n              \"type\": \"linear\"\n            },\n            \"showPoints\": \"auto\",\n            \"spanNulls\": false,\n            \"stacking\": {\n              \"group\": \"A\",\n              \"mode\": \"none\"\n            },\n            \"thresholdsStyle\": {\n              \"mode\": \"off\"\n            }\n          },\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\",\n                \"value\": null\n              },\n              {\n                \"color\": \"red\",\n                \"value\": 80\n              }\n            ]\n          },\n          \"unit\": \"none\"\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 6,\n        \"w\": 3,\n        \"x\": 6,\n        \"y\": 31\n      },\n      \"id\": 64,\n      \"options\": {\n        \"legend\": {\n          \"calcs\": [],\n          \"displayMode\": \"list\",\n          \"placement\": \"bottom\",\n          \"showLegend\": true\n        },\n        \"tooltip\": {\n          \"mode\": \"single\",\n          \"sort\": \"none\"\n        }\n      },\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"editorMode\": \"code\",\n          \"exemplar\": true,\n          \"expr\": \"sum by (instance)(increase(eth_con_event_count{event=\\\"block\\\"}[1m]))\",\n          \"hide\": false,\n          \"interval\": \"1m\",\n          \"legendFormat\": \"{{ instance }}\",\n          \"range\": true,\n          \"refId\": \"A\"\n        }\n      ],\n      \"title\": \"Block Events\",\n      \"type\": \"timeseries\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"palette-classic\"\n          },\n          \"custom\": {\n            \"axisCenteredZero\": false,\n            \"axisColorMode\": \"text\",\n            \"axisLabel\": \"\",\n            \"axisPlacement\": \"auto\",\n            \"barAlignment\": 0,\n            \"drawStyle\": \"line\",\n            \"fillOpacity\": 0,\n            \"gradientMode\": \"none\",\n            \"hideFrom\": {\n              \"legend\": false,\n              \"tooltip\": false,\n              \"viz\": false\n            },\n            \"lineInterpolation\": \"linear\",\n            \"lineWidth\": 1,\n            \"pointSize\": 1,\n            \"scaleDistribution\": {\n              \"type\": \"linear\"\n            },\n            \"showPoints\": \"auto\",\n            \"spanNulls\": false,\n            \"stacking\": {\n              \"group\": \"A\",\n              \"mode\": \"none\"\n            },\n            \"thresholdsStyle\": {\n              \"mode\": \"off\"\n            }\n          },\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\",\n                \"value\": null\n              },\n              {\n                \"color\": \"red\",\n                \"value\": 80\n              }\n            ]\n          },\n          \"unit\": \"none\"\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 6,\n        \"w\": 3,\n        \"x\": 9,\n        \"y\": 31\n      },\n      \"id\": 65,\n      \"options\": {\n        \"legend\": {\n          \"calcs\": [],\n          \"displayMode\": \"list\",\n          \"placement\": \"bottom\",\n          \"showLegend\": true\n        },\n        \"tooltip\": {\n          \"mode\": \"single\",\n          \"sort\": \"none\"\n        }\n      },\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"editorMode\": \"code\",\n          \"exemplar\": true,\n          \"expr\": \"sum by (instance)(increase(eth_con_event_count{event=\\\"contribution_and_proof\\\"}[1m]))\",\n          \"hide\": false,\n          \"interval\": \"1m\",\n          \"legendFormat\": \"{{ instance }}\",\n          \"range\": true,\n          \"refId\": \"A\"\n        }\n      ],\n      \"title\": \"Contribution&Proof Events\",\n      \"type\": \"timeseries\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"palette-classic\"\n          },\n          \"custom\": {\n            \"axisCenteredZero\": false,\n            \"axisColorMode\": \"text\",\n            \"axisLabel\": \"\",\n            \"axisPlacement\": \"auto\",\n            \"barAlignment\": 0,\n            \"drawStyle\": \"line\",\n            \"fillOpacity\": 0,\n            \"gradientMode\": \"none\",\n            \"hideFrom\": {\n              \"legend\": false,\n              \"tooltip\": false,\n              \"viz\": false\n            },\n            \"lineInterpolation\": \"linear\",\n            \"lineWidth\": 1,\n            \"pointSize\": 1,\n            \"scaleDistribution\": {\n              \"type\": \"linear\"\n            },\n            \"showPoints\": \"auto\",\n            \"spanNulls\": false,\n            \"stacking\": {\n              \"group\": \"A\",\n              \"mode\": \"none\"\n            },\n            \"thresholdsStyle\": {\n              \"mode\": \"off\"\n            }\n          },\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\",\n                \"value\": null\n              },\n              {\n                \"color\": \"red\",\n                \"value\": 80\n              }\n            ]\n          },\n          \"unit\": \"none\"\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 6,\n        \"w\": 3,\n        \"x\": 12,\n        \"y\": 31\n      },\n      \"id\": 66,\n      \"options\": {\n        \"legend\": {\n          \"calcs\": [],\n          \"displayMode\": \"list\",\n          \"placement\": \"bottom\",\n          \"showLegend\": true\n        },\n        \"tooltip\": {\n          \"mode\": \"single\",\n          \"sort\": \"none\"\n        }\n      },\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"editorMode\": \"code\",\n          \"exemplar\": true,\n          \"expr\": \"sum by (instance)(increase(eth_con_event_count{event=\\\"finalized_checkpoint\\\"}[1m]))\",\n          \"hide\": false,\n          \"interval\": \"1m\",\n          \"legendFormat\": \"{{ instance }}\",\n          \"range\": true,\n          \"refId\": \"A\"\n        }\n      ],\n      \"title\": \"Checkpoint Events\",\n      \"type\": \"timeseries\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"palette-classic\"\n          },\n          \"custom\": {\n            \"axisCenteredZero\": false,\n            \"axisColorMode\": \"text\",\n            \"axisLabel\": \"\",\n            \"axisPlacement\": \"auto\",\n            \"barAlignment\": 0,\n            \"drawStyle\": \"line\",\n            \"fillOpacity\": 0,\n            \"gradientMode\": \"none\",\n            \"hideFrom\": {\n              \"legend\": false,\n              \"tooltip\": false,\n              \"viz\": false\n            },\n            \"lineInterpolation\": \"linear\",\n            \"lineWidth\": 1,\n            \"pointSize\": 1,\n            \"scaleDistribution\": {\n              \"type\": \"linear\"\n            },\n            \"showPoints\": \"auto\",\n            \"spanNulls\": false,\n            \"stacking\": {\n              \"group\": \"A\",\n              \"mode\": \"none\"\n            },\n            \"thresholdsStyle\": {\n              \"mode\": \"off\"\n            }\n          },\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\",\n                \"value\": null\n              },\n              {\n                \"color\": \"red\",\n                \"value\": 80\n              }\n            ]\n          },\n          \"unit\": \"none\"\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 6,\n        \"w\": 3,\n        \"x\": 15,\n        \"y\": 31\n      },\n      \"id\": 68,\n      \"options\": {\n        \"legend\": {\n          \"calcs\": [],\n          \"displayMode\": \"list\",\n          \"placement\": \"bottom\",\n          \"showLegend\": true\n        },\n        \"tooltip\": {\n          \"mode\": \"single\",\n          \"sort\": \"none\"\n        }\n      },\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"editorMode\": \"code\",\n          \"exemplar\": true,\n          \"expr\": \"sum by (instance)(increase(eth_con_event_count{event=\\\"voluntary_exit\\\"}[1m]))\",\n          \"hide\": false,\n          \"interval\": \"1m\",\n          \"legendFormat\": \"{{ instance }}\",\n          \"range\": true,\n          \"refId\": \"A\"\n        }\n      ],\n      \"title\": \"Vol Exit Events\",\n      \"type\": \"timeseries\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"palette-classic\"\n          },\n          \"custom\": {\n            \"axisCenteredZero\": false,\n            \"axisColorMode\": \"text\",\n            \"axisLabel\": \"\",\n            \"axisPlacement\": \"auto\",\n            \"barAlignment\": 0,\n            \"drawStyle\": \"line\",\n            \"fillOpacity\": 0,\n            \"gradientMode\": \"none\",\n            \"hideFrom\": {\n              \"legend\": false,\n              \"tooltip\": false,\n              \"viz\": false\n            },\n            \"lineInterpolation\": \"linear\",\n            \"lineWidth\": 1,\n            \"pointSize\": 1,\n            \"scaleDistribution\": {\n              \"type\": \"linear\"\n            },\n            \"showPoints\": \"auto\",\n            \"spanNulls\": false,\n            \"stacking\": {\n              \"group\": \"A\",\n              \"mode\": \"none\"\n            },\n            \"thresholdsStyle\": {\n              \"mode\": \"off\"\n            }\n          },\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\",\n                \"value\": null\n              },\n              {\n                \"color\": \"red\",\n                \"value\": 80\n              }\n            ]\n          },\n          \"unit\": \"none\"\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 6,\n        \"w\": 3,\n        \"x\": 18,\n        \"y\": 31\n      },\n      \"id\": 69,\n      \"options\": {\n        \"legend\": {\n          \"calcs\": [],\n          \"displayMode\": \"list\",\n          \"placement\": \"bottom\",\n          \"showLegend\": true\n        },\n        \"tooltip\": {\n          \"mode\": \"single\",\n          \"sort\": \"none\"\n        }\n      },\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"editorMode\": \"code\",\n          \"exemplar\": true,\n          \"expr\": \"sum by (instance)(increase(eth_con_event_count{event=\\\"chain_reorg\\\"}[1m]))\",\n          \"hide\": false,\n          \"interval\": \"1m\",\n          \"legendFormat\": \"{{ instance }}\",\n          \"range\": true,\n          \"refId\": \"A\"\n        }\n      ],\n      \"title\": \"Reorg Events\",\n      \"type\": \"timeseries\"\n    },\n    {\n      \"collapsed\": false,\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"UhcO3vy7z\"\n      },\n      \"gridPos\": {\n        \"h\": 1,\n        \"w\": 24,\n        \"x\": 0,\n        \"y\": 37\n      },\n      \"id\": 9,\n      \"panels\": [],\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"UhcO3vy7z\"\n          },\n          \"refId\": \"A\"\n        }\n      ],\n      \"title\": \"Execution Layer\",\n      \"type\": \"row\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"palette-classic\"\n          },\n          \"custom\": {\n            \"axisCenteredZero\": false,\n            \"axisColorMode\": \"text\",\n            \"axisLabel\": \"\",\n            \"axisPlacement\": \"auto\",\n            \"barAlignment\": 0,\n            \"drawStyle\": \"line\",\n            \"fillOpacity\": 0,\n            \"gradientMode\": \"none\",\n            \"hideFrom\": {\n              \"legend\": false,\n              \"tooltip\": false,\n              \"viz\": false\n            },\n            \"lineInterpolation\": \"linear\",\n            \"lineWidth\": 1,\n            \"pointSize\": 1,\n            \"scaleDistribution\": {\n              \"type\": \"linear\"\n            },\n            \"showPoints\": \"auto\",\n            \"spanNulls\": false,\n            \"stacking\": {\n              \"group\": \"A\",\n              \"mode\": \"none\"\n            },\n            \"thresholdsStyle\": {\n              \"mode\": \"off\"\n            }\n          },\n          \"decimals\": 0,\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\"\n              },\n              {\n                \"color\": \"red\",\n                \"value\": 80\n              }\n            ]\n          },\n          \"unit\": \"none\"\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 6,\n        \"w\": 6,\n        \"x\": 0,\n        \"y\": 38\n      },\n      \"id\": 71,\n      \"options\": {\n        \"legend\": {\n          \"calcs\": [],\n          \"displayMode\": \"list\",\n          \"placement\": \"bottom\",\n          \"showLegend\": false\n        },\n        \"tooltip\": {\n          \"mode\": \"single\",\n          \"sort\": \"none\"\n        }\n      },\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"editorMode\": \"code\",\n          \"exemplar\": true,\n          \"expr\": \"count(count by (instance)(eth_exe_sync_is_syncing))\",\n          \"interval\": \"\",\n          \"legendFormat\": \"\",\n          \"range\": true,\n          \"refId\": \"A\"\n        }\n      ],\n      \"title\": \"Nodes\",\n      \"type\": \"timeseries\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"palette-classic\"\n          },\n          \"custom\": {\n            \"axisCenteredZero\": false,\n            \"axisColorMode\": \"text\",\n            \"axisLabel\": \"\",\n            \"axisPlacement\": \"auto\",\n            \"barAlignment\": 0,\n            \"drawStyle\": \"line\",\n            \"fillOpacity\": 0,\n            \"gradientMode\": \"none\",\n            \"hideFrom\": {\n              \"legend\": false,\n              \"tooltip\": false,\n              \"viz\": false\n            },\n            \"lineInterpolation\": \"linear\",\n            \"lineWidth\": 1,\n            \"pointSize\": 1,\n            \"scaleDistribution\": {\n              \"type\": \"linear\"\n            },\n            \"showPoints\": \"auto\",\n            \"spanNulls\": false,\n            \"stacking\": {\n              \"group\": \"A\",\n              \"mode\": \"none\"\n            },\n            \"thresholdsStyle\": {\n              \"mode\": \"off\"\n            }\n          },\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\"\n              }\n            ]\n          },\n          \"unit\": \"none\"\n        },\n        \"overrides\": [\n          {\n            \"matcher\": {\n              \"id\": \"byName\",\n              \"options\": \"Synced\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"color\",\n                \"value\": {\n                  \"fixedColor\": \"semi-dark-green\",\n                  \"mode\": \"fixed\"\n                }\n              }\n            ]\n          },\n          {\n            \"matcher\": {\n              \"id\": \"byName\",\n              \"options\": \"Out of sync\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"color\",\n                \"value\": {\n                  \"fixedColor\": \"dark-red\",\n                  \"mode\": \"fixed\"\n                }\n              }\n            ]\n          }\n        ]\n      },\n      \"gridPos\": {\n        \"h\": 6,\n        \"w\": 3,\n        \"x\": 6,\n        \"y\": 38\n      },\n      \"id\": 72,\n      \"options\": {\n        \"legend\": {\n          \"calcs\": [],\n          \"displayMode\": \"list\",\n          \"placement\": \"bottom\",\n          \"showLegend\": true\n        },\n        \"tooltip\": {\n          \"mode\": \"single\",\n          \"sort\": \"none\"\n        }\n      },\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"editorMode\": \"code\",\n          \"expr\": \"count(count by (instance)(eth_con_sync_is_syncing{} == 0))\",\n          \"legendFormat\": \"Synced\",\n          \"range\": true,\n          \"refId\": \"A\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"editorMode\": \"code\",\n          \"expr\": \"count(count by (instance)(eth_con_sync_is_syncing{} == 1))\",\n          \"hide\": false,\n          \"legendFormat\": \"Out of sync\",\n          \"range\": true,\n          \"refId\": \"B\"\n        }\n      ],\n      \"title\": \"Sync Status\",\n      \"type\": \"timeseries\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"palette-classic\"\n          },\n          \"custom\": {\n            \"axisCenteredZero\": false,\n            \"axisColorMode\": \"text\",\n            \"axisLabel\": \"\",\n            \"axisPlacement\": \"auto\",\n            \"barAlignment\": 0,\n            \"drawStyle\": \"line\",\n            \"fillOpacity\": 0,\n            \"gradientMode\": \"none\",\n            \"hideFrom\": {\n              \"legend\": false,\n              \"tooltip\": false,\n              \"viz\": false\n            },\n            \"lineInterpolation\": \"linear\",\n            \"lineWidth\": 1,\n            \"pointSize\": 1,\n            \"scaleDistribution\": {\n              \"type\": \"linear\"\n            },\n            \"showPoints\": \"auto\",\n            \"spanNulls\": false,\n            \"stacking\": {\n              \"group\": \"A\",\n              \"mode\": \"none\"\n            },\n            \"thresholdsStyle\": {\n              \"mode\": \"off\"\n            }\n          },\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\"\n              },\n              {\n                \"color\": \"red\",\n                \"value\": 80\n              }\n            ]\n          },\n          \"unit\": \"blocks\"\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 6,\n        \"w\": 5,\n        \"x\": 9,\n        \"y\": 38\n      },\n      \"id\": 35,\n      \"options\": {\n        \"legend\": {\n          \"calcs\": [],\n          \"displayMode\": \"list\",\n          \"placement\": \"bottom\",\n          \"showLegend\": true\n        },\n        \"tooltip\": {\n          \"mode\": \"single\",\n          \"sort\": \"none\"\n        }\n      },\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"UhcO3vy7z\"\n          },\n          \"editorMode\": \"code\",\n          \"exemplar\": true,\n          \"expr\": \"sum by (instance)(eth_exe_sync_highest_block{}) - sum by (instance)(eth_exe_sync_current_block{})\",\n          \"interval\": \"\",\n          \"legendFormat\": \"{{ instance }}\",\n          \"range\": true,\n          \"refId\": \"A\"\n        }\n      ],\n      \"title\": \"Sync Distance\",\n      \"type\": \"timeseries\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"palette-classic\"\n          },\n          \"custom\": {\n            \"axisCenteredZero\": false,\n            \"axisColorMode\": \"text\",\n            \"axisLabel\": \"\",\n            \"axisPlacement\": \"auto\",\n            \"barAlignment\": 0,\n            \"drawStyle\": \"line\",\n            \"fillOpacity\": 0,\n            \"gradientMode\": \"none\",\n            \"hideFrom\": {\n              \"legend\": false,\n              \"tooltip\": false,\n              \"viz\": false\n            },\n            \"lineInterpolation\": \"linear\",\n            \"lineWidth\": 1,\n            \"pointSize\": 1,\n            \"scaleDistribution\": {\n              \"type\": \"linear\"\n            },\n            \"showPoints\": \"auto\",\n            \"spanNulls\": false,\n            \"stacking\": {\n              \"group\": \"A\",\n              \"mode\": \"none\"\n            },\n            \"thresholdsStyle\": {\n              \"mode\": \"off\"\n            }\n          },\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\"\n              },\n              {\n                \"color\": \"red\",\n                \"value\": 80\n              }\n            ]\n          },\n          \"unit\": \"none\"\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 6,\n        \"w\": 5,\n        \"x\": 14,\n        \"y\": 38\n      },\n      \"id\": 45,\n      \"options\": {\n        \"legend\": {\n          \"calcs\": [],\n          \"displayMode\": \"list\",\n          \"placement\": \"bottom\",\n          \"showLegend\": true\n        },\n        \"tooltip\": {\n          \"mode\": \"single\",\n          \"sort\": \"none\"\n        }\n      },\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"UhcO3vy7z\"\n          },\n          \"editorMode\": \"code\",\n          \"exemplar\": true,\n          \"expr\": \"sum by (instance)(eth_exe_net_peer_count)\",\n          \"interval\": \"\",\n          \"legendFormat\": \"{{ instance }}\",\n          \"range\": true,\n          \"refId\": \"A\"\n        }\n      ],\n      \"title\": \"Peers\",\n      \"type\": \"timeseries\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"palette-classic\"\n          },\n          \"custom\": {\n            \"axisCenteredZero\": false,\n            \"axisColorMode\": \"text\",\n            \"axisLabel\": \"\",\n            \"axisPlacement\": \"auto\",\n            \"barAlignment\": 0,\n            \"drawStyle\": \"line\",\n            \"fillOpacity\": 0,\n            \"gradientMode\": \"none\",\n            \"hideFrom\": {\n              \"legend\": false,\n              \"tooltip\": false,\n              \"viz\": false\n            },\n            \"lineInterpolation\": \"linear\",\n            \"lineWidth\": 1,\n            \"pointSize\": 1,\n            \"scaleDistribution\": {\n              \"type\": \"linear\"\n            },\n            \"showPoints\": \"auto\",\n            \"spanNulls\": false,\n            \"stacking\": {\n              \"group\": \"A\",\n              \"mode\": \"none\"\n            },\n            \"thresholdsStyle\": {\n              \"mode\": \"off\"\n            }\n          },\n          \"decimals\": 0,\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\"\n              },\n              {\n                \"color\": \"red\",\n                \"value\": 80\n              }\n            ]\n          },\n          \"unit\": \"none\"\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 6,\n        \"w\": 5,\n        \"x\": 19,\n        \"y\": 38\n      },\n      \"id\": 39,\n      \"options\": {\n        \"legend\": {\n          \"calcs\": [],\n          \"displayMode\": \"list\",\n          \"placement\": \"bottom\",\n          \"showLegend\": true\n        },\n        \"tooltip\": {\n          \"mode\": \"single\",\n          \"sort\": \"none\"\n        }\n      },\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"editorMode\": \"code\",\n          \"exemplar\": true,\n          \"expr\": \"eth_exe_block_most_recent_number{}\",\n          \"interval\": \"\",\n          \"legendFormat\": \"{{ instance }}\",\n          \"range\": true,\n          \"refId\": \"A\"\n        }\n      ],\n      \"title\": \"Block Height\",\n      \"type\": \"timeseries\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"palette-classic\"\n          },\n          \"custom\": {\n            \"axisCenteredZero\": false,\n            \"axisColorMode\": \"text\",\n            \"axisLabel\": \"\",\n            \"axisPlacement\": \"auto\",\n            \"barAlignment\": 0,\n            \"drawStyle\": \"line\",\n            \"fillOpacity\": 0,\n            \"gradientMode\": \"none\",\n            \"hideFrom\": {\n              \"legend\": false,\n              \"tooltip\": false,\n              \"viz\": false\n            },\n            \"lineInterpolation\": \"linear\",\n            \"lineWidth\": 1,\n            \"pointSize\": 1,\n            \"scaleDistribution\": {\n              \"type\": \"linear\"\n            },\n            \"showPoints\": \"auto\",\n            \"spanNulls\": false,\n            \"stacking\": {\n              \"group\": \"A\",\n              \"mode\": \"none\"\n            },\n            \"thresholdsStyle\": {\n              \"mode\": \"off\"\n            }\n          },\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\"\n              },\n              {\n                \"color\": \"red\",\n                \"value\": 80\n              }\n            ]\n          }\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 7,\n        \"w\": 7,\n        \"x\": 0,\n        \"y\": 44\n      },\n      \"id\": 49,\n      \"options\": {\n        \"legend\": {\n          \"calcs\": [],\n          \"displayMode\": \"list\",\n          \"placement\": \"bottom\",\n          \"showLegend\": true\n        },\n        \"tooltip\": {\n          \"mode\": \"single\",\n          \"sort\": \"none\"\n        }\n      },\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"UhcO3vy7z\"\n          },\n          \"editorMode\": \"code\",\n          \"exemplar\": true,\n          \"expr\": \"sum by (instance)(\\n    increase(\\n        eth_exe_block_head_transactions_in_block[1m]\\n    )\\n)\",\n          \"interval\": \"1m\",\n          \"legendFormat\": \"{{ instance }}\",\n          \"range\": true,\n          \"refId\": \"A\"\n        }\n      ],\n      \"title\": \"Transactions per block\",\n      \"type\": \"timeseries\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"palette-classic\"\n          },\n          \"custom\": {\n            \"axisCenteredZero\": false,\n            \"axisColorMode\": \"text\",\n            \"axisLabel\": \"\",\n            \"axisPlacement\": \"auto\",\n            \"barAlignment\": 0,\n            \"drawStyle\": \"line\",\n            \"fillOpacity\": 0,\n            \"gradientMode\": \"none\",\n            \"hideFrom\": {\n              \"legend\": false,\n              \"tooltip\": false,\n              \"viz\": false\n            },\n            \"lineInterpolation\": \"linear\",\n            \"lineWidth\": 1,\n            \"pointSize\": 1,\n            \"scaleDistribution\": {\n              \"type\": \"linear\"\n            },\n            \"showPoints\": \"auto\",\n            \"spanNulls\": false,\n            \"stacking\": {\n              \"group\": \"A\",\n              \"mode\": \"none\"\n            },\n            \"thresholdsStyle\": {\n              \"mode\": \"off\"\n            }\n          },\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\"\n              },\n              {\n                \"color\": \"red\",\n                \"value\": 80\n              }\n            ]\n          },\n          \"unit\": \"bytes\"\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 7,\n        \"w\": 6,\n        \"x\": 7,\n        \"y\": 44\n      },\n      \"id\": 56,\n      \"options\": {\n        \"legend\": {\n          \"calcs\": [],\n          \"displayMode\": \"list\",\n          \"placement\": \"bottom\",\n          \"showLegend\": true\n        },\n        \"tooltip\": {\n          \"mode\": \"single\",\n          \"sort\": \"none\"\n        }\n      },\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"editorMode\": \"code\",\n          \"exemplar\": true,\n          \"expr\": \"eth_exe_block_head_block_size_bytes{}\",\n          \"interval\": \"1m\",\n          \"legendFormat\": \"{{ instance }}\",\n          \"range\": true,\n          \"refId\": \"A\"\n        }\n      ],\n      \"title\": \"Block size\",\n      \"type\": \"timeseries\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"palette-classic\"\n          },\n          \"custom\": {\n            \"axisCenteredZero\": false,\n            \"axisColorMode\": \"text\",\n            \"axisLabel\": \"\",\n            \"axisPlacement\": \"auto\",\n            \"barAlignment\": 0,\n            \"drawStyle\": \"line\",\n            \"fillOpacity\": 0,\n            \"gradientMode\": \"none\",\n            \"hideFrom\": {\n              \"legend\": false,\n              \"tooltip\": false,\n              \"viz\": false\n            },\n            \"lineInterpolation\": \"linear\",\n            \"lineWidth\": 1,\n            \"pointSize\": 1,\n            \"scaleDistribution\": {\n              \"type\": \"linear\"\n            },\n            \"showPoints\": \"auto\",\n            \"spanNulls\": false,\n            \"stacking\": {\n              \"group\": \"A\",\n              \"mode\": \"none\"\n            },\n            \"thresholdsStyle\": {\n              \"mode\": \"off\"\n            }\n          },\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\"\n              },\n              {\n                \"color\": \"red\",\n                \"value\": 80\n              }\n            ]\n          },\n          \"unit\": \"short\"\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 7,\n        \"w\": 6,\n        \"x\": 13,\n        \"y\": 44\n      },\n      \"id\": 53,\n      \"options\": {\n        \"legend\": {\n          \"calcs\": [],\n          \"displayMode\": \"list\",\n          \"placement\": \"bottom\",\n          \"showLegend\": true\n        },\n        \"tooltip\": {\n          \"mode\": \"single\",\n          \"sort\": \"none\"\n        }\n      },\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"editorMode\": \"code\",\n          \"exemplar\": true,\n          \"expr\": \"eth_exe_block_head_gas_used\",\n          \"interval\": \"\",\n          \"legendFormat\": \"{{ instance }}\",\n          \"range\": true,\n          \"refId\": \"A\"\n        }\n      ],\n      \"title\": \"Gas used\",\n      \"type\": \"timeseries\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"palette-classic\"\n          },\n          \"custom\": {\n            \"axisCenteredZero\": false,\n            \"axisColorMode\": \"text\",\n            \"axisLabel\": \"\",\n            \"axisPlacement\": \"auto\",\n            \"barAlignment\": 0,\n            \"drawStyle\": \"line\",\n            \"fillOpacity\": 0,\n            \"gradientMode\": \"none\",\n            \"hideFrom\": {\n              \"legend\": false,\n              \"tooltip\": false,\n              \"viz\": false\n            },\n            \"lineInterpolation\": \"linear\",\n            \"lineWidth\": 1,\n            \"pointSize\": 1,\n            \"scaleDistribution\": {\n              \"type\": \"linear\"\n            },\n            \"showPoints\": \"auto\",\n            \"spanNulls\": false,\n            \"stacking\": {\n              \"group\": \"A\",\n              \"mode\": \"none\"\n            },\n            \"thresholdsStyle\": {\n              \"mode\": \"off\"\n            }\n          },\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\"\n              },\n              {\n                \"color\": \"red\",\n                \"value\": 80\n              }\n            ]\n          },\n          \"unit\": \"percentunit\"\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 7,\n        \"w\": 5,\n        \"x\": 19,\n        \"y\": 44\n      },\n      \"id\": 54,\n      \"options\": {\n        \"legend\": {\n          \"calcs\": [],\n          \"displayMode\": \"list\",\n          \"placement\": \"bottom\",\n          \"showLegend\": true\n        },\n        \"tooltip\": {\n          \"mode\": \"single\",\n          \"sort\": \"none\"\n        }\n      },\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"editorMode\": \"code\",\n          \"exemplar\": true,\n          \"expr\": \"sum by (instance)(\\n    eth_exe_block_head_gas_used\\n)\\n/\\nsum by (instance)( \\n    eth_exe_block_head_gas_limit\\n)\",\n          \"interval\": \"20s\",\n          \"legendFormat\": \"{{ instance }}\",\n          \"range\": true,\n          \"refId\": \"A\"\n        }\n      ],\n      \"title\": \"Gas Used \",\n      \"type\": \"timeseries\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"palette-classic\"\n          },\n          \"custom\": {\n            \"axisCenteredZero\": false,\n            \"axisColorMode\": \"text\",\n            \"axisLabel\": \"\",\n            \"axisPlacement\": \"auto\",\n            \"barAlignment\": 0,\n            \"drawStyle\": \"line\",\n            \"fillOpacity\": 0,\n            \"gradientMode\": \"none\",\n            \"hideFrom\": {\n              \"legend\": false,\n              \"tooltip\": false,\n              \"viz\": false\n            },\n            \"lineInterpolation\": \"linear\",\n            \"lineWidth\": 1,\n            \"pointSize\": 1,\n            \"scaleDistribution\": {\n              \"type\": \"linear\"\n            },\n            \"showPoints\": \"auto\",\n            \"spanNulls\": false,\n            \"stacking\": {\n              \"group\": \"A\",\n              \"mode\": \"none\"\n            },\n            \"thresholdsStyle\": {\n              \"mode\": \"off\"\n            }\n          },\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\"\n              },\n              {\n                \"color\": \"red\",\n                \"value\": 80\n              }\n            ]\n          },\n          \"unit\": \"none\"\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 6,\n        \"w\": 5,\n        \"x\": 0,\n        \"y\": 51\n      },\n      \"id\": 55,\n      \"options\": {\n        \"legend\": {\n          \"calcs\": [],\n          \"displayMode\": \"list\",\n          \"placement\": \"bottom\",\n          \"showLegend\": true\n        },\n        \"tooltip\": {\n          \"mode\": \"single\",\n          \"sort\": \"none\"\n        }\n      },\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"editorMode\": \"code\",\n          \"exemplar\": true,\n          \"expr\": \"eth_exe_txpool_transactions\",\n          \"interval\": \"\",\n          \"legendFormat\": \"{{ instance }}\",\n          \"range\": true,\n          \"refId\": \"A\"\n        }\n      ],\n      \"title\": \"Transaction Pool\",\n      \"type\": \"timeseries\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"palette-classic\"\n          },\n          \"custom\": {\n            \"axisCenteredZero\": false,\n            \"axisColorMode\": \"text\",\n            \"axisLabel\": \"\",\n            \"axisPlacement\": \"auto\",\n            \"barAlignment\": 0,\n            \"drawStyle\": \"line\",\n            \"fillOpacity\": 0,\n            \"gradientMode\": \"none\",\n            \"hideFrom\": {\n              \"legend\": false,\n              \"tooltip\": false,\n              \"viz\": false\n            },\n            \"lineInterpolation\": \"linear\",\n            \"lineWidth\": 1,\n            \"pointSize\": 1,\n            \"scaleDistribution\": {\n              \"type\": \"linear\"\n            },\n            \"showPoints\": \"auto\",\n            \"spanNulls\": false,\n            \"stacking\": {\n              \"group\": \"A\",\n              \"mode\": \"none\"\n            },\n            \"thresholdsStyle\": {\n              \"mode\": \"off\"\n            }\n          },\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\"\n              },\n              {\n                \"color\": \"red\",\n                \"value\": 80\n              }\n            ]\n          },\n          \"unit\": \"Gwei\"\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 6,\n        \"w\": 5,\n        \"x\": 5,\n        \"y\": 51\n      },\n      \"id\": 38,\n      \"options\": {\n        \"legend\": {\n          \"calcs\": [],\n          \"displayMode\": \"list\",\n          \"placement\": \"bottom\",\n          \"showLegend\": true\n        },\n        \"tooltip\": {\n          \"mode\": \"single\",\n          \"sort\": \"none\"\n        }\n      },\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"editorMode\": \"code\",\n          \"exemplar\": true,\n          \"expr\": \"eth_exe_gas_price_gwei{}\",\n          \"interval\": \"\",\n          \"legendFormat\": \"{{ instance }}\",\n          \"range\": true,\n          \"refId\": \"A\"\n        }\n      ],\n      \"title\": \"Suggested Gas Price\",\n      \"type\": \"timeseries\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"palette-classic\"\n          },\n          \"custom\": {\n            \"axisCenteredZero\": false,\n            \"axisColorMode\": \"text\",\n            \"axisLabel\": \"\",\n            \"axisPlacement\": \"auto\",\n            \"barAlignment\": 0,\n            \"drawStyle\": \"line\",\n            \"fillOpacity\": 0,\n            \"gradientMode\": \"none\",\n            \"hideFrom\": {\n              \"legend\": false,\n              \"tooltip\": false,\n              \"viz\": false\n            },\n            \"lineInterpolation\": \"linear\",\n            \"lineWidth\": 1,\n            \"pointSize\": 1,\n            \"scaleDistribution\": {\n              \"type\": \"linear\"\n            },\n            \"showPoints\": \"auto\",\n            \"spanNulls\": false,\n            \"stacking\": {\n              \"group\": \"A\",\n              \"mode\": \"none\"\n            },\n            \"thresholdsStyle\": {\n              \"mode\": \"off\"\n            }\n          },\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\"\n              },\n              {\n                \"color\": \"red\",\n                \"value\": 80\n              }\n            ]\n          },\n          \"unit\": \"short\"\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 6,\n        \"w\": 5,\n        \"x\": 10,\n        \"y\": 51\n      },\n      \"id\": 52,\n      \"options\": {\n        \"legend\": {\n          \"calcs\": [],\n          \"displayMode\": \"list\",\n          \"placement\": \"bottom\",\n          \"showLegend\": true\n        },\n        \"tooltip\": {\n          \"mode\": \"single\",\n          \"sort\": \"none\"\n        }\n      },\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"UhcO3vy7z\"\n          },\n          \"editorMode\": \"code\",\n          \"exemplar\": true,\n          \"expr\": \"eth_exe_block_head_gas_limit\",\n          \"interval\": \"\",\n          \"legendFormat\": \"{{ instance }}\",\n          \"range\": true,\n          \"refId\": \"A\"\n        }\n      ],\n      \"title\": \"Gas limit\",\n      \"type\": \"timeseries\"\n    }\n  ],\n  \"refresh\": \"1m\",\n  \"schemaVersion\": 38,\n  \"style\": \"dark\",\n  \"tags\": [],\n  \"templating\": {\n    \"list\": [\n      {\n        \"datasource\": {\n          \"type\": \"prometheus\",\n          \"uid\": \"PBFA97CFB590B2093\"\n        },\n        \"filters\": [],\n        \"hide\": 0,\n        \"name\": \"filter\",\n        \"skipUrlSync\": false,\n        \"type\": \"adhoc\"\n      }\n    ]\n  },\n  \"time\": {\n    \"from\": \"now-30m\",\n    \"to\": \"now\"\n  },\n  \"timepicker\": {},\n  \"timezone\": \"\",\n  \"title\": \"Ethereum Metrics Exporter Overview\",\n  \"uid\": \"2BrpaEr7k\",\n  \"version\": 2,\n  \"weekStart\": \"\"\n}"
  },
  {
    "path": "static_files/grafana-config/dashboards/ethereum-metrics-exporter.json",
    "content": "{\n  \"annotations\": {\n    \"list\": [\n      {\n        \"builtIn\": 1,\n        \"datasource\": {\n          \"type\": \"datasource\",\n          \"uid\": \"grafana\"\n        },\n        \"enable\": true,\n        \"hide\": true,\n        \"iconColor\": \"rgba(0, 211, 255, 1)\",\n        \"name\": \"Annotations & Alerts\",\n        \"target\": {\n          \"limit\": 100,\n          \"matchAny\": false,\n          \"tags\": [],\n          \"type\": \"dashboard\"\n        },\n        \"type\": \"dashboard\"\n      }\n    ]\n  },\n  \"description\": \"Companion dashboard for https://github.com/samcm/ethereum-metrics-exporter\",\n  \"editable\": true,\n  \"fiscalYearStartMonth\": 0,\n  \"gnetId\": 16277,\n  \"graphTooltip\": 0,\n  \"id\": 4,\n  \"links\": [],\n  \"liveNow\": false,\n  \"panels\": [\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"ndvLBM54z\"\n      },\n      \"gridPos\": {\n        \"h\": 1,\n        \"w\": 24,\n        \"x\": 0,\n        \"y\": 0\n      },\n      \"id\": 5,\n      \"title\": \"Overview\",\n      \"type\": \"row\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"thresholds\"\n          },\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\",\n                \"value\": null\n              },\n              {\n                \"color\": \"red\",\n                \"value\": 80\n              }\n            ]\n          },\n          \"unit\": \"none\"\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 4,\n        \"w\": 9,\n        \"x\": 0,\n        \"y\": 1\n      },\n      \"id\": 10,\n      \"options\": {\n        \"colorMode\": \"value\",\n        \"graphMode\": \"none\",\n        \"justifyMode\": \"auto\",\n        \"orientation\": \"auto\",\n        \"reduceOptions\": {\n          \"calcs\": [\n            \"lastNotNull\"\n          ],\n          \"fields\": \"\",\n          \"values\": false\n        },\n        \"textMode\": \"name\"\n      },\n      \"pluginVersion\": \"9.5.12\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"exemplar\": true,\n          \"expr\": \"max by (version)(eth_exe_web3_client_version{instance=~\\\"$instance\\\"})\",\n          \"interval\": \"\",\n          \"legendFormat\": \"{{ version }}\",\n          \"refId\": \"A\"\n        }\n      ],\n      \"title\": \"Execution Client\",\n      \"type\": \"stat\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\",\n                \"value\": null\n              },\n              {\n                \"color\": \"red\",\n                \"value\": 80\n              }\n            ]\n          },\n          \"unit\": \"short\"\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 5,\n        \"w\": 9,\n        \"x\": 9,\n        \"y\": 1\n      },\n      \"id\": 29,\n      \"options\": {\n        \"colorMode\": \"none\",\n        \"graphMode\": \"none\",\n        \"justifyMode\": \"auto\",\n        \"orientation\": \"auto\",\n        \"reduceOptions\": {\n          \"calcs\": [\n            \"lastNotNull\"\n          ],\n          \"fields\": \"\",\n          \"values\": false\n        },\n        \"textMode\": \"name\"\n      },\n      \"pluginVersion\": \"9.5.12\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"exemplar\": true,\n          \"expr\": \"eth_con_spec_config_name{instance=~\\\"$instance\\\"}\",\n          \"interval\": \"\",\n          \"legendFormat\": \"{{ name }}\",\n          \"refId\": \"A\"\n        }\n      ],\n      \"title\": \"Consensus Config\",\n      \"type\": \"stat\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\",\n                \"value\": null\n              },\n              {\n                \"color\": \"red\",\n                \"value\": 80\n              }\n            ]\n          },\n          \"unit\": \"short\"\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 4,\n        \"w\": 6,\n        \"x\": 18,\n        \"y\": 1\n      },\n      \"id\": 40,\n      \"options\": {\n        \"colorMode\": \"none\",\n        \"graphMode\": \"none\",\n        \"justifyMode\": \"auto\",\n        \"orientation\": \"auto\",\n        \"reduceOptions\": {\n          \"calcs\": [\n            \"lastNotNull\"\n          ],\n          \"fields\": \"\",\n          \"values\": false\n        },\n        \"textMode\": \"name\"\n      },\n      \"pluginVersion\": \"9.5.12\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"exemplar\": true,\n          \"expr\": \"eth_con_fork_current{instance=~\\\"$instance\\\"}\",\n          \"interval\": \"\",\n          \"legendFormat\": \"{{ fork }}\",\n          \"refId\": \"A\"\n        }\n      ],\n      \"title\": \"Consensus Fork\",\n      \"type\": \"stat\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"thresholds\"\n          },\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\",\n                \"value\": null\n              },\n              {\n                \"color\": \"red\",\n                \"value\": 80\n              }\n            ]\n          },\n          \"unit\": \"none\"\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 5,\n        \"w\": 9,\n        \"x\": 0,\n        \"y\": 5\n      },\n      \"id\": 31,\n      \"options\": {\n        \"colorMode\": \"value\",\n        \"graphMode\": \"none\",\n        \"justifyMode\": \"auto\",\n        \"orientation\": \"auto\",\n        \"reduceOptions\": {\n          \"calcs\": [\n            \"lastNotNull\"\n          ],\n          \"fields\": \"\",\n          \"values\": false\n        },\n        \"textMode\": \"name\"\n      },\n      \"pluginVersion\": \"9.5.12\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"exemplar\": true,\n          \"expr\": \"max by (version)(eth_con_node_version{instance=~\\\"$instance\\\"})\",\n          \"interval\": \"\",\n          \"legendFormat\": \"{{ version }}\",\n          \"refId\": \"A\"\n        }\n      ],\n      \"title\": \"Consensus Client\",\n      \"type\": \"stat\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"thresholds\"\n          },\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\",\n                \"value\": null\n              },\n              {\n                \"color\": \"red\",\n                \"value\": 80\n              }\n            ]\n          },\n          \"unit\": \"none\"\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 5,\n        \"w\": 3,\n        \"x\": 18,\n        \"y\": 5\n      },\n      \"id\": 2,\n      \"options\": {\n        \"colorMode\": \"value\",\n        \"graphMode\": \"none\",\n        \"justifyMode\": \"auto\",\n        \"orientation\": \"auto\",\n        \"reduceOptions\": {\n          \"calcs\": [\n            \"lastNotNull\"\n          ],\n          \"fields\": \"\",\n          \"values\": false\n        },\n        \"textMode\": \"auto\"\n      },\n      \"pluginVersion\": \"9.5.12\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"exemplar\": true,\n          \"expr\": \"eth_exe_chain_id{instance=~\\\"$instance\\\"}\",\n          \"interval\": \"\",\n          \"legendFormat\": \"\",\n          \"refId\": \"A\"\n        }\n      ],\n      \"title\": \"Execution Chain ID\",\n      \"type\": \"stat\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"thresholds\"\n          },\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\",\n                \"value\": null\n              },\n              {\n                \"color\": \"red\",\n                \"value\": 80\n              }\n            ]\n          },\n          \"unit\": \"none\"\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 5,\n        \"w\": 3,\n        \"x\": 21,\n        \"y\": 5\n      },\n      \"id\": 3,\n      \"options\": {\n        \"colorMode\": \"value\",\n        \"graphMode\": \"none\",\n        \"justifyMode\": \"auto\",\n        \"orientation\": \"auto\",\n        \"reduceOptions\": {\n          \"calcs\": [\n            \"lastNotNull\"\n          ],\n          \"fields\": \"\",\n          \"values\": false\n        },\n        \"textMode\": \"auto\"\n      },\n      \"pluginVersion\": \"9.5.12\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"exemplar\": true,\n          \"expr\": \"eth_exe_network_id{instance=~\\\"$instance\\\"}\",\n          \"interval\": \"\",\n          \"legendFormat\": \"\",\n          \"refId\": \"A\"\n        }\n      ],\n      \"title\": \"Execution Network ID\",\n      \"type\": \"stat\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\",\n                \"value\": null\n              },\n              {\n                \"color\": \"red\",\n                \"value\": 80\n              }\n            ]\n          },\n          \"unit\": \"short\"\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 4,\n        \"w\": 9,\n        \"x\": 9,\n        \"y\": 6\n      },\n      \"id\": 30,\n      \"options\": {\n        \"colorMode\": \"none\",\n        \"graphMode\": \"none\",\n        \"justifyMode\": \"auto\",\n        \"orientation\": \"auto\",\n        \"reduceOptions\": {\n          \"calcs\": [\n            \"lastNotNull\"\n          ],\n          \"fields\": \"\",\n          \"values\": false\n        },\n        \"textMode\": \"name\"\n      },\n      \"pluginVersion\": \"9.5.12\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"exemplar\": true,\n          \"expr\": \"eth_con_spec_preset_base{instance=~\\\"$instance\\\"}\",\n          \"interval\": \"\",\n          \"legendFormat\": \"{{ preset }}\",\n          \"refId\": \"A\"\n        }\n      ],\n      \"title\": \"Consensus Preset\",\n      \"type\": \"stat\"\n    },\n    {\n      \"collapsed\": false,\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"prometheus\"\n      },\n      \"gridPos\": {\n        \"h\": 1,\n        \"w\": 24,\n        \"x\": 0,\n        \"y\": 10\n      },\n      \"id\": 7,\n      \"panels\": [],\n      \"title\": \"Consensus Layer\",\n      \"type\": \"row\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"mappings\": [\n            {\n              \"options\": {\n                \"0\": {\n                  \"index\": 1,\n                  \"text\": \"Synced\"\n                },\n                \"1\": {\n                  \"index\": 0,\n                  \"text\": \"Syncing\"\n                }\n              },\n              \"type\": \"value\"\n            }\n          ],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\",\n                \"value\": null\n              },\n              {\n                \"color\": \"green\",\n                \"value\": 0\n              },\n              {\n                \"color\": \"#EAB839\",\n                \"value\": 1\n              }\n            ]\n          },\n          \"unit\": \"short\"\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 6,\n        \"w\": 5,\n        \"x\": 0,\n        \"y\": 11\n      },\n      \"id\": 19,\n      \"options\": {\n        \"colorMode\": \"background\",\n        \"graphMode\": \"none\",\n        \"justifyMode\": \"auto\",\n        \"orientation\": \"auto\",\n        \"reduceOptions\": {\n          \"calcs\": [\n            \"lastNotNull\"\n          ],\n          \"fields\": \"\",\n          \"values\": false\n        },\n        \"textMode\": \"auto\"\n      },\n      \"pluginVersion\": \"9.5.12\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"exemplar\": true,\n          \"expr\": \"eth_con_sync_is_syncing{instance=~\\\"$instance\\\"}\",\n          \"interval\": \"\",\n          \"legendFormat\": \"\",\n          \"refId\": \"A\"\n        }\n      ],\n      \"title\": \"Sync Status\",\n      \"type\": \"stat\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"palette-classic\"\n          },\n          \"custom\": {\n            \"axisCenteredZero\": false,\n            \"axisColorMode\": \"text\",\n            \"axisLabel\": \"\",\n            \"axisPlacement\": \"auto\",\n            \"barAlignment\": 0,\n            \"drawStyle\": \"line\",\n            \"fillOpacity\": 0,\n            \"gradientMode\": \"none\",\n            \"hideFrom\": {\n              \"legend\": false,\n              \"tooltip\": false,\n              \"viz\": false\n            },\n            \"lineInterpolation\": \"linear\",\n            \"lineWidth\": 1,\n            \"pointSize\": 1,\n            \"scaleDistribution\": {\n              \"type\": \"linear\"\n            },\n            \"showPoints\": \"auto\",\n            \"spanNulls\": false,\n            \"stacking\": {\n              \"group\": \"A\",\n              \"mode\": \"none\"\n            },\n            \"thresholdsStyle\": {\n              \"mode\": \"off\"\n            }\n          },\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\",\n                \"value\": null\n              },\n              {\n                \"color\": \"red\",\n                \"value\": 80\n              }\n            ]\n          },\n          \"unit\": \"percent\"\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 6,\n        \"w\": 5,\n        \"x\": 5,\n        \"y\": 11\n      },\n      \"id\": 22,\n      \"options\": {\n        \"legend\": {\n          \"calcs\": [],\n          \"displayMode\": \"list\",\n          \"placement\": \"bottom\",\n          \"showLegend\": true\n        },\n        \"tooltip\": {\n          \"mode\": \"single\",\n          \"sort\": \"none\"\n        }\n      },\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"exemplar\": true,\n          \"expr\": \"eth_con_sync_percentage{instance=~\\\"$instance\\\"}\",\n          \"interval\": \"\",\n          \"legendFormat\": \"{{ instance }}\",\n          \"refId\": \"A\"\n        }\n      ],\n      \"title\": \"Sync Percent\",\n      \"type\": \"timeseries\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"palette-classic\"\n          },\n          \"custom\": {\n            \"axisCenteredZero\": false,\n            \"axisColorMode\": \"text\",\n            \"axisLabel\": \"\",\n            \"axisPlacement\": \"auto\",\n            \"barAlignment\": 0,\n            \"drawStyle\": \"line\",\n            \"fillOpacity\": 0,\n            \"gradientMode\": \"none\",\n            \"hideFrom\": {\n              \"legend\": false,\n              \"tooltip\": false,\n              \"viz\": false\n            },\n            \"lineInterpolation\": \"linear\",\n            \"lineWidth\": 1,\n            \"pointSize\": 1,\n            \"scaleDistribution\": {\n              \"type\": \"linear\"\n            },\n            \"showPoints\": \"auto\",\n            \"spanNulls\": false,\n            \"stacking\": {\n              \"group\": \"A\",\n              \"mode\": \"none\"\n            },\n            \"thresholdsStyle\": {\n              \"mode\": \"off\"\n            }\n          },\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\",\n                \"value\": null\n              },\n              {\n                \"color\": \"red\",\n                \"value\": 80\n              }\n            ]\n          }\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 6,\n        \"w\": 6,\n        \"x\": 10,\n        \"y\": 11\n      },\n      \"id\": 12,\n      \"options\": {\n        \"legend\": {\n          \"calcs\": [],\n          \"displayMode\": \"list\",\n          \"placement\": \"bottom\",\n          \"showLegend\": true\n        },\n        \"tooltip\": {\n          \"mode\": \"single\",\n          \"sort\": \"none\"\n        }\n      },\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"editorMode\": \"code\",\n          \"exemplar\": true,\n          \"expr\": \"\\n    eth_con_beacon_slot{instance=~\\\"$instance\\\", slot!=\\\"genesis\\\"}\\n\",\n          \"interval\": \"\",\n          \"legendFormat\": \"{{ block_id }}\",\n          \"range\": true,\n          \"refId\": \"A\"\n        }\n      ],\n      \"title\": \"Slots\",\n      \"type\": \"timeseries\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"palette-classic\"\n          },\n          \"custom\": {\n            \"axisCenteredZero\": false,\n            \"axisColorMode\": \"text\",\n            \"axisLabel\": \"\",\n            \"axisPlacement\": \"auto\",\n            \"barAlignment\": 0,\n            \"drawStyle\": \"line\",\n            \"fillOpacity\": 0,\n            \"gradientMode\": \"none\",\n            \"hideFrom\": {\n              \"legend\": false,\n              \"tooltip\": false,\n              \"viz\": false\n            },\n            \"lineInterpolation\": \"linear\",\n            \"lineWidth\": 1,\n            \"pointSize\": 1,\n            \"scaleDistribution\": {\n              \"type\": \"linear\"\n            },\n            \"showPoints\": \"auto\",\n            \"spanNulls\": false,\n            \"stacking\": {\n              \"group\": \"A\",\n              \"mode\": \"none\"\n            },\n            \"thresholdsStyle\": {\n              \"mode\": \"off\"\n            }\n          },\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\",\n                \"value\": null\n              },\n              {\n                \"color\": \"red\",\n                \"value\": 80\n              }\n            ]\n          }\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 6,\n        \"w\": 4,\n        \"x\": 16,\n        \"y\": 11\n      },\n      \"id\": 48,\n      \"options\": {\n        \"legend\": {\n          \"calcs\": [],\n          \"displayMode\": \"list\",\n          \"placement\": \"bottom\",\n          \"showLegend\": true\n        },\n        \"tooltip\": {\n          \"mode\": \"single\",\n          \"sort\": \"none\"\n        }\n      },\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"exemplar\": true,\n          \"expr\": \"eth_con_beacon_finality_checkpoint_epochs{instance=~\\\"$instance\\\", state_id=\\\"head\\\", checkpoint!=\\\"previous_justified\\\"}\",\n          \"interval\": \"\",\n          \"legendFormat\": \"{{ checkpoint }}\",\n          \"refId\": \"A\"\n        }\n      ],\n      \"title\": \"Epochs\",\n      \"type\": \"timeseries\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"palette-classic\"\n          },\n          \"custom\": {\n            \"axisCenteredZero\": false,\n            \"axisColorMode\": \"text\",\n            \"axisLabel\": \"\",\n            \"axisPlacement\": \"auto\",\n            \"barAlignment\": 0,\n            \"drawStyle\": \"line\",\n            \"fillOpacity\": 0,\n            \"gradientMode\": \"none\",\n            \"hideFrom\": {\n              \"legend\": false,\n              \"tooltip\": false,\n              \"viz\": false\n            },\n            \"lineInterpolation\": \"linear\",\n            \"lineWidth\": 1,\n            \"pointSize\": 1,\n            \"scaleDistribution\": {\n              \"type\": \"linear\"\n            },\n            \"showPoints\": \"auto\",\n            \"spanNulls\": false,\n            \"stacking\": {\n              \"group\": \"A\",\n              \"mode\": \"none\"\n            },\n            \"thresholdsStyle\": {\n              \"mode\": \"off\"\n            }\n          },\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\",\n                \"value\": null\n              },\n              {\n                \"color\": \"red\",\n                \"value\": 80\n              }\n            ]\n          },\n          \"unit\": \"Epochs\"\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 6,\n        \"w\": 4,\n        \"x\": 20,\n        \"y\": 11\n      },\n      \"id\": 17,\n      \"options\": {\n        \"legend\": {\n          \"calcs\": [],\n          \"displayMode\": \"list\",\n          \"placement\": \"bottom\",\n          \"showLegend\": true\n        },\n        \"tooltip\": {\n          \"mode\": \"single\",\n          \"sort\": \"none\"\n        }\n      },\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"exemplar\": true,\n          \"expr\": \"sum by (instance)(\\n    eth_con_beacon_finality_checkpoint_epochs{instance=~\\\"$instance\\\", checkpoint=\\\"justified\\\", state_id=\\\"head\\\"}\\n)\\n-\\nsum by (instance)(\\n    eth_con_beacon_finality_checkpoint_epochs{instance=~\\\"$instance\\\", checkpoint=\\\"finalized\\\", state_id=\\\"head\\\"}\\n)\",\n          \"hide\": false,\n          \"interval\": \"\",\n          \"legendFormat\": \"Justified -> Finalized\",\n          \"refId\": \"A\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"exemplar\": true,\n          \"expr\": \"sum by (instance)(\\n    eth_con_beacon_finality_checkpoint_epochs{instance=~\\\"$instance\\\", checkpoint=\\\"justified\\\", state_id=\\\"head\\\"}\\n)\\n-\\nsum by (instance)(\\n    eth_con_beacon_finality_checkpoint_epochs{instance=~\\\"$instance\\\", checkpoint=\\\"previous_justified\\\", state_id=\\\"head\\\"}\\n)\",\n          \"hide\": false,\n          \"interval\": \"\",\n          \"legendFormat\": \"Justified -> Previous Justified\",\n          \"refId\": \"B\"\n        }\n      ],\n      \"title\": \"Epoch distances\",\n      \"type\": \"timeseries\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"palette-classic\"\n          },\n          \"custom\": {\n            \"axisCenteredZero\": false,\n            \"axisColorMode\": \"text\",\n            \"axisLabel\": \"\",\n            \"axisPlacement\": \"auto\",\n            \"barAlignment\": 0,\n            \"drawStyle\": \"line\",\n            \"fillOpacity\": 0,\n            \"gradientMode\": \"none\",\n            \"hideFrom\": {\n              \"legend\": false,\n              \"tooltip\": false,\n              \"viz\": false\n            },\n            \"lineInterpolation\": \"linear\",\n            \"lineWidth\": 1,\n            \"pointSize\": 1,\n            \"scaleDistribution\": {\n              \"type\": \"linear\"\n            },\n            \"showPoints\": \"auto\",\n            \"spanNulls\": false,\n            \"stacking\": {\n              \"group\": \"A\",\n              \"mode\": \"none\"\n            },\n            \"thresholdsStyle\": {\n              \"mode\": \"off\"\n            }\n          },\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\",\n                \"value\": null\n              },\n              {\n                \"color\": \"red\",\n                \"value\": 80\n              }\n            ]\n          },\n          \"unit\": \"slots\"\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 6,\n        \"w\": 3,\n        \"x\": 0,\n        \"y\": 17\n      },\n      \"id\": 21,\n      \"options\": {\n        \"legend\": {\n          \"calcs\": [],\n          \"displayMode\": \"list\",\n          \"placement\": \"bottom\",\n          \"showLegend\": true\n        },\n        \"tooltip\": {\n          \"mode\": \"single\",\n          \"sort\": \"none\"\n        }\n      },\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"exemplar\": true,\n          \"expr\": \"eth_con_sync_distance{instance=~\\\"$instance\\\"}\",\n          \"interval\": \"\",\n          \"legendFormat\": \"{{ instance }}\",\n          \"refId\": \"A\"\n        }\n      ],\n      \"title\": \"Sync Distance\",\n      \"type\": \"timeseries\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"palette-classic\"\n          },\n          \"custom\": {\n            \"axisCenteredZero\": false,\n            \"axisColorMode\": \"text\",\n            \"axisLabel\": \"\",\n            \"axisPlacement\": \"auto\",\n            \"barAlignment\": 0,\n            \"drawStyle\": \"line\",\n            \"fillOpacity\": 0,\n            \"gradientMode\": \"none\",\n            \"hideFrom\": {\n              \"legend\": false,\n              \"tooltip\": false,\n              \"viz\": false\n            },\n            \"lineInterpolation\": \"linear\",\n            \"lineWidth\": 1,\n            \"pointSize\": 1,\n            \"scaleDistribution\": {\n              \"type\": \"linear\"\n            },\n            \"showPoints\": \"auto\",\n            \"spanNulls\": false,\n            \"stacking\": {\n              \"group\": \"A\",\n              \"mode\": \"none\"\n            },\n            \"thresholdsStyle\": {\n              \"mode\": \"off\"\n            }\n          },\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\",\n                \"value\": null\n              },\n              {\n                \"color\": \"red\",\n                \"value\": 80\n              }\n            ]\n          },\n          \"unit\": \"percent\"\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 6,\n        \"w\": 3,\n        \"x\": 3,\n        \"y\": 17\n      },\n      \"id\": 23,\n      \"options\": {\n        \"legend\": {\n          \"calcs\": [],\n          \"displayMode\": \"list\",\n          \"placement\": \"bottom\",\n          \"showLegend\": true\n        },\n        \"tooltip\": {\n          \"mode\": \"single\",\n          \"sort\": \"none\"\n        }\n      },\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"editorMode\": \"code\",\n          \"exemplar\": false,\n          \"expr\": \"sum(rate(eth_con_sync_percentage{instance=~\\\"$instance\\\"}[1m])) by (instance)\",\n          \"instant\": false,\n          \"interval\": \"\",\n          \"legendFormat\": \"{{ instance }}\",\n          \"range\": true,\n          \"refId\": \"A\"\n        }\n      ],\n      \"title\": \"Sync rate\",\n      \"type\": \"timeseries\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"palette-classic\"\n          },\n          \"custom\": {\n            \"axisCenteredZero\": false,\n            \"axisColorMode\": \"text\",\n            \"axisLabel\": \"\",\n            \"axisPlacement\": \"auto\",\n            \"barAlignment\": 0,\n            \"drawStyle\": \"line\",\n            \"fillOpacity\": 0,\n            \"gradientMode\": \"none\",\n            \"hideFrom\": {\n              \"legend\": false,\n              \"tooltip\": false,\n              \"viz\": false\n            },\n            \"lineInterpolation\": \"linear\",\n            \"lineWidth\": 1,\n            \"pointSize\": 1,\n            \"scaleDistribution\": {\n              \"type\": \"linear\"\n            },\n            \"showPoints\": \"auto\",\n            \"spanNulls\": false,\n            \"stacking\": {\n              \"group\": \"A\",\n              \"mode\": \"none\"\n            },\n            \"thresholdsStyle\": {\n              \"mode\": \"off\"\n            }\n          },\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\",\n                \"value\": null\n              },\n              {\n                \"color\": \"red\",\n                \"value\": 80\n              }\n            ]\n          }\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 6,\n        \"w\": 4,\n        \"x\": 6,\n        \"y\": 17\n      },\n      \"id\": 68,\n      \"options\": {\n        \"legend\": {\n          \"calcs\": [],\n          \"displayMode\": \"list\",\n          \"placement\": \"bottom\",\n          \"showLegend\": true\n        },\n        \"tooltip\": {\n          \"mode\": \"single\",\n          \"sort\": \"none\"\n        }\n      },\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"editorMode\": \"code\",\n          \"exemplar\": true,\n          \"expr\": \"sum by (instance)(increase(eth_con_beacon_reorg_count{instance=~\\\"$instance\\\"}[1m]))\",\n          \"interval\": \"\",\n          \"legendFormat\": \"{{ instance }}\",\n          \"range\": true,\n          \"refId\": \"A\"\n        }\n      ],\n      \"title\": \"Reorgs\",\n      \"type\": \"timeseries\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"palette-classic\"\n          },\n          \"custom\": {\n            \"axisCenteredZero\": false,\n            \"axisColorMode\": \"text\",\n            \"axisLabel\": \"\",\n            \"axisPlacement\": \"auto\",\n            \"barAlignment\": 0,\n            \"drawStyle\": \"line\",\n            \"fillOpacity\": 0,\n            \"gradientMode\": \"none\",\n            \"hideFrom\": {\n              \"legend\": false,\n              \"tooltip\": false,\n              \"viz\": false\n            },\n            \"lineInterpolation\": \"linear\",\n            \"lineWidth\": 1,\n            \"pointSize\": 1,\n            \"scaleDistribution\": {\n              \"type\": \"linear\"\n            },\n            \"showPoints\": \"auto\",\n            \"spanNulls\": false,\n            \"stacking\": {\n              \"group\": \"A\",\n              \"mode\": \"none\"\n            },\n            \"thresholdsStyle\": {\n              \"mode\": \"off\"\n            }\n          },\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\",\n                \"value\": null\n              },\n              {\n                \"color\": \"red\",\n                \"value\": 80\n              }\n            ]\n          },\n          \"unit\": \"Slots\"\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 6,\n        \"w\": 6,\n        \"x\": 10,\n        \"y\": 17\n      },\n      \"id\": 15,\n      \"options\": {\n        \"legend\": {\n          \"calcs\": [],\n          \"displayMode\": \"list\",\n          \"placement\": \"bottom\",\n          \"showLegend\": true\n        },\n        \"tooltip\": {\n          \"mode\": \"single\",\n          \"sort\": \"none\"\n        }\n      },\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"editorMode\": \"code\",\n          \"exemplar\": true,\n          \"expr\": \"sum by (instance)(\\n    eth_con_beacon_slot{instance=~\\\"$instance\\\", block_id=\\\"head\\\"}\\n)\\n-\\nsum by (instance) (\\n    eth_con_beacon_slot{instance=~\\\"$instance\\\", block_id=\\\"finalized\\\"}\\n) \",\n          \"interval\": \"1m\",\n          \"legendFormat\": \"Head -> Finalized\",\n          \"range\": true,\n          \"refId\": \"A\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"editorMode\": \"code\",\n          \"exemplar\": true,\n          \"expr\": \"sum by (instance)(\\n    eth_con_beacon_slot{instance=~\\\"$instance\\\", block_id=\\\"head\\\"}\\n)\\n-\\nsum by (instance) (\\n    eth_con_beacon_slot{instance=~\\\"$instance\\\", block_id=\\\"justified\\\"}\\n) != 0\",\n          \"hide\": false,\n          \"interval\": \"1m\",\n          \"legendFormat\": \"Head -> Justified\",\n          \"range\": true,\n          \"refId\": \"B\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"editorMode\": \"code\",\n          \"exemplar\": true,\n          \"expr\": \"sum by (instance)(\\n    eth_con_beacon_slot{instance=~\\\"$instance\\\", block_id=\\\"justified\\\"}\\n)\\n-\\nsum by (instance) (\\n    eth_con_beacon_slot{instance=~\\\"$instance\\\", block_id=\\\"finalized\\\"}\\n) != 0\",\n          \"hide\": false,\n          \"interval\": \"1m\",\n          \"legendFormat\": \"Justified -> Finalized\",\n          \"range\": true,\n          \"refId\": \"C\"\n        }\n      ],\n      \"title\": \"Slot distances\",\n      \"type\": \"timeseries\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"palette-classic\"\n          },\n          \"custom\": {\n            \"axisCenteredZero\": false,\n            \"axisColorMode\": \"text\",\n            \"axisLabel\": \"\",\n            \"axisPlacement\": \"auto\",\n            \"barAlignment\": 0,\n            \"drawStyle\": \"line\",\n            \"fillOpacity\": 0,\n            \"gradientMode\": \"none\",\n            \"hideFrom\": {\n              \"legend\": false,\n              \"tooltip\": false,\n              \"viz\": false\n            },\n            \"lineInterpolation\": \"linear\",\n            \"lineWidth\": 1,\n            \"pointSize\": 1,\n            \"scaleDistribution\": {\n              \"type\": \"linear\"\n            },\n            \"showPoints\": \"auto\",\n            \"spanNulls\": false,\n            \"stacking\": {\n              \"group\": \"A\",\n              \"mode\": \"none\"\n            },\n            \"thresholdsStyle\": {\n              \"mode\": \"off\"\n            }\n          },\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\",\n                \"value\": null\n              },\n              {\n                \"color\": \"red\",\n                \"value\": 80\n              }\n            ]\n          }\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 6,\n        \"w\": 4,\n        \"x\": 16,\n        \"y\": 17\n      },\n      \"id\": 67,\n      \"options\": {\n        \"legend\": {\n          \"calcs\": [],\n          \"displayMode\": \"list\",\n          \"placement\": \"bottom\",\n          \"showLegend\": true\n        },\n        \"tooltip\": {\n          \"mode\": \"single\",\n          \"sort\": \"none\"\n        }\n      },\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"exemplar\": true,\n          \"expr\": \"eth_con_beacon_transactions{instance=~\\\"$instance\\\", block_id=\\\"head\\\"}\",\n          \"interval\": \"\",\n          \"legendFormat\": \"Transactions\",\n          \"refId\": \"A\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"exemplar\": true,\n          \"expr\": \"eth_con_beacon_slashings{instance=~\\\"$instance\\\", block_id=\\\"head\\\", type=\\\"proposer\\\"}\",\n          \"hide\": false,\n          \"interval\": \"\",\n          \"legendFormat\": \"Proposer Slashings\",\n          \"refId\": \"B\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"exemplar\": true,\n          \"expr\": \"eth_con_beacon_slashings{instance=~\\\"$instance\\\", block_id=\\\"head\\\", type=\\\"attester\\\"}\",\n          \"hide\": false,\n          \"interval\": \"\",\n          \"legendFormat\": \"Attester Slashings\",\n          \"refId\": \"C\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"exemplar\": true,\n          \"expr\": \"eth_con_beacon_attestations{instance=~\\\"$instance\\\",block_id=\\\"head\\\"}\",\n          \"hide\": false,\n          \"interval\": \"\",\n          \"legendFormat\": \"Attestations\",\n          \"refId\": \"D\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"exemplar\": true,\n          \"expr\": \"eth_con_beacon_deposits{instance=~\\\"$instance\\\",block_id=\\\"head\\\"}\",\n          \"hide\": false,\n          \"interval\": \"\",\n          \"legendFormat\": \"Deposits\",\n          \"refId\": \"E\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"exemplar\": true,\n          \"expr\": \"eth_con_beacon_voluntary_exits{instance=~\\\"$instance\\\",block_id=\\\"head\\\"}\",\n          \"hide\": false,\n          \"interval\": \"\",\n          \"legendFormat\": \"Voluntary Exits\",\n          \"refId\": \"F\"\n        }\n      ],\n      \"title\": \"Counts Per Block (at head)\",\n      \"type\": \"timeseries\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"palette-classic\"\n          },\n          \"custom\": {\n            \"axisCenteredZero\": false,\n            \"axisColorMode\": \"text\",\n            \"axisLabel\": \"\",\n            \"axisPlacement\": \"auto\",\n            \"barAlignment\": 0,\n            \"drawStyle\": \"line\",\n            \"fillOpacity\": 0,\n            \"gradientMode\": \"none\",\n            \"hideFrom\": {\n              \"legend\": false,\n              \"tooltip\": false,\n              \"viz\": false\n            },\n            \"lineInterpolation\": \"linear\",\n            \"lineWidth\": 1,\n            \"pointSize\": 1,\n            \"scaleDistribution\": {\n              \"log\": 10,\n              \"type\": \"log\"\n            },\n            \"showPoints\": \"auto\",\n            \"spanNulls\": false,\n            \"stacking\": {\n              \"group\": \"A\",\n              \"mode\": \"none\"\n            },\n            \"thresholdsStyle\": {\n              \"mode\": \"off\"\n            }\n          },\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\",\n                \"value\": null\n              },\n              {\n                \"color\": \"red\",\n                \"value\": 80\n              }\n            ]\n          },\n          \"unit\": \"none\"\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 6,\n        \"w\": 4,\n        \"x\": 20,\n        \"y\": 17\n      },\n      \"id\": 60,\n      \"options\": {\n        \"legend\": {\n          \"calcs\": [],\n          \"displayMode\": \"list\",\n          \"placement\": \"bottom\",\n          \"showLegend\": true\n        },\n        \"tooltip\": {\n          \"mode\": \"single\",\n          \"sort\": \"none\"\n        }\n      },\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"editorMode\": \"code\",\n          \"exemplar\": true,\n          \"expr\": \"sum by (event)(increase(eth_con_event_count{instance=~\\\"$instance\\\"}[1m]))\",\n          \"hide\": false,\n          \"interval\": \"1m\",\n          \"legendFormat\": \"{{ event }}\",\n          \"range\": true,\n          \"refId\": \"A\"\n        }\n      ],\n      \"title\": \"Events (per min)\",\n      \"type\": \"timeseries\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"custom\": {\n            \"hideFrom\": {\n              \"legend\": false,\n              \"tooltip\": false,\n              \"viz\": false\n            },\n            \"scaleDistribution\": {\n              \"type\": \"linear\"\n            }\n          }\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 7,\n        \"w\": 6,\n        \"x\": 0,\n        \"y\": 23\n      },\n      \"id\": 69,\n      \"options\": {\n        \"calculate\": true,\n        \"calculation\": {\n          \"xBuckets\": {\n            \"mode\": \"size\"\n          },\n          \"yBuckets\": {\n            \"mode\": \"count\",\n            \"value\": \"30\"\n          }\n        },\n        \"cellGap\": 1,\n        \"color\": {\n          \"exponent\": 0.5,\n          \"fill\": \"dark-orange\",\n          \"mode\": \"scheme\",\n          \"reverse\": false,\n          \"scale\": \"exponential\",\n          \"scheme\": \"Oranges\",\n          \"steps\": 128\n        },\n        \"exemplars\": {\n          \"color\": \"rgba(255,0,255,0.7)\"\n        },\n        \"filterValues\": {\n          \"le\": 1e-9\n        },\n        \"legend\": {\n          \"show\": true\n        },\n        \"rowsFrame\": {\n          \"layout\": \"auto\"\n        },\n        \"tooltip\": {\n          \"show\": true,\n          \"yHistogram\": false\n        },\n        \"yAxis\": {\n          \"axisPlacement\": \"left\",\n          \"reverse\": false,\n          \"unit\": \"s\"\n        }\n      },\n      \"pluginVersion\": \"9.5.12\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"editorMode\": \"code\",\n          \"exemplar\": false,\n          \"expr\": \"avg(increase(eth_con_beacon_proposer_delay_bucket{instance=~\\\"$instance\\\"}[1m])) by (le)\",\n          \"interval\": \"1m\",\n          \"legendFormat\": \"{{ instance }}\",\n          \"range\": true,\n          \"refId\": \"A\"\n        }\n      ],\n      \"title\": \"Proposer delay\",\n      \"type\": \"heatmap\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"palette-classic\"\n          },\n          \"custom\": {\n            \"axisCenteredZero\": false,\n            \"axisColorMode\": \"text\",\n            \"axisLabel\": \"\",\n            \"axisPlacement\": \"auto\",\n            \"barAlignment\": 0,\n            \"drawStyle\": \"line\",\n            \"fillOpacity\": 0,\n            \"gradientMode\": \"none\",\n            \"hideFrom\": {\n              \"legend\": false,\n              \"tooltip\": false,\n              \"viz\": false\n            },\n            \"lineInterpolation\": \"linear\",\n            \"lineWidth\": 1,\n            \"pointSize\": 1,\n            \"scaleDistribution\": {\n              \"type\": \"linear\"\n            },\n            \"showPoints\": \"auto\",\n            \"spanNulls\": false,\n            \"stacking\": {\n              \"group\": \"A\",\n              \"mode\": \"none\"\n            },\n            \"thresholdsStyle\": {\n              \"mode\": \"off\"\n            }\n          },\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\",\n                \"value\": null\n              },\n              {\n                \"color\": \"red\",\n                \"value\": 80\n              }\n            ]\n          },\n          \"unit\": \"none\"\n        },\n        \"overrides\": [\n          {\n            \"matcher\": {\n              \"id\": \"byRegexp\",\n              \"options\": \".*Per Block\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"custom.axisPlacement\",\n                \"value\": \"right\"\n              }\n            ]\n          }\n        ]\n      },\n      \"gridPos\": {\n        \"h\": 7,\n        \"w\": 5,\n        \"x\": 6,\n        \"y\": 23\n      },\n      \"id\": 72,\n      \"options\": {\n        \"legend\": {\n          \"calcs\": [],\n          \"displayMode\": \"list\",\n          \"placement\": \"bottom\",\n          \"showLegend\": true\n        },\n        \"tooltip\": {\n          \"mode\": \"single\",\n          \"sort\": \"none\"\n        }\n      },\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"editorMode\": \"code\",\n          \"exemplar\": true,\n          \"expr\": \"sum(eth_con_beacon_withdrawals_index_max{instance=~\\\"$instance\\\", block_id=\\\"head\\\"}) by (instance)\",\n          \"interval\": \"\",\n          \"legendFormat\": \"Index Max\",\n          \"range\": true,\n          \"refId\": \"A\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"editorMode\": \"code\",\n          \"exemplar\": true,\n          \"expr\": \"sum(eth_con_beacon_withdrawals_index_min{instance=~\\\"$instance\\\", block_id=\\\"head\\\"}) by (instance)\",\n          \"hide\": false,\n          \"interval\": \"\",\n          \"legendFormat\": \"Index Min\",\n          \"range\": true,\n          \"refId\": \"B\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"editorMode\": \"code\",\n          \"exemplar\": true,\n          \"expr\": \"sum(eth_con_beacon_withdrawals{instance=~\\\"$instance\\\", block_id=\\\"head\\\"}) by (instance)\",\n          \"hide\": false,\n          \"interval\": \"\",\n          \"legendFormat\": \"Per Block\",\n          \"range\": true,\n          \"refId\": \"C\"\n        }\n      ],\n      \"title\": \"Withdrawals\",\n      \"type\": \"timeseries\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"palette-classic\"\n          },\n          \"custom\": {\n            \"axisCenteredZero\": false,\n            \"axisColorMode\": \"text\",\n            \"axisLabel\": \"\",\n            \"axisPlacement\": \"auto\",\n            \"barAlignment\": 0,\n            \"drawStyle\": \"line\",\n            \"fillOpacity\": 0,\n            \"gradientMode\": \"none\",\n            \"hideFrom\": {\n              \"legend\": false,\n              \"tooltip\": false,\n              \"viz\": false\n            },\n            \"lineInterpolation\": \"linear\",\n            \"lineWidth\": 1,\n            \"pointSize\": 1,\n            \"scaleDistribution\": {\n              \"type\": \"linear\"\n            },\n            \"showPoints\": \"auto\",\n            \"spanNulls\": false,\n            \"stacking\": {\n              \"group\": \"A\",\n              \"mode\": \"none\"\n            },\n            \"thresholdsStyle\": {\n              \"mode\": \"off\"\n            }\n          },\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\",\n                \"value\": null\n              },\n              {\n                \"color\": \"red\",\n                \"value\": 80\n              }\n            ]\n          },\n          \"unit\": \"gwei\"\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 7,\n        \"w\": 5,\n        \"x\": 11,\n        \"y\": 23\n      },\n      \"id\": 71,\n      \"options\": {\n        \"legend\": {\n          \"calcs\": [],\n          \"displayMode\": \"list\",\n          \"placement\": \"bottom\",\n          \"showLegend\": true\n        },\n        \"tooltip\": {\n          \"mode\": \"single\",\n          \"sort\": \"none\"\n        }\n      },\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"editorMode\": \"code\",\n          \"exemplar\": true,\n          \"expr\": \"sum(increase(eth_con_beacon_withdrawals_amount_gwei{instance=~\\\"$instance\\\", block_id=\\\"head\\\"}[1m])) by (instance)\",\n          \"interval\": \"\",\n          \"legendFormat\": \"{{ instance }}\",\n          \"range\": true,\n          \"refId\": \"A\"\n        }\n      ],\n      \"title\": \"Withdrawal Amounts\",\n      \"type\": \"timeseries\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"palette-classic\"\n          },\n          \"custom\": {\n            \"axisCenteredZero\": false,\n            \"axisColorMode\": \"text\",\n            \"axisLabel\": \"\",\n            \"axisPlacement\": \"auto\",\n            \"barAlignment\": 0,\n            \"drawStyle\": \"line\",\n            \"fillOpacity\": 0,\n            \"gradientMode\": \"none\",\n            \"hideFrom\": {\n              \"legend\": false,\n              \"tooltip\": false,\n              \"viz\": false\n            },\n            \"lineInterpolation\": \"linear\",\n            \"lineWidth\": 1,\n            \"pointSize\": 1,\n            \"scaleDistribution\": {\n              \"type\": \"linear\"\n            },\n            \"showPoints\": \"auto\",\n            \"spanNulls\": false,\n            \"stacking\": {\n              \"group\": \"A\",\n              \"mode\": \"normal\"\n            },\n            \"thresholdsStyle\": {\n              \"mode\": \"off\"\n            }\n          },\n          \"mappings\": [],\n          \"min\": 0,\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\",\n                \"value\": null\n              },\n              {\n                \"color\": \"red\",\n                \"value\": 80\n              }\n            ]\n          },\n          \"unit\": \"none\"\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 7,\n        \"w\": 4,\n        \"x\": 16,\n        \"y\": 23\n      },\n      \"id\": 70,\n      \"options\": {\n        \"legend\": {\n          \"calcs\": [],\n          \"displayMode\": \"list\",\n          \"placement\": \"bottom\",\n          \"showLegend\": true\n        },\n        \"tooltip\": {\n          \"mode\": \"single\",\n          \"sort\": \"none\"\n        }\n      },\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"editorMode\": \"code\",\n          \"exemplar\": true,\n          \"expr\": \"sum by (direction)(eth_con_peers{instance=~\\\"$instance\\\", state=\\\"connected\\\"})\",\n          \"hide\": false,\n          \"interval\": \"\",\n          \"legendFormat\": \"__auto\",\n          \"range\": true,\n          \"refId\": \"A\"\n        }\n      ],\n      \"title\": \"Peers (stacked)\",\n      \"type\": \"timeseries\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"palette-classic\"\n          },\n          \"custom\": {\n            \"axisCenteredZero\": false,\n            \"axisColorMode\": \"text\",\n            \"axisLabel\": \"\",\n            \"axisPlacement\": \"auto\",\n            \"barAlignment\": 0,\n            \"drawStyle\": \"line\",\n            \"fillOpacity\": 0,\n            \"gradientMode\": \"none\",\n            \"hideFrom\": {\n              \"legend\": false,\n              \"tooltip\": false,\n              \"viz\": false\n            },\n            \"lineInterpolation\": \"linear\",\n            \"lineWidth\": 1,\n            \"pointSize\": 1,\n            \"scaleDistribution\": {\n              \"type\": \"linear\"\n            },\n            \"showPoints\": \"auto\",\n            \"spanNulls\": false,\n            \"stacking\": {\n              \"group\": \"A\",\n              \"mode\": \"none\"\n            },\n            \"thresholdsStyle\": {\n              \"mode\": \"off\"\n            }\n          },\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\",\n                \"value\": null\n              },\n              {\n                \"color\": \"red\",\n                \"value\": 80\n              }\n            ]\n          },\n          \"unit\": \"none\"\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 7,\n        \"w\": 4,\n        \"x\": 20,\n        \"y\": 23\n      },\n      \"id\": 28,\n      \"options\": {\n        \"legend\": {\n          \"calcs\": [],\n          \"displayMode\": \"list\",\n          \"placement\": \"bottom\",\n          \"showLegend\": true\n        },\n        \"tooltip\": {\n          \"mode\": \"single\",\n          \"sort\": \"none\"\n        }\n      },\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"exemplar\": true,\n          \"expr\": \"eth_con_fork_epoch{instance=~\\\"$instance\\\", fork!=\\\"SHARDING\\\"}\",\n          \"hide\": false,\n          \"interval\": \"\",\n          \"legendFormat\": \"{{ fork }}\",\n          \"refId\": \"A\"\n        }\n      ],\n      \"title\": \"Fork Epochs\",\n      \"type\": \"timeseries\"\n    },\n    {\n      \"collapsed\": false,\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"prometheus\"\n      },\n      \"gridPos\": {\n        \"h\": 1,\n        \"w\": 24,\n        \"x\": 0,\n        \"y\": 30\n      },\n      \"id\": 9,\n      \"panels\": [],\n      \"title\": \"Execution Layer\",\n      \"type\": \"row\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"mappings\": [\n            {\n              \"options\": {\n                \"0\": {\n                  \"index\": 1,\n                  \"text\": \"Synced\"\n                },\n                \"1\": {\n                  \"index\": 0,\n                  \"text\": \"Syncing\"\n                }\n              },\n              \"type\": \"value\"\n            }\n          ],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\",\n                \"value\": null\n              },\n              {\n                \"color\": \"green\",\n                \"value\": 0\n              },\n              {\n                \"color\": \"#EAB839\",\n                \"value\": 1\n              }\n            ]\n          },\n          \"unit\": \"short\"\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 6,\n        \"w\": 5,\n        \"x\": 0,\n        \"y\": 31\n      },\n      \"id\": 24,\n      \"options\": {\n        \"colorMode\": \"background\",\n        \"graphMode\": \"none\",\n        \"justifyMode\": \"auto\",\n        \"orientation\": \"auto\",\n        \"reduceOptions\": {\n          \"calcs\": [\n            \"lastNotNull\"\n          ],\n          \"fields\": \"\",\n          \"values\": false\n        },\n        \"textMode\": \"auto\"\n      },\n      \"pluginVersion\": \"9.5.12\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"exemplar\": true,\n          \"expr\": \"eth_exe_sync_is_syncing{instance=~\\\"$instance\\\"}\",\n          \"interval\": \"\",\n          \"legendFormat\": \"\",\n          \"refId\": \"A\"\n        }\n      ],\n      \"title\": \"Sync Status\",\n      \"type\": \"stat\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"palette-classic\"\n          },\n          \"custom\": {\n            \"axisCenteredZero\": false,\n            \"axisColorMode\": \"text\",\n            \"axisLabel\": \"\",\n            \"axisPlacement\": \"auto\",\n            \"barAlignment\": 0,\n            \"drawStyle\": \"line\",\n            \"fillOpacity\": 0,\n            \"gradientMode\": \"none\",\n            \"hideFrom\": {\n              \"legend\": false,\n              \"tooltip\": false,\n              \"viz\": false\n            },\n            \"lineInterpolation\": \"linear\",\n            \"lineWidth\": 1,\n            \"pointSize\": 1,\n            \"scaleDistribution\": {\n              \"type\": \"linear\"\n            },\n            \"showPoints\": \"auto\",\n            \"spanNulls\": false,\n            \"stacking\": {\n              \"group\": \"A\",\n              \"mode\": \"none\"\n            },\n            \"thresholdsStyle\": {\n              \"mode\": \"off\"\n            }\n          },\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\",\n                \"value\": null\n              },\n              {\n                \"color\": \"red\",\n                \"value\": 80\n              }\n            ]\n          },\n          \"unit\": \"percent\"\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 6,\n        \"w\": 5,\n        \"x\": 5,\n        \"y\": 31\n      },\n      \"id\": 34,\n      \"options\": {\n        \"legend\": {\n          \"calcs\": [],\n          \"displayMode\": \"list\",\n          \"placement\": \"bottom\",\n          \"showLegend\": true\n        },\n        \"tooltip\": {\n          \"mode\": \"single\",\n          \"sort\": \"none\"\n        }\n      },\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"exemplar\": true,\n          \"expr\": \"eth_exe_sync_percentage{instance=~\\\"$instance\\\"}\",\n          \"interval\": \"\",\n          \"legendFormat\": \"{{ instance }}\",\n          \"refId\": \"A\"\n        }\n      ],\n      \"title\": \"Sync Percent\",\n      \"type\": \"timeseries\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"palette-classic\"\n          },\n          \"custom\": {\n            \"axisCenteredZero\": false,\n            \"axisColorMode\": \"text\",\n            \"axisLabel\": \"\",\n            \"axisPlacement\": \"auto\",\n            \"barAlignment\": 0,\n            \"drawStyle\": \"line\",\n            \"fillOpacity\": 0,\n            \"gradientMode\": \"none\",\n            \"hideFrom\": {\n              \"legend\": false,\n              \"tooltip\": false,\n              \"viz\": false\n            },\n            \"lineInterpolation\": \"linear\",\n            \"lineWidth\": 1,\n            \"pointSize\": 1,\n            \"scaleDistribution\": {\n              \"type\": \"linear\"\n            },\n            \"showPoints\": \"auto\",\n            \"spanNulls\": false,\n            \"stacking\": {\n              \"group\": \"A\",\n              \"mode\": \"none\"\n            },\n            \"thresholdsStyle\": {\n              \"mode\": \"off\"\n            }\n          },\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\",\n                \"value\": null\n              },\n              {\n                \"color\": \"red\",\n                \"value\": 80\n              }\n            ]\n          },\n          \"unit\": \"none\"\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 6,\n        \"w\": 5,\n        \"x\": 10,\n        \"y\": 31\n      },\n      \"id\": 39,\n      \"options\": {\n        \"legend\": {\n          \"calcs\": [],\n          \"displayMode\": \"list\",\n          \"placement\": \"bottom\",\n          \"showLegend\": true\n        },\n        \"tooltip\": {\n          \"mode\": \"single\",\n          \"sort\": \"none\"\n        }\n      },\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"exemplar\": true,\n          \"expr\": \"eth_exe_block_most_recent_number{instance=~\\\"$instance\\\"}\",\n          \"interval\": \"\",\n          \"legendFormat\": \"{{ instance }}\",\n          \"refId\": \"A\"\n        }\n      ],\n      \"title\": \"Block Height\",\n      \"type\": \"timeseries\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"palette-classic\"\n          },\n          \"custom\": {\n            \"axisCenteredZero\": false,\n            \"axisColorMode\": \"text\",\n            \"axisLabel\": \"\",\n            \"axisPlacement\": \"auto\",\n            \"barAlignment\": 0,\n            \"drawStyle\": \"line\",\n            \"fillOpacity\": 0,\n            \"gradientMode\": \"none\",\n            \"hideFrom\": {\n              \"legend\": false,\n              \"tooltip\": false,\n              \"viz\": false\n            },\n            \"lineInterpolation\": \"linear\",\n            \"lineWidth\": 1,\n            \"pointSize\": 1,\n            \"scaleDistribution\": {\n              \"type\": \"linear\"\n            },\n            \"showPoints\": \"auto\",\n            \"spanNulls\": false,\n            \"stacking\": {\n              \"group\": \"A\",\n              \"mode\": \"none\"\n            },\n            \"thresholdsStyle\": {\n              \"mode\": \"off\"\n            }\n          },\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\",\n                \"value\": null\n              },\n              {\n                \"color\": \"red\",\n                \"value\": 80\n              }\n            ]\n          },\n          \"unit\": \"none\"\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 6,\n        \"w\": 5,\n        \"x\": 15,\n        \"y\": 31\n      },\n      \"id\": 45,\n      \"options\": {\n        \"legend\": {\n          \"calcs\": [],\n          \"displayMode\": \"list\",\n          \"placement\": \"bottom\",\n          \"showLegend\": true\n        },\n        \"tooltip\": {\n          \"mode\": \"single\",\n          \"sort\": \"none\"\n        }\n      },\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"exemplar\": true,\n          \"expr\": \"eth_exe_net_peer_count{instance=~\\\"$instance\\\"}\",\n          \"interval\": \"\",\n          \"legendFormat\": \"{{ instance }}\",\n          \"refId\": \"A\"\n        }\n      ],\n      \"title\": \"Peers\",\n      \"type\": \"timeseries\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"palette-classic\"\n          },\n          \"custom\": {\n            \"axisCenteredZero\": false,\n            \"axisColorMode\": \"text\",\n            \"axisLabel\": \"\",\n            \"axisPlacement\": \"auto\",\n            \"barAlignment\": 0,\n            \"drawStyle\": \"line\",\n            \"fillOpacity\": 0,\n            \"gradientMode\": \"none\",\n            \"hideFrom\": {\n              \"legend\": false,\n              \"tooltip\": false,\n              \"viz\": false\n            },\n            \"lineInterpolation\": \"linear\",\n            \"lineWidth\": 1,\n            \"pointSize\": 1,\n            \"scaleDistribution\": {\n              \"type\": \"linear\"\n            },\n            \"showPoints\": \"auto\",\n            \"spanNulls\": false,\n            \"stacking\": {\n              \"group\": \"A\",\n              \"mode\": \"none\"\n            },\n            \"thresholdsStyle\": {\n              \"mode\": \"off\"\n            }\n          },\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\",\n                \"value\": null\n              },\n              {\n                \"color\": \"red\",\n                \"value\": 80\n              }\n            ]\n          },\n          \"unit\": \"short\"\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 6,\n        \"w\": 4,\n        \"x\": 20,\n        \"y\": 31\n      },\n      \"id\": 47,\n      \"options\": {\n        \"legend\": {\n          \"calcs\": [],\n          \"displayMode\": \"list\",\n          \"placement\": \"bottom\",\n          \"showLegend\": true\n        },\n        \"tooltip\": {\n          \"mode\": \"single\",\n          \"sort\": \"none\"\n        }\n      },\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"exemplar\": true,\n          \"expr\": \"sum by (instance)(\\n    eth_exe_block_head_total_difficulty_trillions{instance=~\\\"$instance\\\"}\\n)\",\n          \"interval\": \"\",\n          \"legendFormat\": \"{{ instance }}\",\n          \"refId\": \"A\"\n        }\n      ],\n      \"title\": \"Total Difficulty (trillions)\",\n      \"type\": \"timeseries\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"palette-classic\"\n          },\n          \"custom\": {\n            \"axisCenteredZero\": false,\n            \"axisColorMode\": \"text\",\n            \"axisLabel\": \"\",\n            \"axisPlacement\": \"auto\",\n            \"barAlignment\": 0,\n            \"drawStyle\": \"line\",\n            \"fillOpacity\": 0,\n            \"gradientMode\": \"none\",\n            \"hideFrom\": {\n              \"legend\": false,\n              \"tooltip\": false,\n              \"viz\": false\n            },\n            \"lineInterpolation\": \"linear\",\n            \"lineWidth\": 1,\n            \"pointSize\": 1,\n            \"scaleDistribution\": {\n              \"type\": \"linear\"\n            },\n            \"showPoints\": \"auto\",\n            \"spanNulls\": false,\n            \"stacking\": {\n              \"group\": \"A\",\n              \"mode\": \"none\"\n            },\n            \"thresholdsStyle\": {\n              \"mode\": \"off\"\n            }\n          },\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\",\n                \"value\": null\n              },\n              {\n                \"color\": \"red\",\n                \"value\": 80\n              }\n            ]\n          },\n          \"unit\": \"blocks\"\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 6,\n        \"w\": 5,\n        \"x\": 0,\n        \"y\": 37\n      },\n      \"id\": 35,\n      \"options\": {\n        \"legend\": {\n          \"calcs\": [],\n          \"displayMode\": \"list\",\n          \"placement\": \"bottom\",\n          \"showLegend\": true\n        },\n        \"tooltip\": {\n          \"mode\": \"single\",\n          \"sort\": \"none\"\n        }\n      },\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"exemplar\": true,\n          \"expr\": \"eth_exe_sync_highest_block{instance=~\\\"$instance\\\"} - eth_exe_sync_current_block{instance=~\\\"$instance\\\"}\",\n          \"interval\": \"\",\n          \"legendFormat\": \"{{ instance }}\",\n          \"refId\": \"A\"\n        }\n      ],\n      \"title\": \"Sync Distance\",\n      \"type\": \"timeseries\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"palette-classic\"\n          },\n          \"custom\": {\n            \"axisCenteredZero\": false,\n            \"axisColorMode\": \"text\",\n            \"axisLabel\": \"\",\n            \"axisPlacement\": \"auto\",\n            \"barAlignment\": 0,\n            \"drawStyle\": \"line\",\n            \"fillOpacity\": 0,\n            \"gradientMode\": \"none\",\n            \"hideFrom\": {\n              \"legend\": false,\n              \"tooltip\": false,\n              \"viz\": false\n            },\n            \"lineInterpolation\": \"linear\",\n            \"lineWidth\": 1,\n            \"pointSize\": 1,\n            \"scaleDistribution\": {\n              \"type\": \"linear\"\n            },\n            \"showPoints\": \"auto\",\n            \"spanNulls\": false,\n            \"stacking\": {\n              \"group\": \"A\",\n              \"mode\": \"none\"\n            },\n            \"thresholdsStyle\": {\n              \"mode\": \"off\"\n            }\n          },\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\",\n                \"value\": null\n              },\n              {\n                \"color\": \"red\",\n                \"value\": 80\n              }\n            ]\n          },\n          \"unit\": \"percent\"\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 6,\n        \"w\": 5,\n        \"x\": 5,\n        \"y\": 37\n      },\n      \"id\": 36,\n      \"options\": {\n        \"legend\": {\n          \"calcs\": [],\n          \"displayMode\": \"list\",\n          \"placement\": \"bottom\",\n          \"showLegend\": true\n        },\n        \"tooltip\": {\n          \"mode\": \"single\",\n          \"sort\": \"none\"\n        }\n      },\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"exemplar\": true,\n          \"expr\": \"sum by (instance)(rate(eth_exe_sync_percentage{instance=~\\\"$instance\\\"}[1m]))\",\n          \"interval\": \"1m\",\n          \"legendFormat\": \"{{ instance }}\",\n          \"refId\": \"A\"\n        }\n      ],\n      \"title\": \"Sync rate\",\n      \"type\": \"timeseries\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"palette-classic\"\n          },\n          \"custom\": {\n            \"axisCenteredZero\": false,\n            \"axisColorMode\": \"text\",\n            \"axisLabel\": \"\",\n            \"axisPlacement\": \"auto\",\n            \"barAlignment\": 0,\n            \"drawStyle\": \"line\",\n            \"fillOpacity\": 0,\n            \"gradientMode\": \"none\",\n            \"hideFrom\": {\n              \"legend\": false,\n              \"tooltip\": false,\n              \"viz\": false\n            },\n            \"lineInterpolation\": \"linear\",\n            \"lineWidth\": 1,\n            \"pointSize\": 1,\n            \"scaleDistribution\": {\n              \"type\": \"linear\"\n            },\n            \"showPoints\": \"auto\",\n            \"spanNulls\": false,\n            \"stacking\": {\n              \"group\": \"A\",\n              \"mode\": \"none\"\n            },\n            \"thresholdsStyle\": {\n              \"mode\": \"off\"\n            }\n          },\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\",\n                \"value\": null\n              },\n              {\n                \"color\": \"red\",\n                \"value\": 80\n              }\n            ]\n          },\n          \"unit\": \"Gwei\"\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 6,\n        \"w\": 5,\n        \"x\": 10,\n        \"y\": 37\n      },\n      \"id\": 38,\n      \"options\": {\n        \"legend\": {\n          \"calcs\": [],\n          \"displayMode\": \"list\",\n          \"placement\": \"bottom\",\n          \"showLegend\": true\n        },\n        \"tooltip\": {\n          \"mode\": \"single\",\n          \"sort\": \"none\"\n        }\n      },\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"exemplar\": true,\n          \"expr\": \"eth_exe_gas_price_gwei{instance=~\\\"$instance\\\"}\",\n          \"interval\": \"\",\n          \"legendFormat\": \"{{ instance }}\",\n          \"refId\": \"A\"\n        }\n      ],\n      \"title\": \"Suggested Gas Price\",\n      \"type\": \"timeseries\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"palette-classic\"\n          },\n          \"custom\": {\n            \"axisCenteredZero\": false,\n            \"axisColorMode\": \"text\",\n            \"axisLabel\": \"\",\n            \"axisPlacement\": \"auto\",\n            \"barAlignment\": 0,\n            \"drawStyle\": \"line\",\n            \"fillOpacity\": 0,\n            \"gradientMode\": \"none\",\n            \"hideFrom\": {\n              \"legend\": false,\n              \"tooltip\": false,\n              \"viz\": false\n            },\n            \"lineInterpolation\": \"linear\",\n            \"lineWidth\": 1,\n            \"pointSize\": 1,\n            \"scaleDistribution\": {\n              \"type\": \"linear\"\n            },\n            \"showPoints\": \"auto\",\n            \"spanNulls\": false,\n            \"stacking\": {\n              \"group\": \"A\",\n              \"mode\": \"none\"\n            },\n            \"thresholdsStyle\": {\n              \"mode\": \"off\"\n            }\n          },\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\",\n                \"value\": null\n              },\n              {\n                \"color\": \"red\",\n                \"value\": 80\n              }\n            ]\n          },\n          \"unit\": \"percentunit\"\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 6,\n        \"w\": 9,\n        \"x\": 15,\n        \"y\": 37\n      },\n      \"id\": 54,\n      \"options\": {\n        \"legend\": {\n          \"calcs\": [],\n          \"displayMode\": \"list\",\n          \"placement\": \"bottom\",\n          \"showLegend\": true\n        },\n        \"tooltip\": {\n          \"mode\": \"single\",\n          \"sort\": \"none\"\n        }\n      },\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"editorMode\": \"code\",\n          \"exemplar\": true,\n          \"expr\": \"sum by (instance)(\\n    eth_exe_block_head_gas_used{instance=~\\\"$instance\\\"}\\n)\\n/\\nsum by (instance)( \\n    eth_exe_block_head_gas_limit{instance=~\\\"$instance\\\"} \\n)\",\n          \"interval\": \"20s\",\n          \"legendFormat\": \"{{ instance }}\",\n          \"range\": true,\n          \"refId\": \"A\"\n        }\n      ],\n      \"title\": \"Gas Used \",\n      \"type\": \"timeseries\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"palette-classic\"\n          },\n          \"custom\": {\n            \"axisCenteredZero\": false,\n            \"axisColorMode\": \"text\",\n            \"axisLabel\": \"\",\n            \"axisPlacement\": \"auto\",\n            \"barAlignment\": 0,\n            \"drawStyle\": \"line\",\n            \"fillOpacity\": 0,\n            \"gradientMode\": \"none\",\n            \"hideFrom\": {\n              \"legend\": false,\n              \"tooltip\": false,\n              \"viz\": false\n            },\n            \"lineInterpolation\": \"linear\",\n            \"lineWidth\": 1,\n            \"pointSize\": 1,\n            \"scaleDistribution\": {\n              \"type\": \"linear\"\n            },\n            \"showPoints\": \"auto\",\n            \"spanNulls\": false,\n            \"stacking\": {\n              \"group\": \"A\",\n              \"mode\": \"none\"\n            },\n            \"thresholdsStyle\": {\n              \"mode\": \"off\"\n            }\n          },\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\",\n                \"value\": null\n              },\n              {\n                \"color\": \"red\",\n                \"value\": 80\n              }\n            ]\n          }\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 6,\n        \"w\": 5,\n        \"x\": 0,\n        \"y\": 43\n      },\n      \"id\": 49,\n      \"options\": {\n        \"legend\": {\n          \"calcs\": [],\n          \"displayMode\": \"list\",\n          \"placement\": \"bottom\",\n          \"showLegend\": true\n        },\n        \"tooltip\": {\n          \"mode\": \"single\",\n          \"sort\": \"none\"\n        }\n      },\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"editorMode\": \"code\",\n          \"exemplar\": true,\n          \"expr\": \"sum by (instance)(\\n    increase(\\n        eth_exe_block_head_transactions_in_block{instance=~\\\"$instance\\\"}[1m]\\n    )\\n)\",\n          \"interval\": \"1m\",\n          \"legendFormat\": \"{{ instance }}\",\n          \"range\": true,\n          \"refId\": \"A\"\n        }\n      ],\n      \"title\": \"Transactions per block\",\n      \"type\": \"timeseries\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"palette-classic\"\n          },\n          \"custom\": {\n            \"axisCenteredZero\": false,\n            \"axisColorMode\": \"text\",\n            \"axisLabel\": \"\",\n            \"axisPlacement\": \"auto\",\n            \"barAlignment\": 0,\n            \"drawStyle\": \"line\",\n            \"fillOpacity\": 0,\n            \"gradientMode\": \"none\",\n            \"hideFrom\": {\n              \"legend\": false,\n              \"tooltip\": false,\n              \"viz\": false\n            },\n            \"lineInterpolation\": \"linear\",\n            \"lineWidth\": 1,\n            \"pointSize\": 1,\n            \"scaleDistribution\": {\n              \"type\": \"linear\"\n            },\n            \"showPoints\": \"auto\",\n            \"spanNulls\": false,\n            \"stacking\": {\n              \"group\": \"A\",\n              \"mode\": \"none\"\n            },\n            \"thresholdsStyle\": {\n              \"mode\": \"off\"\n            }\n          },\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\",\n                \"value\": null\n              },\n              {\n                \"color\": \"red\",\n                \"value\": 80\n              }\n            ]\n          },\n          \"unit\": \"bytes\"\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 6,\n        \"w\": 5,\n        \"x\": 5,\n        \"y\": 43\n      },\n      \"id\": 56,\n      \"options\": {\n        \"legend\": {\n          \"calcs\": [],\n          \"displayMode\": \"list\",\n          \"placement\": \"bottom\",\n          \"showLegend\": true\n        },\n        \"tooltip\": {\n          \"mode\": \"single\",\n          \"sort\": \"none\"\n        }\n      },\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"editorMode\": \"code\",\n          \"exemplar\": true,\n          \"expr\": \"eth_exe_block_head_block_size_bytes{instance=~\\\"$instance\\\"}\",\n          \"interval\": \"1m\",\n          \"legendFormat\": \"{{ instance }}\",\n          \"range\": true,\n          \"refId\": \"A\"\n        }\n      ],\n      \"title\": \"Block size\",\n      \"type\": \"timeseries\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"palette-classic\"\n          },\n          \"custom\": {\n            \"axisCenteredZero\": false,\n            \"axisColorMode\": \"text\",\n            \"axisLabel\": \"\",\n            \"axisPlacement\": \"auto\",\n            \"barAlignment\": 0,\n            \"drawStyle\": \"line\",\n            \"fillOpacity\": 0,\n            \"gradientMode\": \"none\",\n            \"hideFrom\": {\n              \"legend\": false,\n              \"tooltip\": false,\n              \"viz\": false\n            },\n            \"lineInterpolation\": \"linear\",\n            \"lineWidth\": 1,\n            \"pointSize\": 1,\n            \"scaleDistribution\": {\n              \"type\": \"linear\"\n            },\n            \"showPoints\": \"auto\",\n            \"spanNulls\": false,\n            \"stacking\": {\n              \"group\": \"A\",\n              \"mode\": \"none\"\n            },\n            \"thresholdsStyle\": {\n              \"mode\": \"off\"\n            }\n          },\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\",\n                \"value\": null\n              },\n              {\n                \"color\": \"red\",\n                \"value\": 80\n              }\n            ]\n          },\n          \"unit\": \"none\"\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 6,\n        \"w\": 5,\n        \"x\": 10,\n        \"y\": 43\n      },\n      \"id\": 55,\n      \"options\": {\n        \"legend\": {\n          \"calcs\": [],\n          \"displayMode\": \"list\",\n          \"placement\": \"bottom\",\n          \"showLegend\": true\n        },\n        \"tooltip\": {\n          \"mode\": \"single\",\n          \"sort\": \"none\"\n        }\n      },\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"editorMode\": \"code\",\n          \"exemplar\": true,\n          \"expr\": \"eth_exe_txpool_transactions{instance=~\\\"$instance\\\"}\",\n          \"interval\": \"\",\n          \"legendFormat\": \"{{ status }}\",\n          \"range\": true,\n          \"refId\": \"A\"\n        }\n      ],\n      \"title\": \"Transaction Pool\",\n      \"type\": \"timeseries\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"palette-classic\"\n          },\n          \"custom\": {\n            \"axisCenteredZero\": false,\n            \"axisColorMode\": \"text\",\n            \"axisLabel\": \"\",\n            \"axisPlacement\": \"auto\",\n            \"barAlignment\": 0,\n            \"drawStyle\": \"line\",\n            \"fillOpacity\": 0,\n            \"gradientMode\": \"none\",\n            \"hideFrom\": {\n              \"legend\": false,\n              \"tooltip\": false,\n              \"viz\": false\n            },\n            \"lineInterpolation\": \"linear\",\n            \"lineWidth\": 1,\n            \"pointSize\": 1,\n            \"scaleDistribution\": {\n              \"type\": \"linear\"\n            },\n            \"showPoints\": \"auto\",\n            \"spanNulls\": false,\n            \"stacking\": {\n              \"group\": \"A\",\n              \"mode\": \"none\"\n            },\n            \"thresholdsStyle\": {\n              \"mode\": \"off\"\n            }\n          },\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\",\n                \"value\": null\n              },\n              {\n                \"color\": \"red\",\n                \"value\": 80\n              }\n            ]\n          },\n          \"unit\": \"short\"\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 6,\n        \"w\": 5,\n        \"x\": 15,\n        \"y\": 43\n      },\n      \"id\": 53,\n      \"options\": {\n        \"legend\": {\n          \"calcs\": [],\n          \"displayMode\": \"list\",\n          \"placement\": \"bottom\",\n          \"showLegend\": true\n        },\n        \"tooltip\": {\n          \"mode\": \"single\",\n          \"sort\": \"none\"\n        }\n      },\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"exemplar\": true,\n          \"expr\": \"eth_exe_block_head_gas_used{instance=~\\\"$instance\\\"}\",\n          \"interval\": \"\",\n          \"legendFormat\": \"{{ instance }}\",\n          \"refId\": \"A\"\n        }\n      ],\n      \"title\": \"Gas used\",\n      \"type\": \"timeseries\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"palette-classic\"\n          },\n          \"custom\": {\n            \"axisCenteredZero\": false,\n            \"axisColorMode\": \"text\",\n            \"axisLabel\": \"\",\n            \"axisPlacement\": \"auto\",\n            \"barAlignment\": 0,\n            \"drawStyle\": \"line\",\n            \"fillOpacity\": 0,\n            \"gradientMode\": \"none\",\n            \"hideFrom\": {\n              \"legend\": false,\n              \"tooltip\": false,\n              \"viz\": false\n            },\n            \"lineInterpolation\": \"linear\",\n            \"lineWidth\": 1,\n            \"pointSize\": 1,\n            \"scaleDistribution\": {\n              \"type\": \"linear\"\n            },\n            \"showPoints\": \"auto\",\n            \"spanNulls\": false,\n            \"stacking\": {\n              \"group\": \"A\",\n              \"mode\": \"none\"\n            },\n            \"thresholdsStyle\": {\n              \"mode\": \"off\"\n            }\n          },\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\",\n                \"value\": null\n              },\n              {\n                \"color\": \"red\",\n                \"value\": 80\n              }\n            ]\n          },\n          \"unit\": \"short\"\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 6,\n        \"w\": 4,\n        \"x\": 20,\n        \"y\": 43\n      },\n      \"id\": 52,\n      \"options\": {\n        \"legend\": {\n          \"calcs\": [],\n          \"displayMode\": \"list\",\n          \"placement\": \"bottom\",\n          \"showLegend\": true\n        },\n        \"tooltip\": {\n          \"mode\": \"single\",\n          \"sort\": \"none\"\n        }\n      },\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"exemplar\": true,\n          \"expr\": \"eth_exe_block_head_gas_limit{instance=~\\\"$instance\\\"}\",\n          \"interval\": \"\",\n          \"legendFormat\": \"{{ instance }}\",\n          \"refId\": \"A\"\n        }\n      ],\n      \"title\": \"Gas limit\",\n      \"type\": \"timeseries\"\n    },\n    {\n      \"collapsed\": true,\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"prometheus\"\n      },\n      \"gridPos\": {\n        \"h\": 1,\n        \"w\": 24,\n        \"x\": 0,\n        \"y\": 49\n      },\n      \"id\": 42,\n      \"panels\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"fieldConfig\": {\n            \"defaults\": {\n              \"color\": {\n                \"mode\": \"continuous-GrYlRd\"\n              },\n              \"custom\": {\n                \"align\": \"auto\",\n                \"cellOptions\": {\n                  \"type\": \"auto\"\n                },\n                \"inspect\": false\n              },\n              \"mappings\": [],\n              \"thresholds\": {\n                \"mode\": \"absolute\",\n                \"steps\": [\n                  {\n                    \"color\": \"green\"\n                  },\n                  {\n                    \"color\": \"red\",\n                    \"value\": 80\n                  }\n                ]\n              }\n            },\n            \"overrides\": []\n          },\n          \"gridPos\": {\n            \"h\": 13,\n            \"w\": 24,\n            \"x\": 0,\n            \"y\": 50\n          },\n          \"id\": 44,\n          \"options\": {\n            \"footer\": {\n              \"fields\": \"\",\n              \"reducer\": [\n                \"sum\"\n              ],\n              \"show\": false\n            },\n            \"showHeader\": false\n          },\n          \"pluginVersion\": \"9.3.1\",\n          \"targets\": [\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"PBFA97CFB590B2093\"\n              },\n              \"exemplar\": false,\n              \"expr\": \"sum by (spec)(\\n    label_replace(\\n        {__name__=~\\\"eth_con_spec.*\\\", instance=~\\\"$instance\\\"},\\n        \\\"spec\\\",\\n        \\\"$1\\\",\\n        \\\"__name__\\\",\\n        \\\"eth_con_spec_(.*)\\\"\\n    )\\n)\",\n              \"format\": \"table\",\n              \"instant\": true,\n              \"interval\": \"\",\n              \"legendFormat\": \"{{ spec }}\",\n              \"refId\": \"A\"\n            }\n          ],\n          \"title\": \"Consensus Spec\",\n          \"type\": \"table\"\n        }\n      ],\n      \"title\": \"Consensus Spec\",\n      \"type\": \"row\"\n    }\n  ],\n  \"refresh\": \"5s\",\n  \"schemaVersion\": 38,\n  \"style\": \"dark\",\n  \"tags\": [],\n  \"templating\": {\n    \"list\": [\n      {\n        \"current\": {\n          \"selected\": false,\n          \"text\": \"1-lighthouse-geth\",\n          \"value\": \"1-lighthouse-geth\"\n        },\n        \"datasource\": {\n          \"type\": \"prometheus\",\n          \"uid\": \"PBFA97CFB590B2093\"\n        },\n        \"definition\": \"label_values(eth_con_beacon_slot, instance)\",\n        \"hide\": 0,\n        \"includeAll\": false,\n        \"multi\": false,\n        \"name\": \"instance\",\n        \"options\": [],\n        \"query\": {\n          \"query\": \"label_values(eth_con_beacon_slot, instance)\",\n          \"refId\": \"StandardVariableQuery\"\n        },\n        \"refresh\": 2,\n        \"regex\": \"\",\n        \"skipUrlSync\": false,\n        \"sort\": 0,\n        \"type\": \"query\"\n      }\n    ]\n  },\n  \"time\": {\n    \"from\": \"now-5m\",\n    \"to\": \"now\"\n  },\n  \"timepicker\": {},\n  \"timezone\": \"\",\n  \"title\": \"Ethereum Metrics Exporter (Single)\",\n  \"uid\": \"M2TT9Su7z\",\n  \"version\": 1,\n  \"weekStart\": \"\"\n}"
  },
  {
    "path": "static_files/grafana-config/dashboards/geth-dashboard.json",
    "content": "{\n  \"__inputs\": [\n    {\n      \"name\": \"DS_PROMETHEUS\",\n      \"label\": \"Prometheus\",\n      \"description\": \"\",\n      \"type\": \"datasource\",\n      \"pluginId\": \"prometheus\",\n      \"pluginName\": \"Prometheus\"\n    }\n  ],\n  \"__elements\": {},\n  \"__requires\": [\n    {\n      \"type\": \"grafana\",\n      \"id\": \"grafana\",\n      \"name\": \"Grafana\",\n      \"version\": \"12.2.0-16557133545\"\n    },\n    {\n      \"type\": \"datasource\",\n      \"id\": \"prometheus\",\n      \"name\": \"Prometheus\",\n      \"version\": \"1.0.0\"\n    },\n    {\n      \"type\": \"panel\",\n      \"id\": \"stat\",\n      \"name\": \"Stat\",\n      \"version\": \"\"\n    },\n    {\n      \"type\": \"panel\",\n      \"id\": \"timeseries\",\n      \"name\": \"Time series\",\n      \"version\": \"\"\n    }\n  ],\n  \"annotations\": {\n    \"list\": [\n      {\n        \"builtIn\": 1,\n        \"datasource\": {\n          \"type\": \"datasource\",\n          \"uid\": \"grafana\"\n        },\n        \"enable\": true,\n        \"hide\": true,\n        \"iconColor\": \"rgba(0, 211, 255, 1)\",\n        \"name\": \"Annotations & Alerts\",\n        \"target\": {\n          \"limit\": 100,\n          \"matchAny\": false,\n          \"tags\": [],\n          \"type\": \"dashboard\"\n        },\n        \"type\": \"dashboard\"\n      }\n    ]\n  },\n  \"description\": \"A Prometheus metric dashboard for go-ethereum, supports all blockchains compatible with go-ethereum\",\n  \"editable\": true,\n  \"fiscalYearStartMonth\": 0,\n  \"graphTooltip\": 0,\n  \"id\": null,\n  \"links\": [],\n  \"panels\": [\n    {\n      \"collapsed\": false,\n      \"gridPos\": {\n        \"h\": 1,\n        \"w\": 24,\n        \"x\": 0,\n        \"y\": 0\n      },\n      \"id\": 4,\n      \"panels\": [],\n      \"title\": \"Blockchain\",\n      \"type\": \"row\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"thresholds\"\n          },\n          \"mappings\": [\n            {\n              \"options\": {\n                \"match\": \"null\",\n                \"result\": {\n                  \"text\": \"N/A\"\n                }\n              },\n              \"type\": \"special\"\n            }\n          ],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\",\n                \"value\": 0\n              }\n            ]\n          },\n          \"unit\": \"locale\"\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 2,\n        \"w\": 3,\n        \"x\": 0,\n        \"y\": 1\n      },\n      \"id\": 108,\n      \"maxDataPoints\": 100,\n      \"options\": {\n        \"colorMode\": \"value\",\n        \"graphMode\": \"none\",\n        \"justifyMode\": \"auto\",\n        \"orientation\": \"horizontal\",\n        \"percentChangeColorMode\": \"standard\",\n        \"reduceOptions\": {\n          \"calcs\": [\n            \"lastNotNull\"\n          ],\n          \"fields\": \"\",\n          \"values\": false\n        },\n        \"showPercentChange\": false,\n        \"text\": {},\n        \"textMode\": \"auto\",\n        \"wideLayout\": true\n      },\n      \"pluginVersion\": \"12.2.0-16557133545\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"editorMode\": \"code\",\n          \"exemplar\": true,\n          \"expr\": \"chain_head_header{instance=~\\\"$instance\\\"}\",\n          \"format\": \"time_series\",\n          \"interval\": \"\",\n          \"intervalFactor\": 1,\n          \"legendFormat\": \"\",\n          \"range\": true,\n          \"refId\": \"A\"\n        }\n      ],\n      \"title\": \"Latest header\",\n      \"type\": \"stat\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"palette-classic\"\n          },\n          \"custom\": {\n            \"axisBorderShow\": false,\n            \"axisCenteredZero\": false,\n            \"axisColorMode\": \"text\",\n            \"axisLabel\": \"\",\n            \"axisPlacement\": \"auto\",\n            \"barAlignment\": 0,\n            \"barWidthFactor\": 0.6,\n            \"drawStyle\": \"line\",\n            \"fillOpacity\": 10,\n            \"gradientMode\": \"none\",\n            \"hideFrom\": {\n              \"legend\": false,\n              \"tooltip\": false,\n              \"viz\": false\n            },\n            \"insertNulls\": false,\n            \"lineInterpolation\": \"linear\",\n            \"lineWidth\": 1,\n            \"pointSize\": 5,\n            \"scaleDistribution\": {\n              \"type\": \"linear\"\n            },\n            \"showPoints\": \"never\",\n            \"spanNulls\": true,\n            \"stacking\": {\n              \"group\": \"A\",\n              \"mode\": \"none\"\n            },\n            \"thresholdsStyle\": {\n              \"mode\": \"off\"\n            }\n          },\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\",\n                \"value\": 0\n              },\n              {\n                \"color\": \"red\",\n                \"value\": 80\n              }\n            ]\n          },\n          \"unit\": \"short\"\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 6,\n        \"w\": 7,\n        \"x\": 3,\n        \"y\": 1\n      },\n      \"id\": 110,\n      \"options\": {\n        \"legend\": {\n          \"calcs\": [],\n          \"displayMode\": \"list\",\n          \"placement\": \"bottom\",\n          \"showLegend\": true\n        },\n        \"tooltip\": {\n          \"hideZeros\": false,\n          \"mode\": \"multi\",\n          \"sort\": \"none\"\n        }\n      },\n      \"pluginVersion\": \"12.2.0-16557133545\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"exemplar\": true,\n          \"expr\": \"chain_head_header{instance=~\\\"$instance\\\"}\",\n          \"format\": \"time_series\",\n          \"interval\": \"\",\n          \"intervalFactor\": 1,\n          \"legendFormat\": \"header\",\n          \"refId\": \"A\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"exemplar\": true,\n          \"expr\": \"chain_head_receipt{instance=~\\\"$instance\\\"}\",\n          \"format\": \"time_series\",\n          \"interval\": \"\",\n          \"intervalFactor\": 1,\n          \"legendFormat\": \"receipt\",\n          \"refId\": \"B\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"exemplar\": true,\n          \"expr\": \"chain_head_block{instance=~\\\"$instance\\\"}\",\n          \"format\": \"time_series\",\n          \"interval\": \"\",\n          \"intervalFactor\": 1,\n          \"legendFormat\": \"block\",\n          \"refId\": \"C\"\n        }\n      ],\n      \"title\": \"Chain head\",\n      \"type\": \"timeseries\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"palette-classic\"\n          },\n          \"mappings\": [\n            {\n              \"options\": {\n                \"match\": \"null\",\n                \"result\": {\n                  \"text\": \"N/A\"\n                }\n              },\n              \"type\": \"special\"\n            }\n          ],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\",\n                \"value\": 0\n              }\n            ]\n          },\n          \"unit\": \"locale\"\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 3,\n        \"w\": 2,\n        \"x\": 10,\n        \"y\": 1\n      },\n      \"id\": 152,\n      \"maxDataPoints\": 100,\n      \"options\": {\n        \"colorMode\": \"value\",\n        \"graphMode\": \"none\",\n        \"justifyMode\": \"auto\",\n        \"orientation\": \"horizontal\",\n        \"percentChangeColorMode\": \"standard\",\n        \"reduceOptions\": {\n          \"calcs\": [\n            \"lastNotNull\"\n          ],\n          \"fields\": \"\",\n          \"values\": false\n        },\n        \"showPercentChange\": false,\n        \"text\": {},\n        \"textMode\": \"auto\",\n        \"wideLayout\": true\n      },\n      \"pluginVersion\": \"12.2.0-16557133545\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"editorMode\": \"code\",\n          \"expr\": \"chain_reorg_add{instance=~\\\"$instance\\\"}\",\n          \"format\": \"time_series\",\n          \"intervalFactor\": 1,\n          \"range\": true,\n          \"refId\": \"A\"\n        }\n      ],\n      \"title\": \"Chain Reorg Add\",\n      \"type\": \"stat\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"palette-classic\"\n          },\n          \"mappings\": [\n            {\n              \"options\": {\n                \"match\": \"null\",\n                \"result\": {\n                  \"text\": \"N/A\"\n                }\n              },\n              \"type\": \"special\"\n            }\n          ],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\",\n                \"value\": 0\n              }\n            ]\n          },\n          \"unit\": \"locale\"\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 2,\n        \"w\": 3,\n        \"x\": 12,\n        \"y\": 1\n      },\n      \"id\": 113,\n      \"maxDataPoints\": 100,\n      \"options\": {\n        \"colorMode\": \"value\",\n        \"graphMode\": \"none\",\n        \"justifyMode\": \"auto\",\n        \"orientation\": \"horizontal\",\n        \"percentChangeColorMode\": \"standard\",\n        \"reduceOptions\": {\n          \"calcs\": [\n            \"lastNotNull\"\n          ],\n          \"fields\": \"\",\n          \"values\": false\n        },\n        \"showPercentChange\": false,\n        \"text\": {},\n        \"textMode\": \"auto\",\n        \"wideLayout\": true\n      },\n      \"pluginVersion\": \"12.2.0-16557133545\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"expr\": \"txpool_pending{instance=~\\\"$instance\\\"}\",\n          \"format\": \"time_series\",\n          \"intervalFactor\": 1,\n          \"refId\": \"A\"\n        }\n      ],\n      \"title\": \"Executable transactions\",\n      \"type\": \"stat\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"palette-classic\"\n          },\n          \"custom\": {\n            \"axisBorderShow\": false,\n            \"axisCenteredZero\": false,\n            \"axisColorMode\": \"text\",\n            \"axisLabel\": \"\",\n            \"axisPlacement\": \"auto\",\n            \"barAlignment\": 0,\n            \"barWidthFactor\": 0.6,\n            \"drawStyle\": \"line\",\n            \"fillOpacity\": 10,\n            \"gradientMode\": \"none\",\n            \"hideFrom\": {\n              \"legend\": false,\n              \"tooltip\": false,\n              \"viz\": false\n            },\n            \"insertNulls\": false,\n            \"lineInterpolation\": \"linear\",\n            \"lineWidth\": 1,\n            \"pointSize\": 5,\n            \"scaleDistribution\": {\n              \"type\": \"linear\"\n            },\n            \"showPoints\": \"never\",\n            \"spanNulls\": true,\n            \"stacking\": {\n              \"group\": \"A\",\n              \"mode\": \"none\"\n            },\n            \"thresholdsStyle\": {\n              \"mode\": \"off\"\n            }\n          },\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\",\n                \"value\": 0\n              },\n              {\n                \"color\": \"red\",\n                \"value\": 80\n              }\n            ]\n          },\n          \"unit\": \"short\"\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 6,\n        \"w\": 9,\n        \"x\": 15,\n        \"y\": 1\n      },\n      \"id\": 116,\n      \"options\": {\n        \"legend\": {\n          \"calcs\": [],\n          \"displayMode\": \"list\",\n          \"placement\": \"bottom\",\n          \"showLegend\": true\n        },\n        \"tooltip\": {\n          \"hideZeros\": false,\n          \"mode\": \"single\",\n          \"sort\": \"none\"\n        }\n      },\n      \"pluginVersion\": \"12.2.0-16557133545\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"expr\": \"txpool_pending{instance=~\\\"$instance\\\"}\",\n          \"format\": \"time_series\",\n          \"intervalFactor\": 1,\n          \"legendFormat\": \"executable\",\n          \"refId\": \"A\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"expr\": \"txpool_queued{instance=~\\\"$instance\\\"}\",\n          \"format\": \"time_series\",\n          \"intervalFactor\": 1,\n          \"legendFormat\": \"gapped\",\n          \"refId\": \"B\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"expr\": \"txpool_local{instance=~\\\"$instance\\\"}\",\n          \"format\": \"time_series\",\n          \"intervalFactor\": 1,\n          \"legendFormat\": \"local\",\n          \"refId\": \"C\"\n        }\n      ],\n      \"title\": \"Transaction pool\",\n      \"type\": \"timeseries\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"thresholds\"\n          },\n          \"mappings\": [\n            {\n              \"options\": {\n                \"match\": \"null\",\n                \"result\": {\n                  \"text\": \"N/A\"\n                }\n              },\n              \"type\": \"special\"\n            }\n          ],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\",\n                \"value\": 0\n              }\n            ]\n          },\n          \"unit\": \"locale\"\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 2,\n        \"w\": 3,\n        \"x\": 0,\n        \"y\": 3\n      },\n      \"id\": 111,\n      \"maxDataPoints\": 100,\n      \"options\": {\n        \"colorMode\": \"value\",\n        \"graphMode\": \"none\",\n        \"justifyMode\": \"auto\",\n        \"orientation\": \"horizontal\",\n        \"percentChangeColorMode\": \"standard\",\n        \"reduceOptions\": {\n          \"calcs\": [\n            \"lastNotNull\"\n          ],\n          \"fields\": \"\",\n          \"values\": false\n        },\n        \"showPercentChange\": false,\n        \"text\": {},\n        \"textMode\": \"auto\",\n        \"wideLayout\": true\n      },\n      \"pluginVersion\": \"12.2.0-16557133545\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"exemplar\": true,\n          \"expr\": \"chain_head_receipt{instance=~\\\"$instance\\\"}\",\n          \"format\": \"time_series\",\n          \"interval\": \"\",\n          \"intervalFactor\": 1,\n          \"legendFormat\": \"\",\n          \"refId\": \"A\"\n        }\n      ],\n      \"title\": \"Latest receipt\",\n      \"type\": \"stat\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"thresholds\"\n          },\n          \"mappings\": [\n            {\n              \"options\": {\n                \"match\": \"null\",\n                \"result\": {\n                  \"text\": \"N/A\"\n                }\n              },\n              \"type\": \"special\"\n            }\n          ],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\",\n                \"value\": 0\n              }\n            ]\n          },\n          \"unit\": \"locale\"\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 2,\n        \"w\": 3,\n        \"x\": 12,\n        \"y\": 3\n      },\n      \"id\": 115,\n      \"maxDataPoints\": 100,\n      \"options\": {\n        \"colorMode\": \"value\",\n        \"graphMode\": \"none\",\n        \"justifyMode\": \"auto\",\n        \"orientation\": \"horizontal\",\n        \"percentChangeColorMode\": \"standard\",\n        \"reduceOptions\": {\n          \"calcs\": [\n            \"lastNotNull\"\n          ],\n          \"fields\": \"\",\n          \"values\": false\n        },\n        \"showPercentChange\": false,\n        \"text\": {},\n        \"textMode\": \"auto\",\n        \"wideLayout\": true\n      },\n      \"pluginVersion\": \"12.2.0-16557133545\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"expr\": \"txpool_local{instance=~\\\"$instance\\\"}\",\n          \"format\": \"time_series\",\n          \"intervalFactor\": 1,\n          \"refId\": \"A\"\n        }\n      ],\n      \"title\": \"Local transactions\",\n      \"type\": \"stat\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"palette-classic\"\n          },\n          \"mappings\": [\n            {\n              \"options\": {\n                \"match\": \"null\",\n                \"result\": {\n                  \"text\": \"N/A\"\n                }\n              },\n              \"type\": \"special\"\n            }\n          ],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\",\n                \"value\": 0\n              }\n            ]\n          },\n          \"unit\": \"locale\"\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 3,\n        \"w\": 2,\n        \"x\": 10,\n        \"y\": 4\n      },\n      \"id\": 153,\n      \"maxDataPoints\": 100,\n      \"options\": {\n        \"colorMode\": \"value\",\n        \"graphMode\": \"none\",\n        \"justifyMode\": \"auto\",\n        \"orientation\": \"horizontal\",\n        \"percentChangeColorMode\": \"standard\",\n        \"reduceOptions\": {\n          \"calcs\": [\n            \"lastNotNull\"\n          ],\n          \"fields\": \"\",\n          \"values\": false\n        },\n        \"showPercentChange\": false,\n        \"text\": {},\n        \"textMode\": \"auto\",\n        \"wideLayout\": true\n      },\n      \"pluginVersion\": \"12.2.0-16557133545\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"editorMode\": \"code\",\n          \"expr\": \"chain_reorg_drop{instance=~\\\"$instance\\\"}\",\n          \"format\": \"time_series\",\n          \"intervalFactor\": 1,\n          \"range\": true,\n          \"refId\": \"A\"\n        }\n      ],\n      \"title\": \"Chain Reorg Drop\",\n      \"type\": \"stat\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"thresholds\"\n          },\n          \"mappings\": [\n            {\n              \"options\": {\n                \"match\": \"null\",\n                \"result\": {\n                  \"text\": \"N/A\"\n                }\n              },\n              \"type\": \"special\"\n            }\n          ],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\",\n                \"value\": 0\n              }\n            ]\n          },\n          \"unit\": \"locale\"\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 2,\n        \"w\": 3,\n        \"x\": 0,\n        \"y\": 5\n      },\n      \"id\": 109,\n      \"maxDataPoints\": 100,\n      \"options\": {\n        \"colorMode\": \"value\",\n        \"graphMode\": \"none\",\n        \"justifyMode\": \"auto\",\n        \"orientation\": \"horizontal\",\n        \"percentChangeColorMode\": \"standard\",\n        \"reduceOptions\": {\n          \"calcs\": [\n            \"lastNotNull\"\n          ],\n          \"fields\": \"\",\n          \"values\": false\n        },\n        \"showPercentChange\": false,\n        \"text\": {},\n        \"textMode\": \"auto\",\n        \"wideLayout\": true\n      },\n      \"pluginVersion\": \"12.2.0-16557133545\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"exemplar\": true,\n          \"expr\": \"chain_head_block{instance=~\\\"$instance\\\"}\",\n          \"format\": \"time_series\",\n          \"interval\": \"\",\n          \"intervalFactor\": 1,\n          \"legendFormat\": \"\",\n          \"refId\": \"A\"\n        }\n      ],\n      \"title\": \"Latest block\",\n      \"type\": \"stat\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"thresholds\"\n          },\n          \"mappings\": [\n            {\n              \"options\": {\n                \"match\": \"null\",\n                \"result\": {\n                  \"text\": \"N/A\"\n                }\n              },\n              \"type\": \"special\"\n            }\n          ],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\",\n                \"value\": 0\n              }\n            ]\n          },\n          \"unit\": \"locale\"\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 2,\n        \"w\": 3,\n        \"x\": 12,\n        \"y\": 5\n      },\n      \"id\": 114,\n      \"maxDataPoints\": 100,\n      \"options\": {\n        \"colorMode\": \"value\",\n        \"graphMode\": \"none\",\n        \"justifyMode\": \"auto\",\n        \"orientation\": \"horizontal\",\n        \"percentChangeColorMode\": \"standard\",\n        \"reduceOptions\": {\n          \"calcs\": [\n            \"lastNotNull\"\n          ],\n          \"fields\": \"\",\n          \"values\": false\n        },\n        \"showPercentChange\": false,\n        \"text\": {},\n        \"textMode\": \"auto\",\n        \"wideLayout\": true\n      },\n      \"pluginVersion\": \"12.2.0-16557133545\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"expr\": \"txpool_queued{instance=~\\\"$instance\\\"}\",\n          \"format\": \"time_series\",\n          \"intervalFactor\": 1,\n          \"refId\": \"A\"\n        }\n      ],\n      \"title\": \"Gapped transactions\",\n      \"type\": \"stat\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"palette-classic\"\n          },\n          \"custom\": {\n            \"axisBorderShow\": false,\n            \"axisCenteredZero\": false,\n            \"axisColorMode\": \"text\",\n            \"axisLabel\": \"\",\n            \"axisPlacement\": \"auto\",\n            \"barAlignment\": 0,\n            \"barWidthFactor\": 0.6,\n            \"drawStyle\": \"line\",\n            \"fillOpacity\": 10,\n            \"gradientMode\": \"none\",\n            \"hideFrom\": {\n              \"legend\": false,\n              \"tooltip\": false,\n              \"viz\": false\n            },\n            \"insertNulls\": false,\n            \"lineInterpolation\": \"linear\",\n            \"lineWidth\": 1,\n            \"pointSize\": 5,\n            \"scaleDistribution\": {\n              \"type\": \"linear\"\n            },\n            \"showPoints\": \"never\",\n            \"spanNulls\": true,\n            \"stacking\": {\n              \"group\": \"A\",\n              \"mode\": \"normal\"\n            },\n            \"thresholdsStyle\": {\n              \"mode\": \"off\"\n            }\n          },\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\",\n                \"value\": 0\n              },\n              {\n                \"color\": \"red\",\n                \"value\": 80\n              }\n            ]\n          },\n          \"unit\": \"ns\"\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 8,\n        \"w\": 12,\n        \"x\": 0,\n        \"y\": 7\n      },\n      \"id\": 112,\n      \"options\": {\n        \"legend\": {\n          \"calcs\": [\n            \"mean\",\n            \"lastNotNull\",\n            \"max\",\n            \"min\"\n          ],\n          \"displayMode\": \"table\",\n          \"placement\": \"right\",\n          \"showLegend\": true\n        },\n        \"tooltip\": {\n          \"hideZeros\": false,\n          \"mode\": \"multi\",\n          \"sort\": \"none\"\n        }\n      },\n      \"pluginVersion\": \"12.2.0-16557133545\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"exemplar\": true,\n          \"expr\": \"chain_execution{instance=~\\\"$instance\\\", quantile=\\\"$quantile\\\"}\",\n          \"format\": \"time_series\",\n          \"interval\": \"\",\n          \"intervalFactor\": 1,\n          \"legendFormat\": \"execution (q=$quantile)\",\n          \"refId\": \"A\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"expr\": \"chain_validation{instance=~\\\"$instance\\\", quantile=\\\"$quantile\\\"}\",\n          \"format\": \"time_series\",\n          \"hide\": false,\n          \"interval\": \"\",\n          \"intervalFactor\": 1,\n          \"legendFormat\": \"validation (q=$quantile)\",\n          \"refId\": \"B\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"expr\": \"chain_write{instance=~\\\"$instance\\\", quantile=\\\"$quantile\\\"}\",\n          \"format\": \"time_series\",\n          \"hide\": false,\n          \"intervalFactor\": 1,\n          \"legendFormat\": \"commit (q=$quantile)\",\n          \"refId\": \"C\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"expr\": \"chain_account_reads{instance=~\\\"$instance\\\", quantile=\\\"$quantile\\\"}\",\n          \"format\": \"time_series\",\n          \"intervalFactor\": 1,\n          \"legendFormat\": \"account read (q=$quantile)\",\n          \"refId\": \"D\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"expr\": \"chain_account_updates{instance=~\\\"$instance\\\", quantile=\\\"$quantile\\\"}\",\n          \"format\": \"time_series\",\n          \"intervalFactor\": 1,\n          \"legendFormat\": \"account update (q=$quantile)\",\n          \"refId\": \"E\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"expr\": \"chain_account_hashes{instance=~\\\"$instance\\\", quantile=\\\"$quantile\\\"}\",\n          \"format\": \"time_series\",\n          \"intervalFactor\": 1,\n          \"legendFormat\": \"account hashe (q=$quantile)\",\n          \"refId\": \"F\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"expr\": \"chain_account_commits{instance=~\\\"$instance\\\", quantile=\\\"$quantile\\\"}\",\n          \"format\": \"time_series\",\n          \"intervalFactor\": 1,\n          \"legendFormat\": \"account commit (q=$quantile)\",\n          \"refId\": \"G\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"expr\": \"chain_storage_reads{instance=~\\\"$instance\\\", quantile=\\\"$quantile\\\"}\",\n          \"format\": \"time_series\",\n          \"intervalFactor\": 1,\n          \"legendFormat\": \"storage read (q=$quantile)\",\n          \"refId\": \"H\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"expr\": \"chain_storage_updates{instance=~\\\"$instance\\\", quantile=\\\"$quantile\\\"}\",\n          \"format\": \"time_series\",\n          \"intervalFactor\": 1,\n          \"legendFormat\": \"storage update (q=$quantile)\",\n          \"refId\": \"I\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"expr\": \"chain_storage_hashes{instance=~\\\"$instance\\\", quantile=\\\"$quantile\\\"}\",\n          \"format\": \"time_series\",\n          \"intervalFactor\": 1,\n          \"legendFormat\": \"storage hashe (q=$quantile)\",\n          \"refId\": \"J\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"exemplar\": true,\n          \"expr\": \"chain_storage_commits{instance=~\\\"$instance\\\", quantile=\\\"$quantile\\\"}\",\n          \"format\": \"time_series\",\n          \"interval\": \"\",\n          \"intervalFactor\": 1,\n          \"legendFormat\": \"storage commit (q=$quantile)\",\n          \"refId\": \"K\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"exemplar\": true,\n          \"expr\": \"chain_snapshot_commits{instance=~\\\"$instance\\\", quantile=\\\"$quantile\\\"}\",\n          \"hide\": false,\n          \"interval\": \"\",\n          \"legendFormat\": \"snapshot commit (q=$quantile)\",\n          \"refId\": \"L\"\n        }\n      ],\n      \"title\": \"Block processing\",\n      \"type\": \"timeseries\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"palette-classic\"\n          },\n          \"custom\": {\n            \"axisBorderShow\": false,\n            \"axisCenteredZero\": false,\n            \"axisColorMode\": \"text\",\n            \"axisLabel\": \"\",\n            \"axisPlacement\": \"auto\",\n            \"barAlignment\": 0,\n            \"barWidthFactor\": 0.6,\n            \"drawStyle\": \"line\",\n            \"fillOpacity\": 10,\n            \"gradientMode\": \"none\",\n            \"hideFrom\": {\n              \"legend\": false,\n              \"tooltip\": false,\n              \"viz\": false\n            },\n            \"insertNulls\": false,\n            \"lineInterpolation\": \"linear\",\n            \"lineWidth\": 1,\n            \"pointSize\": 5,\n            \"scaleDistribution\": {\n              \"type\": \"linear\"\n            },\n            \"showPoints\": \"never\",\n            \"spanNulls\": true,\n            \"stacking\": {\n              \"group\": \"A\",\n              \"mode\": \"none\"\n            },\n            \"thresholdsStyle\": {\n              \"mode\": \"off\"\n            }\n          },\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\",\n                \"value\": 0\n              },\n              {\n                \"color\": \"red\",\n                \"value\": 80\n              }\n            ]\n          },\n          \"unit\": \"none\"\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 8,\n        \"w\": 12,\n        \"x\": 12,\n        \"y\": 7\n      },\n      \"id\": 117,\n      \"options\": {\n        \"legend\": {\n          \"calcs\": [\n            \"mean\",\n            \"lastNotNull\",\n            \"max\",\n            \"min\"\n          ],\n          \"displayMode\": \"table\",\n          \"placement\": \"right\",\n          \"showLegend\": true\n        },\n        \"tooltip\": {\n          \"hideZeros\": false,\n          \"mode\": \"single\",\n          \"sort\": \"none\"\n        }\n      },\n      \"pluginVersion\": \"12.2.0-16557133545\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"expr\": \"rate(txpool_valid{instance=~\\\"$instance\\\"}[1m])\",\n          \"format\": \"time_series\",\n          \"intervalFactor\": 1,\n          \"legendFormat\": \"valid\",\n          \"refId\": \"K\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"expr\": \"rate(txpool_invalid{instance=~\\\"$instance\\\"}[1m])\",\n          \"format\": \"time_series\",\n          \"intervalFactor\": 1,\n          \"legendFormat\": \"invalid\",\n          \"refId\": \"A\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"expr\": \"rate(txpool_underpriced{instance=~\\\"$instance\\\"}[1m])\",\n          \"format\": \"time_series\",\n          \"hide\": false,\n          \"interval\": \"\",\n          \"intervalFactor\": 1,\n          \"legendFormat\": \"underpriced\",\n          \"refId\": \"B\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"expr\": \"rate(txpool_pending_discard{instance=~\\\"$instance\\\"}[1m])\",\n          \"format\": \"time_series\",\n          \"hide\": false,\n          \"intervalFactor\": 1,\n          \"legendFormat\": \"executable discard\",\n          \"refId\": \"C\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"expr\": \"rate(txpool_pending_replace{instance=~\\\"$instance\\\"}[1m])\",\n          \"format\": \"time_series\",\n          \"intervalFactor\": 1,\n          \"legendFormat\": \"executable replace\",\n          \"refId\": \"D\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"expr\": \"rate(txpool_pending_ratelimit{instance=~\\\"$instance\\\"}[1m])\",\n          \"format\": \"time_series\",\n          \"intervalFactor\": 1,\n          \"legendFormat\": \"executable ratelimit\",\n          \"refId\": \"E\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"expr\": \"rate(txpool_pending_nofunds{instance=~\\\"$instance\\\"}[1m])\",\n          \"format\": \"time_series\",\n          \"intervalFactor\": 1,\n          \"legendFormat\": \"executable nofunds\",\n          \"refId\": \"F\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"expr\": \"rate(txpool_queued_discard{instance=~\\\"$instance\\\"}[1m])\",\n          \"format\": \"time_series\",\n          \"hide\": false,\n          \"intervalFactor\": 1,\n          \"legendFormat\": \"gapped discard\",\n          \"refId\": \"G\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"expr\": \"rate(txpool_queued_replace{instance=~\\\"$instance\\\"}[1m])\",\n          \"format\": \"time_series\",\n          \"hide\": false,\n          \"intervalFactor\": 1,\n          \"legendFormat\": \"gapped replace\",\n          \"refId\": \"H\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"expr\": \"rate(txpool_queued_ratelimit{instance=~\\\"$instance\\\"}[1m])\",\n          \"format\": \"time_series\",\n          \"hide\": false,\n          \"intervalFactor\": 1,\n          \"legendFormat\": \"gapped ratelimit\",\n          \"refId\": \"I\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"expr\": \"rate(txpool_queued_nofunds{instance=~\\\"$instance\\\"}[1m])\",\n          \"format\": \"time_series\",\n          \"hide\": false,\n          \"intervalFactor\": 1,\n          \"legendFormat\": \"gapped nofunds\",\n          \"refId\": \"J\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"editorMode\": \"code\",\n          \"expr\": \"rate(txpool_known{instance=~\\\"$instance\\\"}[1m])\",\n          \"hide\": false,\n          \"legendFormat\": \"known\",\n          \"range\": true,\n          \"refId\": \"L\"\n        }\n      ],\n      \"title\": \"Transaction propagation\",\n      \"type\": \"timeseries\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"palette-classic\"\n          },\n          \"custom\": {\n            \"axisBorderShow\": false,\n            \"axisCenteredZero\": false,\n            \"axisColorMode\": \"text\",\n            \"axisLabel\": \"\",\n            \"axisPlacement\": \"auto\",\n            \"barAlignment\": 0,\n            \"barWidthFactor\": 0.6,\n            \"drawStyle\": \"line\",\n            \"fillOpacity\": 10,\n            \"gradientMode\": \"none\",\n            \"hideFrom\": {\n              \"legend\": false,\n              \"tooltip\": false,\n              \"viz\": false\n            },\n            \"insertNulls\": false,\n            \"lineInterpolation\": \"linear\",\n            \"lineWidth\": 1,\n            \"pointSize\": 5,\n            \"scaleDistribution\": {\n              \"type\": \"linear\"\n            },\n            \"showPoints\": \"never\",\n            \"spanNulls\": true,\n            \"stacking\": {\n              \"group\": \"A\",\n              \"mode\": \"none\"\n            },\n            \"thresholdsStyle\": {\n              \"mode\": \"off\"\n            }\n          },\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\",\n                \"value\": 0\n              },\n              {\n                \"color\": \"red\",\n                \"value\": 80\n              }\n            ]\n          },\n          \"unit\": \"none\"\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 8,\n        \"w\": 12,\n        \"x\": 12,\n        \"y\": 15\n      },\n      \"id\": 154,\n      \"options\": {\n        \"legend\": {\n          \"calcs\": [\n            \"mean\",\n            \"lastNotNull\",\n            \"max\",\n            \"min\"\n          ],\n          \"displayMode\": \"table\",\n          \"placement\": \"right\",\n          \"showLegend\": true\n        },\n        \"tooltip\": {\n          \"hideZeros\": false,\n          \"mode\": \"single\",\n          \"sort\": \"none\"\n        }\n      },\n      \"pluginVersion\": \"12.2.0-16557133545\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"expr\": \"rate(txpool_valid{instance=~\\\"$instance\\\"}[1m])\",\n          \"format\": \"time_series\",\n          \"intervalFactor\": 1,\n          \"legendFormat\": \"valid\",\n          \"refId\": \"K\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"expr\": \"rate(txpool_invalid{instance=~\\\"$instance\\\"}[1m])\",\n          \"format\": \"time_series\",\n          \"intervalFactor\": 1,\n          \"legendFormat\": \"invalid\",\n          \"refId\": \"A\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"expr\": \"rate(txpool_underpriced{instance=~\\\"$instance\\\"}[1m])\",\n          \"format\": \"time_series\",\n          \"hide\": false,\n          \"interval\": \"\",\n          \"intervalFactor\": 1,\n          \"legendFormat\": \"underpriced\",\n          \"refId\": \"B\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"expr\": \"rate(txpool_pending_discard{instance=~\\\"$instance\\\"}[1m])\",\n          \"format\": \"time_series\",\n          \"hide\": false,\n          \"intervalFactor\": 1,\n          \"legendFormat\": \"executable discard\",\n          \"refId\": \"C\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"expr\": \"rate(txpool_pending_replace{instance=~\\\"$instance\\\"}[1m])\",\n          \"format\": \"time_series\",\n          \"intervalFactor\": 1,\n          \"legendFormat\": \"executable replace\",\n          \"refId\": \"D\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"expr\": \"rate(txpool_pending_ratelimit{instance=~\\\"$instance\\\"}[1m])\",\n          \"format\": \"time_series\",\n          \"intervalFactor\": 1,\n          \"legendFormat\": \"executable ratelimit\",\n          \"refId\": \"E\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"expr\": \"rate(txpool_pending_nofunds{instance=~\\\"$instance\\\"}[1m])\",\n          \"format\": \"time_series\",\n          \"intervalFactor\": 1,\n          \"legendFormat\": \"executable nofunds\",\n          \"refId\": \"F\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"expr\": \"rate(txpool_queued_discard{instance=~\\\"$instance\\\"}[1m])\",\n          \"format\": \"time_series\",\n          \"hide\": false,\n          \"intervalFactor\": 1,\n          \"legendFormat\": \"gapped discard\",\n          \"refId\": \"G\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"expr\": \"rate(txpool_queued_replace{instance=~\\\"$instance\\\"}[1m])\",\n          \"format\": \"time_series\",\n          \"hide\": false,\n          \"intervalFactor\": 1,\n          \"legendFormat\": \"gapped replace\",\n          \"refId\": \"H\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"expr\": \"rate(txpool_queued_ratelimit{instance=~\\\"$instance\\\"}[1m])\",\n          \"format\": \"time_series\",\n          \"hide\": false,\n          \"intervalFactor\": 1,\n          \"legendFormat\": \"gapped ratelimit\",\n          \"refId\": \"I\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"expr\": \"rate(txpool_queued_nofunds{instance=~\\\"$instance\\\"}[1m])\",\n          \"format\": \"time_series\",\n          \"hide\": false,\n          \"intervalFactor\": 1,\n          \"legendFormat\": \"gapped nofunds\",\n          \"refId\": \"J\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"editorMode\": \"code\",\n          \"expr\": \"rate(txpool_known{instance=~\\\"$instance\\\"}[1m])\",\n          \"hide\": false,\n          \"legendFormat\": \"known\",\n          \"range\": true,\n          \"refId\": \"L\"\n        }\n      ],\n      \"title\": \"Transaction propagation\",\n      \"type\": \"timeseries\"\n    },\n    {\n      \"collapsed\": true,\n      \"gridPos\": {\n        \"h\": 1,\n        \"w\": 24,\n        \"x\": 0,\n        \"y\": 23\n      },\n      \"id\": 149,\n      \"panels\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"description\": \"\",\n          \"fieldConfig\": {\n            \"defaults\": {\n              \"color\": {\n                \"mode\": \"palette-classic\"\n              },\n              \"custom\": {\n                \"axisBorderShow\": false,\n                \"axisCenteredZero\": false,\n                \"axisColorMode\": \"text\",\n                \"axisLabel\": \"\",\n                \"axisPlacement\": \"auto\",\n                \"barAlignment\": 0,\n                \"barWidthFactor\": 0.6,\n                \"drawStyle\": \"line\",\n                \"fillOpacity\": 10,\n                \"gradientMode\": \"none\",\n                \"hideFrom\": {\n                  \"legend\": false,\n                  \"tooltip\": false,\n                  \"viz\": false\n                },\n                \"insertNulls\": false,\n                \"lineInterpolation\": \"smooth\",\n                \"lineWidth\": 1,\n                \"pointSize\": 5,\n                \"scaleDistribution\": {\n                  \"type\": \"linear\"\n                },\n                \"showPoints\": \"never\",\n                \"spanNulls\": true,\n                \"stacking\": {\n                  \"group\": \"A\",\n                  \"mode\": \"none\"\n                },\n                \"thresholdsStyle\": {\n                  \"mode\": \"off\"\n                }\n              },\n              \"mappings\": [],\n              \"thresholds\": {\n                \"mode\": \"absolute\",\n                \"steps\": [\n                  {\n                    \"color\": \"green\"\n                  },\n                  {\n                    \"color\": \"red\",\n                    \"value\": 80\n                  }\n                ]\n              },\n              \"unit\": \"reqps\"\n            },\n            \"overrides\": [\n              {\n                \"matcher\": {\n                  \"id\": \"byRegexp\",\n                  \"options\": \".*(timeout|drop)\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"custom.axisPlacement\",\n                    \"value\": \"right\"\n                  },\n                  {\n                    \"id\": \"custom.axisSoftMax\",\n                    \"value\": 100\n                  },\n                  {\n                    \"id\": \"unit\",\n                    \"value\": \"short\"\n                  }\n                ]\n              }\n            ]\n          },\n          \"gridPos\": {\n            \"h\": 8,\n            \"w\": 12,\n            \"x\": 0,\n            \"y\": 298\n          },\n          \"id\": 150,\n          \"options\": {\n            \"legend\": {\n              \"calcs\": [\n                \"mean\",\n                \"lastNotNull\",\n                \"max\",\n                \"min\"\n              ],\n              \"displayMode\": \"table\",\n              \"placement\": \"right\",\n              \"showLegend\": true,\n              \"sortBy\": \"Mean\",\n              \"sortDesc\": true\n            },\n            \"tooltip\": {\n              \"hideZeros\": false,\n              \"mode\": \"multi\",\n              \"sort\": \"none\"\n            }\n          },\n          \"pluginVersion\": \"11.5.2\",\n          \"targets\": [\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"PBFA97CFB590B2093\"\n              },\n              \"editorMode\": \"code\",\n              \"exemplar\": true,\n              \"expr\": \"sum(rate(geth_rpc_requests_success_count{instance=\\\"$instance\\\"}[5m])) by (instance, method)\",\n              \"hide\": false,\n              \"interval\": \"\",\n              \"legendFormat\": \"{{method}}\",\n              \"range\": true,\n              \"refId\": \"A\"\n            }\n          ],\n          \"title\": \"Success RPC QPS\",\n          \"type\": \"timeseries\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"description\": \"\",\n          \"fieldConfig\": {\n            \"defaults\": {\n              \"color\": {\n                \"mode\": \"palette-classic\"\n              },\n              \"custom\": {\n                \"axisBorderShow\": false,\n                \"axisCenteredZero\": false,\n                \"axisColorMode\": \"text\",\n                \"axisLabel\": \"\",\n                \"axisPlacement\": \"auto\",\n                \"barAlignment\": 0,\n                \"barWidthFactor\": 0.6,\n                \"drawStyle\": \"line\",\n                \"fillOpacity\": 10,\n                \"gradientMode\": \"none\",\n                \"hideFrom\": {\n                  \"legend\": false,\n                  \"tooltip\": false,\n                  \"viz\": false\n                },\n                \"insertNulls\": false,\n                \"lineInterpolation\": \"smooth\",\n                \"lineWidth\": 1,\n                \"pointSize\": 5,\n                \"scaleDistribution\": {\n                  \"type\": \"linear\"\n                },\n                \"showPoints\": \"never\",\n                \"spanNulls\": true,\n                \"stacking\": {\n                  \"group\": \"A\",\n                  \"mode\": \"none\"\n                },\n                \"thresholdsStyle\": {\n                  \"mode\": \"off\"\n                }\n              },\n              \"mappings\": [],\n              \"thresholds\": {\n                \"mode\": \"absolute\",\n                \"steps\": [\n                  {\n                    \"color\": \"green\"\n                  },\n                  {\n                    \"color\": \"red\",\n                    \"value\": 80\n                  }\n                ]\n              },\n              \"unit\": \"reqps\"\n            },\n            \"overrides\": [\n              {\n                \"matcher\": {\n                  \"id\": \"byRegexp\",\n                  \"options\": \".*(timeout|drop)\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"custom.axisPlacement\",\n                    \"value\": \"right\"\n                  },\n                  {\n                    \"id\": \"custom.axisSoftMax\",\n                    \"value\": 100\n                  },\n                  {\n                    \"id\": \"unit\",\n                    \"value\": \"short\"\n                  }\n                ]\n              }\n            ]\n          },\n          \"gridPos\": {\n            \"h\": 8,\n            \"w\": 12,\n            \"x\": 12,\n            \"y\": 298\n          },\n          \"id\": 147,\n          \"options\": {\n            \"legend\": {\n              \"calcs\": [\n                \"mean\",\n                \"lastNotNull\",\n                \"max\",\n                \"min\"\n              ],\n              \"displayMode\": \"table\",\n              \"placement\": \"right\",\n              \"showLegend\": true,\n              \"sortBy\": \"Mean\",\n              \"sortDesc\": true\n            },\n            \"tooltip\": {\n              \"hideZeros\": false,\n              \"mode\": \"multi\",\n              \"sort\": \"none\"\n            }\n          },\n          \"pluginVersion\": \"11.5.2\",\n          \"targets\": [\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"PBFA97CFB590B2093\"\n              },\n              \"editorMode\": \"code\",\n              \"exemplar\": true,\n              \"expr\": \"sum(rate(geth_rpc_requests_failure_count{instance=\\\"$instance\\\"}[5m])) by (instance, method)\",\n              \"hide\": false,\n              \"interval\": \"\",\n              \"legendFormat\": \"{{method}}\",\n              \"range\": true,\n              \"refId\": \"A\"\n            },\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"PBFA97CFB590B2093\"\n              },\n              \"hide\": false,\n              \"refId\": \"B\"\n            }\n          ],\n          \"title\": \"Failure RPC QPS\",\n          \"type\": \"timeseries\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"description\": \"\",\n          \"fieldConfig\": {\n            \"defaults\": {\n              \"color\": {\n                \"mode\": \"palette-classic\"\n              },\n              \"custom\": {\n                \"axisBorderShow\": false,\n                \"axisCenteredZero\": false,\n                \"axisColorMode\": \"text\",\n                \"axisLabel\": \"\",\n                \"axisPlacement\": \"auto\",\n                \"barAlignment\": 0,\n                \"barWidthFactor\": 0.6,\n                \"drawStyle\": \"line\",\n                \"fillOpacity\": 10,\n                \"gradientMode\": \"none\",\n                \"hideFrom\": {\n                  \"legend\": false,\n                  \"tooltip\": false,\n                  \"viz\": false\n                },\n                \"insertNulls\": false,\n                \"lineInterpolation\": \"smooth\",\n                \"lineWidth\": 1,\n                \"pointSize\": 5,\n                \"scaleDistribution\": {\n                  \"type\": \"linear\"\n                },\n                \"showPoints\": \"never\",\n                \"spanNulls\": false,\n                \"stacking\": {\n                  \"group\": \"A\",\n                  \"mode\": \"none\"\n                },\n                \"thresholdsStyle\": {\n                  \"mode\": \"off\"\n                }\n              },\n              \"mappings\": [],\n              \"thresholds\": {\n                \"mode\": \"absolute\",\n                \"steps\": [\n                  {\n                    \"color\": \"green\"\n                  }\n                ]\n              },\n              \"unit\": \"dtdurations\"\n            },\n            \"overrides\": [\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"debug_traceBlockByNumber\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"custom.axisPlacement\",\n                    \"value\": \"right\"\n                  }\n                ]\n              }\n            ]\n          },\n          \"gridPos\": {\n            \"h\": 8,\n            \"w\": 12,\n            \"x\": 0,\n            \"y\": 321\n          },\n          \"id\": 146,\n          \"options\": {\n            \"legend\": {\n              \"calcs\": [\n                \"mean\",\n                \"lastNotNull\",\n                \"max\",\n                \"min\"\n              ],\n              \"displayMode\": \"table\",\n              \"placement\": \"right\",\n              \"showLegend\": true,\n              \"sortBy\": \"Mean\",\n              \"sortDesc\": true\n            },\n            \"tooltip\": {\n              \"hideZeros\": false,\n              \"mode\": \"multi\",\n              \"sort\": \"asc\"\n            }\n          },\n          \"pluginVersion\": \"11.5.2\",\n          \"targets\": [\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"PBFA97CFB590B2093\"\n              },\n              \"editorMode\": \"code\",\n              \"exemplar\": true,\n              \"expr\": \"sum(rate(geth_rpc_requests_success{quantile='$quantile', instance=\\\"$instance\\\"}[5m])) by (instance, method) \\n/ \\nsum(rate(geth_rpc_requests_success_count{instance=\\\"$instance\\\"}[5m])) by (instance, method) /1e6 \\n< 1e200\",\n              \"hide\": false,\n              \"interval\": \"\",\n              \"legendFormat\": \"{{method}}\",\n              \"range\": true,\n              \"refId\": \"A\"\n            }\n          ],\n          \"title\": \"Success RPC Latency\",\n          \"type\": \"timeseries\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"description\": \"\",\n          \"fieldConfig\": {\n            \"defaults\": {\n              \"color\": {\n                \"mode\": \"palette-classic\"\n              },\n              \"custom\": {\n                \"axisBorderShow\": false,\n                \"axisCenteredZero\": false,\n                \"axisColorMode\": \"text\",\n                \"axisLabel\": \"\",\n                \"axisPlacement\": \"auto\",\n                \"barAlignment\": 0,\n                \"barWidthFactor\": 0.6,\n                \"drawStyle\": \"line\",\n                \"fillOpacity\": 10,\n                \"gradientMode\": \"none\",\n                \"hideFrom\": {\n                  \"legend\": false,\n                  \"tooltip\": false,\n                  \"viz\": false\n                },\n                \"insertNulls\": false,\n                \"lineInterpolation\": \"smooth\",\n                \"lineWidth\": 1,\n                \"pointSize\": 5,\n                \"scaleDistribution\": {\n                  \"type\": \"linear\"\n                },\n                \"showPoints\": \"never\",\n                \"spanNulls\": true,\n                \"stacking\": {\n                  \"group\": \"A\",\n                  \"mode\": \"none\"\n                },\n                \"thresholdsStyle\": {\n                  \"mode\": \"off\"\n                }\n              },\n              \"mappings\": [],\n              \"thresholds\": {\n                \"mode\": \"absolute\",\n                \"steps\": [\n                  {\n                    \"color\": \"green\"\n                  },\n                  {\n                    \"color\": \"red\",\n                    \"value\": 80\n                  }\n                ]\n              },\n              \"unit\": \"dtdurations\"\n            },\n            \"overrides\": [\n              {\n                \"matcher\": {\n                  \"id\": \"byRegexp\",\n                  \"options\": \".*(timeout|drop)\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"custom.axisPlacement\",\n                    \"value\": \"right\"\n                  },\n                  {\n                    \"id\": \"custom.axisSoftMax\",\n                    \"value\": 100\n                  },\n                  {\n                    \"id\": \"unit\",\n                    \"value\": \"short\"\n                  }\n                ]\n              }\n            ]\n          },\n          \"gridPos\": {\n            \"h\": 8,\n            \"w\": 12,\n            \"x\": 12,\n            \"y\": 321\n          },\n          \"id\": 151,\n          \"options\": {\n            \"legend\": {\n              \"calcs\": [\n                \"mean\",\n                \"lastNotNull\",\n                \"max\",\n                \"min\"\n              ],\n              \"displayMode\": \"table\",\n              \"placement\": \"right\",\n              \"showLegend\": true,\n              \"sortBy\": \"Mean\",\n              \"sortDesc\": true\n            },\n            \"tooltip\": {\n              \"hideZeros\": false,\n              \"mode\": \"multi\",\n              \"sort\": \"none\"\n            }\n          },\n          \"pluginVersion\": \"11.5.2\",\n          \"targets\": [\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"PBFA97CFB590B2093\"\n              },\n              \"editorMode\": \"code\",\n              \"exemplar\": true,\n              \"expr\": \"sum(rate(geth_rpc_requests_failure{quantile='$quantile', instance=\\\"$instance\\\"}[5m])) by (instance, method) / sum(rate(geth_rpc_requests_failure_count{instance=\\\"$instance\\\"}[5m])) by (instance, method) /1e6\",\n              \"hide\": false,\n              \"interval\": \"\",\n              \"legendFormat\": \"{{method}}\",\n              \"range\": true,\n              \"refId\": \"A\"\n            },\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"PBFA97CFB590B2093\"\n              },\n              \"hide\": false,\n              \"refId\": \"B\"\n            }\n          ],\n          \"title\": \"Failure RPC Latency\",\n          \"type\": \"timeseries\"\n        }\n      ],\n      \"title\": \"RPC\",\n      \"type\": \"row\"\n    },\n    {\n      \"collapsed\": true,\n      \"gridPos\": {\n        \"h\": 1,\n        \"w\": 24,\n        \"x\": 0,\n        \"y\": 24\n      },\n      \"id\": 82,\n      \"panels\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"fieldConfig\": {\n            \"defaults\": {\n              \"color\": {\n                \"mode\": \"palette-classic\"\n              },\n              \"custom\": {\n                \"axisBorderShow\": false,\n                \"axisCenteredZero\": false,\n                \"axisColorMode\": \"text\",\n                \"axisLabel\": \"\",\n                \"axisPlacement\": \"auto\",\n                \"barAlignment\": 0,\n                \"barWidthFactor\": 0.6,\n                \"drawStyle\": \"line\",\n                \"fillOpacity\": 10,\n                \"gradientMode\": \"none\",\n                \"hideFrom\": {\n                  \"legend\": false,\n                  \"tooltip\": false,\n                  \"viz\": false\n                },\n                \"insertNulls\": false,\n                \"lineInterpolation\": \"linear\",\n                \"lineWidth\": 1,\n                \"pointSize\": 5,\n                \"scaleDistribution\": {\n                  \"type\": \"linear\"\n                },\n                \"showPoints\": \"never\",\n                \"spanNulls\": true,\n                \"stacking\": {\n                  \"group\": \"A\",\n                  \"mode\": \"none\"\n                },\n                \"thresholdsStyle\": {\n                  \"mode\": \"off\"\n                }\n              },\n              \"mappings\": [],\n              \"thresholds\": {\n                \"mode\": \"absolute\",\n                \"steps\": [\n                  {\n                    \"color\": \"green\",\n                    \"value\": 0\n                  },\n                  {\n                    \"color\": \"red\",\n                    \"value\": 80\n                  }\n                ]\n              },\n              \"unit\": \"percent\"\n            },\n            \"overrides\": [\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"goroutines\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"custom.axisPlacement\",\n                    \"value\": \"right\"\n                  },\n                  {\n                    \"id\": \"unit\",\n                    \"value\": \"short\"\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"threads\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"custom.axisPlacement\",\n                    \"value\": \"right\"\n                  },\n                  {\n                    \"id\": \"unit\",\n                    \"value\": \"short\"\n                  }\n                ]\n              }\n            ]\n          },\n          \"gridPos\": {\n            \"h\": 6,\n            \"w\": 8,\n            \"x\": 0,\n            \"y\": 26\n          },\n          \"id\": 106,\n          \"options\": {\n            \"legend\": {\n              \"calcs\": [],\n              \"displayMode\": \"list\",\n              \"placement\": \"bottom\",\n              \"showLegend\": true\n            },\n            \"tooltip\": {\n              \"hideZeros\": false,\n              \"mode\": \"multi\",\n              \"sort\": \"none\"\n            }\n          },\n          \"pluginVersion\": \"12.2.0-16557133545\",\n          \"targets\": [\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"PBFA97CFB590B2093\"\n              },\n              \"exemplar\": true,\n              \"expr\": \"avg(system_cpu_sysload{instance=~\\\"$instance\\\"}) by (instance)\",\n              \"format\": \"time_series\",\n              \"interval\": \"\",\n              \"intervalFactor\": 1,\n              \"legendFormat\": \"system\",\n              \"refId\": \"A\"\n            },\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"PBFA97CFB590B2093\"\n              },\n              \"exemplar\": true,\n              \"expr\": \"avg(system_cpu_syswait{instance=~\\\"$instance\\\"}) by (instance)\",\n              \"format\": \"time_series\",\n              \"interval\": \"\",\n              \"intervalFactor\": 1,\n              \"legendFormat\": \"iowait\",\n              \"refId\": \"B\"\n            },\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"PBFA97CFB590B2093\"\n              },\n              \"exemplar\": true,\n              \"expr\": \"avg(system_cpu_procload{instance=~\\\"$instance\\\"}) by (instance)\",\n              \"format\": \"time_series\",\n              \"interval\": \"\",\n              \"intervalFactor\": 1,\n              \"legendFormat\": \"geth\",\n              \"refId\": \"C\"\n            },\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"PBFA97CFB590B2093\"\n              },\n              \"exemplar\": true,\n              \"expr\": \"avg(system_cpu_goroutines{instance=~\\\"$instance\\\"}) by (instance)\",\n              \"hide\": false,\n              \"interval\": \"\",\n              \"legendFormat\": \"goroutines\",\n              \"refId\": \"D\"\n            },\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"PBFA97CFB590B2093\"\n              },\n              \"exemplar\": true,\n              \"expr\": \"avg(system_cpu_threads{instance=~\\\"$instance\\\"}) by (instance)\",\n              \"hide\": false,\n              \"interval\": \"\",\n              \"legendFormat\": \"threads\",\n              \"refId\": \"E\"\n            }\n          ],\n          \"title\": \"CPU\",\n          \"type\": \"timeseries\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"fieldConfig\": {\n            \"defaults\": {\n              \"color\": {\n                \"mode\": \"palette-classic\"\n              },\n              \"custom\": {\n                \"axisBorderShow\": false,\n                \"axisCenteredZero\": false,\n                \"axisColorMode\": \"text\",\n                \"axisLabel\": \"\",\n                \"axisPlacement\": \"auto\",\n                \"barAlignment\": 0,\n                \"barWidthFactor\": 0.6,\n                \"drawStyle\": \"line\",\n                \"fillOpacity\": 10,\n                \"gradientMode\": \"none\",\n                \"hideFrom\": {\n                  \"legend\": false,\n                  \"tooltip\": false,\n                  \"viz\": false\n                },\n                \"insertNulls\": false,\n                \"lineInterpolation\": \"smooth\",\n                \"lineWidth\": 1,\n                \"pointSize\": 5,\n                \"scaleDistribution\": {\n                  \"type\": \"linear\"\n                },\n                \"showPoints\": \"never\",\n                \"spanNulls\": true,\n                \"stacking\": {\n                  \"group\": \"A\",\n                  \"mode\": \"none\"\n                },\n                \"thresholdsStyle\": {\n                  \"mode\": \"off\"\n                }\n              },\n              \"mappings\": [],\n              \"thresholds\": {\n                \"mode\": \"absolute\",\n                \"steps\": [\n                  {\n                    \"color\": \"green\",\n                    \"value\": 0\n                  },\n                  {\n                    \"color\": \"red\",\n                    \"value\": 80\n                  }\n                ]\n              },\n              \"unit\": \"decbytes\"\n            },\n            \"overrides\": [\n              {\n                \"__systemRef\": \"hideSeriesFrom\",\n                \"matcher\": {\n                  \"id\": \"byNames\",\n                  \"options\": {\n                    \"mode\": \"exclude\",\n                    \"names\": [\n                      \"used\"\n                    ],\n                    \"prefix\": \"All except:\",\n                    \"readOnly\": true\n                  }\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"custom.hideFrom\",\n                    \"value\": {\n                      \"legend\": false,\n                      \"tooltip\": false,\n                      \"viz\": true\n                    }\n                  }\n                ]\n              }\n            ]\n          },\n          \"gridPos\": {\n            \"h\": 6,\n            \"w\": 8,\n            \"x\": 8,\n            \"y\": 26\n          },\n          \"id\": 86,\n          \"options\": {\n            \"legend\": {\n              \"calcs\": [],\n              \"displayMode\": \"list\",\n              \"placement\": \"bottom\",\n              \"showLegend\": true\n            },\n            \"tooltip\": {\n              \"hideZeros\": false,\n              \"mode\": \"multi\",\n              \"sort\": \"none\"\n            }\n          },\n          \"pluginVersion\": \"12.2.0-16557133545\",\n          \"targets\": [\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"PBFA97CFB590B2093\"\n              },\n              \"exemplar\": true,\n              \"expr\": \"rate(system_memory_allocs{instance=~\\\"$instance\\\"}[1m])\",\n              \"format\": \"time_series\",\n              \"hide\": false,\n              \"interval\": \"\",\n              \"intervalFactor\": 1,\n              \"legendFormat\": \"alloc\",\n              \"refId\": \"A\"\n            },\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"PBFA97CFB590B2093\"\n              },\n              \"exemplar\": true,\n              \"expr\": \"system_memory_used{instance=~\\\"$instance\\\"}\",\n              \"format\": \"time_series\",\n              \"hide\": false,\n              \"interval\": \"\",\n              \"intervalFactor\": 1,\n              \"legendFormat\": \"used\",\n              \"refId\": \"B\"\n            },\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"PBFA97CFB590B2093\"\n              },\n              \"exemplar\": true,\n              \"expr\": \"system_memory_held{instance=~\\\"$instance\\\"}\",\n              \"format\": \"time_series\",\n              \"hide\": false,\n              \"interval\": \"\",\n              \"intervalFactor\": 1,\n              \"legendFormat\": \"held\",\n              \"refId\": \"C\"\n            },\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"PBFA97CFB590B2093\"\n              },\n              \"exemplar\": true,\n              \"expr\": \"rate(system_memory_frees{instance=~\\\"$instance\\\"}[1m])\",\n              \"hide\": false,\n              \"instant\": false,\n              \"interval\": \"\",\n              \"legendFormat\": \"free\",\n              \"refId\": \"D\"\n            },\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"PBFA97CFB590B2093\"\n              },\n              \"exemplar\": true,\n              \"expr\": \"system_memory_pauses{instance=~\\\"$instance\\\"}\",\n              \"hide\": true,\n              \"interval\": \"\",\n              \"legendFormat\": \"pause\",\n              \"refId\": \"E\"\n            }\n          ],\n          \"title\": \"Memory\",\n          \"type\": \"timeseries\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"fieldConfig\": {\n            \"defaults\": {\n              \"color\": {\n                \"mode\": \"palette-classic\"\n              },\n              \"custom\": {\n                \"axisBorderShow\": false,\n                \"axisCenteredZero\": false,\n                \"axisColorMode\": \"text\",\n                \"axisLabel\": \"\",\n                \"axisPlacement\": \"auto\",\n                \"barAlignment\": 0,\n                \"barWidthFactor\": 0.6,\n                \"drawStyle\": \"line\",\n                \"fillOpacity\": 10,\n                \"gradientMode\": \"none\",\n                \"hideFrom\": {\n                  \"legend\": false,\n                  \"tooltip\": false,\n                  \"viz\": false\n                },\n                \"insertNulls\": false,\n                \"lineInterpolation\": \"linear\",\n                \"lineWidth\": 1,\n                \"pointSize\": 5,\n                \"scaleDistribution\": {\n                  \"type\": \"linear\"\n                },\n                \"showPoints\": \"never\",\n                \"spanNulls\": true,\n                \"stacking\": {\n                  \"group\": \"A\",\n                  \"mode\": \"none\"\n                },\n                \"thresholdsStyle\": {\n                  \"mode\": \"off\"\n                }\n              },\n              \"mappings\": [],\n              \"thresholds\": {\n                \"mode\": \"absolute\",\n                \"steps\": [\n                  {\n                    \"color\": \"green\",\n                    \"value\": 0\n                  },\n                  {\n                    \"color\": \"red\",\n                    \"value\": 80\n                  }\n                ]\n              },\n              \"unit\": \"Bps\"\n            },\n            \"overrides\": []\n          },\n          \"gridPos\": {\n            \"h\": 6,\n            \"w\": 8,\n            \"x\": 16,\n            \"y\": 26\n          },\n          \"id\": 85,\n          \"options\": {\n            \"legend\": {\n              \"calcs\": [],\n              \"displayMode\": \"list\",\n              \"placement\": \"bottom\",\n              \"showLegend\": true\n            },\n            \"tooltip\": {\n              \"hideZeros\": false,\n              \"mode\": \"single\",\n              \"sort\": \"none\"\n            }\n          },\n          \"pluginVersion\": \"12.2.0-16557133545\",\n          \"targets\": [\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"PBFA97CFB590B2093\"\n              },\n              \"exemplar\": true,\n              \"expr\": \"rate(system_disk_readbytes{instance=~\\\"$instance\\\"}[1m])\",\n              \"format\": \"time_series\",\n              \"interval\": \"\",\n              \"intervalFactor\": 1,\n              \"legendFormat\": \"read\",\n              \"refId\": \"A\"\n            },\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"PBFA97CFB590B2093\"\n              },\n              \"exemplar\": true,\n              \"expr\": \"rate(system_disk_writebytes{instance=~\\\"$instance\\\"}[1m])\",\n              \"format\": \"time_series\",\n              \"interval\": \"\",\n              \"intervalFactor\": 1,\n              \"legendFormat\": \"write\",\n              \"refId\": \"B\"\n            }\n          ],\n          \"title\": \"Disk\",\n          \"type\": \"timeseries\"\n        }\n      ],\n      \"title\": \"System\",\n      \"type\": \"row\"\n    },\n    {\n      \"collapsed\": true,\n      \"gridPos\": {\n        \"h\": 1,\n        \"w\": 24,\n        \"x\": 0,\n        \"y\": 25\n      },\n      \"id\": 75,\n      \"panels\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"fieldConfig\": {\n            \"defaults\": {\n              \"color\": {\n                \"mode\": \"palette-classic\"\n              },\n              \"custom\": {\n                \"axisBorderShow\": false,\n                \"axisCenteredZero\": false,\n                \"axisColorMode\": \"text\",\n                \"axisLabel\": \"\",\n                \"axisPlacement\": \"auto\",\n                \"barAlignment\": 0,\n                \"barWidthFactor\": 0.6,\n                \"drawStyle\": \"line\",\n                \"fillOpacity\": 10,\n                \"gradientMode\": \"none\",\n                \"hideFrom\": {\n                  \"legend\": false,\n                  \"tooltip\": false,\n                  \"viz\": false\n                },\n                \"insertNulls\": false,\n                \"lineInterpolation\": \"linear\",\n                \"lineWidth\": 1,\n                \"pointSize\": 5,\n                \"scaleDistribution\": {\n                  \"type\": \"linear\"\n                },\n                \"showPoints\": \"never\",\n                \"spanNulls\": true,\n                \"stacking\": {\n                  \"group\": \"A\",\n                  \"mode\": \"none\"\n                },\n                \"thresholdsStyle\": {\n                  \"mode\": \"off\"\n                }\n              },\n              \"mappings\": [],\n              \"thresholds\": {\n                \"mode\": \"absolute\",\n                \"steps\": [\n                  {\n                    \"color\": \"green\",\n                    \"value\": 0\n                  },\n                  {\n                    \"color\": \"red\",\n                    \"value\": 80\n                  }\n                ]\n              },\n              \"unit\": \"Bps\"\n            },\n            \"overrides\": [\n              {\n                \"matcher\": {\n                  \"id\": \"byRegexp\",\n                  \"options\": \".*-flow$\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"unit\",\n                    \"value\": \"decbytes\"\n                  },\n                  {\n                    \"id\": \"custom.axisPlacement\",\n                    \"value\": \"right\"\n                  }\n                ]\n              }\n            ]\n          },\n          \"gridPos\": {\n            \"h\": 6,\n            \"w\": 12,\n            \"x\": 0,\n            \"y\": 74\n          },\n          \"id\": 96,\n          \"options\": {\n            \"legend\": {\n              \"calcs\": [\n                \"mean\",\n                \"lastNotNull\",\n                \"max\"\n              ],\n              \"displayMode\": \"table\",\n              \"placement\": \"right\",\n              \"showLegend\": true\n            },\n            \"tooltip\": {\n              \"hideZeros\": false,\n              \"mode\": \"single\",\n              \"sort\": \"none\"\n            }\n          },\n          \"pluginVersion\": \"12.2.0-16557133545\",\n          \"targets\": [\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"PBFA97CFB590B2093\"\n              },\n              \"editorMode\": \"code\",\n              \"exemplar\": true,\n              \"expr\": \"rate(p2p_ingress{instance=~\\\"$instance\\\"}[1m])\",\n              \"format\": \"time_series\",\n              \"interval\": \"\",\n              \"intervalFactor\": 1,\n              \"legendFormat\": \"ingress-rate\",\n              \"range\": true,\n              \"refId\": \"B\"\n            },\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"PBFA97CFB590B2093\"\n              },\n              \"editorMode\": \"code\",\n              \"exemplar\": true,\n              \"expr\": \"rate(p2p_egress{instance=~\\\"$instance\\\"}[1m])\",\n              \"format\": \"time_series\",\n              \"interval\": \"\",\n              \"intervalFactor\": 1,\n              \"legendFormat\": \"egress-rate\",\n              \"range\": true,\n              \"refId\": \"C\"\n            },\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"PBFA97CFB590B2093\"\n              },\n              \"editorMode\": \"code\",\n              \"expr\": \"p2p_ingress{instance=~\\\"$instance\\\"}\",\n              \"hide\": false,\n              \"legendFormat\": \"igress-flow\",\n              \"range\": true,\n              \"refId\": \"A\"\n            },\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"PBFA97CFB590B2093\"\n              },\n              \"editorMode\": \"code\",\n              \"expr\": \"p2p_egress{instance=~\\\"$instance\\\"}\",\n              \"hide\": false,\n              \"legendFormat\": \"egress-flow\",\n              \"range\": true,\n              \"refId\": \"D\"\n            }\n          ],\n          \"title\": \"Traffic\",\n          \"type\": \"timeseries\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"fieldConfig\": {\n            \"defaults\": {\n              \"color\": {\n                \"mode\": \"palette-classic\"\n              },\n              \"custom\": {\n                \"axisBorderShow\": false,\n                \"axisCenteredZero\": false,\n                \"axisColorMode\": \"text\",\n                \"axisLabel\": \"\",\n                \"axisPlacement\": \"auto\",\n                \"barAlignment\": 0,\n                \"barWidthFactor\": 0.6,\n                \"drawStyle\": \"line\",\n                \"fillOpacity\": 10,\n                \"gradientMode\": \"none\",\n                \"hideFrom\": {\n                  \"legend\": false,\n                  \"tooltip\": false,\n                  \"viz\": false\n                },\n                \"insertNulls\": false,\n                \"lineInterpolation\": \"linear\",\n                \"lineWidth\": 1,\n                \"pointSize\": 5,\n                \"scaleDistribution\": {\n                  \"type\": \"linear\"\n                },\n                \"showPoints\": \"never\",\n                \"spanNulls\": true,\n                \"stacking\": {\n                  \"group\": \"A\",\n                  \"mode\": \"none\"\n                },\n                \"thresholdsStyle\": {\n                  \"mode\": \"off\"\n                }\n              },\n              \"mappings\": [],\n              \"thresholds\": {\n                \"mode\": \"absolute\",\n                \"steps\": [\n                  {\n                    \"color\": \"green\",\n                    \"value\": 0\n                  },\n                  {\n                    \"color\": \"red\",\n                    \"value\": 80\n                  }\n                ]\n              },\n              \"unit\": \"none\"\n            },\n            \"overrides\": []\n          },\n          \"gridPos\": {\n            \"h\": 6,\n            \"w\": 12,\n            \"x\": 12,\n            \"y\": 74\n          },\n          \"id\": 77,\n          \"options\": {\n            \"legend\": {\n              \"calcs\": [\n                \"mean\",\n                \"lastNotNull\",\n                \"max\",\n                \"min\"\n              ],\n              \"displayMode\": \"table\",\n              \"placement\": \"right\",\n              \"showLegend\": true\n            },\n            \"tooltip\": {\n              \"hideZeros\": false,\n              \"mode\": \"single\",\n              \"sort\": \"none\"\n            }\n          },\n          \"pluginVersion\": \"12.2.0-16557133545\",\n          \"targets\": [\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"PBFA97CFB590B2093\"\n              },\n              \"exemplar\": true,\n              \"expr\": \"p2p_peers{instance=~\\\"$instance\\\"}\",\n              \"format\": \"time_series\",\n              \"interval\": \"\",\n              \"intervalFactor\": 1,\n              \"legendFormat\": \"peers\",\n              \"refId\": \"A\"\n            },\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"PBFA97CFB590B2093\"\n              },\n              \"exemplar\": true,\n              \"expr\": \"rate(p2p_dials{instance=~\\\"$instance\\\"}[1m])\",\n              \"format\": \"time_series\",\n              \"interval\": \"\",\n              \"intervalFactor\": 1,\n              \"legendFormat\": \"dials\",\n              \"refId\": \"B\"\n            },\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"PBFA97CFB590B2093\"\n              },\n              \"exemplar\": true,\n              \"expr\": \"rate(p2p_serves{instance=~\\\"$instance\\\"}[1m])\",\n              \"format\": \"time_series\",\n              \"interval\": \"\",\n              \"intervalFactor\": 1,\n              \"legendFormat\": \"serves\",\n              \"refId\": \"C\"\n            }\n          ],\n          \"title\": \"Peers\",\n          \"type\": \"timeseries\"\n        }\n      ],\n      \"title\": \"Network\",\n      \"type\": \"row\"\n    },\n    {\n      \"collapsed\": true,\n      \"gridPos\": {\n        \"h\": 1,\n        \"w\": 24,\n        \"x\": 0,\n        \"y\": 26\n      },\n      \"id\": 156,\n      \"panels\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"description\": \"\",\n          \"fieldConfig\": {\n            \"defaults\": {\n              \"color\": {\n                \"mode\": \"palette-classic\"\n              },\n              \"custom\": {\n                \"axisBorderShow\": false,\n                \"axisCenteredZero\": false,\n                \"axisColorMode\": \"text\",\n                \"axisLabel\": \"\",\n                \"axisPlacement\": \"auto\",\n                \"barAlignment\": 0,\n                \"barWidthFactor\": 0.6,\n                \"drawStyle\": \"line\",\n                \"fillOpacity\": 10,\n                \"gradientMode\": \"none\",\n                \"hideFrom\": {\n                  \"legend\": false,\n                  \"tooltip\": false,\n                  \"viz\": false\n                },\n                \"insertNulls\": false,\n                \"lineInterpolation\": \"smooth\",\n                \"lineWidth\": 1,\n                \"pointSize\": 5,\n                \"scaleDistribution\": {\n                  \"type\": \"linear\"\n                },\n                \"showPoints\": \"never\",\n                \"spanNulls\": true,\n                \"stacking\": {\n                  \"group\": \"A\",\n                  \"mode\": \"none\"\n                },\n                \"thresholdsStyle\": {\n                  \"mode\": \"off\"\n                }\n              },\n              \"fieldMinMax\": false,\n              \"mappings\": [],\n              \"thresholds\": {\n                \"mode\": \"absolute\",\n                \"steps\": [\n                  {\n                    \"color\": \"green\",\n                    \"value\": 0\n                  },\n                  {\n                    \"color\": \"red\",\n                    \"value\": 80\n                  }\n                ]\n              }\n            },\n            \"overrides\": []\n          },\n          \"gridPos\": {\n            \"h\": 8,\n            \"w\": 12,\n            \"x\": 0,\n            \"y\": 27\n          },\n          \"id\": 161,\n          \"options\": {\n            \"legend\": {\n              \"calcs\": [\n                \"mean\",\n                \"max\",\n                \"min\"\n              ],\n              \"displayMode\": \"table\",\n              \"placement\": \"right\",\n              \"showLegend\": true\n            },\n            \"tooltip\": {\n              \"hideZeros\": false,\n              \"mode\": \"multi\",\n              \"sort\": \"none\"\n            }\n          },\n          \"pluginVersion\": \"12.2.0-16557133545\",\n          \"targets\": [\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"PBFA97CFB590B2093\"\n              },\n              \"disableTextWrap\": false,\n              \"editorMode\": \"code\",\n              \"exemplar\": true,\n              \"expr\": \"rate(blobpool_addwait_count{instance=~\\\"$instance\\\"}[1m]) * 12\",\n              \"fullMetaSearch\": false,\n              \"hide\": false,\n              \"includeNullMetadata\": true,\n              \"interval\": \"\",\n              \"legendFormat\": \"add\",\n              \"range\": true,\n              \"refId\": \"A\",\n              \"useBackend\": false\n            },\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"PBFA97CFB590B2093\"\n              },\n              \"disableTextWrap\": false,\n              \"editorMode\": \"code\",\n              \"exemplar\": true,\n              \"expr\": \"rate(blobpool_getwait_count{instance=~\\\"$instance\\\"}[1m]) * 12\",\n              \"fullMetaSearch\": false,\n              \"hide\": false,\n              \"includeNullMetadata\": true,\n              \"interval\": \"\",\n              \"legendFormat\": \"get\",\n              \"range\": true,\n              \"refId\": \"C\",\n              \"useBackend\": false\n            },\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"PBFA97CFB590B2093\"\n              },\n              \"disableTextWrap\": false,\n              \"editorMode\": \"code\",\n              \"exemplar\": true,\n              \"expr\": \"rate(blobpool_pendwait_count{instance=~\\\"$instance\\\"}[1m]) * 12\",\n              \"fullMetaSearch\": false,\n              \"hide\": false,\n              \"includeNullMetadata\": true,\n              \"interval\": \"\",\n              \"legendFormat\": \"pend\",\n              \"range\": true,\n              \"refId\": \"E\",\n              \"useBackend\": false\n            },\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"PBFA97CFB590B2093\"\n              },\n              \"disableTextWrap\": false,\n              \"editorMode\": \"code\",\n              \"exemplar\": true,\n              \"expr\": \"rate(blobpool_resetwait_count{instance=~\\\"$instance\\\"}[1m]) * 12\",\n              \"fullMetaSearch\": false,\n              \"hide\": false,\n              \"includeNullMetadata\": true,\n              \"interval\": \"\",\n              \"legendFormat\": \"reset\",\n              \"range\": true,\n              \"refId\": \"G\",\n              \"useBackend\": false\n            }\n          ],\n          \"title\": \"Blobpool event rate / slot\",\n          \"type\": \"timeseries\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"description\": \"\",\n          \"fieldConfig\": {\n            \"defaults\": {\n              \"color\": {\n                \"mode\": \"palette-classic\"\n              },\n              \"custom\": {\n                \"axisBorderShow\": false,\n                \"axisCenteredZero\": false,\n                \"axisColorMode\": \"text\",\n                \"axisLabel\": \"\",\n                \"axisPlacement\": \"auto\",\n                \"barAlignment\": 0,\n                \"barWidthFactor\": 0.6,\n                \"drawStyle\": \"line\",\n                \"fillOpacity\": 10,\n                \"gradientMode\": \"none\",\n                \"hideFrom\": {\n                  \"legend\": false,\n                  \"tooltip\": false,\n                  \"viz\": false\n                },\n                \"insertNulls\": false,\n                \"lineInterpolation\": \"smooth\",\n                \"lineWidth\": 1,\n                \"pointSize\": 5,\n                \"scaleDistribution\": {\n                  \"type\": \"linear\"\n                },\n                \"showPoints\": \"never\",\n                \"spanNulls\": true,\n                \"stacking\": {\n                  \"group\": \"A\",\n                  \"mode\": \"none\"\n                },\n                \"thresholdsStyle\": {\n                  \"mode\": \"off\"\n                }\n              },\n              \"fieldMinMax\": false,\n              \"mappings\": [],\n              \"thresholds\": {\n                \"mode\": \"absolute\",\n                \"steps\": [\n                  {\n                    \"color\": \"green\",\n                    \"value\": 0\n                  },\n                  {\n                    \"color\": \"red\",\n                    \"value\": 80\n                  }\n                ]\n              },\n              \"unit\": \"ns\"\n            },\n            \"overrides\": [\n              {\n                \"__systemRef\": \"hideSeriesFrom\",\n                \"matcher\": {\n                  \"id\": \"byNames\",\n                  \"options\": {\n                    \"mode\": \"exclude\",\n                    \"names\": [\n                      \"resetWait\",\n                      \"pendWait\",\n                      \"getWait\",\n                      \"addWait\"\n                    ],\n                    \"prefix\": \"All except:\",\n                    \"readOnly\": true\n                  }\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"custom.hideFrom\",\n                    \"value\": {\n                      \"legend\": false,\n                      \"tooltip\": false,\n                      \"viz\": true\n                    }\n                  }\n                ]\n              }\n            ]\n          },\n          \"gridPos\": {\n            \"h\": 8,\n            \"w\": 12,\n            \"x\": 12,\n            \"y\": 27\n          },\n          \"id\": 160,\n          \"options\": {\n            \"legend\": {\n              \"calcs\": [\n                \"mean\",\n                \"max\",\n                \"min\"\n              ],\n              \"displayMode\": \"table\",\n              \"placement\": \"right\",\n              \"showLegend\": true\n            },\n            \"tooltip\": {\n              \"hideZeros\": false,\n              \"mode\": \"multi\",\n              \"sort\": \"none\"\n            }\n          },\n          \"pluginVersion\": \"12.2.0-16557133545\",\n          \"targets\": [\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"PBFA97CFB590B2093\"\n              },\n              \"disableTextWrap\": false,\n              \"editorMode\": \"builder\",\n              \"exemplar\": true,\n              \"expr\": \"blobpool_addwait{instance=~\\\"$instance\\\", quantile=\\\"$quantile\\\"}\",\n              \"fullMetaSearch\": false,\n              \"hide\": false,\n              \"includeNullMetadata\": true,\n              \"interval\": \"\",\n              \"legendFormat\": \"addWait\",\n              \"range\": true,\n              \"refId\": \"A\",\n              \"useBackend\": false\n            },\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"PBFA97CFB590B2093\"\n              },\n              \"disableTextWrap\": false,\n              \"editorMode\": \"builder\",\n              \"exemplar\": true,\n              \"expr\": \"blobpool_addtime{instance=~\\\"$instance\\\", quantile=\\\"$quantile\\\"}\",\n              \"fullMetaSearch\": false,\n              \"hide\": false,\n              \"includeNullMetadata\": true,\n              \"interval\": \"\",\n              \"legendFormat\": \"addTime\",\n              \"range\": true,\n              \"refId\": \"B\",\n              \"useBackend\": false\n            },\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"PBFA97CFB590B2093\"\n              },\n              \"disableTextWrap\": false,\n              \"editorMode\": \"builder\",\n              \"exemplar\": true,\n              \"expr\": \"blobpool_getwait{instance=~\\\"$instance\\\", quantile=\\\"$quantile\\\"}\",\n              \"fullMetaSearch\": false,\n              \"hide\": false,\n              \"includeNullMetadata\": true,\n              \"interval\": \"\",\n              \"legendFormat\": \"getWait\",\n              \"range\": true,\n              \"refId\": \"C\",\n              \"useBackend\": false\n            },\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"PBFA97CFB590B2093\"\n              },\n              \"disableTextWrap\": false,\n              \"editorMode\": \"builder\",\n              \"exemplar\": true,\n              \"expr\": \"blobpool_gettime{instance=~\\\"$instance\\\", quantile=\\\"$quantile\\\"}\",\n              \"fullMetaSearch\": false,\n              \"hide\": false,\n              \"includeNullMetadata\": true,\n              \"interval\": \"\",\n              \"legendFormat\": \"getTime\",\n              \"range\": true,\n              \"refId\": \"D\",\n              \"useBackend\": false\n            },\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"PBFA97CFB590B2093\"\n              },\n              \"disableTextWrap\": false,\n              \"editorMode\": \"builder\",\n              \"exemplar\": true,\n              \"expr\": \"blobpool_pendwait{instance=~\\\"$instance\\\", quantile=\\\"$quantile\\\"}\",\n              \"fullMetaSearch\": false,\n              \"hide\": false,\n              \"includeNullMetadata\": true,\n              \"interval\": \"\",\n              \"legendFormat\": \"pendWait\",\n              \"range\": true,\n              \"refId\": \"E\",\n              \"useBackend\": false\n            },\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"PBFA97CFB590B2093\"\n              },\n              \"disableTextWrap\": false,\n              \"editorMode\": \"builder\",\n              \"exemplar\": true,\n              \"expr\": \"blobpool_pendtime{instance=~\\\"$instance\\\", quantile=\\\"$quantile\\\"}\",\n              \"fullMetaSearch\": false,\n              \"hide\": false,\n              \"includeNullMetadata\": true,\n              \"interval\": \"\",\n              \"legendFormat\": \"pendTime\",\n              \"range\": true,\n              \"refId\": \"F\",\n              \"useBackend\": false\n            },\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"PBFA97CFB590B2093\"\n              },\n              \"disableTextWrap\": false,\n              \"editorMode\": \"builder\",\n              \"exemplar\": true,\n              \"expr\": \"blobpool_resetwait{instance=~\\\"$instance\\\", quantile=\\\"$quantile\\\"}\",\n              \"fullMetaSearch\": false,\n              \"hide\": false,\n              \"includeNullMetadata\": true,\n              \"interval\": \"\",\n              \"legendFormat\": \"resetWait\",\n              \"range\": true,\n              \"refId\": \"G\",\n              \"useBackend\": false\n            },\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"PBFA97CFB590B2093\"\n              },\n              \"disableTextWrap\": false,\n              \"editorMode\": \"builder\",\n              \"exemplar\": true,\n              \"expr\": \"blobpool_resettime{instance=~\\\"$instance\\\", quantile=\\\"$quantile\\\"}\",\n              \"fullMetaSearch\": false,\n              \"hide\": false,\n              \"includeNullMetadata\": true,\n              \"interval\": \"\",\n              \"legendFormat\": \"resetTime\",\n              \"range\": true,\n              \"refId\": \"H\",\n              \"useBackend\": false\n            }\n          ],\n          \"title\": \"Blobpool timing\",\n          \"type\": \"timeseries\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"description\": \"\",\n          \"fieldConfig\": {\n            \"defaults\": {\n              \"color\": {\n                \"mode\": \"palette-classic\"\n              },\n              \"custom\": {\n                \"axisBorderShow\": false,\n                \"axisCenteredZero\": false,\n                \"axisColorMode\": \"text\",\n                \"axisLabel\": \"\",\n                \"axisPlacement\": \"auto\",\n                \"barAlignment\": 0,\n                \"barWidthFactor\": 0.6,\n                \"drawStyle\": \"line\",\n                \"fillOpacity\": 10,\n                \"gradientMode\": \"none\",\n                \"hideFrom\": {\n                  \"legend\": false,\n                  \"tooltip\": false,\n                  \"viz\": false\n                },\n                \"insertNulls\": false,\n                \"lineInterpolation\": \"smooth\",\n                \"lineWidth\": 1,\n                \"pointSize\": 5,\n                \"scaleDistribution\": {\n                  \"type\": \"linear\"\n                },\n                \"showPoints\": \"never\",\n                \"spanNulls\": true,\n                \"stacking\": {\n                  \"group\": \"A\",\n                  \"mode\": \"none\"\n                },\n                \"thresholdsStyle\": {\n                  \"mode\": \"off\"\n                }\n              },\n              \"fieldMinMax\": false,\n              \"mappings\": [],\n              \"thresholds\": {\n                \"mode\": \"absolute\",\n                \"steps\": [\n                  {\n                    \"color\": \"green\",\n                    \"value\": 0\n                  },\n                  {\n                    \"color\": \"red\",\n                    \"value\": 80\n                  }\n                ]\n              }\n            },\n            \"overrides\": []\n          },\n          \"gridPos\": {\n            \"h\": 9,\n            \"w\": 12,\n            \"x\": 0,\n            \"y\": 35\n          },\n          \"id\": 159,\n          \"options\": {\n            \"legend\": {\n              \"calcs\": [\n                \"mean\",\n                \"max\",\n                \"min\"\n              ],\n              \"displayMode\": \"table\",\n              \"placement\": \"right\",\n              \"showLegend\": true\n            },\n            \"tooltip\": {\n              \"hideZeros\": false,\n              \"mode\": \"multi\",\n              \"sort\": \"none\"\n            }\n          },\n          \"pluginVersion\": \"12.2.0-16557133545\",\n          \"targets\": [\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"PBFA97CFB590B2093\"\n              },\n              \"disableTextWrap\": false,\n              \"editorMode\": \"code\",\n              \"exemplar\": true,\n              \"expr\": \"rate(blobpool_add_valid{instance=~\\\"$instance\\\"}[1m]) * 12\",\n              \"fullMetaSearch\": false,\n              \"hide\": false,\n              \"includeNullMetadata\": true,\n              \"interval\": \"\",\n              \"legendFormat\": \"valid\",\n              \"range\": true,\n              \"refId\": \"A\",\n              \"useBackend\": false\n            },\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"PBFA97CFB590B2093\"\n              },\n              \"disableTextWrap\": false,\n              \"editorMode\": \"code\",\n              \"exemplar\": true,\n              \"expr\": \"rate(blobpool_add_invalid{instance=~\\\"$instance\\\"}[1m]) * 12\",\n              \"fullMetaSearch\": false,\n              \"hide\": false,\n              \"includeNullMetadata\": true,\n              \"interval\": \"\",\n              \"legendFormat\": \"invalid\",\n              \"range\": true,\n              \"refId\": \"B\",\n              \"useBackend\": false\n            },\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"PBFA97CFB590B2093\"\n              },\n              \"disableTextWrap\": false,\n              \"editorMode\": \"code\",\n              \"exemplar\": true,\n              \"expr\": \"rate(blobpool_add_stale{instance=~\\\"$instance\\\"}[1m]) * 12\",\n              \"fullMetaSearch\": false,\n              \"hide\": false,\n              \"includeNullMetadata\": true,\n              \"interval\": \"\",\n              \"legendFormat\": \"stale\",\n              \"range\": true,\n              \"refId\": \"C\",\n              \"useBackend\": false\n            },\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"PBFA97CFB590B2093\"\n              },\n              \"disableTextWrap\": false,\n              \"editorMode\": \"code\",\n              \"exemplar\": true,\n              \"expr\": \"rate(blobpool_add_noreplace{instance=~\\\"$instance\\\"}[1m]) * 12\",\n              \"fullMetaSearch\": false,\n              \"hide\": false,\n              \"includeNullMetadata\": true,\n              \"interval\": \"\",\n              \"legendFormat\": \"noreplace\",\n              \"range\": true,\n              \"refId\": \"D\",\n              \"useBackend\": false\n            },\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"PBFA97CFB590B2093\"\n              },\n              \"disableTextWrap\": false,\n              \"editorMode\": \"code\",\n              \"exemplar\": true,\n              \"expr\": \"rate(blobpool_add_nonexclusive{instance=~\\\"$instance\\\"}[1m]) * 12\",\n              \"fullMetaSearch\": false,\n              \"hide\": false,\n              \"includeNullMetadata\": true,\n              \"interval\": \"\",\n              \"legendFormat\": \"nonexclusive\",\n              \"range\": true,\n              \"refId\": \"E\",\n              \"useBackend\": false\n            },\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"PBFA97CFB590B2093\"\n              },\n              \"disableTextWrap\": false,\n              \"editorMode\": \"code\",\n              \"exemplar\": true,\n              \"expr\": \"rate(blobpool_add_gapped{instance=~\\\"$instance\\\"}[1m]) * 12\",\n              \"fullMetaSearch\": false,\n              \"hide\": false,\n              \"includeNullMetadata\": true,\n              \"interval\": \"\",\n              \"legendFormat\": \"gapped\",\n              \"range\": true,\n              \"refId\": \"F\",\n              \"useBackend\": false\n            },\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"PBFA97CFB590B2093\"\n              },\n              \"disableTextWrap\": false,\n              \"editorMode\": \"code\",\n              \"exemplar\": true,\n              \"expr\": \"rate(blobpool_add_overdrafted{instance=~\\\"$instance\\\"}[1m]) * 12\",\n              \"fullMetaSearch\": false,\n              \"hide\": false,\n              \"includeNullMetadata\": true,\n              \"interval\": \"\",\n              \"legendFormat\": \"overdrafted\",\n              \"range\": true,\n              \"refId\": \"G\",\n              \"useBackend\": false\n            },\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"PBFA97CFB590B2093\"\n              },\n              \"disableTextWrap\": false,\n              \"editorMode\": \"code\",\n              \"exemplar\": true,\n              \"expr\": \"rate(blobpool_add_overcapped{instance=~\\\"$instance\\\"}[1m]) * 12\",\n              \"fullMetaSearch\": false,\n              \"hide\": false,\n              \"includeNullMetadata\": true,\n              \"interval\": \"\",\n              \"legendFormat\": \"overcapped\",\n              \"range\": true,\n              \"refId\": \"H\",\n              \"useBackend\": false\n            },\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"PBFA97CFB590B2093\"\n              },\n              \"disableTextWrap\": false,\n              \"editorMode\": \"code\",\n              \"exemplar\": true,\n              \"expr\": \"rate(blobpool_add_underpriced{instance=~\\\"$instance\\\"}[1m]) * 12\",\n              \"fullMetaSearch\": false,\n              \"hide\": false,\n              \"includeNullMetadata\": true,\n              \"interval\": \"\",\n              \"legendFormat\": \"underpriced\",\n              \"range\": true,\n              \"refId\": \"J\",\n              \"useBackend\": false\n            }\n          ],\n          \"title\": \"Blobpool insertions / slot\",\n          \"type\": \"timeseries\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"description\": \"\",\n          \"fieldConfig\": {\n            \"defaults\": {\n              \"color\": {\n                \"mode\": \"palette-classic\"\n              },\n              \"custom\": {\n                \"axisBorderShow\": false,\n                \"axisCenteredZero\": false,\n                \"axisColorMode\": \"text\",\n                \"axisLabel\": \"\",\n                \"axisPlacement\": \"auto\",\n                \"barAlignment\": 0,\n                \"barWidthFactor\": 0.6,\n                \"drawStyle\": \"line\",\n                \"fillOpacity\": 10,\n                \"gradientMode\": \"none\",\n                \"hideFrom\": {\n                  \"legend\": false,\n                  \"tooltip\": false,\n                  \"viz\": false\n                },\n                \"insertNulls\": false,\n                \"lineInterpolation\": \"smooth\",\n                \"lineWidth\": 1,\n                \"pointSize\": 5,\n                \"scaleDistribution\": {\n                  \"type\": \"linear\"\n                },\n                \"showPoints\": \"never\",\n                \"spanNulls\": true,\n                \"stacking\": {\n                  \"group\": \"A\",\n                  \"mode\": \"none\"\n                },\n                \"thresholdsStyle\": {\n                  \"mode\": \"off\"\n                }\n              },\n              \"fieldMinMax\": false,\n              \"mappings\": [],\n              \"thresholds\": {\n                \"mode\": \"absolute\",\n                \"steps\": [\n                  {\n                    \"color\": \"green\",\n                    \"value\": 0\n                  },\n                  {\n                    \"color\": \"red\",\n                    \"value\": 80\n                  }\n                ]\n              }\n            },\n            \"overrides\": []\n          },\n          \"gridPos\": {\n            \"h\": 9,\n            \"w\": 12,\n            \"x\": 12,\n            \"y\": 35\n          },\n          \"id\": 158,\n          \"options\": {\n            \"legend\": {\n              \"calcs\": [\n                \"mean\",\n                \"max\",\n                \"min\"\n              ],\n              \"displayMode\": \"table\",\n              \"placement\": \"right\",\n              \"showLegend\": true\n            },\n            \"tooltip\": {\n              \"hideZeros\": false,\n              \"mode\": \"multi\",\n              \"sort\": \"none\"\n            }\n          },\n          \"pluginVersion\": \"12.2.0-16557133545\",\n          \"targets\": [\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"PBFA97CFB590B2093\"\n              },\n              \"disableTextWrap\": false,\n              \"editorMode\": \"code\",\n              \"exemplar\": true,\n              \"expr\": \"rate(blobpool_drop_invalid{instance=~\\\"$instance\\\"}[1m]) * 12\",\n              \"fullMetaSearch\": false,\n              \"hide\": false,\n              \"includeNullMetadata\": true,\n              \"interval\": \"\",\n              \"legendFormat\": \"drop invalid\",\n              \"range\": true,\n              \"refId\": \"A\",\n              \"useBackend\": false\n            },\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"PBFA97CFB590B2093\"\n              },\n              \"disableTextWrap\": false,\n              \"editorMode\": \"code\",\n              \"exemplar\": true,\n              \"expr\": \"rate(blobpool_drop_dangling{instance=~\\\"$instance\\\"}[1m]) * 12\",\n              \"fullMetaSearch\": false,\n              \"hide\": false,\n              \"includeNullMetadata\": true,\n              \"interval\": \"\",\n              \"legendFormat\": \"drop dangling\",\n              \"range\": true,\n              \"refId\": \"B\",\n              \"useBackend\": false\n            },\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"PBFA97CFB590B2093\"\n              },\n              \"disableTextWrap\": false,\n              \"editorMode\": \"code\",\n              \"exemplar\": true,\n              \"expr\": \"rate(blobpool_drop_filled{instance=~\\\"$instance\\\"}[1m]) * 12\",\n              \"fullMetaSearch\": false,\n              \"hide\": false,\n              \"includeNullMetadata\": true,\n              \"interval\": \"\",\n              \"legendFormat\": \"drop filled\",\n              \"range\": true,\n              \"refId\": \"C\",\n              \"useBackend\": false\n            },\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"PBFA97CFB590B2093\"\n              },\n              \"disableTextWrap\": false,\n              \"editorMode\": \"code\",\n              \"exemplar\": true,\n              \"expr\": \"rate(blobpool_drop_overlapped{instance=~\\\"$instance\\\"}[1m]) * 12\",\n              \"fullMetaSearch\": false,\n              \"hide\": false,\n              \"includeNullMetadata\": true,\n              \"interval\": \"\",\n              \"legendFormat\": \"drop overlapped\",\n              \"range\": true,\n              \"refId\": \"D\",\n              \"useBackend\": false\n            },\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"PBFA97CFB590B2093\"\n              },\n              \"disableTextWrap\": false,\n              \"editorMode\": \"code\",\n              \"exemplar\": true,\n              \"expr\": \"rate(blobpool_drop_repeated{instance=~\\\"$instance\\\"}[1m]) * 12\",\n              \"fullMetaSearch\": false,\n              \"hide\": false,\n              \"includeNullMetadata\": true,\n              \"interval\": \"\",\n              \"legendFormat\": \"drop repeated\",\n              \"range\": true,\n              \"refId\": \"E\",\n              \"useBackend\": false\n            },\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"PBFA97CFB590B2093\"\n              },\n              \"disableTextWrap\": false,\n              \"editorMode\": \"code\",\n              \"exemplar\": true,\n              \"expr\": \"rate(blobpool_drop_gapped{instance=~\\\"$instance\\\"}[1m]) * 12\",\n              \"fullMetaSearch\": false,\n              \"hide\": false,\n              \"includeNullMetadata\": true,\n              \"interval\": \"\",\n              \"legendFormat\": \"drop gapped\",\n              \"range\": true,\n              \"refId\": \"F\",\n              \"useBackend\": false\n            },\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"PBFA97CFB590B2093\"\n              },\n              \"disableTextWrap\": false,\n              \"editorMode\": \"code\",\n              \"exemplar\": true,\n              \"expr\": \"rate(blobpool_drop_overdrafted{instance=~\\\"$instance\\\"}[1m]) * 12\",\n              \"fullMetaSearch\": false,\n              \"hide\": false,\n              \"includeNullMetadata\": true,\n              \"interval\": \"\",\n              \"legendFormat\": \"drop overdrafted\",\n              \"range\": true,\n              \"refId\": \"G\",\n              \"useBackend\": false\n            },\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"PBFA97CFB590B2093\"\n              },\n              \"disableTextWrap\": false,\n              \"editorMode\": \"code\",\n              \"exemplar\": true,\n              \"expr\": \"rate(blobpool_drop_overcapped{instance=~\\\"$instance\\\"}[1m]) * 12\",\n              \"fullMetaSearch\": false,\n              \"hide\": false,\n              \"includeNullMetadata\": true,\n              \"interval\": \"\",\n              \"legendFormat\": \"drop overcapped\",\n              \"range\": true,\n              \"refId\": \"H\",\n              \"useBackend\": false\n            },\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"PBFA97CFB590B2093\"\n              },\n              \"disableTextWrap\": false,\n              \"editorMode\": \"code\",\n              \"exemplar\": true,\n              \"expr\": \"rate(blobpool_drop_overflown{instance=~\\\"$instance\\\"}[1m]) * 12\",\n              \"fullMetaSearch\": false,\n              \"hide\": false,\n              \"includeNullMetadata\": true,\n              \"interval\": \"\",\n              \"legendFormat\": \"drop overflown\",\n              \"range\": true,\n              \"refId\": \"I\",\n              \"useBackend\": false\n            },\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"PBFA97CFB590B2093\"\n              },\n              \"disableTextWrap\": false,\n              \"editorMode\": \"code\",\n              \"exemplar\": true,\n              \"expr\": \"rate(blobpool_drop_underpriced{instance=~\\\"$instance\\\"}[1m]) * 12\",\n              \"fullMetaSearch\": false,\n              \"hide\": false,\n              \"includeNullMetadata\": true,\n              \"interval\": \"\",\n              \"legendFormat\": \"drop underpriced\",\n              \"range\": true,\n              \"refId\": \"J\",\n              \"useBackend\": false\n            },\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"PBFA97CFB590B2093\"\n              },\n              \"disableTextWrap\": false,\n              \"editorMode\": \"code\",\n              \"exemplar\": true,\n              \"expr\": \"rate(blobpool_drop_replaced{instance=~\\\"$instance\\\"}[1m]) * 12\",\n              \"fullMetaSearch\": false,\n              \"hide\": false,\n              \"includeNullMetadata\": true,\n              \"interval\": \"\",\n              \"legendFormat\": \"drop replaced\",\n              \"range\": true,\n              \"refId\": \"K\",\n              \"useBackend\": false\n            }\n          ],\n          \"title\": \"Blobpool evictions / slot (to limbo)\",\n          \"type\": \"timeseries\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"description\": \"\",\n          \"fieldConfig\": {\n            \"defaults\": {\n              \"color\": {\n                \"mode\": \"palette-classic\"\n              },\n              \"custom\": {\n                \"axisBorderShow\": false,\n                \"axisCenteredZero\": false,\n                \"axisColorMode\": \"text\",\n                \"axisLabel\": \"\",\n                \"axisPlacement\": \"auto\",\n                \"barAlignment\": 0,\n                \"barWidthFactor\": 0.6,\n                \"drawStyle\": \"line\",\n                \"fillOpacity\": 10,\n                \"gradientMode\": \"none\",\n                \"hideFrom\": {\n                  \"legend\": false,\n                  \"tooltip\": false,\n                  \"viz\": false\n                },\n                \"insertNulls\": false,\n                \"lineInterpolation\": \"smooth\",\n                \"lineWidth\": 1,\n                \"pointSize\": 5,\n                \"scaleDistribution\": {\n                  \"type\": \"linear\"\n                },\n                \"showPoints\": \"never\",\n                \"spanNulls\": true,\n                \"stacking\": {\n                  \"group\": \"A\",\n                  \"mode\": \"none\"\n                },\n                \"thresholdsStyle\": {\n                  \"mode\": \"off\"\n                }\n              },\n              \"mappings\": [],\n              \"thresholds\": {\n                \"mode\": \"absolute\",\n                \"steps\": [\n                  {\n                    \"color\": \"green\",\n                    \"value\": 0\n                  },\n                  {\n                    \"color\": \"red\",\n                    \"value\": 80\n                  }\n                ]\n              },\n              \"unit\": \"decbytes\"\n            },\n            \"overrides\": []\n          },\n          \"gridPos\": {\n            \"h\": 7,\n            \"w\": 12,\n            \"x\": 0,\n            \"y\": 44\n          },\n          \"id\": 157,\n          \"options\": {\n            \"legend\": {\n              \"calcs\": [\n                \"mean\",\n                \"lastNotNull\",\n                \"max\",\n                \"min\"\n              ],\n              \"displayMode\": \"table\",\n              \"placement\": \"right\",\n              \"showLegend\": true\n            },\n            \"tooltip\": {\n              \"hideZeros\": false,\n              \"mode\": \"multi\",\n              \"sort\": \"none\"\n            }\n          },\n          \"pluginVersion\": \"12.2.0-16557133545\",\n          \"targets\": [\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"PBFA97CFB590B2093\"\n              },\n              \"disableTextWrap\": false,\n              \"editorMode\": \"builder\",\n              \"exemplar\": true,\n              \"expr\": \"rate(blobpool_datareal{instance=~\\\"$instance\\\"}[1m])\",\n              \"fullMetaSearch\": false,\n              \"hide\": false,\n              \"includeNullMetadata\": true,\n              \"interval\": \"\",\n              \"legendFormat\": \"blobpool data\",\n              \"range\": true,\n              \"refId\": \"A\",\n              \"useBackend\": false\n            },\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"PBFA97CFB590B2093\"\n              },\n              \"disableTextWrap\": false,\n              \"editorMode\": \"builder\",\n              \"exemplar\": true,\n              \"expr\": \"rate(blobpool_limbo_datareal{instance=~\\\"$instance\\\"}[1m])\",\n              \"fullMetaSearch\": false,\n              \"hide\": false,\n              \"includeNullMetadata\": true,\n              \"interval\": \"\",\n              \"legendFormat\": \"limbo data\",\n              \"range\": true,\n              \"refId\": \"B\",\n              \"useBackend\": false\n            }\n          ],\n          \"title\": \"Blobpool data\",\n          \"type\": \"timeseries\"\n        }\n      ],\n      \"title\": \"Blobpool\",\n      \"type\": \"row\"\n    },\n    {\n      \"collapsed\": true,\n      \"gridPos\": {\n        \"h\": 1,\n        \"w\": 24,\n        \"x\": 0,\n        \"y\": 27\n      },\n      \"id\": 136,\n      \"panels\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"description\": \"Measured in #peers per second\",\n          \"fieldConfig\": {\n            \"defaults\": {\n              \"color\": {\n                \"mode\": \"thresholds\"\n              },\n              \"mappings\": [],\n              \"thresholds\": {\n                \"mode\": \"absolute\",\n                \"steps\": [\n                  {\n                    \"color\": \"green\",\n                    \"value\": 0\n                  },\n                  {\n                    \"color\": \"#EAB839\",\n                    \"value\": 30\n                  },\n                  {\n                    \"color\": \"#6ED0E0\",\n                    \"value\": 50\n                  }\n                ]\n              },\n              \"unit\": \"cps\"\n            },\n            \"overrides\": [\n              {\n                \"matcher\": {\n                  \"id\": \"byRegexp\",\n                  \"options\": \".*(timeout|drop)\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"unit\",\n                    \"value\": \"short\"\n                  }\n                ]\n              }\n            ]\n          },\n          \"gridPos\": {\n            \"h\": 6,\n            \"w\": 6,\n            \"x\": 0,\n            \"y\": 75\n          },\n          \"id\": 129,\n          \"options\": {\n            \"colorMode\": \"value\",\n            \"graphMode\": \"area\",\n            \"justifyMode\": \"auto\",\n            \"orientation\": \"auto\",\n            \"percentChangeColorMode\": \"standard\",\n            \"reduceOptions\": {\n              \"calcs\": [\n                \"lastNotNull\"\n              ],\n              \"fields\": \"\",\n              \"values\": false\n            },\n            \"showPercentChange\": false,\n            \"textMode\": \"auto\",\n            \"wideLayout\": true\n          },\n          \"pluginVersion\": \"12.2.0-16557133545\",\n          \"targets\": [\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"PBFA97CFB590B2093\"\n              },\n              \"exemplar\": true,\n              \"expr\": \"rate(eth_downloader_throttle{instance=~\\\"$instance\\\"}[1m])\",\n              \"format\": \"time_series\",\n              \"hide\": false,\n              \"interval\": \"\",\n              \"intervalFactor\": 1,\n              \"legendFormat\": \"\",\n              \"refId\": \"B\"\n            }\n          ],\n          \"title\": \"Throttle\",\n          \"type\": \"stat\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"description\": \"Measured in blocks per second\",\n          \"fieldConfig\": {\n            \"defaults\": {\n              \"color\": {\n                \"mode\": \"palette-classic\"\n              },\n              \"custom\": {\n                \"axisBorderShow\": false,\n                \"axisCenteredZero\": false,\n                \"axisColorMode\": \"text\",\n                \"axisLabel\": \"\",\n                \"axisPlacement\": \"auto\",\n                \"barAlignment\": 0,\n                \"barWidthFactor\": 0.6,\n                \"drawStyle\": \"line\",\n                \"fillOpacity\": 10,\n                \"gradientMode\": \"none\",\n                \"hideFrom\": {\n                  \"legend\": false,\n                  \"tooltip\": false,\n                  \"viz\": false\n                },\n                \"insertNulls\": false,\n                \"lineInterpolation\": \"smooth\",\n                \"lineWidth\": 1,\n                \"pointSize\": 5,\n                \"scaleDistribution\": {\n                  \"type\": \"linear\"\n                },\n                \"showPoints\": \"never\",\n                \"spanNulls\": true,\n                \"stacking\": {\n                  \"group\": \"A\",\n                  \"mode\": \"none\"\n                },\n                \"thresholdsStyle\": {\n                  \"mode\": \"off\"\n                }\n              },\n              \"mappings\": [],\n              \"thresholds\": {\n                \"mode\": \"absolute\",\n                \"steps\": [\n                  {\n                    \"color\": \"green\",\n                    \"value\": 0\n                  },\n                  {\n                    \"color\": \"red\",\n                    \"value\": 80\n                  }\n                ]\n              },\n              \"unit\": \"reqps\"\n            },\n            \"overrides\": [\n              {\n                \"matcher\": {\n                  \"id\": \"byRegexp\",\n                  \"options\": \".*(timeout|drop)\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"custom.axisPlacement\",\n                    \"value\": \"right\"\n                  },\n                  {\n                    \"id\": \"custom.axisSoftMax\",\n                    \"value\": 100\n                  },\n                  {\n                    \"id\": \"unit\",\n                    \"value\": \"short\"\n                  }\n                ]\n              }\n            ]\n          },\n          \"gridPos\": {\n            \"h\": 6,\n            \"w\": 12,\n            \"x\": 12,\n            \"y\": 75\n          },\n          \"id\": 144,\n          \"options\": {\n            \"legend\": {\n              \"calcs\": [\n                \"mean\",\n                \"lastNotNull\",\n                \"max\",\n                \"min\"\n              ],\n              \"displayMode\": \"table\",\n              \"placement\": \"right\",\n              \"showLegend\": true\n            },\n            \"tooltip\": {\n              \"hideZeros\": false,\n              \"mode\": \"multi\",\n              \"sort\": \"none\"\n            }\n          },\n          \"pluginVersion\": \"12.2.0-16557133545\",\n          \"targets\": [\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"PBFA97CFB590B2093\"\n              },\n              \"exemplar\": true,\n              \"expr\": \"eth_downloader_throttle{instance=~\\\"$instance\\\"}\",\n              \"format\": \"time_series\",\n              \"hide\": true,\n              \"interval\": \"\",\n              \"intervalFactor\": 1,\n              \"legendFormat\": \"throttle peers\",\n              \"refId\": \"B\"\n            },\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"PBFA97CFB590B2093\"\n              },\n              \"exemplar\": true,\n              \"expr\": \"rate(eth_downloader_bodies_in{instance=~\\\"$instance\\\"}[1m])\",\n              \"hide\": false,\n              \"interval\": \"\",\n              \"legendFormat\": \"bodies in\",\n              \"refId\": \"A\"\n            },\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"PBFA97CFB590B2093\"\n              },\n              \"exemplar\": true,\n              \"expr\": \"rate(eth_downloader_headers_in{instance=~\\\"$instance\\\"}[1m])\",\n              \"hide\": false,\n              \"interval\": \"\",\n              \"legendFormat\": \"headers in\",\n              \"refId\": \"C\"\n            },\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"PBFA97CFB590B2093\"\n              },\n              \"exemplar\": true,\n              \"expr\": \"rate(eth_downloader_receipts_in{instance=~\\\"$instance\\\"}[1m])\",\n              \"hide\": false,\n              \"interval\": \"\",\n              \"legendFormat\": \"receipts in\",\n              \"refId\": \"D\"\n            },\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"PBFA97CFB590B2093\"\n              },\n              \"exemplar\": true,\n              \"expr\": \"eth_downloader_bodies_drop{instance=~\\\"$instance\\\"}\",\n              \"hide\": true,\n              \"interval\": \"\",\n              \"legendFormat\": \"bodies drop\",\n              \"refId\": \"E\"\n            },\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"PBFA97CFB590B2093\"\n              },\n              \"exemplar\": true,\n              \"expr\": \"eth_downloader_headers_drop{instance=~\\\"$instance\\\"}\",\n              \"hide\": true,\n              \"interval\": \"\",\n              \"legendFormat\": \"headers drop\",\n              \"refId\": \"F\"\n            },\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"PBFA97CFB590B2093\"\n              },\n              \"exemplar\": true,\n              \"expr\": \"eth_downloader_receipts_drop{instance=~\\\"$instance\\\"}\",\n              \"hide\": true,\n              \"interval\": \"\",\n              \"legendFormat\": \"receipts drop\",\n              \"refId\": \"G\"\n            },\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"PBFA97CFB590B2093\"\n              },\n              \"exemplar\": true,\n              \"expr\": \"eth_downloader_bodies_timeout{instance=~\\\"$instance\\\"}\",\n              \"hide\": true,\n              \"interval\": \"\",\n              \"legendFormat\": \"bodies timeout\",\n              \"refId\": \"H\"\n            },\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"PBFA97CFB590B2093\"\n              },\n              \"exemplar\": true,\n              \"expr\": \"eth_downloader_headers_timeout{instance=~\\\"$instance\\\"}\",\n              \"hide\": true,\n              \"interval\": \"\",\n              \"legendFormat\": \"headers timeout\",\n              \"refId\": \"I\"\n            },\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"PBFA97CFB590B2093\"\n              },\n              \"exemplar\": true,\n              \"expr\": \"eth_downloader_receipts_timeout{instance=~\\\"$instance\\\"}\",\n              \"hide\": true,\n              \"interval\": \"\",\n              \"legendFormat\": \"receipts timeout\",\n              \"refId\": \"J\"\n            }\n          ],\n          \"title\": \"QPS\",\n          \"type\": \"timeseries\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"description\": \"Measured in blocks per second\",\n          \"fieldConfig\": {\n            \"defaults\": {\n              \"color\": {\n                \"mode\": \"palette-classic\"\n              },\n              \"custom\": {\n                \"axisBorderShow\": false,\n                \"axisCenteredZero\": false,\n                \"axisColorMode\": \"text\",\n                \"axisLabel\": \"\",\n                \"axisPlacement\": \"auto\",\n                \"barAlignment\": 0,\n                \"barWidthFactor\": 0.6,\n                \"drawStyle\": \"line\",\n                \"fillOpacity\": 10,\n                \"gradientMode\": \"none\",\n                \"hideFrom\": {\n                  \"legend\": false,\n                  \"tooltip\": false,\n                  \"viz\": false\n                },\n                \"insertNulls\": false,\n                \"lineInterpolation\": \"smooth\",\n                \"lineWidth\": 1,\n                \"pointSize\": 5,\n                \"scaleDistribution\": {\n                  \"type\": \"linear\"\n                },\n                \"showPoints\": \"never\",\n                \"spanNulls\": true,\n                \"stacking\": {\n                  \"group\": \"A\",\n                  \"mode\": \"none\"\n                },\n                \"thresholdsStyle\": {\n                  \"mode\": \"off\"\n                }\n              },\n              \"mappings\": [],\n              \"thresholds\": {\n                \"mode\": \"absolute\",\n                \"steps\": [\n                  {\n                    \"color\": \"green\",\n                    \"value\": 0\n                  },\n                  {\n                    \"color\": \"red\",\n                    \"value\": 80\n                  }\n                ]\n              },\n              \"unit\": \"reqps\"\n            },\n            \"overrides\": []\n          },\n          \"gridPos\": {\n            \"h\": 6,\n            \"w\": 12,\n            \"x\": 0,\n            \"y\": 81\n          },\n          \"id\": 145,\n          \"options\": {\n            \"legend\": {\n              \"calcs\": [\n                \"mean\",\n                \"lastNotNull\",\n                \"max\",\n                \"min\"\n              ],\n              \"displayMode\": \"table\",\n              \"placement\": \"right\",\n              \"showLegend\": true\n            },\n            \"tooltip\": {\n              \"hideZeros\": false,\n              \"mode\": \"multi\",\n              \"sort\": \"none\"\n            }\n          },\n          \"pluginVersion\": \"12.2.0-16557133545\",\n          \"targets\": [\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"PBFA97CFB590B2093\"\n              },\n              \"exemplar\": true,\n              \"expr\": \"eth_downloader_throttle{instance=~\\\"$instance\\\"}\",\n              \"format\": \"time_series\",\n              \"hide\": true,\n              \"interval\": \"\",\n              \"intervalFactor\": 1,\n              \"legendFormat\": \"throttle peers\",\n              \"refId\": \"B\"\n            },\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"PBFA97CFB590B2093\"\n              },\n              \"exemplar\": true,\n              \"expr\": \"rate(eth_downloader_bodies_in{instance=~\\\"$instance\\\"}[1m])\",\n              \"hide\": true,\n              \"interval\": \"\",\n              \"legendFormat\": \"bodies in\",\n              \"refId\": \"A\"\n            },\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"PBFA97CFB590B2093\"\n              },\n              \"exemplar\": true,\n              \"expr\": \"rate(eth_downloader_headers_in{instance=~\\\"$instance\\\"}[1m])\",\n              \"hide\": true,\n              \"interval\": \"\",\n              \"legendFormat\": \"headers in\",\n              \"refId\": \"C\"\n            },\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"PBFA97CFB590B2093\"\n              },\n              \"exemplar\": true,\n              \"expr\": \"rate(eth_downloader_receipts_in{instance=~\\\"$instance\\\"}[1m])\",\n              \"hide\": true,\n              \"interval\": \"\",\n              \"legendFormat\": \"receipts in\",\n              \"refId\": \"D\"\n            },\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"PBFA97CFB590B2093\"\n              },\n              \"exemplar\": true,\n              \"expr\": \"eth_downloader_bodies_drop{instance=~\\\"$instance\\\"}\",\n              \"hide\": false,\n              \"interval\": \"\",\n              \"legendFormat\": \"bodies drop\",\n              \"refId\": \"E\"\n            },\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"PBFA97CFB590B2093\"\n              },\n              \"exemplar\": true,\n              \"expr\": \"eth_downloader_headers_drop{instance=~\\\"$instance\\\"}\",\n              \"hide\": false,\n              \"interval\": \"\",\n              \"legendFormat\": \"headers drop\",\n              \"refId\": \"F\"\n            },\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"PBFA97CFB590B2093\"\n              },\n              \"exemplar\": true,\n              \"expr\": \"eth_downloader_receipts_drop{instance=~\\\"$instance\\\"}\",\n              \"hide\": false,\n              \"interval\": \"\",\n              \"legendFormat\": \"receipts drop\",\n              \"refId\": \"G\"\n            },\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"PBFA97CFB590B2093\"\n              },\n              \"exemplar\": true,\n              \"expr\": \"eth_downloader_bodies_timeout{instance=~\\\"$instance\\\"}\",\n              \"hide\": false,\n              \"interval\": \"\",\n              \"legendFormat\": \"bodies timeout\",\n              \"refId\": \"H\"\n            },\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"PBFA97CFB590B2093\"\n              },\n              \"exemplar\": true,\n              \"expr\": \"eth_downloader_headers_timeout{instance=~\\\"$instance\\\"}\",\n              \"hide\": false,\n              \"interval\": \"\",\n              \"legendFormat\": \"headers timeout\",\n              \"refId\": \"I\"\n            },\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"PBFA97CFB590B2093\"\n              },\n              \"exemplar\": true,\n              \"expr\": \"eth_downloader_receipts_timeout{instance=~\\\"$instance\\\"}\",\n              \"hide\": false,\n              \"interval\": \"\",\n              \"legendFormat\": \"receipts timeout\",\n              \"refId\": \"J\"\n            }\n          ],\n          \"title\": \"Abnormal QPS\",\n          \"type\": \"timeseries\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"fieldConfig\": {\n            \"defaults\": {\n              \"color\": {\n                \"mode\": \"palette-classic\"\n              },\n              \"custom\": {\n                \"axisBorderShow\": false,\n                \"axisCenteredZero\": false,\n                \"axisColorMode\": \"text\",\n                \"axisLabel\": \"\",\n                \"axisPlacement\": \"auto\",\n                \"barAlignment\": 0,\n                \"barWidthFactor\": 0.6,\n                \"drawStyle\": \"line\",\n                \"fillOpacity\": 10,\n                \"gradientMode\": \"none\",\n                \"hideFrom\": {\n                  \"legend\": false,\n                  \"tooltip\": false,\n                  \"viz\": false\n                },\n                \"insertNulls\": false,\n                \"lineInterpolation\": \"smooth\",\n                \"lineWidth\": 1,\n                \"pointSize\": 5,\n                \"scaleDistribution\": {\n                  \"type\": \"linear\"\n                },\n                \"showPoints\": \"never\",\n                \"spanNulls\": true,\n                \"stacking\": {\n                  \"group\": \"A\",\n                  \"mode\": \"none\"\n                },\n                \"thresholdsStyle\": {\n                  \"mode\": \"off\"\n                }\n              },\n              \"mappings\": [],\n              \"thresholds\": {\n                \"mode\": \"absolute\",\n                \"steps\": [\n                  {\n                    \"color\": \"green\",\n                    \"value\": 0\n                  },\n                  {\n                    \"color\": \"red\",\n                    \"value\": 80\n                  }\n                ]\n              },\n              \"unit\": \"ns\"\n            },\n            \"overrides\": []\n          },\n          \"gridPos\": {\n            \"h\": 6,\n            \"w\": 12,\n            \"x\": 12,\n            \"y\": 81\n          },\n          \"id\": 130,\n          \"options\": {\n            \"legend\": {\n              \"calcs\": [\n                \"mean\",\n                \"lastNotNull\",\n                \"max\",\n                \"min\"\n              ],\n              \"displayMode\": \"table\",\n              \"placement\": \"right\",\n              \"showLegend\": true\n            },\n            \"tooltip\": {\n              \"hideZeros\": false,\n              \"mode\": \"multi\",\n              \"sort\": \"none\"\n            }\n          },\n          \"pluginVersion\": \"12.2.0-16557133545\",\n          \"targets\": [\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"PBFA97CFB590B2093\"\n              },\n              \"exemplar\": true,\n              \"expr\": \"rate(eth_downloader_bodies_req{instance=~\\\"$instance\\\", quantile=\\\"$quantile\\\"}[1m])\",\n              \"hide\": false,\n              \"interval\": \"\",\n              \"legendFormat\": \"bodies(q={{quantile}})\",\n              \"refId\": \"A\"\n            },\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"PBFA97CFB590B2093\"\n              },\n              \"exemplar\": true,\n              \"expr\": \"rate(eth_downloader_headers_req{instance=~\\\"$instance\\\", quantile=\\\"$quantile\\\"}[1m])\",\n              \"hide\": false,\n              \"interval\": \"\",\n              \"legendFormat\": \"headers(q={{quantile}})\",\n              \"refId\": \"C\"\n            },\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"PBFA97CFB590B2093\"\n              },\n              \"exemplar\": true,\n              \"expr\": \"rate(eth_downloader_receipts_req{instance=~\\\"$instance\\\", quantile=\\\"$quantile\\\"}[1m])\",\n              \"hide\": false,\n              \"interval\": \"\",\n              \"legendFormat\": \"receipts(q={{quantile}})\",\n              \"refId\": \"D\"\n            }\n          ],\n          \"title\": \"Latency\",\n          \"type\": \"timeseries\"\n        }\n      ],\n      \"title\": \"Downloader\",\n      \"type\": \"row\"\n    },\n    {\n      \"collapsed\": true,\n      \"gridPos\": {\n        \"h\": 1,\n        \"w\": 24,\n        \"x\": 0,\n        \"y\": 28\n      },\n      \"id\": 134,\n      \"panels\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"fieldConfig\": {\n            \"defaults\": {\n              \"color\": {\n                \"mode\": \"thresholds\"\n              },\n              \"mappings\": [],\n              \"thresholds\": {\n                \"mode\": \"absolute\",\n                \"steps\": [\n                  {\n                    \"color\": \"green\",\n                    \"value\": 0\n                  },\n                  {\n                    \"color\": \"red\",\n                    \"value\": 80\n                  }\n                ]\n              }\n            },\n            \"overrides\": []\n          },\n          \"gridPos\": {\n            \"h\": 4,\n            \"w\": 2,\n            \"x\": 0,\n            \"y\": 76\n          },\n          \"id\": 138,\n          \"options\": {\n            \"colorMode\": \"value\",\n            \"graphMode\": \"none\",\n            \"justifyMode\": \"auto\",\n            \"orientation\": \"auto\",\n            \"percentChangeColorMode\": \"standard\",\n            \"reduceOptions\": {\n              \"calcs\": [\n                \"lastNotNull\"\n              ],\n              \"fields\": \"\",\n              \"values\": false\n            },\n            \"showPercentChange\": false,\n            \"textMode\": \"auto\",\n            \"wideLayout\": true\n          },\n          \"pluginVersion\": \"12.2.0-16557133545\",\n          \"targets\": [\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"PBFA97CFB590B2093\"\n              },\n              \"exemplar\": true,\n              \"expr\": \"eth_fetcher_transaction_waiting_peers{instance=~\\\"$instance\\\"}\",\n              \"interval\": \"\",\n              \"legendFormat\": \"\",\n              \"refId\": \"A\"\n            }\n          ],\n          \"title\": \"Waiting Peers\",\n          \"type\": \"stat\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"fieldConfig\": {\n            \"defaults\": {\n              \"color\": {\n                \"mode\": \"thresholds\"\n              },\n              \"mappings\": [],\n              \"thresholds\": {\n                \"mode\": \"absolute\",\n                \"steps\": [\n                  {\n                    \"color\": \"green\",\n                    \"value\": 0\n                  },\n                  {\n                    \"color\": \"red\",\n                    \"value\": 80\n                  }\n                ]\n              }\n            },\n            \"overrides\": []\n          },\n          \"gridPos\": {\n            \"h\": 4,\n            \"w\": 2,\n            \"x\": 2,\n            \"y\": 76\n          },\n          \"id\": 141,\n          \"options\": {\n            \"colorMode\": \"value\",\n            \"graphMode\": \"none\",\n            \"justifyMode\": \"auto\",\n            \"orientation\": \"auto\",\n            \"percentChangeColorMode\": \"standard\",\n            \"reduceOptions\": {\n              \"calcs\": [\n                \"lastNotNull\"\n              ],\n              \"fields\": \"\",\n              \"values\": false\n            },\n            \"showPercentChange\": false,\n            \"textMode\": \"auto\",\n            \"wideLayout\": true\n          },\n          \"pluginVersion\": \"12.2.0-16557133545\",\n          \"targets\": [\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"PBFA97CFB590B2093\"\n              },\n              \"exemplar\": true,\n              \"expr\": \"eth_fetcher_transaction_waiting_hashes{instance=~\\\"$instance\\\"}\",\n              \"interval\": \"\",\n              \"legendFormat\": \"\",\n              \"refId\": \"A\"\n            }\n          ],\n          \"title\": \"Waiting Hashes\",\n          \"type\": \"stat\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"fieldConfig\": {\n            \"defaults\": {\n              \"color\": {\n                \"mode\": \"thresholds\"\n              },\n              \"mappings\": [],\n              \"thresholds\": {\n                \"mode\": \"absolute\",\n                \"steps\": [\n                  {\n                    \"color\": \"green\",\n                    \"value\": 0\n                  },\n                  {\n                    \"color\": \"red\",\n                    \"value\": 80\n                  }\n                ]\n              }\n            },\n            \"overrides\": []\n          },\n          \"gridPos\": {\n            \"h\": 4,\n            \"w\": 2,\n            \"x\": 4,\n            \"y\": 76\n          },\n          \"id\": 140,\n          \"options\": {\n            \"colorMode\": \"value\",\n            \"graphMode\": \"none\",\n            \"justifyMode\": \"auto\",\n            \"orientation\": \"auto\",\n            \"percentChangeColorMode\": \"standard\",\n            \"reduceOptions\": {\n              \"calcs\": [\n                \"lastNotNull\"\n              ],\n              \"fields\": \"\",\n              \"values\": false\n            },\n            \"showPercentChange\": false,\n            \"textMode\": \"auto\",\n            \"wideLayout\": true\n          },\n          \"pluginVersion\": \"12.2.0-16557133545\",\n          \"targets\": [\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"PBFA97CFB590B2093\"\n              },\n              \"exemplar\": true,\n              \"expr\": \"eth_fetcher_transaction_queueing_peers{instance=~\\\"$instance\\\"}\",\n              \"interval\": \"\",\n              \"legendFormat\": \"\",\n              \"refId\": \"A\"\n            }\n          ],\n          \"title\": \"Queueing Peers\",\n          \"type\": \"stat\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"fieldConfig\": {\n            \"defaults\": {\n              \"color\": {\n                \"mode\": \"thresholds\"\n              },\n              \"mappings\": [],\n              \"thresholds\": {\n                \"mode\": \"absolute\",\n                \"steps\": [\n                  {\n                    \"color\": \"green\",\n                    \"value\": 0\n                  }\n                ]\n              }\n            },\n            \"overrides\": []\n          },\n          \"gridPos\": {\n            \"h\": 4,\n            \"w\": 2,\n            \"x\": 6,\n            \"y\": 76\n          },\n          \"id\": 139,\n          \"options\": {\n            \"colorMode\": \"value\",\n            \"graphMode\": \"none\",\n            \"justifyMode\": \"auto\",\n            \"orientation\": \"auto\",\n            \"percentChangeColorMode\": \"standard\",\n            \"reduceOptions\": {\n              \"calcs\": [\n                \"lastNotNull\"\n              ],\n              \"fields\": \"\",\n              \"values\": false\n            },\n            \"showPercentChange\": false,\n            \"textMode\": \"auto\",\n            \"wideLayout\": true\n          },\n          \"pluginVersion\": \"12.2.0-16557133545\",\n          \"targets\": [\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"PBFA97CFB590B2093\"\n              },\n              \"exemplar\": true,\n              \"expr\": \"eth_fetcher_transaction_queueing_hashes{instance=~\\\"$instance\\\"}\",\n              \"interval\": \"\",\n              \"legendFormat\": \"\",\n              \"refId\": \"A\"\n            }\n          ],\n          \"title\": \"Queueing Hashes\",\n          \"type\": \"stat\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"fieldConfig\": {\n            \"defaults\": {\n              \"color\": {\n                \"mode\": \"thresholds\"\n              },\n              \"mappings\": [],\n              \"thresholds\": {\n                \"mode\": \"absolute\",\n                \"steps\": [\n                  {\n                    \"color\": \"green\",\n                    \"value\": 0\n                  },\n                  {\n                    \"color\": \"red\",\n                    \"value\": 80\n                  }\n                ]\n              }\n            },\n            \"overrides\": []\n          },\n          \"gridPos\": {\n            \"h\": 4,\n            \"w\": 2,\n            \"x\": 8,\n            \"y\": 76\n          },\n          \"id\": 142,\n          \"options\": {\n            \"colorMode\": \"value\",\n            \"graphMode\": \"none\",\n            \"justifyMode\": \"auto\",\n            \"orientation\": \"auto\",\n            \"percentChangeColorMode\": \"standard\",\n            \"reduceOptions\": {\n              \"calcs\": [\n                \"lastNotNull\"\n              ],\n              \"fields\": \"\",\n              \"values\": false\n            },\n            \"showPercentChange\": false,\n            \"textMode\": \"auto\",\n            \"wideLayout\": true\n          },\n          \"pluginVersion\": \"12.2.0-16557133545\",\n          \"targets\": [\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"PBFA97CFB590B2093\"\n              },\n              \"exemplar\": true,\n              \"expr\": \"eth_fetcher_transaction_fetching_peers{instance=~\\\"$instance\\\"}\",\n              \"interval\": \"\",\n              \"legendFormat\": \"\",\n              \"refId\": \"A\"\n            }\n          ],\n          \"title\": \"Fetching Peers\",\n          \"type\": \"stat\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"fieldConfig\": {\n            \"defaults\": {\n              \"color\": {\n                \"mode\": \"thresholds\"\n              },\n              \"mappings\": [],\n              \"thresholds\": {\n                \"mode\": \"absolute\",\n                \"steps\": [\n                  {\n                    \"color\": \"green\",\n                    \"value\": 0\n                  }\n                ]\n              }\n            },\n            \"overrides\": []\n          },\n          \"gridPos\": {\n            \"h\": 4,\n            \"w\": 2,\n            \"x\": 10,\n            \"y\": 76\n          },\n          \"id\": 143,\n          \"options\": {\n            \"colorMode\": \"value\",\n            \"graphMode\": \"none\",\n            \"justifyMode\": \"auto\",\n            \"orientation\": \"auto\",\n            \"percentChangeColorMode\": \"standard\",\n            \"reduceOptions\": {\n              \"calcs\": [\n                \"lastNotNull\"\n              ],\n              \"fields\": \"\",\n              \"values\": false\n            },\n            \"showPercentChange\": false,\n            \"textMode\": \"auto\",\n            \"wideLayout\": true\n          },\n          \"pluginVersion\": \"12.2.0-16557133545\",\n          \"targets\": [\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"PBFA97CFB590B2093\"\n              },\n              \"exemplar\": true,\n              \"expr\": \"eth_fetcher_transaction_fetching_hashes{instance=~\\\"$instance\\\"}\",\n              \"interval\": \"\",\n              \"legendFormat\": \"\",\n              \"refId\": \"A\"\n            }\n          ],\n          \"title\": \"Fetching Hashes\",\n          \"type\": \"stat\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"description\": \"Measured in blocks per second\",\n          \"fieldConfig\": {\n            \"defaults\": {\n              \"color\": {\n                \"mode\": \"palette-classic\"\n              },\n              \"custom\": {\n                \"axisBorderShow\": false,\n                \"axisCenteredZero\": false,\n                \"axisColorMode\": \"text\",\n                \"axisLabel\": \"\",\n                \"axisPlacement\": \"auto\",\n                \"barAlignment\": 0,\n                \"barWidthFactor\": 0.6,\n                \"drawStyle\": \"line\",\n                \"fillOpacity\": 10,\n                \"gradientMode\": \"none\",\n                \"hideFrom\": {\n                  \"legend\": false,\n                  \"tooltip\": false,\n                  \"viz\": false\n                },\n                \"insertNulls\": false,\n                \"lineInterpolation\": \"smooth\",\n                \"lineWidth\": 1,\n                \"pointSize\": 5,\n                \"scaleDistribution\": {\n                  \"type\": \"linear\"\n                },\n                \"showPoints\": \"never\",\n                \"spanNulls\": true,\n                \"stacking\": {\n                  \"group\": \"A\",\n                  \"mode\": \"none\"\n                },\n                \"thresholdsStyle\": {\n                  \"mode\": \"off\"\n                }\n              },\n              \"mappings\": [],\n              \"thresholds\": {\n                \"mode\": \"absolute\",\n                \"steps\": [\n                  {\n                    \"color\": \"green\",\n                    \"value\": 0\n                  },\n                  {\n                    \"color\": \"red\",\n                    \"value\": 80\n                  }\n                ]\n              },\n              \"unit\": \"reqps\"\n            },\n            \"overrides\": []\n          },\n          \"gridPos\": {\n            \"h\": 12,\n            \"w\": 12,\n            \"x\": 12,\n            \"y\": 76\n          },\n          \"id\": 132,\n          \"options\": {\n            \"legend\": {\n              \"calcs\": [\n                \"mean\",\n                \"lastNotNull\",\n                \"max\",\n                \"min\"\n              ],\n              \"displayMode\": \"table\",\n              \"placement\": \"right\",\n              \"showLegend\": true\n            },\n            \"tooltip\": {\n              \"hideZeros\": false,\n              \"mode\": \"multi\",\n              \"sort\": \"none\"\n            }\n          },\n          \"pluginVersion\": \"12.2.0-16557133545\",\n          \"targets\": [\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"PBFA97CFB590B2093\"\n              },\n              \"exemplar\": true,\n              \"expr\": \"rate(eth_fetcher_transaction_request_out{instance=~\\\"$instance\\\"}[1m])\",\n              \"hide\": false,\n              \"interval\": \"\",\n              \"legendFormat\": \"request out\",\n              \"refId\": \"A\"\n            },\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"PBFA97CFB590B2093\"\n              },\n              \"exemplar\": true,\n              \"expr\": \"rate(eth_fetcher_transaction_request_fail{instance=~\\\"$instance\\\"}[1m])\",\n              \"hide\": false,\n              \"interval\": \"\",\n              \"legendFormat\": \"request fail\",\n              \"refId\": \"B\"\n            },\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"PBFA97CFB590B2093\"\n              },\n              \"exemplar\": true,\n              \"expr\": \"rate(eth_fetcher_transaction_request_done{instance=~\\\"$instance\\\"}[1m])\",\n              \"hide\": false,\n              \"interval\": \"\",\n              \"legendFormat\": \"request done\",\n              \"refId\": \"C\"\n            },\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"PBFA97CFB590B2093\"\n              },\n              \"exemplar\": true,\n              \"expr\": \"rate(eth_fetcher_transaction_request_timeout{instance=~\\\"$instance\\\"}[1m])\",\n              \"hide\": false,\n              \"interval\": \"\",\n              \"legendFormat\": \"request timeout\",\n              \"refId\": \"D\"\n            },\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"PBFA97CFB590B2093\"\n              },\n              \"exemplar\": true,\n              \"expr\": \"rate(eth_fetcher_transaction_replies_in{instance=~\\\"$instance\\\"}[1m])\",\n              \"hide\": false,\n              \"interval\": \"\",\n              \"legendFormat\": \"replies in\",\n              \"refId\": \"E\"\n            },\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"PBFA97CFB590B2093\"\n              },\n              \"exemplar\": true,\n              \"expr\": \"rate(eth_fetcher_transaction_replies_known{instance=~\\\"$instance\\\"}[1m])\",\n              \"hide\": false,\n              \"interval\": \"\",\n              \"legendFormat\": \"replies known\",\n              \"refId\": \"F\"\n            },\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"PBFA97CFB590B2093\"\n              },\n              \"exemplar\": true,\n              \"expr\": \"rate(eth_fetcher_transaction_replies_underpriced{instance=~\\\"$instance\\\"}[1m])\",\n              \"hide\": false,\n              \"interval\": \"\",\n              \"legendFormat\": \"replies underpriced\",\n              \"refId\": \"G\"\n            },\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"PBFA97CFB590B2093\"\n              },\n              \"exemplar\": true,\n              \"expr\": \"rate(eth_fetcher_transaction_replies_otherreject{instance=~\\\"$instance\\\"}[1m])\",\n              \"hide\": false,\n              \"interval\": \"\",\n              \"legendFormat\": \"replies otherreject\",\n              \"refId\": \"H\"\n            }\n          ],\n          \"title\": \"QPS of Transaction\",\n          \"type\": \"timeseries\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"description\": \"Measured in blocks per second\",\n          \"fieldConfig\": {\n            \"defaults\": {\n              \"color\": {\n                \"mode\": \"palette-classic\"\n              },\n              \"custom\": {\n                \"axisBorderShow\": false,\n                \"axisCenteredZero\": false,\n                \"axisColorMode\": \"text\",\n                \"axisLabel\": \"\",\n                \"axisPlacement\": \"auto\",\n                \"barAlignment\": 0,\n                \"barWidthFactor\": 0.6,\n                \"drawStyle\": \"line\",\n                \"fillOpacity\": 10,\n                \"gradientMode\": \"none\",\n                \"hideFrom\": {\n                  \"legend\": false,\n                  \"tooltip\": false,\n                  \"viz\": false\n                },\n                \"insertNulls\": false,\n                \"lineInterpolation\": \"smooth\",\n                \"lineWidth\": 1,\n                \"pointSize\": 5,\n                \"scaleDistribution\": {\n                  \"type\": \"linear\"\n                },\n                \"showPoints\": \"never\",\n                \"spanNulls\": true,\n                \"stacking\": {\n                  \"group\": \"A\",\n                  \"mode\": \"none\"\n                },\n                \"thresholdsStyle\": {\n                  \"mode\": \"off\"\n                }\n              },\n              \"mappings\": [],\n              \"thresholds\": {\n                \"mode\": \"absolute\",\n                \"steps\": [\n                  {\n                    \"color\": \"green\",\n                    \"value\": 0\n                  },\n                  {\n                    \"color\": \"red\",\n                    \"value\": 80\n                  }\n                ]\n              },\n              \"unit\": \"reqps\"\n            },\n            \"overrides\": [\n              {\n                \"matcher\": {\n                  \"id\": \"byRegexp\",\n                  \"options\": \".*(timeout|drop)\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"custom.axisPlacement\",\n                    \"value\": \"right\"\n                  },\n                  {\n                    \"id\": \"custom.axisSoftMax\",\n                    \"value\": 100\n                  },\n                  {\n                    \"id\": \"unit\",\n                    \"value\": \"short\"\n                  }\n                ]\n              }\n            ]\n          },\n          \"gridPos\": {\n            \"h\": 8,\n            \"w\": 12,\n            \"x\": 0,\n            \"y\": 80\n          },\n          \"id\": 131,\n          \"options\": {\n            \"legend\": {\n              \"calcs\": [\n                \"mean\",\n                \"lastNotNull\",\n                \"max\",\n                \"min\"\n              ],\n              \"displayMode\": \"table\",\n              \"placement\": \"right\",\n              \"showLegend\": true\n            },\n            \"tooltip\": {\n              \"hideZeros\": false,\n              \"mode\": \"multi\",\n              \"sort\": \"none\"\n            }\n          },\n          \"pluginVersion\": \"12.2.0-16557133545\",\n          \"targets\": [\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"PBFA97CFB590B2093\"\n              },\n              \"exemplar\": true,\n              \"expr\": \"rate(eth_fetcher_block_bodies{instance=~\\\"$instance\\\"}[1m])\",\n              \"hide\": false,\n              \"interval\": \"\",\n              \"legendFormat\": \"bodies\",\n              \"refId\": \"A\"\n            },\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"PBFA97CFB590B2093\"\n              },\n              \"exemplar\": true,\n              \"expr\": \"rate(eth_fetcher_block_headers{instance=~\\\"$instance\\\"}[1m])\",\n              \"hide\": false,\n              \"interval\": \"\",\n              \"legendFormat\": \"headers\",\n              \"refId\": \"B\"\n            },\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"PBFA97CFB590B2093\"\n              },\n              \"exemplar\": true,\n              \"expr\": \"rate(eth_fetcher_block_filter_headers_in{instance=~\\\"$instance\\\"}[1m])\",\n              \"hide\": false,\n              \"interval\": \"\",\n              \"legendFormat\": \"filter headers in\",\n              \"refId\": \"C\"\n            },\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"PBFA97CFB590B2093\"\n              },\n              \"exemplar\": true,\n              \"expr\": \"rate(eth_fetcher_block_filter_headers_out{instance=~\\\"$instance\\\"}[1m])\",\n              \"hide\": false,\n              \"interval\": \"\",\n              \"legendFormat\": \"filter headers out\",\n              \"refId\": \"D\"\n            },\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"PBFA97CFB590B2093\"\n              },\n              \"exemplar\": true,\n              \"expr\": \"rate(eth_fetcher_block_filter_bodies_in{instance=~\\\"$instance\\\"}[1m])\",\n              \"hide\": false,\n              \"interval\": \"\",\n              \"legendFormat\": \"filter bodies in\",\n              \"refId\": \"E\"\n            },\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"PBFA97CFB590B2093\"\n              },\n              \"exemplar\": true,\n              \"expr\": \"rate(eth_fetcher_block_filter_bodies_out{instance=~\\\"$instance\\\"}[1m])\",\n              \"hide\": false,\n              \"interval\": \"\",\n              \"legendFormat\": \"filter bodies out\",\n              \"refId\": \"F\"\n            }\n          ],\n          \"title\": \"QPS of Block\",\n          \"type\": \"timeseries\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"description\": \"Measured in blocks per second\",\n          \"fieldConfig\": {\n            \"defaults\": {\n              \"color\": {\n                \"mode\": \"palette-classic\"\n              },\n              \"custom\": {\n                \"axisBorderShow\": false,\n                \"axisCenteredZero\": false,\n                \"axisColorMode\": \"text\",\n                \"axisLabel\": \"\",\n                \"axisPlacement\": \"auto\",\n                \"barAlignment\": 0,\n                \"barWidthFactor\": 0.6,\n                \"drawStyle\": \"line\",\n                \"fillOpacity\": 10,\n                \"gradientMode\": \"none\",\n                \"hideFrom\": {\n                  \"legend\": false,\n                  \"tooltip\": false,\n                  \"viz\": false\n                },\n                \"insertNulls\": false,\n                \"lineInterpolation\": \"smooth\",\n                \"lineWidth\": 1,\n                \"pointSize\": 5,\n                \"scaleDistribution\": {\n                  \"type\": \"linear\"\n                },\n                \"showPoints\": \"never\",\n                \"spanNulls\": true,\n                \"stacking\": {\n                  \"group\": \"A\",\n                  \"mode\": \"none\"\n                },\n                \"thresholdsStyle\": {\n                  \"mode\": \"off\"\n                }\n              },\n              \"mappings\": [],\n              \"thresholds\": {\n                \"mode\": \"absolute\",\n                \"steps\": [\n                  {\n                    \"color\": \"green\",\n                    \"value\": 0\n                  },\n                  {\n                    \"color\": \"red\",\n                    \"value\": 80\n                  }\n                ]\n              },\n              \"unit\": \"decbytes\"\n            },\n            \"overrides\": [\n              {\n                \"__systemRef\": \"hideSeriesFrom\",\n                \"matcher\": {\n                  \"id\": \"byNames\",\n                  \"options\": {\n                    \"mode\": \"exclude\",\n                    \"names\": [\n                      \"limbo dataused\",\n                      \"limbo datareal\"\n                    ],\n                    \"prefix\": \"All except:\",\n                    \"readOnly\": true\n                  }\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"custom.hideFrom\",\n                    \"value\": {\n                      \"legend\": false,\n                      \"tooltip\": false,\n                      \"viz\": true\n                    }\n                  }\n                ]\n              }\n            ]\n          },\n          \"gridPos\": {\n            \"h\": 12,\n            \"w\": 12,\n            \"x\": 12,\n            \"y\": 88\n          },\n          \"id\": 155,\n          \"options\": {\n            \"legend\": {\n              \"calcs\": [\n                \"mean\",\n                \"lastNotNull\",\n                \"max\",\n                \"min\"\n              ],\n              \"displayMode\": \"table\",\n              \"placement\": \"right\",\n              \"showLegend\": true\n            },\n            \"tooltip\": {\n              \"hideZeros\": false,\n              \"mode\": \"multi\",\n              \"sort\": \"none\"\n            }\n          },\n          \"pluginVersion\": \"12.2.0-16557133545\",\n          \"targets\": [\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"PBFA97CFB590B2093\"\n              },\n              \"editorMode\": \"code\",\n              \"exemplar\": true,\n              \"expr\": \"blobpool_limbo_dataused{instance=~\\\"$instance\\\"}\",\n              \"hide\": false,\n              \"interval\": \"\",\n              \"legendFormat\": \"limbo dataused\",\n              \"range\": true,\n              \"refId\": \"A\"\n            },\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"PBFA97CFB590B2093\"\n              },\n              \"editorMode\": \"code\",\n              \"expr\": \"blobpool_limbo_datareal{instance=~\\\"$instance\\\"}\",\n              \"hide\": false,\n              \"instant\": false,\n              \"legendFormat\": \"limbo datareal\",\n              \"range\": true,\n              \"refId\": \"B\"\n            },\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"PBFA97CFB590B2093\"\n              },\n              \"editorMode\": \"code\",\n              \"expr\": \"blobpool_dataused{instance=~\\\"$instance\\\"}\",\n              \"hide\": false,\n              \"instant\": false,\n              \"legendFormat\": \"store dataused\",\n              \"range\": true,\n              \"refId\": \"C\"\n            },\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"PBFA97CFB590B2093\"\n              },\n              \"editorMode\": \"code\",\n              \"expr\": \"blobpool_datareal{instance=~\\\"$instance\\\"}\",\n              \"hide\": false,\n              \"instant\": false,\n              \"legendFormat\": \"store datareal\",\n              \"range\": true,\n              \"refId\": \"D\"\n            }\n          ],\n          \"title\": \"\",\n          \"type\": \"timeseries\"\n        }\n      ],\n      \"title\": \"Fetcher\",\n      \"type\": \"row\"\n    },\n    {\n      \"collapsed\": true,\n      \"gridPos\": {\n        \"h\": 1,\n        \"w\": 24,\n        \"x\": 0,\n        \"y\": 29\n      },\n      \"id\": 17,\n      \"panels\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"fieldConfig\": {\n            \"defaults\": {\n              \"color\": {\n                \"mode\": \"palette-classic\"\n              },\n              \"custom\": {\n                \"axisBorderShow\": false,\n                \"axisCenteredZero\": false,\n                \"axisColorMode\": \"text\",\n                \"axisLabel\": \"\",\n                \"axisPlacement\": \"auto\",\n                \"barAlignment\": 0,\n                \"barWidthFactor\": 0.6,\n                \"drawStyle\": \"line\",\n                \"fillOpacity\": 10,\n                \"gradientMode\": \"none\",\n                \"hideFrom\": {\n                  \"legend\": false,\n                  \"tooltip\": false,\n                  \"viz\": false\n                },\n                \"insertNulls\": false,\n                \"lineInterpolation\": \"linear\",\n                \"lineWidth\": 1,\n                \"pointSize\": 5,\n                \"scaleDistribution\": {\n                  \"type\": \"linear\"\n                },\n                \"showPoints\": \"never\",\n                \"spanNulls\": true,\n                \"stacking\": {\n                  \"group\": \"A\",\n                  \"mode\": \"none\"\n                },\n                \"thresholdsStyle\": {\n                  \"mode\": \"off\"\n                }\n              },\n              \"mappings\": [],\n              \"thresholds\": {\n                \"mode\": \"absolute\",\n                \"steps\": [\n                  {\n                    \"color\": \"green\",\n                    \"value\": 0\n                  },\n                  {\n                    \"color\": \"red\",\n                    \"value\": 80\n                  }\n                ]\n              },\n              \"unit\": \"Bps\"\n            },\n            \"overrides\": []\n          },\n          \"gridPos\": {\n            \"h\": 7,\n            \"w\": 12,\n            \"x\": 0,\n            \"y\": 77\n          },\n          \"id\": 35,\n          \"options\": {\n            \"legend\": {\n              \"calcs\": [\n                \"mean\",\n                \"min\",\n                \"max\"\n              ],\n              \"displayMode\": \"table\",\n              \"placement\": \"right\",\n              \"showLegend\": true\n            },\n            \"tooltip\": {\n              \"hideZeros\": false,\n              \"mode\": \"multi\",\n              \"sort\": \"none\"\n            }\n          },\n          \"pluginVersion\": \"12.2.0-16557133545\",\n          \"targets\": [\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"PBFA97CFB590B2093\"\n              },\n              \"editorMode\": \"code\",\n              \"exemplar\": true,\n              \"expr\": \"rate(eth_db_chaindata_disk_read{instance=~\\\"$instance\\\"}[1m])\",\n              \"format\": \"time_series\",\n              \"interval\": \"\",\n              \"intervalFactor\": 1,\n              \"legendFormat\": \"ethdb read\",\n              \"range\": true,\n              \"refId\": \"B\"\n            },\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"PBFA97CFB590B2093\"\n              },\n              \"editorMode\": \"code\",\n              \"expr\": \"rate(eth_db_chaindata_disk_write{instance=~\\\"$instance\\\"}[1m])\",\n              \"format\": \"time_series\",\n              \"intervalFactor\": 1,\n              \"legendFormat\": \"ethdb write\",\n              \"range\": true,\n              \"refId\": \"A\"\n            },\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"PBFA97CFB590B2093\"\n              },\n              \"editorMode\": \"code\",\n              \"exemplar\": true,\n              \"expr\": \"rate(eth_db_chaindata_ancient_read{instance=~\\\"$instance\\\"}[1m])\",\n              \"format\": \"time_series\",\n              \"interval\": \"\",\n              \"intervalFactor\": 1,\n              \"legendFormat\": \"ancient read\",\n              \"range\": true,\n              \"refId\": \"C\"\n            },\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"PBFA97CFB590B2093\"\n              },\n              \"editorMode\": \"code\",\n              \"expr\": \"rate(eth_db_chaindata_ancient_write{instance=~\\\"$instance\\\"}[1m])\",\n              \"format\": \"time_series\",\n              \"intervalFactor\": 1,\n              \"legendFormat\": \"ancient write\",\n              \"range\": true,\n              \"refId\": \"D\"\n            },\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"PBFA97CFB590B2093\"\n              },\n              \"exemplar\": true,\n              \"expr\": \"rate(eth_db_chaindata_compact_input{instance=~\\\"$instance\\\"}[1m])\",\n              \"hide\": false,\n              \"interval\": \"\",\n              \"legendFormat\": \"compact read\",\n              \"refId\": \"E\"\n            },\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"PBFA97CFB590B2093\"\n              },\n              \"exemplar\": true,\n              \"expr\": \"rate(eth_db_chaindata_compact_output{instance=~\\\"$instance\\\"}[1m])\",\n              \"hide\": false,\n              \"interval\": \"\",\n              \"legendFormat\": \"compact write\",\n              \"refId\": \"F\"\n            }\n          ],\n          \"title\": \"Data rate\",\n          \"type\": \"timeseries\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"fieldConfig\": {\n            \"defaults\": {\n              \"color\": {\n                \"mode\": \"palette-classic\"\n              },\n              \"custom\": {\n                \"axisBorderShow\": false,\n                \"axisCenteredZero\": false,\n                \"axisColorMode\": \"text\",\n                \"axisLabel\": \"\",\n                \"axisPlacement\": \"auto\",\n                \"barAlignment\": 0,\n                \"barWidthFactor\": 0.6,\n                \"drawStyle\": \"line\",\n                \"fillOpacity\": 10,\n                \"gradientMode\": \"none\",\n                \"hideFrom\": {\n                  \"legend\": false,\n                  \"tooltip\": false,\n                  \"viz\": false\n                },\n                \"insertNulls\": false,\n                \"lineInterpolation\": \"linear\",\n                \"lineWidth\": 1,\n                \"pointSize\": 5,\n                \"scaleDistribution\": {\n                  \"type\": \"linear\"\n                },\n                \"showPoints\": \"never\",\n                \"spanNulls\": true,\n                \"stacking\": {\n                  \"group\": \"A\",\n                  \"mode\": \"none\"\n                },\n                \"thresholdsStyle\": {\n                  \"mode\": \"off\"\n                }\n              },\n              \"mappings\": [],\n              \"thresholds\": {\n                \"mode\": \"absolute\",\n                \"steps\": [\n                  {\n                    \"color\": \"green\",\n                    \"value\": 0\n                  },\n                  {\n                    \"color\": \"red\",\n                    \"value\": 80\n                  }\n                ]\n              },\n              \"unit\": \"decbytes\"\n            },\n            \"overrides\": []\n          },\n          \"gridPos\": {\n            \"h\": 7,\n            \"w\": 6,\n            \"x\": 12,\n            \"y\": 77\n          },\n          \"id\": 118,\n          \"options\": {\n            \"legend\": {\n              \"calcs\": [],\n              \"displayMode\": \"list\",\n              \"placement\": \"bottom\",\n              \"showLegend\": true\n            },\n            \"tooltip\": {\n              \"hideZeros\": false,\n              \"mode\": \"single\",\n              \"sort\": \"none\"\n            }\n          },\n          \"pluginVersion\": \"12.2.0-16557133545\",\n          \"targets\": [\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"PBFA97CFB590B2093\"\n              },\n              \"expr\": \"eth_db_chaindata_disk_read{instance=~\\\"$instance\\\"}\",\n              \"format\": \"time_series\",\n              \"intervalFactor\": 1,\n              \"legendFormat\": \"leveldb read\",\n              \"refId\": \"B\"\n            },\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"PBFA97CFB590B2093\"\n              },\n              \"expr\": \"eth_db_chaindata_disk_write{instance=~\\\"$instance\\\"}\",\n              \"format\": \"time_series\",\n              \"intervalFactor\": 1,\n              \"legendFormat\": \"leveldb write\",\n              \"refId\": \"A\"\n            },\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"PBFA97CFB590B2093\"\n              },\n              \"expr\": \"eth_db_chaindata_ancient_read{instance=~\\\"$instance\\\"}\",\n              \"format\": \"time_series\",\n              \"intervalFactor\": 1,\n              \"legendFormat\": \"ancient read\",\n              \"refId\": \"C\"\n            },\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"PBFA97CFB590B2093\"\n              },\n              \"expr\": \"eth_db_chaindata_ancient_write{instance=~\\\"$instance\\\"}\",\n              \"format\": \"time_series\",\n              \"intervalFactor\": 1,\n              \"legendFormat\": \"ancient write\",\n              \"refId\": \"D\"\n            }\n          ],\n          \"title\": \"Session totals\",\n          \"type\": \"timeseries\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"fieldConfig\": {\n            \"defaults\": {\n              \"color\": {\n                \"mode\": \"palette-classic\"\n              },\n              \"custom\": {\n                \"axisBorderShow\": false,\n                \"axisCenteredZero\": false,\n                \"axisColorMode\": \"text\",\n                \"axisLabel\": \"\",\n                \"axisPlacement\": \"auto\",\n                \"barAlignment\": 0,\n                \"barWidthFactor\": 0.6,\n                \"drawStyle\": \"line\",\n                \"fillOpacity\": 10,\n                \"gradientMode\": \"none\",\n                \"hideFrom\": {\n                  \"legend\": false,\n                  \"tooltip\": false,\n                  \"viz\": false\n                },\n                \"insertNulls\": false,\n                \"lineInterpolation\": \"linear\",\n                \"lineWidth\": 1,\n                \"pointSize\": 5,\n                \"scaleDistribution\": {\n                  \"type\": \"linear\"\n                },\n                \"showPoints\": \"never\",\n                \"spanNulls\": true,\n                \"stacking\": {\n                  \"group\": \"A\",\n                  \"mode\": \"none\"\n                },\n                \"thresholdsStyle\": {\n                  \"mode\": \"off\"\n                }\n              },\n              \"mappings\": [],\n              \"thresholds\": {\n                \"mode\": \"absolute\",\n                \"steps\": [\n                  {\n                    \"color\": \"green\",\n                    \"value\": 0\n                  },\n                  {\n                    \"color\": \"red\",\n                    \"value\": 80\n                  }\n                ]\n              },\n              \"unit\": \"decbytes\"\n            },\n            \"overrides\": []\n          },\n          \"gridPos\": {\n            \"h\": 7,\n            \"w\": 6,\n            \"x\": 18,\n            \"y\": 77\n          },\n          \"id\": 119,\n          \"options\": {\n            \"legend\": {\n              \"calcs\": [],\n              \"displayMode\": \"list\",\n              \"placement\": \"bottom\",\n              \"showLegend\": true\n            },\n            \"tooltip\": {\n              \"hideZeros\": false,\n              \"mode\": \"single\",\n              \"sort\": \"none\"\n            }\n          },\n          \"pluginVersion\": \"12.2.0-16557133545\",\n          \"targets\": [\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"PBFA97CFB590B2093\"\n              },\n              \"expr\": \"eth_db_chaindata_disk_size{instance=~\\\"$instance\\\"}\",\n              \"format\": \"time_series\",\n              \"intervalFactor\": 1,\n              \"legendFormat\": \"leveldb\",\n              \"refId\": \"B\"\n            },\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"PBFA97CFB590B2093\"\n              },\n              \"expr\": \"eth_db_chaindata_ancient_size{instance=~\\\"$instance\\\"}\",\n              \"format\": \"time_series\",\n              \"intervalFactor\": 1,\n              \"legendFormat\": \"ancient\",\n              \"refId\": \"A\"\n            }\n          ],\n          \"title\": \"Storage size\",\n          \"type\": \"timeseries\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"fieldConfig\": {\n            \"defaults\": {\n              \"color\": {\n                \"mode\": \"thresholds\"\n              },\n              \"mappings\": [],\n              \"thresholds\": {\n                \"mode\": \"absolute\",\n                \"steps\": [\n                  {\n                    \"color\": \"green\",\n                    \"value\": 0\n                  },\n                  {\n                    \"color\": \"red\",\n                    \"value\": 80\n                  }\n                ]\n              },\n              \"unit\": \"short\"\n            },\n            \"overrides\": [\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"delay time\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"unit\",\n                    \"value\": \"ns\"\n                  }\n                ]\n              }\n            ]\n          },\n          \"gridPos\": {\n            \"h\": 4,\n            \"w\": 3,\n            \"x\": 0,\n            \"y\": 84\n          },\n          \"id\": 127,\n          \"options\": {\n            \"colorMode\": \"value\",\n            \"graphMode\": \"area\",\n            \"justifyMode\": \"auto\",\n            \"orientation\": \"auto\",\n            \"percentChangeColorMode\": \"standard\",\n            \"reduceOptions\": {\n              \"calcs\": [],\n              \"fields\": \"\",\n              \"values\": false\n            },\n            \"showPercentChange\": false,\n            \"textMode\": \"auto\",\n            \"wideLayout\": true\n          },\n          \"pluginVersion\": \"12.2.0-16557133545\",\n          \"targets\": [\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"PBFA97CFB590B2093\"\n              },\n              \"exemplar\": true,\n              \"expr\": \"eth_db_chaindata_compact_writedelay_counter{instance=~\\\"$instance\\\"}\",\n              \"format\": \"time_series\",\n              \"interval\": \"\",\n              \"intervalFactor\": 1,\n              \"legendFormat\": \"\",\n              \"refId\": \"B\"\n            }\n          ],\n          \"title\": \"Compact Writedelay Count\",\n          \"type\": \"stat\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"fieldConfig\": {\n            \"defaults\": {\n              \"color\": {\n                \"mode\": \"palette-classic\"\n              },\n              \"custom\": {\n                \"axisBorderShow\": false,\n                \"axisCenteredZero\": false,\n                \"axisColorMode\": \"text\",\n                \"axisLabel\": \"\",\n                \"axisPlacement\": \"auto\",\n                \"barAlignment\": 0,\n                \"barWidthFactor\": 0.6,\n                \"drawStyle\": \"line\",\n                \"fillOpacity\": 10,\n                \"gradientMode\": \"none\",\n                \"hideFrom\": {\n                  \"legend\": false,\n                  \"tooltip\": false,\n                  \"viz\": false\n                },\n                \"insertNulls\": false,\n                \"lineInterpolation\": \"linear\",\n                \"lineWidth\": 1,\n                \"pointSize\": 5,\n                \"scaleDistribution\": {\n                  \"type\": \"linear\"\n                },\n                \"showPoints\": \"never\",\n                \"spanNulls\": true,\n                \"stacking\": {\n                  \"group\": \"A\",\n                  \"mode\": \"none\"\n                },\n                \"thresholdsStyle\": {\n                  \"mode\": \"off\"\n                }\n              },\n              \"mappings\": [],\n              \"thresholds\": {\n                \"mode\": \"absolute\",\n                \"steps\": [\n                  {\n                    \"color\": \"green\",\n                    \"value\": 0\n                  },\n                  {\n                    \"color\": \"red\",\n                    \"value\": 80\n                  }\n                ]\n              },\n              \"unit\": \"short\"\n            },\n            \"overrides\": [\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"time\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"custom.lineWidth\",\n                    \"value\": 3\n                  },\n                  {\n                    \"id\": \"custom.axisPlacement\",\n                    \"value\": \"right\"\n                  },\n                  {\n                    \"id\": \"unit\",\n                    \"value\": \"ns\"\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"delay time\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"custom.axisPlacement\",\n                    \"value\": \"right\"\n                  },\n                  {\n                    \"id\": \"unit\",\n                    \"value\": \"ns\"\n                  }\n                ]\n              }\n            ]\n          },\n          \"gridPos\": {\n            \"h\": 8,\n            \"w\": 21,\n            \"x\": 3,\n            \"y\": 84\n          },\n          \"id\": 121,\n          \"options\": {\n            \"legend\": {\n              \"calcs\": [\n                \"mean\",\n                \"min\",\n                \"max\"\n              ],\n              \"displayMode\": \"table\",\n              \"placement\": \"right\",\n              \"showLegend\": true\n            },\n            \"tooltip\": {\n              \"hideZeros\": false,\n              \"mode\": \"multi\",\n              \"sort\": \"none\"\n            }\n          },\n          \"pluginVersion\": \"12.2.0-16557133545\",\n          \"targets\": [\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"PBFA97CFB590B2093\"\n              },\n              \"exemplar\": true,\n              \"expr\": \"rate(eth_db_chaindata_compact_time{instance=~\\\"$instance\\\"}[1m])\",\n              \"format\": \"time_series\",\n              \"interval\": \"\",\n              \"intervalFactor\": 1,\n              \"legendFormat\": \"time\",\n              \"refId\": \"B\"\n            },\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"PBFA97CFB590B2093\"\n              },\n              \"exemplar\": true,\n              \"expr\": \"rate(eth_db_chaindata_compact_nonlevel0{instance=~\\\"$instance\\\"}[1m])\",\n              \"format\": \"time_series\",\n              \"interval\": \"\",\n              \"intervalFactor\": 1,\n              \"legendFormat\": \"level0\",\n              \"refId\": \"A\"\n            },\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"PBFA97CFB590B2093\"\n              },\n              \"exemplar\": true,\n              \"expr\": \"rate(eth_db_chaindata_compact_level0{instance=~\\\"$instance\\\"}[1m])\",\n              \"format\": \"time_series\",\n              \"interval\": \"\",\n              \"intervalFactor\": 1,\n              \"legendFormat\": \"~level0\",\n              \"refId\": \"C\"\n            },\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"PBFA97CFB590B2093\"\n              },\n              \"exemplar\": true,\n              \"expr\": \"rate(eth_db_chaindata_compact_memory{instance=~\\\"$instance\\\"}[1m])\",\n              \"format\": \"time_series\",\n              \"interval\": \"\",\n              \"intervalFactor\": 1,\n              \"legendFormat\": \"mem\",\n              \"refId\": \"D\"\n            },\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"PBFA97CFB590B2093\"\n              },\n              \"exemplar\": true,\n              \"expr\": \"rate(eth_db_chaindata_compact_seek{instance=~\\\"$instance\\\"}[1m])\",\n              \"hide\": false,\n              \"interval\": \"\",\n              \"legendFormat\": \"seek\",\n              \"refId\": \"E\"\n            },\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"PBFA97CFB590B2093\"\n              },\n              \"exemplar\": true,\n              \"expr\": \"rate(eth_db_chaindata_compact_writedelay_duration{instance=~\\\"$instance\\\"}[1m])\",\n              \"hide\": false,\n              \"interval\": \"\",\n              \"legendFormat\": \"delay time\",\n              \"refId\": \"F\"\n            },\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"PBFA97CFB590B2093\"\n              },\n              \"exemplar\": true,\n              \"expr\": \"rate(eth_db_chaindata_compact_writedelay_counter{instance=~\\\"$instance\\\"}[1m])\",\n              \"hide\": false,\n              \"interval\": \"\",\n              \"legendFormat\": \"delay count\",\n              \"refId\": \"G\"\n            }\n          ],\n          \"title\": \"Compact\",\n          \"type\": \"timeseries\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"fieldConfig\": {\n            \"defaults\": {\n              \"color\": {\n                \"mode\": \"thresholds\"\n              },\n              \"mappings\": [],\n              \"thresholds\": {\n                \"mode\": \"absolute\",\n                \"steps\": [\n                  {\n                    \"color\": \"green\",\n                    \"value\": 0\n                  },\n                  {\n                    \"color\": \"red\",\n                    \"value\": 80\n                  }\n                ]\n              },\n              \"unit\": \"ns\"\n            },\n            \"overrides\": [\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"time\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"unit\",\n                    \"value\": \"ns\"\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"delay time\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"unit\",\n                    \"value\": \"ns\"\n                  }\n                ]\n              }\n            ]\n          },\n          \"gridPos\": {\n            \"h\": 4,\n            \"w\": 3,\n            \"x\": 0,\n            \"y\": 88\n          },\n          \"id\": 128,\n          \"options\": {\n            \"colorMode\": \"value\",\n            \"graphMode\": \"area\",\n            \"justifyMode\": \"auto\",\n            \"orientation\": \"auto\",\n            \"percentChangeColorMode\": \"standard\",\n            \"reduceOptions\": {\n              \"calcs\": [],\n              \"fields\": \"\",\n              \"values\": false\n            },\n            \"showPercentChange\": false,\n            \"textMode\": \"auto\",\n            \"wideLayout\": true\n          },\n          \"pluginVersion\": \"12.2.0-16557133545\",\n          \"targets\": [\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"PBFA97CFB590B2093\"\n              },\n              \"exemplar\": true,\n              \"expr\": \"eth_db_chaindata_compact_writedelay_duration{instance=~\\\"$instance\\\"}\",\n              \"format\": \"time_series\",\n              \"interval\": \"\",\n              \"intervalFactor\": 1,\n              \"legendFormat\": \"\",\n              \"refId\": \"B\"\n            }\n          ],\n          \"title\": \"Compact Writedelay Duration\",\n          \"type\": \"stat\"\n        }\n      ],\n      \"title\": \"Database\",\n      \"type\": \"row\"\n    },\n    {\n      \"collapsed\": true,\n      \"gridPos\": {\n        \"h\": 1,\n        \"w\": 24,\n        \"x\": 0,\n        \"y\": 30\n      },\n      \"id\": 37,\n      \"panels\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"fieldConfig\": {\n            \"defaults\": {\n              \"color\": {\n                \"mode\": \"palette-classic\"\n              },\n              \"custom\": {\n                \"axisBorderShow\": false,\n                \"axisCenteredZero\": false,\n                \"axisColorMode\": \"text\",\n                \"axisLabel\": \"\",\n                \"axisPlacement\": \"auto\",\n                \"barAlignment\": 0,\n                \"barWidthFactor\": 0.6,\n                \"drawStyle\": \"line\",\n                \"fillOpacity\": 10,\n                \"gradientMode\": \"none\",\n                \"hideFrom\": {\n                  \"legend\": false,\n                  \"tooltip\": false,\n                  \"viz\": false\n                },\n                \"insertNulls\": false,\n                \"lineInterpolation\": \"linear\",\n                \"lineWidth\": 1,\n                \"pointSize\": 5,\n                \"scaleDistribution\": {\n                  \"type\": \"linear\"\n                },\n                \"showPoints\": \"never\",\n                \"spanNulls\": true,\n                \"stacking\": {\n                  \"group\": \"A\",\n                  \"mode\": \"none\"\n                },\n                \"thresholdsStyle\": {\n                  \"mode\": \"off\"\n                }\n              },\n              \"mappings\": [],\n              \"thresholds\": {\n                \"mode\": \"absolute\",\n                \"steps\": [\n                  {\n                    \"color\": \"green\",\n                    \"value\": 0\n                  },\n                  {\n                    \"color\": \"red\",\n                    \"value\": 80\n                  }\n                ]\n              },\n              \"unit\": \"Bps\"\n            },\n            \"overrides\": []\n          },\n          \"gridPos\": {\n            \"h\": 6,\n            \"w\": 12,\n            \"x\": 0,\n            \"y\": 78\n          },\n          \"id\": 120,\n          \"options\": {\n            \"legend\": {\n              \"calcs\": [\n                \"lastNotNull\",\n                \"min\",\n                \"max\"\n              ],\n              \"displayMode\": \"list\",\n              \"placement\": \"bottom\",\n              \"showLegend\": true\n            },\n            \"tooltip\": {\n              \"hideZeros\": false,\n              \"mode\": \"single\",\n              \"sort\": \"none\"\n            }\n          },\n          \"pluginVersion\": \"12.2.0-16557133545\",\n          \"targets\": [\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"PBFA97CFB590B2093\"\n              },\n              \"editorMode\": \"code\",\n              \"exemplar\": false,\n              \"expr\": \"rate(trie_memcache_clean_read{instance=~\\\"$instance\\\"}[1m])\",\n              \"format\": \"time_series\",\n              \"hide\": false,\n              \"instant\": false,\n              \"intervalFactor\": 1,\n              \"legendFormat\": \"read\",\n              \"range\": true,\n              \"refId\": \"C\"\n            },\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"PBFA97CFB590B2093\"\n              },\n              \"editorMode\": \"code\",\n              \"expr\": \"rate(trie_memcache_clean_write{instance=~\\\"$instance\\\"}[1m])\",\n              \"format\": \"time_series\",\n              \"hide\": false,\n              \"intervalFactor\": 1,\n              \"legendFormat\": \"write\",\n              \"range\": true,\n              \"refId\": \"B\"\n            }\n          ],\n          \"title\": \"Clean cache-BPS\",\n          \"type\": \"timeseries\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"fieldConfig\": {\n            \"defaults\": {\n              \"color\": {\n                \"mode\": \"palette-classic\"\n              },\n              \"custom\": {\n                \"axisBorderShow\": false,\n                \"axisCenteredZero\": false,\n                \"axisColorMode\": \"text\",\n                \"axisLabel\": \"\",\n                \"axisPlacement\": \"auto\",\n                \"barAlignment\": 0,\n                \"barWidthFactor\": 0.6,\n                \"drawStyle\": \"line\",\n                \"fillOpacity\": 10,\n                \"gradientMode\": \"none\",\n                \"hideFrom\": {\n                  \"legend\": false,\n                  \"tooltip\": false,\n                  \"viz\": false\n                },\n                \"insertNulls\": false,\n                \"lineInterpolation\": \"linear\",\n                \"lineWidth\": 1,\n                \"pointSize\": 5,\n                \"scaleDistribution\": {\n                  \"type\": \"linear\"\n                },\n                \"showPoints\": \"never\",\n                \"spanNulls\": true,\n                \"stacking\": {\n                  \"group\": \"A\",\n                  \"mode\": \"none\"\n                },\n                \"thresholdsStyle\": {\n                  \"mode\": \"off\"\n                }\n              },\n              \"mappings\": [],\n              \"thresholds\": {\n                \"mode\": \"absolute\",\n                \"steps\": [\n                  {\n                    \"color\": \"green\",\n                    \"value\": 0\n                  },\n                  {\n                    \"color\": \"red\",\n                    \"value\": 80\n                  }\n                ]\n              },\n              \"unit\": \"Bps\"\n            },\n            \"overrides\": []\n          },\n          \"gridPos\": {\n            \"h\": 6,\n            \"w\": 12,\n            \"x\": 12,\n            \"y\": 78\n          },\n          \"id\": 56,\n          \"options\": {\n            \"legend\": {\n              \"calcs\": [],\n              \"displayMode\": \"list\",\n              \"placement\": \"bottom\",\n              \"showLegend\": true\n            },\n            \"tooltip\": {\n              \"hideZeros\": false,\n              \"mode\": \"single\",\n              \"sort\": \"none\"\n            }\n          },\n          \"pluginVersion\": \"12.2.0-16557133545\",\n          \"targets\": [\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"PBFA97CFB590B2093\"\n              },\n              \"expr\": \"rate(trie_memcache_gc_size{instance=~\\\"$instance\\\"}[1m])\",\n              \"format\": \"time_series\",\n              \"hide\": false,\n              \"intervalFactor\": 1,\n              \"legendFormat\": \"gc\",\n              \"refId\": \"C\"\n            },\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"PBFA97CFB590B2093\"\n              },\n              \"expr\": \"rate(trie_memcache_flush_size{instance=~\\\"$instance\\\"}[1m])\",\n              \"format\": \"time_series\",\n              \"hide\": false,\n              \"intervalFactor\": 1,\n              \"legendFormat\": \"overflow\",\n              \"refId\": \"B\"\n            },\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"PBFA97CFB590B2093\"\n              },\n              \"expr\": \"rate(trie_memcache_commit_size{instance=~\\\"$instance\\\"}[1m])\",\n              \"format\": \"time_series\",\n              \"intervalFactor\": 1,\n              \"legendFormat\": \"commit\",\n              \"refId\": \"A\"\n            }\n          ],\n          \"title\": \"Dirty cache-BPS\",\n          \"type\": \"timeseries\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"fieldConfig\": {\n            \"defaults\": {\n              \"color\": {\n                \"mode\": \"palette-classic\"\n              },\n              \"custom\": {\n                \"axisBorderShow\": false,\n                \"axisCenteredZero\": false,\n                \"axisColorMode\": \"text\",\n                \"axisLabel\": \"\",\n                \"axisPlacement\": \"auto\",\n                \"barAlignment\": 0,\n                \"barWidthFactor\": 0.6,\n                \"drawStyle\": \"line\",\n                \"fillOpacity\": 10,\n                \"gradientMode\": \"none\",\n                \"hideFrom\": {\n                  \"legend\": false,\n                  \"tooltip\": false,\n                  \"viz\": false\n                },\n                \"insertNulls\": false,\n                \"lineInterpolation\": \"linear\",\n                \"lineWidth\": 1,\n                \"pointSize\": 5,\n                \"scaleDistribution\": {\n                  \"type\": \"linear\"\n                },\n                \"showPoints\": \"never\",\n                \"spanNulls\": true,\n                \"stacking\": {\n                  \"group\": \"A\",\n                  \"mode\": \"none\"\n                },\n                \"thresholdsStyle\": {\n                  \"mode\": \"off\"\n                }\n              },\n              \"mappings\": [],\n              \"thresholds\": {\n                \"mode\": \"absolute\",\n                \"steps\": [\n                  {\n                    \"color\": \"green\",\n                    \"value\": 0\n                  },\n                  {\n                    \"color\": \"red\",\n                    \"value\": 80\n                  }\n                ]\n              },\n              \"unit\": \"rps\"\n            },\n            \"overrides\": [\n              {\n                \"matcher\": {\n                  \"id\": \"byRegexp\",\n                  \"options\": \".*rate\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"custom.axisPlacement\",\n                    \"value\": \"right\"\n                  },\n                  {\n                    \"id\": \"unit\",\n                    \"value\": \"percentunit\"\n                  },\n                  {\n                    \"id\": \"custom.lineWidth\",\n                    \"value\": 2\n                  },\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"mode\": \"continuous-RdYlGr\"\n                    }\n                  }\n                ]\n              }\n            ]\n          },\n          \"gridPos\": {\n            \"h\": 6,\n            \"w\": 12,\n            \"x\": 0,\n            \"y\": 84\n          },\n          \"id\": 122,\n          \"options\": {\n            \"legend\": {\n              \"calcs\": [],\n              \"displayMode\": \"list\",\n              \"placement\": \"bottom\",\n              \"showLegend\": true\n            },\n            \"tooltip\": {\n              \"hideZeros\": false,\n              \"mode\": \"single\",\n              \"sort\": \"none\"\n            }\n          },\n          \"pluginVersion\": \"12.2.0-16557133545\",\n          \"targets\": [\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"PBFA97CFB590B2093\"\n              },\n              \"exemplar\": true,\n              \"expr\": \"rate(trie_memcache_clean_hit{instance=~\\\"$instance\\\"}[1m])\",\n              \"format\": \"time_series\",\n              \"hide\": false,\n              \"interval\": \"\",\n              \"intervalFactor\": 1,\n              \"legendFormat\": \"hit\",\n              \"refId\": \"C\"\n            },\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"PBFA97CFB590B2093\"\n              },\n              \"exemplar\": true,\n              \"expr\": \"rate(trie_memcache_clean_miss{instance=~\\\"$instance\\\"}[1m])\",\n              \"format\": \"time_series\",\n              \"hide\": false,\n              \"interval\": \"\",\n              \"intervalFactor\": 1,\n              \"legendFormat\": \"miss\",\n              \"refId\": \"B\"\n            },\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"PBFA97CFB590B2093\"\n              },\n              \"exemplar\": true,\n              \"expr\": \"rate(trie_memcache_clean_hit{instance=~\\\"$instance\\\"}[1m])/(rate(trie_memcache_clean_miss{instance=~\\\"$instance\\\"}[1m])+rate(trie_memcache_clean_hit{instance=~\\\"$instance\\\"}[1m]))\",\n              \"hide\": false,\n              \"interval\": \"\",\n              \"legendFormat\": \"hit rate\",\n              \"refId\": \"A\"\n            }\n          ],\n          \"title\": \"Clean cache-Count\",\n          \"type\": \"timeseries\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"fieldConfig\": {\n            \"defaults\": {\n              \"color\": {\n                \"mode\": \"palette-classic\"\n              },\n              \"custom\": {\n                \"axisBorderShow\": false,\n                \"axisCenteredZero\": false,\n                \"axisColorMode\": \"text\",\n                \"axisLabel\": \"\",\n                \"axisPlacement\": \"auto\",\n                \"barAlignment\": 0,\n                \"barWidthFactor\": 0.6,\n                \"drawStyle\": \"line\",\n                \"fillOpacity\": 10,\n                \"gradientMode\": \"none\",\n                \"hideFrom\": {\n                  \"legend\": false,\n                  \"tooltip\": false,\n                  \"viz\": false\n                },\n                \"insertNulls\": false,\n                \"lineInterpolation\": \"linear\",\n                \"lineWidth\": 1,\n                \"pointSize\": 5,\n                \"scaleDistribution\": {\n                  \"type\": \"linear\"\n                },\n                \"showPoints\": \"never\",\n                \"spanNulls\": true,\n                \"stacking\": {\n                  \"group\": \"A\",\n                  \"mode\": \"none\"\n                },\n                \"thresholdsStyle\": {\n                  \"mode\": \"off\"\n                }\n              },\n              \"mappings\": [],\n              \"thresholds\": {\n                \"mode\": \"absolute\",\n                \"steps\": [\n                  {\n                    \"color\": \"green\",\n                    \"value\": 0\n                  },\n                  {\n                    \"color\": \"red\",\n                    \"value\": 80\n                  }\n                ]\n              },\n              \"unit\": \"rps\"\n            },\n            \"overrides\": [\n              {\n                \"matcher\": {\n                  \"id\": \"byRegexp\",\n                  \"options\": \".*rate\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"custom.axisPlacement\",\n                    \"value\": \"right\"\n                  },\n                  {\n                    \"id\": \"unit\",\n                    \"value\": \"percentunit\"\n                  },\n                  {\n                    \"id\": \"custom.lineWidth\",\n                    \"value\": 2\n                  },\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"mode\": \"continuous-RdYlGr\"\n                    }\n                  }\n                ]\n              }\n            ]\n          },\n          \"gridPos\": {\n            \"h\": 6,\n            \"w\": 12,\n            \"x\": 12,\n            \"y\": 84\n          },\n          \"id\": 124,\n          \"options\": {\n            \"legend\": {\n              \"calcs\": [],\n              \"displayMode\": \"list\",\n              \"placement\": \"bottom\",\n              \"showLegend\": true\n            },\n            \"tooltip\": {\n              \"hideZeros\": false,\n              \"mode\": \"single\",\n              \"sort\": \"none\"\n            }\n          },\n          \"pluginVersion\": \"12.2.0-16557133545\",\n          \"targets\": [\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"PBFA97CFB590B2093\"\n              },\n              \"exemplar\": true,\n              \"expr\": \"rate(trie_memcache_dirty_hit{instance=~\\\"$instance\\\"}[1m])\",\n              \"format\": \"time_series\",\n              \"hide\": false,\n              \"interval\": \"\",\n              \"intervalFactor\": 1,\n              \"legendFormat\": \"hit\",\n              \"refId\": \"C\"\n            },\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"PBFA97CFB590B2093\"\n              },\n              \"exemplar\": true,\n              \"expr\": \"rate(trie_memcache_dirty_miss{instance=~\\\"$instance\\\"}[1m])\",\n              \"format\": \"time_series\",\n              \"hide\": false,\n              \"interval\": \"\",\n              \"intervalFactor\": 1,\n              \"legendFormat\": \"miss\",\n              \"refId\": \"B\"\n            },\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"PBFA97CFB590B2093\"\n              },\n              \"exemplar\": true,\n              \"expr\": \"rate(trie_memcache_dirty_hit{instance=~\\\"$instance\\\"}[1m])/(rate(trie_memcache_dirty_miss{instance=~\\\"$instance\\\"}[1m])+rate(trie_memcache_dirty_hit{instance=~\\\"$instance\\\"}[1m]))\",\n              \"hide\": false,\n              \"interval\": \"\",\n              \"legendFormat\": \"hit rate\",\n              \"refId\": \"A\"\n            }\n          ],\n          \"title\": \"Dirty cache-Count\",\n          \"type\": \"timeseries\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"fieldConfig\": {\n            \"defaults\": {\n              \"color\": {\n                \"mode\": \"palette-classic\"\n              },\n              \"custom\": {\n                \"axisBorderShow\": false,\n                \"axisCenteredZero\": false,\n                \"axisColorMode\": \"text\",\n                \"axisLabel\": \"\",\n                \"axisPlacement\": \"auto\",\n                \"barAlignment\": 0,\n                \"barWidthFactor\": 0.6,\n                \"drawStyle\": \"line\",\n                \"fillOpacity\": 10,\n                \"gradientMode\": \"none\",\n                \"hideFrom\": {\n                  \"legend\": false,\n                  \"tooltip\": false,\n                  \"viz\": false\n                },\n                \"insertNulls\": false,\n                \"lineInterpolation\": \"linear\",\n                \"lineWidth\": 1,\n                \"pointSize\": 5,\n                \"scaleDistribution\": {\n                  \"type\": \"linear\"\n                },\n                \"showPoints\": \"never\",\n                \"spanNulls\": true,\n                \"stacking\": {\n                  \"group\": \"A\",\n                  \"mode\": \"none\"\n                },\n                \"thresholdsStyle\": {\n                  \"mode\": \"off\"\n                }\n              },\n              \"mappings\": [],\n              \"thresholds\": {\n                \"mode\": \"absolute\",\n                \"steps\": [\n                  {\n                    \"color\": \"green\",\n                    \"value\": 0\n                  },\n                  {\n                    \"color\": \"red\",\n                    \"value\": 80\n                  }\n                ]\n              },\n              \"unit\": \"wps\"\n            },\n            \"overrides\": []\n          },\n          \"gridPos\": {\n            \"h\": 9,\n            \"w\": 12,\n            \"x\": 0,\n            \"y\": 90\n          },\n          \"id\": 125,\n          \"options\": {\n            \"legend\": {\n              \"calcs\": [\n                \"lastNotNull\",\n                \"mean\",\n                \"min\",\n                \"max\"\n              ],\n              \"displayMode\": \"table\",\n              \"placement\": \"bottom\",\n              \"showLegend\": true\n            },\n            \"tooltip\": {\n              \"hideZeros\": false,\n              \"mode\": \"single\",\n              \"sort\": \"none\"\n            }\n          },\n          \"pluginVersion\": \"12.2.0-16557133545\",\n          \"targets\": [\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"PBFA97CFB590B2093\"\n              },\n              \"exemplar\": true,\n              \"expr\": \"rate(trie_memcache_gc_nodes{instance=~\\\"$instance\\\"}[1m])\",\n              \"format\": \"time_series\",\n              \"hide\": false,\n              \"interval\": \"\",\n              \"intervalFactor\": 1,\n              \"legendFormat\": \"gc\",\n              \"refId\": \"C\"\n            },\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"PBFA97CFB590B2093\"\n              },\n              \"exemplar\": true,\n              \"expr\": \"rate(trie_memcache_commit_nodes{instance=~\\\"$instance\\\"}[1m])\",\n              \"format\": \"time_series\",\n              \"hide\": false,\n              \"interval\": \"\",\n              \"intervalFactor\": 1,\n              \"legendFormat\": \"commit\",\n              \"refId\": \"B\"\n            },\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"PBFA97CFB590B2093\"\n              },\n              \"exemplar\": true,\n              \"expr\": \"rate(trie_memcache_flush_nodes{instance=~\\\"$instance\\\"}[1m])\",\n              \"hide\": false,\n              \"interval\": \"\",\n              \"legendFormat\": \"overflow\",\n              \"refId\": \"A\"\n            }\n          ],\n          \"title\": \"MPT-Nodes\",\n          \"type\": \"timeseries\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"fieldConfig\": {\n            \"defaults\": {\n              \"color\": {\n                \"mode\": \"palette-classic\"\n              },\n              \"custom\": {\n                \"axisBorderShow\": false,\n                \"axisCenteredZero\": false,\n                \"axisColorMode\": \"text\",\n                \"axisLabel\": \"\",\n                \"axisPlacement\": \"auto\",\n                \"barAlignment\": 0,\n                \"barWidthFactor\": 0.6,\n                \"drawStyle\": \"line\",\n                \"fillOpacity\": 10,\n                \"gradientMode\": \"none\",\n                \"hideFrom\": {\n                  \"legend\": false,\n                  \"tooltip\": false,\n                  \"viz\": false\n                },\n                \"insertNulls\": false,\n                \"lineInterpolation\": \"linear\",\n                \"lineWidth\": 1,\n                \"pointSize\": 5,\n                \"scaleDistribution\": {\n                  \"type\": \"linear\"\n                },\n                \"showPoints\": \"never\",\n                \"spanNulls\": true,\n                \"stacking\": {\n                  \"group\": \"A\",\n                  \"mode\": \"none\"\n                },\n                \"thresholdsStyle\": {\n                  \"mode\": \"off\"\n                }\n              },\n              \"mappings\": [],\n              \"thresholds\": {\n                \"mode\": \"absolute\",\n                \"steps\": [\n                  {\n                    \"color\": \"green\",\n                    \"value\": 0\n                  },\n                  {\n                    \"color\": \"red\",\n                    \"value\": 80\n                  }\n                ]\n              },\n              \"unit\": \"ns\"\n            },\n            \"overrides\": []\n          },\n          \"gridPos\": {\n            \"h\": 9,\n            \"w\": 12,\n            \"x\": 12,\n            \"y\": 90\n          },\n          \"id\": 126,\n          \"options\": {\n            \"legend\": {\n              \"calcs\": [\n                \"lastNotNull\",\n                \"mean\",\n                \"min\",\n                \"max\"\n              ],\n              \"displayMode\": \"table\",\n              \"placement\": \"bottom\",\n              \"showLegend\": true\n            },\n            \"tooltip\": {\n              \"hideZeros\": false,\n              \"mode\": \"single\",\n              \"sort\": \"none\"\n            }\n          },\n          \"pluginVersion\": \"12.2.0-16557133545\",\n          \"targets\": [\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"PBFA97CFB590B2093\"\n              },\n              \"exemplar\": true,\n              \"expr\": \"rate(trie_memcache_gc_time{instance=~\\\"$instance\\\", quantile=~\\\"$quantile\\\"}[1m])\",\n              \"format\": \"time_series\",\n              \"hide\": false,\n              \"interval\": \"\",\n              \"intervalFactor\": 1,\n              \"legendFormat\": \"gc\",\n              \"refId\": \"C\"\n            },\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"PBFA97CFB590B2093\"\n              },\n              \"exemplar\": true,\n              \"expr\": \"rate(trie_memcache_commit_time{instance=~\\\"$instance\\\", quantile=~\\\"$quantile\\\"}[1m])\",\n              \"format\": \"time_series\",\n              \"hide\": false,\n              \"interval\": \"\",\n              \"intervalFactor\": 1,\n              \"legendFormat\": \"commit\",\n              \"refId\": \"B\"\n            },\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"PBFA97CFB590B2093\"\n              },\n              \"exemplar\": true,\n              \"expr\": \"rate(trie_memcache_flush_time{instance=~\\\"$instance\\\", quantile=~\\\"$quantile\\\"}[1m])\",\n              \"hide\": false,\n              \"interval\": \"\",\n              \"legendFormat\": \"overflow\",\n              \"refId\": \"A\"\n            }\n          ],\n          \"title\": \"MPT-Time\",\n          \"type\": \"timeseries\"\n        }\n      ],\n      \"title\": \"Trie Stats\",\n      \"type\": \"row\"\n    }\n  ],\n  \"refresh\": \"auto\",\n  \"schemaVersion\": 41,\n  \"tags\": [],\n  \"templating\": {\n    \"list\": [\n      {\n        \"current\": {\n          \"text\": \"PBFA97CFB590B2093\",\n          \"value\": \"PBFA97CFB590B2093\"\n        },\n        \"hide\": 2,\n        \"name\": \"DS_PROMETHEUS\",\n        \"query\": \"PBFA97CFB590B2093\",\n        \"skipUrlSync\": true,\n        \"type\": \"constant\"\n      },\n      {\n        \"current\": {},\n        \"datasource\": {\n          \"type\": \"prometheus\",\n          \"uid\": \"PBFA97CFB590B2093\"\n        },\n        \"definition\": \"label_values(chain_head_block{}, instance)\",\n        \"includeAll\": false,\n        \"label\": \"instance\",\n        \"name\": \"instance\",\n        \"options\": [],\n        \"query\": {\n          \"query\": \"label_values(chain_head_block{}, instance)\",\n          \"refId\": \"StandardVariableQuery\"\n        },\n        \"refresh\": 1,\n        \"regex\": \"\",\n        \"type\": \"query\"\n      },\n      {\n        \"current\": {\n          \"text\": \"0.95\",\n          \"value\": \"0.95\"\n        },\n        \"includeAll\": false,\n        \"name\": \"quantile\",\n        \"options\": [\n          {\n            \"selected\": false,\n            \"text\": \"0.5\",\n            \"value\": \"0.5\"\n          },\n          {\n            \"selected\": false,\n            \"text\": \"0.75\",\n            \"value\": \"0.75\"\n          },\n          {\n            \"selected\": true,\n            \"text\": \"0.95\",\n            \"value\": \"0.95\"\n          },\n          {\n            \"selected\": false,\n            \"text\": \"0.99\",\n            \"value\": \"0.99\"\n          },\n          {\n            \"selected\": false,\n            \"text\": \"0.999\",\n            \"value\": \"0.999\"\n          },\n          {\n            \"selected\": false,\n            \"text\": \"0.9999\",\n            \"value\": \"0.9999\"\n          }\n        ],\n        \"query\": \"0.5, 0.75, 0.95, 0.99, 0.999, 0.9999\",\n        \"type\": \"custom\"\n      }\n    ]\n  },\n  \"time\": {\n    \"from\": \"now-5m\",\n    \"to\": \"now\"\n  },\n  \"timepicker\": {},\n  \"timezone\": \"\",\n  \"title\": \"Go-Ethereum-By-Instance\",\n  \"uid\": \"bep9tmm7fb37kc\",\n  \"version\": 4,\n  \"weekStart\": \"\"\n}"
  },
  {
    "path": "static_files/grafana-config/dashboards/lighthouse/AttestationProcessing.json",
    "content": "{\n  \"__inputs\": [\n    {\n      \"name\": \"DS_PROMETHEUS\",\n      \"label\": \"Prometheus\",\n      \"description\": \"\",\n      \"type\": \"datasource\",\n      \"pluginId\": \"prometheus\",\n      \"pluginName\": \"Prometheus\"\n    }\n  ],\n  \"__elements\": {},\n  \"__requires\": [\n    {\n      \"type\": \"grafana\",\n      \"id\": \"grafana\",\n      \"name\": \"Grafana\",\n      \"version\": \"10.4.1\"\n    },\n    {\n      \"type\": \"panel\",\n      \"id\": \"heatmap\",\n      \"name\": \"Heatmap\",\n      \"version\": \"\"\n    },\n    {\n      \"type\": \"datasource\",\n      \"id\": \"prometheus\",\n      \"name\": \"Prometheus\",\n      \"version\": \"1.0.0\"\n    },\n    {\n      \"type\": \"panel\",\n      \"id\": \"text\",\n      \"name\": \"Text\",\n      \"version\": \"\"\n    },\n    {\n      \"type\": \"panel\",\n      \"id\": \"timeseries\",\n      \"name\": \"Time series\",\n      \"version\": \"\"\n    }\n  ],\n  \"annotations\": {\n    \"list\": [\n      {\n        \"$$hashKey\": \"object:4294\",\n        \"builtIn\": 1,\n        \"datasource\": {\n          \"type\": \"datasource\",\n          \"uid\": \"grafana\"\n        },\n        \"enable\": true,\n        \"hide\": true,\n        \"iconColor\": \"rgba(0, 211, 255, 1)\",\n        \"name\": \"Annotations & Alerts\",\n        \"type\": \"dashboard\"\n      }\n    ]\n  },\n  \"editable\": true,\n  \"fiscalYearStartMonth\": 0,\n  \"graphTooltip\": 0,\n  \"id\": null,\n  \"links\": [],\n  \"panels\": [\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"gridPos\": {\n        \"h\": 6,\n        \"w\": 9,\n        \"x\": 0,\n        \"y\": 0\n      },\n      \"id\": 11,\n      \"options\": {\n        \"code\": {\n          \"language\": \"plaintext\",\n          \"showLineNumbers\": false,\n          \"showMiniMap\": false\n        },\n        \"content\": \"\\n# Attestation Processing Metrics\\n\\nMetrics regarding `BeaconChain::process_attestation`, which processes `Attestation` from the network (but not in blocks).\\n\\nCollected from the [`beacon_chain`](https://github.com/sigp/lighthouse/tree/master/beacon_node/beacon_chain) crate.\\n\\n\\n\\n\",\n        \"mode\": \"markdown\"\n      },\n      \"pluginVersion\": \"10.4.1\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"refId\": \"A\"\n        }\n      ],\n      \"transparent\": true,\n      \"type\": \"text\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"palette-classic\"\n          },\n          \"custom\": {\n            \"axisBorderShow\": false,\n            \"axisCenteredZero\": false,\n            \"axisColorMode\": \"text\",\n            \"axisLabel\": \"Percentage of Balance\",\n            \"axisPlacement\": \"auto\",\n            \"barAlignment\": 0,\n            \"drawStyle\": \"line\",\n            \"fillOpacity\": 10,\n            \"gradientMode\": \"none\",\n            \"hideFrom\": {\n              \"legend\": false,\n              \"tooltip\": false,\n              \"viz\": false\n            },\n            \"insertNulls\": false,\n            \"lineInterpolation\": \"linear\",\n            \"lineWidth\": 1,\n            \"pointSize\": 5,\n            \"scaleDistribution\": {\n              \"type\": \"linear\"\n            },\n            \"showPoints\": \"never\",\n            \"spanNulls\": false,\n            \"stacking\": {\n              \"group\": \"A\",\n              \"mode\": \"none\"\n            },\n            \"thresholdsStyle\": {\n              \"mode\": \"off\"\n            }\n          },\n          \"decimals\": 0,\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\",\n                \"value\": null\n              },\n              {\n                \"color\": \"red\",\n                \"value\": 80\n              }\n            ]\n          },\n          \"unit\": \"percentunit\"\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 6,\n        \"w\": 14,\n        \"x\": 10,\n        \"y\": 0\n      },\n      \"id\": 41,\n      \"options\": {\n        \"legend\": {\n          \"calcs\": [],\n          \"displayMode\": \"list\",\n          \"placement\": \"bottom\",\n          \"showLegend\": false\n        },\n        \"tooltip\": {\n          \"mode\": \"multi\",\n          \"sort\": \"none\"\n        }\n      },\n      \"pluginVersion\": \"7.1.1\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"expr\": \"beacon_participation_prev_epoch_attester\",\n          \"format\": \"time_series\",\n          \"interval\": \"\",\n          \"intervalFactor\": 1,\n          \"legendFormat\": \"\",\n          \"refId\": \"A\"\n        }\n      ],\n      \"title\": \"Previous Epoch Attesting Balance\",\n      \"type\": \"timeseries\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"gridPos\": {\n        \"h\": 2,\n        \"w\": 24,\n        \"x\": 0,\n        \"y\": 6\n      },\n      \"id\": 12,\n      \"options\": {\n        \"code\": {\n          \"language\": \"plaintext\",\n          \"showLineNumbers\": false,\n          \"showMiniMap\": false\n        },\n        \"content\": \"\\n### Gossip Verification Times\\n\\n\\nTimes to verify the attestation before re-gossiping\\n\",\n        \"mode\": \"markdown\"\n      },\n      \"pluginVersion\": \"10.4.1\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"refId\": \"A\"\n        }\n      ],\n      \"transparent\": true,\n      \"type\": \"text\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"description\": \"\",\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"palette-classic\"\n          },\n          \"custom\": {\n            \"axisBorderShow\": false,\n            \"axisCenteredZero\": false,\n            \"axisColorMode\": \"text\",\n            \"axisLabel\": \"\",\n            \"axisPlacement\": \"auto\",\n            \"barAlignment\": 0,\n            \"drawStyle\": \"line\",\n            \"fillOpacity\": 10,\n            \"gradientMode\": \"none\",\n            \"hideFrom\": {\n              \"legend\": false,\n              \"tooltip\": false,\n              \"viz\": false\n            },\n            \"insertNulls\": false,\n            \"lineInterpolation\": \"linear\",\n            \"lineWidth\": 1,\n            \"pointSize\": 5,\n            \"scaleDistribution\": {\n              \"type\": \"linear\"\n            },\n            \"showPoints\": \"never\",\n            \"spanNulls\": false,\n            \"stacking\": {\n              \"group\": \"A\",\n              \"mode\": \"none\"\n            },\n            \"thresholdsStyle\": {\n              \"mode\": \"off\"\n            }\n          },\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\",\n                \"value\": null\n              },\n              {\n                \"color\": \"red\",\n                \"value\": 80\n              }\n            ]\n          },\n          \"unit\": \"s\"\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 6,\n        \"w\": 12,\n        \"x\": 0,\n        \"y\": 8\n      },\n      \"id\": 36,\n      \"options\": {\n        \"legend\": {\n          \"calcs\": [],\n          \"displayMode\": \"list\",\n          \"placement\": \"bottom\",\n          \"showLegend\": false\n        },\n        \"tooltip\": {\n          \"mode\": \"multi\",\n          \"sort\": \"none\"\n        }\n      },\n      \"pluginVersion\": \"7.1.1\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"expr\": \"rate(beacon_aggregated_attestation_gossip_verification_seconds_sum[5m])\\n/\\nrate(beacon_aggregated_attestation_gossip_verification_seconds_count[5m])\",\n          \"format\": \"time_series\",\n          \"interval\": \"\",\n          \"intervalFactor\": 1,\n          \"legendFormat\": \"\",\n          \"refId\": \"A\"\n        }\n      ],\n      \"title\": \"Aggregated Attn Gossip Verification Times\",\n      \"type\": \"timeseries\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"description\": \"\",\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"palette-classic\"\n          },\n          \"custom\": {\n            \"axisBorderShow\": false,\n            \"axisCenteredZero\": false,\n            \"axisColorMode\": \"text\",\n            \"axisLabel\": \"\",\n            \"axisPlacement\": \"auto\",\n            \"barAlignment\": 0,\n            \"drawStyle\": \"line\",\n            \"fillOpacity\": 10,\n            \"gradientMode\": \"none\",\n            \"hideFrom\": {\n              \"legend\": false,\n              \"tooltip\": false,\n              \"viz\": false\n            },\n            \"insertNulls\": false,\n            \"lineInterpolation\": \"linear\",\n            \"lineWidth\": 1,\n            \"pointSize\": 5,\n            \"scaleDistribution\": {\n              \"type\": \"linear\"\n            },\n            \"showPoints\": \"never\",\n            \"spanNulls\": false,\n            \"stacking\": {\n              \"group\": \"A\",\n              \"mode\": \"none\"\n            },\n            \"thresholdsStyle\": {\n              \"mode\": \"off\"\n            }\n          },\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\",\n                \"value\": null\n              },\n              {\n                \"color\": \"red\",\n                \"value\": 80\n              }\n            ]\n          },\n          \"unit\": \"s\"\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 6,\n        \"w\": 12,\n        \"x\": 12,\n        \"y\": 8\n      },\n      \"id\": 24,\n      \"options\": {\n        \"legend\": {\n          \"calcs\": [],\n          \"displayMode\": \"list\",\n          \"placement\": \"bottom\",\n          \"showLegend\": false\n        },\n        \"tooltip\": {\n          \"mode\": \"multi\",\n          \"sort\": \"none\"\n        }\n      },\n      \"pluginVersion\": \"7.1.1\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"expr\": \"rate(beacon_unaggregated_attestation_gossip_verification_seconds_sum[5m])\\n/\\nrate(beacon_unaggregated_attestation_gossip_verification_seconds_count[5m])\",\n          \"format\": \"time_series\",\n          \"interval\": \"\",\n          \"intervalFactor\": 1,\n          \"legendFormat\": \"\",\n          \"refId\": \"A\"\n        }\n      ],\n      \"title\": \"Unaggregated Attn Gossip Verification Times\",\n      \"type\": \"timeseries\"\n    },\n    {\n      \"cards\": {},\n      \"color\": {\n        \"cardColor\": \"#b4ff00\",\n        \"colorScale\": \"sqrt\",\n        \"colorScheme\": \"interpolateOranges\",\n        \"exponent\": 0.5,\n        \"mode\": \"spectrum\"\n      },\n      \"dataFormat\": \"timeseries\",\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"description\": \"\",\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"custom\": {\n            \"hideFrom\": {\n              \"legend\": false,\n              \"tooltip\": false,\n              \"viz\": false\n            },\n            \"scaleDistribution\": {\n              \"type\": \"linear\"\n            }\n          }\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 6,\n        \"w\": 12,\n        \"x\": 0,\n        \"y\": 14\n      },\n      \"heatmap\": {},\n      \"hideZeroBuckets\": false,\n      \"highlightCards\": true,\n      \"id\": 47,\n      \"legend\": {\n        \"show\": false\n      },\n      \"options\": {\n        \"calculate\": true,\n        \"calculation\": {},\n        \"cellGap\": 2,\n        \"cellValues\": {},\n        \"color\": {\n          \"exponent\": 0.5,\n          \"fill\": \"#b4ff00\",\n          \"mode\": \"scheme\",\n          \"reverse\": false,\n          \"scale\": \"exponential\",\n          \"scheme\": \"Oranges\",\n          \"steps\": 128\n        },\n        \"exemplars\": {\n          \"color\": \"rgba(255,0,255,0.7)\"\n        },\n        \"filterValues\": {\n          \"le\": 1E-9\n        },\n        \"legend\": {\n          \"show\": false\n        },\n        \"rowsFrame\": {\n          \"layout\": \"auto\"\n        },\n        \"showValue\": \"never\",\n        \"tooltip\": {\n          \"mode\": \"single\",\n          \"showColorScale\": false,\n          \"yHistogram\": false\n        },\n        \"yAxis\": {\n          \"axisPlacement\": \"left\",\n          \"reverse\": false,\n          \"unit\": \"s\"\n        }\n      },\n      \"pluginVersion\": \"10.4.1\",\n      \"reverseYBuckets\": false,\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"expr\": \"rate(beacon_aggregated_attestation_gossip_verification_seconds_sum[5m])\\n/\\nrate(beacon_aggregated_attestation_gossip_verification_seconds_count[5m])\",\n          \"format\": \"time_series\",\n          \"interval\": \"\",\n          \"intervalFactor\": 1,\n          \"legendFormat\": \"\",\n          \"refId\": \"A\"\n        }\n      ],\n      \"title\": \"Aggregated Attn Gossip Verification Times\",\n      \"tooltip\": {\n        \"show\": true,\n        \"showHistogram\": false\n      },\n      \"type\": \"heatmap\",\n      \"xAxis\": {\n        \"show\": true\n      },\n      \"yAxis\": {\n        \"format\": \"s\",\n        \"logBase\": 1,\n        \"show\": true\n      },\n      \"yBucketBound\": \"auto\"\n    },\n    {\n      \"cards\": {},\n      \"color\": {\n        \"cardColor\": \"#b4ff00\",\n        \"colorScale\": \"sqrt\",\n        \"colorScheme\": \"interpolateOranges\",\n        \"exponent\": 0.5,\n        \"mode\": \"spectrum\"\n      },\n      \"dataFormat\": \"timeseries\",\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"description\": \"\",\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"custom\": {\n            \"hideFrom\": {\n              \"legend\": false,\n              \"tooltip\": false,\n              \"viz\": false\n            },\n            \"scaleDistribution\": {\n              \"type\": \"linear\"\n            }\n          }\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 6,\n        \"w\": 12,\n        \"x\": 12,\n        \"y\": 14\n      },\n      \"heatmap\": {},\n      \"hideZeroBuckets\": false,\n      \"highlightCards\": true,\n      \"id\": 48,\n      \"legend\": {\n        \"show\": false\n      },\n      \"options\": {\n        \"calculate\": true,\n        \"calculation\": {},\n        \"cellGap\": 2,\n        \"cellValues\": {},\n        \"color\": {\n          \"exponent\": 0.5,\n          \"fill\": \"#b4ff00\",\n          \"mode\": \"scheme\",\n          \"reverse\": false,\n          \"scale\": \"exponential\",\n          \"scheme\": \"Oranges\",\n          \"steps\": 128\n        },\n        \"exemplars\": {\n          \"color\": \"rgba(255,0,255,0.7)\"\n        },\n        \"filterValues\": {\n          \"le\": 1E-9\n        },\n        \"legend\": {\n          \"show\": false\n        },\n        \"rowsFrame\": {\n          \"layout\": \"auto\"\n        },\n        \"showValue\": \"never\",\n        \"tooltip\": {\n          \"mode\": \"single\",\n          \"showColorScale\": false,\n          \"yHistogram\": false\n        },\n        \"yAxis\": {\n          \"axisPlacement\": \"left\",\n          \"reverse\": false,\n          \"unit\": \"s\"\n        }\n      },\n      \"pluginVersion\": \"10.4.1\",\n      \"reverseYBuckets\": false,\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"expr\": \"rate(beacon_unaggregated_attestation_gossip_verification_seconds_sum[5m])\\n/\\nrate(beacon_unaggregated_attestation_gossip_verification_seconds_count[5m])\",\n          \"format\": \"time_series\",\n          \"interval\": \"\",\n          \"intervalFactor\": 1,\n          \"legendFormat\": \"\",\n          \"refId\": \"A\"\n        }\n      ],\n      \"title\": \"Unaggregated Attn Gossip Verification Times\",\n      \"tooltip\": {\n        \"show\": true,\n        \"showHistogram\": false\n      },\n      \"type\": \"heatmap\",\n      \"xAxis\": {\n        \"show\": true\n      },\n      \"yAxis\": {\n        \"format\": \"s\",\n        \"logBase\": 1,\n        \"show\": true\n      },\n      \"yBucketBound\": \"auto\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"gridPos\": {\n        \"h\": 2,\n        \"w\": 24,\n        \"x\": 0,\n        \"y\": 20\n      },\n      \"id\": 43,\n      \"options\": {\n        \"code\": {\n          \"language\": \"plaintext\",\n          \"showLineNumbers\": false,\n          \"showMiniMap\": false\n        },\n        \"content\": \"\\n### Storing Attestation\\n\\nTimes to store the attestation in fork choice or pools.\\n\",\n        \"mode\": \"markdown\"\n      },\n      \"pluginVersion\": \"10.4.1\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"refId\": \"A\"\n        }\n      ],\n      \"transparent\": true,\n      \"type\": \"text\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"description\": \"\",\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"palette-classic\"\n          },\n          \"custom\": {\n            \"axisBorderShow\": false,\n            \"axisCenteredZero\": false,\n            \"axisColorMode\": \"text\",\n            \"axisLabel\": \"\",\n            \"axisPlacement\": \"auto\",\n            \"barAlignment\": 0,\n            \"drawStyle\": \"line\",\n            \"fillOpacity\": 10,\n            \"gradientMode\": \"none\",\n            \"hideFrom\": {\n              \"legend\": false,\n              \"tooltip\": false,\n              \"viz\": false\n            },\n            \"insertNulls\": false,\n            \"lineInterpolation\": \"linear\",\n            \"lineWidth\": 1,\n            \"pointSize\": 5,\n            \"scaleDistribution\": {\n              \"type\": \"linear\"\n            },\n            \"showPoints\": \"never\",\n            \"spanNulls\": false,\n            \"stacking\": {\n              \"group\": \"A\",\n              \"mode\": \"none\"\n            },\n            \"thresholdsStyle\": {\n              \"mode\": \"off\"\n            }\n          },\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\",\n                \"value\": null\n              },\n              {\n                \"color\": \"red\",\n                \"value\": 80\n              }\n            ]\n          },\n          \"unit\": \"s\"\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 6,\n        \"w\": 8,\n        \"x\": 0,\n        \"y\": 22\n      },\n      \"id\": 42,\n      \"options\": {\n        \"legend\": {\n          \"calcs\": [],\n          \"displayMode\": \"list\",\n          \"placement\": \"bottom\",\n          \"showLegend\": false\n        },\n        \"tooltip\": {\n          \"mode\": \"multi\",\n          \"sort\": \"none\"\n        }\n      },\n      \"pluginVersion\": \"7.1.1\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"expr\": \"rate(beacon_attestation_processing_apply_to_fork_choice_sum[5m])\\n/\\nrate(beacon_attestation_processing_apply_to_fork_choice_count[5m])\",\n          \"format\": \"time_series\",\n          \"interval\": \"\",\n          \"intervalFactor\": 1,\n          \"legendFormat\": \"\",\n          \"refId\": \"A\"\n        }\n      ],\n      \"title\": \"Apply Attestation to Fork Choice\",\n      \"type\": \"timeseries\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"description\": \"\",\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"palette-classic\"\n          },\n          \"custom\": {\n            \"axisBorderShow\": false,\n            \"axisCenteredZero\": false,\n            \"axisColorMode\": \"text\",\n            \"axisLabel\": \"\",\n            \"axisPlacement\": \"auto\",\n            \"barAlignment\": 0,\n            \"drawStyle\": \"line\",\n            \"fillOpacity\": 10,\n            \"gradientMode\": \"none\",\n            \"hideFrom\": {\n              \"legend\": false,\n              \"tooltip\": false,\n              \"viz\": false\n            },\n            \"insertNulls\": false,\n            \"lineInterpolation\": \"linear\",\n            \"lineWidth\": 1,\n            \"pointSize\": 5,\n            \"scaleDistribution\": {\n              \"type\": \"linear\"\n            },\n            \"showPoints\": \"never\",\n            \"spanNulls\": false,\n            \"stacking\": {\n              \"group\": \"A\",\n              \"mode\": \"none\"\n            },\n            \"thresholdsStyle\": {\n              \"mode\": \"off\"\n            }\n          },\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\",\n                \"value\": null\n              },\n              {\n                \"color\": \"red\",\n                \"value\": 80\n              }\n            ]\n          },\n          \"unit\": \"s\"\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 6,\n        \"w\": 8,\n        \"x\": 8,\n        \"y\": 22\n      },\n      \"id\": 44,\n      \"options\": {\n        \"legend\": {\n          \"calcs\": [],\n          \"displayMode\": \"list\",\n          \"placement\": \"bottom\",\n          \"showLegend\": false\n        },\n        \"tooltip\": {\n          \"mode\": \"multi\",\n          \"sort\": \"none\"\n        }\n      },\n      \"pluginVersion\": \"7.1.1\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"expr\": \"rate(beacon_attestation_processing_apply_to_agg_pool_sum[5m])\\n/\\nrate(beacon_attestation_processing_apply_to_agg_pool_count[5m])\",\n          \"format\": \"time_series\",\n          \"interval\": \"\",\n          \"intervalFactor\": 1,\n          \"legendFormat\": \"\",\n          \"refId\": \"A\"\n        }\n      ],\n      \"title\": \"Apply Aggregate to Aggregation Pool\",\n      \"type\": \"timeseries\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"description\": \"\",\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"palette-classic\"\n          },\n          \"custom\": {\n            \"axisBorderShow\": false,\n            \"axisCenteredZero\": false,\n            \"axisColorMode\": \"text\",\n            \"axisLabel\": \"\",\n            \"axisPlacement\": \"auto\",\n            \"barAlignment\": 0,\n            \"drawStyle\": \"line\",\n            \"fillOpacity\": 10,\n            \"gradientMode\": \"none\",\n            \"hideFrom\": {\n              \"legend\": false,\n              \"tooltip\": false,\n              \"viz\": false\n            },\n            \"insertNulls\": false,\n            \"lineInterpolation\": \"linear\",\n            \"lineWidth\": 1,\n            \"pointSize\": 5,\n            \"scaleDistribution\": {\n              \"type\": \"linear\"\n            },\n            \"showPoints\": \"never\",\n            \"spanNulls\": false,\n            \"stacking\": {\n              \"group\": \"A\",\n              \"mode\": \"none\"\n            },\n            \"thresholdsStyle\": {\n              \"mode\": \"off\"\n            }\n          },\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\",\n                \"value\": null\n              },\n              {\n                \"color\": \"red\",\n                \"value\": 80\n              }\n            ]\n          },\n          \"unit\": \"s\"\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 6,\n        \"w\": 8,\n        \"x\": 16,\n        \"y\": 22\n      },\n      \"id\": 45,\n      \"options\": {\n        \"legend\": {\n          \"calcs\": [],\n          \"displayMode\": \"list\",\n          \"placement\": \"bottom\",\n          \"showLegend\": false\n        },\n        \"tooltip\": {\n          \"mode\": \"multi\",\n          \"sort\": \"none\"\n        }\n      },\n      \"pluginVersion\": \"7.1.1\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"expr\": \"rate(beacon_attestation_processing_apply_to_op_pool_sum[5m])\\n/\\nrate(beacon_attestation_processing_apply_to_op_pool_count[5m])\",\n          \"format\": \"time_series\",\n          \"interval\": \"\",\n          \"intervalFactor\": 1,\n          \"legendFormat\": \"\",\n          \"refId\": \"A\"\n        }\n      ],\n      \"title\": \"Apply Aggregate to Op Pool\",\n      \"type\": \"timeseries\"\n    },\n    {\n      \"content\": \"\\n### Component Verification Times\\n\\n\\nTimes to verify specific components of attestations\\n\",\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"custom\": {}\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 2,\n        \"w\": 24,\n        \"x\": 0,\n        \"y\": 28\n      },\n      \"id\": 35,\n      \"mode\": \"markdown\",\n      \"options\": {\n        \"content\": \"\\n### Component Verification Times\\n\\n\\nTimes to verify specific components of attestations\\n\",\n        \"mode\": \"markdown\"\n      },\n      \"pluginVersion\": \"7.1.0\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"refId\": \"A\"\n        }\n      ],\n      \"transparent\": true,\n      \"type\": \"text\"\n    },\n    {\n      \"aliasColors\": {},\n      \"autoMigrateFrom\": \"graph\",\n      \"bars\": false,\n      \"dashLength\": 10,\n      \"dashes\": false,\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"description\": \"\",\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"custom\": {}\n        },\n        \"overrides\": []\n      },\n      \"fill\": 1,\n      \"fillGradient\": 0,\n      \"gridPos\": {\n        \"h\": 6,\n        \"w\": 6,\n        \"x\": 0,\n        \"y\": 30\n      },\n      \"hiddenSeries\": false,\n      \"id\": 22,\n      \"legend\": {\n        \"avg\": false,\n        \"current\": false,\n        \"max\": false,\n        \"min\": false,\n        \"show\": false,\n        \"total\": false,\n        \"values\": false\n      },\n      \"lines\": true,\n      \"linewidth\": 1,\n      \"nullPointMode\": \"null\",\n      \"percentage\": false,\n      \"pluginVersion\": \"7.1.1\",\n      \"pointradius\": 2,\n      \"points\": false,\n      \"renderer\": \"flot\",\n      \"seriesOverrides\": [],\n      \"spaceLength\": 10,\n      \"stack\": false,\n      \"steppedLine\": false,\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"expr\": \"rate(beacon_attestation_processing_signature_setup_seconds_sum[5m])\\n/\\nrate(beacon_attestation_processing_signature_setup_seconds_count[5m])\",\n          \"format\": \"time_series\",\n          \"intervalFactor\": 1,\n          \"refId\": \"A\"\n        }\n      ],\n      \"thresholds\": [],\n      \"timeRegions\": [],\n      \"title\": \"Attestation Signature Verification Setup Time\",\n      \"tooltip\": {\n        \"shared\": true,\n        \"sort\": 0,\n        \"value_type\": \"individual\"\n      },\n      \"type\": \"timeseries\",\n      \"xaxis\": {\n        \"mode\": \"time\",\n        \"show\": true,\n        \"values\": []\n      },\n      \"yaxes\": [\n        {\n          \"format\": \"s\",\n          \"logBase\": 1,\n          \"show\": true\n        },\n        {\n          \"format\": \"short\",\n          \"logBase\": 1,\n          \"show\": true\n        }\n      ],\n      \"yaxis\": {\n        \"align\": false\n      }\n    },\n    {\n      \"aliasColors\": {},\n      \"autoMigrateFrom\": \"graph\",\n      \"bars\": false,\n      \"dashLength\": 10,\n      \"dashes\": false,\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"description\": \"\",\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"custom\": {}\n        },\n        \"overrides\": []\n      },\n      \"fill\": 1,\n      \"fillGradient\": 0,\n      \"gridPos\": {\n        \"h\": 6,\n        \"w\": 6,\n        \"x\": 6,\n        \"y\": 30\n      },\n      \"hiddenSeries\": false,\n      \"id\": 34,\n      \"legend\": {\n        \"avg\": false,\n        \"current\": false,\n        \"max\": false,\n        \"min\": false,\n        \"show\": false,\n        \"total\": false,\n        \"values\": false\n      },\n      \"lines\": true,\n      \"linewidth\": 1,\n      \"nullPointMode\": \"null\",\n      \"percentage\": false,\n      \"pluginVersion\": \"7.1.1\",\n      \"pointradius\": 2,\n      \"points\": false,\n      \"renderer\": \"flot\",\n      \"seriesOverrides\": [],\n      \"spaceLength\": 10,\n      \"stack\": false,\n      \"steppedLine\": false,\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"expr\": \"rate(beacon_attestation_processing_signature_setup_seconds_sum[5m])\\n/\\nrate(beacon_attestation_processing_signature_setup_seconds_count[5m])\",\n          \"format\": \"time_series\",\n          \"intervalFactor\": 1,\n          \"refId\": \"A\"\n        }\n      ],\n      \"thresholds\": [],\n      \"timeRegions\": [],\n      \"title\": \"Attestation Signature Verification Setup Time\",\n      \"tooltip\": {\n        \"shared\": true,\n        \"sort\": 0,\n        \"value_type\": \"individual\"\n      },\n      \"type\": \"timeseries\",\n      \"xaxis\": {\n        \"mode\": \"time\",\n        \"show\": true,\n        \"values\": []\n      },\n      \"yaxes\": [\n        {\n          \"format\": \"s\",\n          \"logBase\": 1,\n          \"show\": true\n        },\n        {\n          \"format\": \"short\",\n          \"logBase\": 1,\n          \"show\": true\n        }\n      ],\n      \"yaxis\": {\n        \"align\": false\n      }\n    },\n    {\n      \"aliasColors\": {},\n      \"autoMigrateFrom\": \"graph\",\n      \"bars\": false,\n      \"dashLength\": 10,\n      \"dashes\": false,\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"description\": \"This is the time it takes to do just the BLS verification function (e.g., adding public keys, doing pairings, etc)\",\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"custom\": {}\n        },\n        \"overrides\": []\n      },\n      \"fill\": 1,\n      \"fillGradient\": 0,\n      \"gridPos\": {\n        \"h\": 6,\n        \"w\": 6,\n        \"x\": 12,\n        \"y\": 30\n      },\n      \"hiddenSeries\": false,\n      \"id\": 25,\n      \"legend\": {\n        \"avg\": false,\n        \"current\": false,\n        \"max\": false,\n        \"min\": false,\n        \"show\": false,\n        \"total\": false,\n        \"values\": false\n      },\n      \"lines\": true,\n      \"linewidth\": 1,\n      \"nullPointMode\": \"null\",\n      \"percentage\": false,\n      \"pluginVersion\": \"7.1.1\",\n      \"pointradius\": 2,\n      \"points\": false,\n      \"renderer\": \"flot\",\n      \"seriesOverrides\": [],\n      \"spaceLength\": 10,\n      \"stack\": false,\n      \"steppedLine\": false,\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"expr\": \"rate(beacon_attestation_processing_signature_seconds_sum[5m])\\n/\\nrate(beacon_attestation_processing_signature_seconds_count[5m])\",\n          \"format\": \"time_series\",\n          \"intervalFactor\": 1,\n          \"refId\": \"A\"\n        }\n      ],\n      \"thresholds\": [],\n      \"timeRegions\": [],\n      \"title\": \"Attestation Signature Verification Time\",\n      \"tooltip\": {\n        \"shared\": true,\n        \"sort\": 0,\n        \"value_type\": \"individual\"\n      },\n      \"type\": \"timeseries\",\n      \"xaxis\": {\n        \"mode\": \"time\",\n        \"show\": true,\n        \"values\": []\n      },\n      \"yaxes\": [\n        {\n          \"format\": \"s\",\n          \"logBase\": 1,\n          \"show\": true\n        },\n        {\n          \"format\": \"short\",\n          \"logBase\": 1,\n          \"show\": true\n        }\n      ],\n      \"yaxis\": {\n        \"align\": false\n      }\n    },\n    {\n      \"aliasColors\": {},\n      \"autoMigrateFrom\": \"graph\",\n      \"bars\": false,\n      \"dashLength\": 10,\n      \"dashes\": false,\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"description\": \"\",\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"custom\": {}\n        },\n        \"overrides\": []\n      },\n      \"fill\": 1,\n      \"fillGradient\": 0,\n      \"gridPos\": {\n        \"h\": 11,\n        \"w\": 6,\n        \"x\": 18,\n        \"y\": 30\n      },\n      \"hiddenSeries\": false,\n      \"id\": 46,\n      \"legend\": {\n        \"avg\": false,\n        \"current\": false,\n        \"max\": false,\n        \"min\": false,\n        \"show\": false,\n        \"total\": false,\n        \"values\": false\n      },\n      \"lines\": true,\n      \"linewidth\": 1,\n      \"nullPointMode\": \"null\",\n      \"percentage\": false,\n      \"pluginVersion\": \"7.1.1\",\n      \"pointradius\": 2,\n      \"points\": false,\n      \"renderer\": \"flot\",\n      \"seriesOverrides\": [],\n      \"spaceLength\": 10,\n      \"stack\": false,\n      \"steppedLine\": false,\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"expr\": \"rate(beacon_attestation_processing_agg_pool_aggregation_sum[5m])\\n/\\nrate(beacon_attestation_processing_agg_pool_aggregation_count[5m])\",\n          \"format\": \"time_series\",\n          \"interval\": \"\",\n          \"intervalFactor\": 1,\n          \"legendFormat\": \"\",\n          \"refId\": \"A\"\n        }\n      ],\n      \"thresholds\": [],\n      \"timeRegions\": [],\n      \"title\": \"Agg. Pool Signature Aggregation Time\",\n      \"tooltip\": {\n        \"shared\": true,\n        \"sort\": 0,\n        \"value_type\": \"individual\"\n      },\n      \"type\": \"timeseries\",\n      \"xaxis\": {\n        \"mode\": \"time\",\n        \"show\": true,\n        \"values\": []\n      },\n      \"yaxes\": [\n        {\n          \"$$hashKey\": \"object:6817\",\n          \"format\": \"s\",\n          \"logBase\": 1,\n          \"show\": true\n        },\n        {\n          \"$$hashKey\": \"object:6818\",\n          \"format\": \"short\",\n          \"logBase\": 1,\n          \"show\": true\n        }\n      ],\n      \"yaxis\": {\n        \"align\": false\n      }\n    },\n    {\n      \"aliasColors\": {},\n      \"autoMigrateFrom\": \"graph\",\n      \"bars\": false,\n      \"dashLength\": 10,\n      \"dashes\": false,\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"description\": \"\",\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"custom\": {}\n        },\n        \"overrides\": []\n      },\n      \"fill\": 1,\n      \"fillGradient\": 0,\n      \"gridPos\": {\n        \"h\": 5,\n        \"w\": 6,\n        \"x\": 0,\n        \"y\": 36\n      },\n      \"hiddenSeries\": false,\n      \"id\": 30,\n      \"legend\": {\n        \"avg\": false,\n        \"current\": false,\n        \"max\": false,\n        \"min\": false,\n        \"show\": false,\n        \"total\": false,\n        \"values\": false\n      },\n      \"lines\": true,\n      \"linewidth\": 1,\n      \"nullPointMode\": \"null\",\n      \"percentage\": false,\n      \"pluginVersion\": \"7.1.1\",\n      \"pointradius\": 2,\n      \"points\": false,\n      \"renderer\": \"flot\",\n      \"seriesOverrides\": [],\n      \"spaceLength\": 10,\n      \"stack\": false,\n      \"steppedLine\": false,\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"expr\": \"rate(beacon_attestation_processing_state_skip_seconds_sum[5m])\\n/\\nrate(beacon_attestation_processing_state_skip_seconds_count[5m])\",\n          \"format\": \"time_series\",\n          \"intervalFactor\": 1,\n          \"refId\": \"A\"\n        }\n      ],\n      \"thresholds\": [],\n      \"timeRegions\": [],\n      \"title\": \"Attestation State Skip Time\",\n      \"tooltip\": {\n        \"shared\": true,\n        \"sort\": 0,\n        \"value_type\": \"individual\"\n      },\n      \"type\": \"timeseries\",\n      \"xaxis\": {\n        \"mode\": \"time\",\n        \"show\": true,\n        \"values\": []\n      },\n      \"yaxes\": [\n        {\n          \"format\": \"s\",\n          \"logBase\": 1,\n          \"show\": true\n        },\n        {\n          \"format\": \"short\",\n          \"logBase\": 1,\n          \"show\": true\n        }\n      ],\n      \"yaxis\": {\n        \"align\": false\n      }\n    },\n    {\n      \"aliasColors\": {},\n      \"autoMigrateFrom\": \"graph\",\n      \"bars\": false,\n      \"dashLength\": 10,\n      \"dashes\": false,\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"description\": \"\",\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"custom\": {}\n        },\n        \"overrides\": []\n      },\n      \"fill\": 1,\n      \"fillGradient\": 0,\n      \"gridPos\": {\n        \"h\": 5,\n        \"w\": 6,\n        \"x\": 6,\n        \"y\": 36\n      },\n      \"hiddenSeries\": false,\n      \"id\": 23,\n      \"legend\": {\n        \"avg\": false,\n        \"current\": false,\n        \"max\": false,\n        \"min\": false,\n        \"show\": false,\n        \"total\": false,\n        \"values\": false\n      },\n      \"lines\": true,\n      \"linewidth\": 1,\n      \"nullPointMode\": \"null\",\n      \"percentage\": false,\n      \"pluginVersion\": \"7.1.1\",\n      \"pointradius\": 2,\n      \"points\": false,\n      \"renderer\": \"flot\",\n      \"seriesOverrides\": [],\n      \"spaceLength\": 10,\n      \"stack\": false,\n      \"steppedLine\": false,\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"expr\": \"rate(beacon_attestation_processing_state_read_seconds_sum[5m])\\n/\\nrate(beacon_attestation_processing_state_read_seconds_count[5m])\",\n          \"format\": \"time_series\",\n          \"intervalFactor\": 1,\n          \"refId\": \"A\"\n        }\n      ],\n      \"thresholds\": [],\n      \"timeRegions\": [],\n      \"title\": \"Attestation State Read Time\",\n      \"tooltip\": {\n        \"shared\": true,\n        \"sort\": 0,\n        \"value_type\": \"individual\"\n      },\n      \"type\": \"timeseries\",\n      \"xaxis\": {\n        \"mode\": \"time\",\n        \"show\": true,\n        \"values\": []\n      },\n      \"yaxes\": [\n        {\n          \"format\": \"s\",\n          \"logBase\": 1,\n          \"show\": true\n        },\n        {\n          \"format\": \"short\",\n          \"logBase\": 1,\n          \"show\": true\n        }\n      ],\n      \"yaxis\": {\n        \"align\": false\n      }\n    },\n    {\n      \"aliasColors\": {},\n      \"autoMigrateFrom\": \"graph\",\n      \"bars\": false,\n      \"dashLength\": 10,\n      \"dashes\": false,\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"description\": \"\",\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"custom\": {}\n        },\n        \"overrides\": []\n      },\n      \"fill\": 1,\n      \"fillGradient\": 0,\n      \"gridPos\": {\n        \"h\": 5,\n        \"w\": 6,\n        \"x\": 12,\n        \"y\": 36\n      },\n      \"hiddenSeries\": false,\n      \"id\": 29,\n      \"legend\": {\n        \"avg\": false,\n        \"current\": false,\n        \"max\": false,\n        \"min\": false,\n        \"show\": false,\n        \"total\": false,\n        \"values\": false\n      },\n      \"lines\": true,\n      \"linewidth\": 1,\n      \"nullPointMode\": \"null\",\n      \"percentage\": false,\n      \"pluginVersion\": \"7.1.1\",\n      \"pointradius\": 2,\n      \"points\": false,\n      \"renderer\": \"flot\",\n      \"seriesOverrides\": [],\n      \"spaceLength\": 10,\n      \"stack\": false,\n      \"steppedLine\": false,\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"expr\": \"rate(beacon_attestation_processing_committee_building_seconds_sum[5m])\\n/\\nrate(beacon_attestation_processing_committee_building_seconds_count[5m])\",\n          \"format\": \"time_series\",\n          \"intervalFactor\": 1,\n          \"refId\": \"A\"\n        }\n      ],\n      \"thresholds\": [],\n      \"timeRegions\": [],\n      \"title\": \"Attestation Committee Building Time\",\n      \"tooltip\": {\n        \"shared\": true,\n        \"sort\": 0,\n        \"value_type\": \"individual\"\n      },\n      \"type\": \"timeseries\",\n      \"xaxis\": {\n        \"mode\": \"time\",\n        \"show\": true,\n        \"values\": []\n      },\n      \"yaxes\": [\n        {\n          \"format\": \"s\",\n          \"logBase\": 1,\n          \"show\": true\n        },\n        {\n          \"format\": \"short\",\n          \"logBase\": 1,\n          \"show\": true\n        }\n      ],\n      \"yaxis\": {\n        \"align\": false\n      }\n    },\n    {\n      \"content\": \"\\n### Cache Hits/Misses\\n\\n\\nRates of success/failure when trying the shuffling cache.\\n\",\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"custom\": {}\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 2,\n        \"w\": 24,\n        \"x\": 0,\n        \"y\": 41\n      },\n      \"id\": 33,\n      \"mode\": \"markdown\",\n      \"options\": {\n        \"content\": \"\\n### Cache Hits/Misses\\n\\n\\nRates of success/failure when trying the shuffling cache.\\n\",\n        \"mode\": \"markdown\"\n      },\n      \"pluginVersion\": \"7.1.0\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"refId\": \"A\"\n        }\n      ],\n      \"transparent\": true,\n      \"type\": \"text\"\n    },\n    {\n      \"aliasColors\": {},\n      \"autoMigrateFrom\": \"graph\",\n      \"bars\": false,\n      \"dashLength\": 10,\n      \"dashes\": false,\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"description\": \"\",\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"custom\": {}\n        },\n        \"overrides\": []\n      },\n      \"fill\": 1,\n      \"fillGradient\": 0,\n      \"gridPos\": {\n        \"h\": 6,\n        \"w\": 12,\n        \"x\": 0,\n        \"y\": 43\n      },\n      \"hiddenSeries\": false,\n      \"id\": 26,\n      \"legend\": {\n        \"avg\": false,\n        \"current\": false,\n        \"max\": false,\n        \"min\": false,\n        \"show\": false,\n        \"total\": false,\n        \"values\": false\n      },\n      \"lines\": true,\n      \"linewidth\": 1,\n      \"nullPointMode\": \"null\",\n      \"percentage\": false,\n      \"pluginVersion\": \"7.1.1\",\n      \"pointradius\": 2,\n      \"points\": false,\n      \"renderer\": \"flot\",\n      \"seriesOverrides\": [],\n      \"spaceLength\": 10,\n      \"stack\": false,\n      \"steppedLine\": false,\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"expr\": \"increase(beacon_shuffling_cache_hits_total[1m])\",\n          \"format\": \"time_series\",\n          \"interval\": \"\",\n          \"intervalFactor\": 1,\n          \"legendFormat\": \"\",\n          \"refId\": \"A\"\n        }\n      ],\n      \"thresholds\": [],\n      \"timeRegions\": [],\n      \"title\": \"Shuffling Cache Hits per Minute\",\n      \"tooltip\": {\n        \"shared\": true,\n        \"sort\": 0,\n        \"value_type\": \"individual\"\n      },\n      \"type\": \"timeseries\",\n      \"xaxis\": {\n        \"mode\": \"time\",\n        \"show\": true,\n        \"values\": []\n      },\n      \"yaxes\": [\n        {\n          \"$$hashKey\": \"object:320\",\n          \"format\": \"none\",\n          \"logBase\": 1,\n          \"show\": true\n        },\n        {\n          \"$$hashKey\": \"object:321\",\n          \"format\": \"short\",\n          \"logBase\": 1,\n          \"show\": true\n        }\n      ],\n      \"yaxis\": {\n        \"align\": false\n      }\n    },\n    {\n      \"aliasColors\": {},\n      \"autoMigrateFrom\": \"graph\",\n      \"bars\": false,\n      \"dashLength\": 10,\n      \"dashes\": false,\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"description\": \"\",\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"custom\": {}\n        },\n        \"overrides\": []\n      },\n      \"fill\": 1,\n      \"fillGradient\": 0,\n      \"gridPos\": {\n        \"h\": 6,\n        \"w\": 12,\n        \"x\": 12,\n        \"y\": 43\n      },\n      \"hiddenSeries\": false,\n      \"id\": 27,\n      \"legend\": {\n        \"avg\": false,\n        \"current\": false,\n        \"max\": false,\n        \"min\": false,\n        \"show\": false,\n        \"total\": false,\n        \"values\": false\n      },\n      \"lines\": true,\n      \"linewidth\": 1,\n      \"nullPointMode\": \"null\",\n      \"percentage\": false,\n      \"pluginVersion\": \"7.1.1\",\n      \"pointradius\": 2,\n      \"points\": false,\n      \"renderer\": \"flot\",\n      \"seriesOverrides\": [],\n      \"spaceLength\": 10,\n      \"stack\": false,\n      \"steppedLine\": false,\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"expr\": \"increase(beacon_shuffling_cache_misses_total[1m])\",\n          \"format\": \"time_series\",\n          \"interval\": \"\",\n          \"intervalFactor\": 1,\n          \"legendFormat\": \"\",\n          \"refId\": \"A\"\n        }\n      ],\n      \"thresholds\": [],\n      \"timeRegions\": [],\n      \"title\": \"Shuffling Cache Misses per Minute\",\n      \"tooltip\": {\n        \"shared\": true,\n        \"sort\": 0,\n        \"value_type\": \"individual\"\n      },\n      \"type\": \"timeseries\",\n      \"xaxis\": {\n        \"mode\": \"time\",\n        \"show\": true,\n        \"values\": []\n      },\n      \"yaxes\": [\n        {\n          \"$$hashKey\": \"object:268\",\n          \"format\": \"none\",\n          \"logBase\": 1,\n          \"show\": true\n        },\n        {\n          \"$$hashKey\": \"object:269\",\n          \"format\": \"short\",\n          \"logBase\": 1,\n          \"show\": true\n        }\n      ],\n      \"yaxis\": {\n        \"align\": false\n      }\n    },\n    {\n      \"content\": \"\\n### Requests and Successes\\n\\n\\nTracks the number of attestation processing requests and successes\\n\",\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"custom\": {}\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 2,\n        \"w\": 24,\n        \"x\": 0,\n        \"y\": 49\n      },\n      \"id\": 18,\n      \"mode\": \"markdown\",\n      \"options\": {\n        \"content\": \"\\n### Requests and Successes\\n\\n\\nTracks the number of attestation processing requests and successes\\n\",\n        \"mode\": \"markdown\"\n      },\n      \"pluginVersion\": \"7.1.0\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"refId\": \"A\"\n        }\n      ],\n      \"transparent\": true,\n      \"type\": \"text\"\n    },\n    {\n      \"aliasColors\": {},\n      \"autoMigrateFrom\": \"graph\",\n      \"bars\": false,\n      \"dashLength\": 10,\n      \"dashes\": false,\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"custom\": {}\n        },\n        \"overrides\": []\n      },\n      \"fill\": 1,\n      \"fillGradient\": 0,\n      \"gridPos\": {\n        \"h\": 5,\n        \"w\": 12,\n        \"x\": 0,\n        \"y\": 51\n      },\n      \"hiddenSeries\": false,\n      \"id\": 38,\n      \"legend\": {\n        \"avg\": false,\n        \"current\": false,\n        \"max\": false,\n        \"min\": false,\n        \"show\": false,\n        \"total\": false,\n        \"values\": false\n      },\n      \"lines\": true,\n      \"linewidth\": 1,\n      \"nullPointMode\": \"null\",\n      \"percentage\": false,\n      \"pluginVersion\": \"7.1.1\",\n      \"pointradius\": 2,\n      \"points\": false,\n      \"renderer\": \"flot\",\n      \"seriesOverrides\": [],\n      \"spaceLength\": 10,\n      \"stack\": false,\n      \"steppedLine\": false,\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"expr\": \"increase(beacon_aggregated_attestation_processing_requests_total[1m])\",\n          \"format\": \"time_series\",\n          \"interval\": \"\",\n          \"intervalFactor\": 1,\n          \"legendFormat\": \"\",\n          \"refId\": \"A\"\n        }\n      ],\n      \"thresholds\": [],\n      \"timeRegions\": [],\n      \"title\": \"Aggregated Attn. Processed per Minute\",\n      \"tooltip\": {\n        \"shared\": true,\n        \"sort\": 0,\n        \"value_type\": \"individual\"\n      },\n      \"type\": \"timeseries\",\n      \"xaxis\": {\n        \"mode\": \"time\",\n        \"show\": true,\n        \"values\": []\n      },\n      \"yaxes\": [\n        {\n          \"format\": \"none\",\n          \"label\": \"Attestations\",\n          \"logBase\": 1,\n          \"show\": true\n        },\n        {\n          \"format\": \"short\",\n          \"logBase\": 1,\n          \"show\": true\n        }\n      ],\n      \"yaxis\": {\n        \"align\": false\n      }\n    },\n    {\n      \"aliasColors\": {},\n      \"autoMigrateFrom\": \"graph\",\n      \"bars\": false,\n      \"dashLength\": 10,\n      \"dashes\": false,\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"custom\": {}\n        },\n        \"overrides\": []\n      },\n      \"fill\": 1,\n      \"fillGradient\": 0,\n      \"gridPos\": {\n        \"h\": 5,\n        \"w\": 12,\n        \"x\": 12,\n        \"y\": 51\n      },\n      \"hiddenSeries\": false,\n      \"id\": 17,\n      \"legend\": {\n        \"avg\": false,\n        \"current\": false,\n        \"max\": false,\n        \"min\": false,\n        \"show\": false,\n        \"total\": false,\n        \"values\": false\n      },\n      \"lines\": true,\n      \"linewidth\": 1,\n      \"nullPointMode\": \"null\",\n      \"percentage\": false,\n      \"pluginVersion\": \"7.1.1\",\n      \"pointradius\": 2,\n      \"points\": false,\n      \"renderer\": \"flot\",\n      \"seriesOverrides\": [],\n      \"spaceLength\": 10,\n      \"stack\": false,\n      \"steppedLine\": false,\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"expr\": \"increase(beacon_unaggregated_attestation_processing_requests_total[1m])\",\n          \"format\": \"time_series\",\n          \"interval\": \"\",\n          \"intervalFactor\": 1,\n          \"legendFormat\": \"\",\n          \"refId\": \"A\"\n        }\n      ],\n      \"thresholds\": [],\n      \"timeRegions\": [],\n      \"title\": \"Unaggregated Attn. Processed per Minute\",\n      \"tooltip\": {\n        \"shared\": true,\n        \"sort\": 0,\n        \"value_type\": \"individual\"\n      },\n      \"type\": \"timeseries\",\n      \"xaxis\": {\n        \"mode\": \"time\",\n        \"show\": true,\n        \"values\": []\n      },\n      \"yaxes\": [\n        {\n          \"format\": \"none\",\n          \"label\": \"Attestations\",\n          \"logBase\": 1,\n          \"show\": true\n        },\n        {\n          \"format\": \"short\",\n          \"logBase\": 1,\n          \"show\": true\n        }\n      ],\n      \"yaxis\": {\n        \"align\": false\n      }\n    },\n    {\n      \"aliasColors\": {},\n      \"autoMigrateFrom\": \"graph\",\n      \"bars\": false,\n      \"dashLength\": 10,\n      \"dashes\": false,\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"custom\": {}\n        },\n        \"overrides\": []\n      },\n      \"fill\": 1,\n      \"fillGradient\": 0,\n      \"gridPos\": {\n        \"h\": 5,\n        \"w\": 12,\n        \"x\": 0,\n        \"y\": 56\n      },\n      \"hiddenSeries\": false,\n      \"id\": 39,\n      \"legend\": {\n        \"avg\": false,\n        \"current\": false,\n        \"max\": false,\n        \"min\": false,\n        \"show\": false,\n        \"total\": false,\n        \"values\": false\n      },\n      \"lines\": true,\n      \"linewidth\": 1,\n      \"nullPointMode\": \"null\",\n      \"percentage\": false,\n      \"pluginVersion\": \"7.1.1\",\n      \"pointradius\": 2,\n      \"points\": false,\n      \"renderer\": \"flot\",\n      \"seriesOverrides\": [],\n      \"spaceLength\": 10,\n      \"stack\": false,\n      \"steppedLine\": false,\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"expr\": \"beacon_aggregated_attestation_processing_successes_total / beacon_aggregated_attestation_processing_requests_total\",\n          \"format\": \"time_series\",\n          \"interval\": \"\",\n          \"intervalFactor\": 1,\n          \"legendFormat\": \"\",\n          \"refId\": \"A\"\n        }\n      ],\n      \"thresholds\": [],\n      \"timeRegions\": [],\n      \"title\": \"Aggregated Attn. Success Rate\",\n      \"tooltip\": {\n        \"shared\": true,\n        \"sort\": 0,\n        \"value_type\": \"individual\"\n      },\n      \"type\": \"timeseries\",\n      \"xaxis\": {\n        \"mode\": \"time\",\n        \"show\": true,\n        \"values\": []\n      },\n      \"yaxes\": [\n        {\n          \"$$hashKey\": \"object:4533\",\n          \"format\": \"percentunit\",\n          \"label\": \"Attestations\",\n          \"logBase\": 1,\n          \"show\": true\n        },\n        {\n          \"$$hashKey\": \"object:4534\",\n          \"format\": \"short\",\n          \"logBase\": 1,\n          \"show\": true\n        }\n      ],\n      \"yaxis\": {\n        \"align\": false\n      }\n    },\n    {\n      \"aliasColors\": {},\n      \"autoMigrateFrom\": \"graph\",\n      \"bars\": false,\n      \"dashLength\": 10,\n      \"dashes\": false,\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"custom\": {}\n        },\n        \"overrides\": []\n      },\n      \"fill\": 1,\n      \"fillGradient\": 0,\n      \"gridPos\": {\n        \"h\": 5,\n        \"w\": 12,\n        \"x\": 12,\n        \"y\": 56\n      },\n      \"hiddenSeries\": false,\n      \"id\": 37,\n      \"legend\": {\n        \"avg\": false,\n        \"current\": false,\n        \"max\": false,\n        \"min\": false,\n        \"show\": false,\n        \"total\": false,\n        \"values\": false\n      },\n      \"lines\": true,\n      \"linewidth\": 1,\n      \"nullPointMode\": \"null\",\n      \"percentage\": false,\n      \"pluginVersion\": \"7.1.1\",\n      \"pointradius\": 2,\n      \"points\": false,\n      \"renderer\": \"flot\",\n      \"seriesOverrides\": [],\n      \"spaceLength\": 10,\n      \"stack\": false,\n      \"steppedLine\": false,\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"expr\": \"beacon_unaggregated_attestation_processing_successes_total / beacon_unaggregated_attestation_processing_requests_total\",\n          \"format\": \"time_series\",\n          \"interval\": \"\",\n          \"intervalFactor\": 1,\n          \"legendFormat\": \"\",\n          \"refId\": \"A\"\n        }\n      ],\n      \"thresholds\": [],\n      \"timeRegions\": [],\n      \"title\": \"Unaggregated Attn. Success Rate\",\n      \"tooltip\": {\n        \"shared\": true,\n        \"sort\": 0,\n        \"value_type\": \"individual\"\n      },\n      \"type\": \"timeseries\",\n      \"xaxis\": {\n        \"mode\": \"time\",\n        \"show\": true,\n        \"values\": []\n      },\n      \"yaxes\": [\n        {\n          \"$$hashKey\": \"object:4533\",\n          \"format\": \"percentunit\",\n          \"label\": \"Attestations\",\n          \"logBase\": 1,\n          \"show\": true\n        },\n        {\n          \"$$hashKey\": \"object:4534\",\n          \"format\": \"short\",\n          \"logBase\": 1,\n          \"show\": true\n        }\n      ],\n      \"yaxis\": {\n        \"align\": false\n      }\n    }\n  ],\n  \"refresh\": \"5s\",\n  \"schemaVersion\": 39,\n  \"tags\": [\n    \"lighthouse\"\n  ],\n  \"templating\": {\n    \"list\": []\n  },\n  \"time\": {\n    \"from\": \"now-1h\",\n    \"to\": \"now\"\n  },\n  \"timepicker\": {\n    \"refresh_intervals\": [\n      \"5s\",\n      \"10s\",\n      \"30s\",\n      \"1m\",\n      \"5m\",\n      \"15m\",\n      \"30m\",\n      \"1h\",\n      \"2h\",\n      \"1d\"\n    ],\n    \"time_options\": [\n      \"5m\",\n      \"15m\",\n      \"1h\",\n      \"6h\",\n      \"12h\",\n      \"24h\",\n      \"2d\",\n      \"7d\",\n      \"30d\"\n    ]\n  },\n  \"timezone\": \"\",\n  \"title\": \"Attestation Processing\",\n  \"uid\": \"tQbhcDOGWk\",\n  \"version\": 1,\n  \"weekStart\": \"\"\n}\n"
  },
  {
    "path": "static_files/grafana-config/dashboards/lighthouse/BeaconProcessorV2.json",
    "content": "{\n  \"__inputs\": [\n    {\n      \"name\": \"DS_PROMETHEUS\",\n      \"label\": \"Prometheus\",\n      \"description\": \"\",\n      \"type\": \"datasource\",\n      \"pluginId\": \"prometheus\",\n      \"pluginName\": \"Prometheus\"\n    }\n  ],\n  \"__elements\": {},\n  \"__requires\": [\n    {\n      \"type\": \"grafana\",\n      \"id\": \"grafana\",\n      \"name\": \"Grafana\",\n      \"version\": \"10.4.1\"\n    },\n    {\n      \"type\": \"panel\",\n      \"id\": \"piechart\",\n      \"name\": \"Pie chart\",\n      \"version\": \"\"\n    },\n    {\n      \"type\": \"datasource\",\n      \"id\": \"prometheus\",\n      \"name\": \"Prometheus\",\n      \"version\": \"1.0.0\"\n    },\n    {\n      \"type\": \"panel\",\n      \"id\": \"timeseries\",\n      \"name\": \"Time series\",\n      \"version\": \"\"\n    }\n  ],\n  \"annotations\": {\n    \"list\": [\n      {\n        \"builtIn\": 1,\n        \"datasource\": {\n          \"type\": \"grafana\",\n          \"uid\": \"-- Grafana --\"\n        },\n        \"enable\": true,\n        \"hide\": true,\n        \"iconColor\": \"rgba(0, 211, 255, 1)\",\n        \"name\": \"Annotations & Alerts\",\n        \"target\": {\n          \"limit\": 100,\n          \"matchAny\": false,\n          \"tags\": [],\n          \"type\": \"dashboard\"\n        },\n        \"type\": \"dashboard\"\n      }\n    ]\n  },\n  \"editable\": true,\n  \"fiscalYearStartMonth\": 0,\n  \"graphTooltip\": 0,\n  \"id\": null,\n  \"links\": [],\n  \"liveNow\": false,\n  \"panels\": [\n    {\n      \"collapsed\": false,\n      \"gridPos\": {\n        \"h\": 1,\n        \"w\": 24,\n        \"x\": 0,\n        \"y\": 0\n      },\n      \"id\": 40,\n      \"panels\": [],\n      \"title\": \"Worker Overview\",\n      \"type\": \"row\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"palette-classic\"\n          },\n          \"custom\": {\n            \"axisBorderShow\": false,\n            \"axisCenteredZero\": false,\n            \"axisColorMode\": \"text\",\n            \"axisLabel\": \"\",\n            \"axisPlacement\": \"auto\",\n            \"barAlignment\": 0,\n            \"drawStyle\": \"line\",\n            \"fillOpacity\": 20,\n            \"gradientMode\": \"opacity\",\n            \"hideFrom\": {\n              \"legend\": false,\n              \"tooltip\": false,\n              \"viz\": false\n            },\n            \"insertNulls\": false,\n            \"lineInterpolation\": \"linear\",\n            \"lineWidth\": 1,\n            \"pointSize\": 5,\n            \"scaleDistribution\": {\n              \"type\": \"linear\"\n            },\n            \"showPoints\": \"auto\",\n            \"spanNulls\": false,\n            \"stacking\": {\n              \"group\": \"A\",\n              \"mode\": \"none\"\n            },\n            \"thresholdsStyle\": {\n              \"mode\": \"off\"\n            }\n          },\n          \"decimals\": 0,\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\",\n                \"value\": null\n              },\n              {\n                \"color\": \"red\",\n                \"value\": 80\n              }\n            ]\n          },\n          \"unit\": \"none\"\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 6,\n        \"w\": 8,\n        \"x\": 0,\n        \"y\": 1\n      },\n      \"id\": 41,\n      \"options\": {\n        \"legend\": {\n          \"calcs\": [],\n          \"displayMode\": \"list\",\n          \"placement\": \"bottom\",\n          \"showLegend\": false\n        },\n        \"tooltip\": {\n          \"mode\": \"multi\",\n          \"sort\": \"desc\"\n        }\n      },\n      \"pluginVersion\": \"9.1.2\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"editorMode\": \"code\",\n          \"expr\": \"sum by(instance) (rate(beacon_processor_work_events_rx_count{network=~\\\"$network\\\", instance=~\\\"$node\\\"}[$__rate_interval]))\",\n          \"format\": \"time_series\",\n          \"interval\": \"\",\n          \"intervalFactor\": 1,\n          \"legendFormat\": \"{{instance}}\",\n          \"range\": true,\n          \"refId\": \"A\"\n        }\n      ],\n      \"title\": \"Work Events Rx\",\n      \"type\": \"timeseries\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"palette-classic\"\n          },\n          \"custom\": {\n            \"axisBorderShow\": false,\n            \"axisCenteredZero\": false,\n            \"axisColorMode\": \"text\",\n            \"axisLabel\": \"\",\n            \"axisPlacement\": \"auto\",\n            \"barAlignment\": 0,\n            \"drawStyle\": \"line\",\n            \"fillOpacity\": 20,\n            \"gradientMode\": \"opacity\",\n            \"hideFrom\": {\n              \"legend\": false,\n              \"tooltip\": false,\n              \"viz\": false\n            },\n            \"insertNulls\": false,\n            \"lineInterpolation\": \"linear\",\n            \"lineWidth\": 1,\n            \"pointSize\": 5,\n            \"scaleDistribution\": {\n              \"type\": \"linear\"\n            },\n            \"showPoints\": \"auto\",\n            \"spanNulls\": false,\n            \"stacking\": {\n              \"group\": \"A\",\n              \"mode\": \"none\"\n            },\n            \"thresholdsStyle\": {\n              \"mode\": \"off\"\n            }\n          },\n          \"decimals\": 0,\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\",\n                \"value\": null\n              },\n              {\n                \"color\": \"red\",\n                \"value\": 80\n              }\n            ]\n          },\n          \"unit\": \"none\"\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 6,\n        \"w\": 8,\n        \"x\": 8,\n        \"y\": 1\n      },\n      \"id\": 17,\n      \"options\": {\n        \"legend\": {\n          \"calcs\": [],\n          \"displayMode\": \"list\",\n          \"placement\": \"bottom\",\n          \"showLegend\": false\n        },\n        \"tooltip\": {\n          \"mode\": \"multi\",\n          \"sort\": \"desc\"\n        }\n      },\n      \"pluginVersion\": \"9.1.2\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"editorMode\": \"code\",\n          \"expr\": \"sum by(instance) (rate(beacon_processor_work_events_started_count{network=~\\\"$network\\\", instance=~\\\"$node\\\"}[$__rate_interval]))\",\n          \"format\": \"time_series\",\n          \"interval\": \"\",\n          \"intervalFactor\": 1,\n          \"legendFormat\": \"{{instance}}\",\n          \"range\": true,\n          \"refId\": \"A\"\n        }\n      ],\n      \"title\": \"Work Events Started\",\n      \"type\": \"timeseries\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"palette-classic\"\n          },\n          \"custom\": {\n            \"axisBorderShow\": false,\n            \"axisCenteredZero\": false,\n            \"axisColorMode\": \"text\",\n            \"axisLabel\": \"\",\n            \"axisPlacement\": \"auto\",\n            \"barAlignment\": 0,\n            \"drawStyle\": \"line\",\n            \"fillOpacity\": 20,\n            \"gradientMode\": \"opacity\",\n            \"hideFrom\": {\n              \"legend\": false,\n              \"tooltip\": false,\n              \"viz\": false\n            },\n            \"insertNulls\": false,\n            \"lineInterpolation\": \"linear\",\n            \"lineWidth\": 1,\n            \"pointSize\": 5,\n            \"scaleDistribution\": {\n              \"type\": \"linear\"\n            },\n            \"showPoints\": \"auto\",\n            \"spanNulls\": false,\n            \"stacking\": {\n              \"group\": \"A\",\n              \"mode\": \"none\"\n            },\n            \"thresholdsStyle\": {\n              \"mode\": \"off\"\n            }\n          },\n          \"decimals\": 0,\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\",\n                \"value\": null\n              },\n              {\n                \"color\": \"red\",\n                \"value\": 80\n              }\n            ]\n          },\n          \"unit\": \"none\"\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 6,\n        \"w\": 8,\n        \"x\": 16,\n        \"y\": 1\n      },\n      \"id\": 16,\n      \"options\": {\n        \"legend\": {\n          \"calcs\": [],\n          \"displayMode\": \"list\",\n          \"placement\": \"bottom\",\n          \"showLegend\": false\n        },\n        \"tooltip\": {\n          \"mode\": \"multi\",\n          \"sort\": \"desc\"\n        }\n      },\n      \"pluginVersion\": \"9.1.2\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"editorMode\": \"code\",\n          \"expr\": \"sum by(instance) (rate(beacon_processor_work_events_ignored_count{network=~\\\"$network\\\", instance=~\\\"$node\\\"}[$__rate_interval]))\",\n          \"format\": \"time_series\",\n          \"interval\": \"\",\n          \"intervalFactor\": 1,\n          \"legendFormat\": \"{{instance}} - {{type}}\",\n          \"range\": true,\n          \"refId\": \"A\"\n        }\n      ],\n      \"title\": \"Work Events Ignored\",\n      \"type\": \"timeseries\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"palette-classic\"\n          },\n          \"custom\": {\n            \"axisBorderShow\": false,\n            \"axisCenteredZero\": false,\n            \"axisColorMode\": \"text\",\n            \"axisLabel\": \"\",\n            \"axisPlacement\": \"auto\",\n            \"barAlignment\": 0,\n            \"drawStyle\": \"line\",\n            \"fillOpacity\": 20,\n            \"gradientMode\": \"opacity\",\n            \"hideFrom\": {\n              \"legend\": false,\n              \"tooltip\": false,\n              \"viz\": false\n            },\n            \"insertNulls\": false,\n            \"lineInterpolation\": \"linear\",\n            \"lineWidth\": 1,\n            \"pointSize\": 5,\n            \"scaleDistribution\": {\n              \"type\": \"linear\"\n            },\n            \"showPoints\": \"auto\",\n            \"spanNulls\": false,\n            \"stacking\": {\n              \"group\": \"A\",\n              \"mode\": \"none\"\n            },\n            \"thresholdsStyle\": {\n              \"mode\": \"off\"\n            }\n          },\n          \"decimals\": 0,\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\",\n                \"value\": null\n              },\n              {\n                \"color\": \"red\",\n                \"value\": 80\n              }\n            ]\n          },\n          \"unit\": \"none\"\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 6,\n        \"w\": 8,\n        \"x\": 0,\n        \"y\": 7\n      },\n      \"id\": 18,\n      \"options\": {\n        \"legend\": {\n          \"calcs\": [],\n          \"displayMode\": \"list\",\n          \"placement\": \"bottom\",\n          \"showLegend\": false\n        },\n        \"tooltip\": {\n          \"mode\": \"multi\",\n          \"sort\": \"desc\"\n        }\n      },\n      \"pluginVersion\": \"9.1.2\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"editorMode\": \"code\",\n          \"expr\": \"rate(beacon_processor_workers_spawned_total{network=~\\\"$network\\\", instance=~\\\"$node\\\"}[$__rate_interval])\",\n          \"format\": \"time_series\",\n          \"interval\": \"\",\n          \"intervalFactor\": 1,\n          \"legendFormat\": \"{{instance}}\",\n          \"range\": true,\n          \"refId\": \"A\"\n        }\n      ],\n      \"title\": \"Workers Spawned\",\n      \"type\": \"timeseries\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"palette-classic\"\n          },\n          \"custom\": {\n            \"axisBorderShow\": false,\n            \"axisCenteredZero\": false,\n            \"axisColorMode\": \"text\",\n            \"axisLabel\": \"\",\n            \"axisPlacement\": \"auto\",\n            \"barAlignment\": 0,\n            \"drawStyle\": \"line\",\n            \"fillOpacity\": 20,\n            \"gradientMode\": \"opacity\",\n            \"hideFrom\": {\n              \"legend\": false,\n              \"tooltip\": false,\n              \"viz\": false\n            },\n            \"insertNulls\": false,\n            \"lineInterpolation\": \"linear\",\n            \"lineWidth\": 1,\n            \"pointSize\": 5,\n            \"scaleDistribution\": {\n              \"type\": \"linear\"\n            },\n            \"showPoints\": \"auto\",\n            \"spanNulls\": false,\n            \"stacking\": {\n              \"group\": \"A\",\n              \"mode\": \"none\"\n            },\n            \"thresholdsStyle\": {\n              \"mode\": \"off\"\n            }\n          },\n          \"decimals\": 0,\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\",\n                \"value\": null\n              },\n              {\n                \"color\": \"red\",\n                \"value\": 80\n              }\n            ]\n          },\n          \"unit\": \"none\"\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 6,\n        \"w\": 8,\n        \"x\": 8,\n        \"y\": 7\n      },\n      \"id\": 20,\n      \"options\": {\n        \"legend\": {\n          \"calcs\": [],\n          \"displayMode\": \"list\",\n          \"placement\": \"bottom\",\n          \"showLegend\": false\n        },\n        \"tooltip\": {\n          \"mode\": \"multi\",\n          \"sort\": \"desc\"\n        }\n      },\n      \"pluginVersion\": \"9.1.2\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"editorMode\": \"code\",\n          \"expr\": \"rate(beacon_processor_idle_events_total{network=~\\\"$network\\\", instance=~\\\"$node\\\"}[$__rate_interval])\",\n          \"format\": \"time_series\",\n          \"interval\": \"\",\n          \"intervalFactor\": 1,\n          \"legendFormat\": \"{{instance}}\",\n          \"range\": true,\n          \"refId\": \"A\"\n        }\n      ],\n      \"title\": \"Worker Idle Events\",\n      \"type\": \"timeseries\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"palette-classic\"\n          },\n          \"custom\": {\n            \"axisBorderShow\": false,\n            \"axisCenteredZero\": false,\n            \"axisColorMode\": \"text\",\n            \"axisLabel\": \"\",\n            \"axisPlacement\": \"auto\",\n            \"barAlignment\": 0,\n            \"drawStyle\": \"line\",\n            \"fillOpacity\": 20,\n            \"gradientMode\": \"opacity\",\n            \"hideFrom\": {\n              \"legend\": false,\n              \"tooltip\": false,\n              \"viz\": false\n            },\n            \"insertNulls\": false,\n            \"lineInterpolation\": \"linear\",\n            \"lineWidth\": 1,\n            \"pointSize\": 5,\n            \"scaleDistribution\": {\n              \"type\": \"linear\"\n            },\n            \"showPoints\": \"auto\",\n            \"spanNulls\": false,\n            \"stacking\": {\n              \"group\": \"A\",\n              \"mode\": \"none\"\n            },\n            \"thresholdsStyle\": {\n              \"mode\": \"off\"\n            }\n          },\n          \"decimals\": 0,\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\",\n                \"value\": null\n              },\n              {\n                \"color\": \"red\",\n                \"value\": 80\n              }\n            ]\n          },\n          \"unit\": \"none\"\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 6,\n        \"w\": 8,\n        \"x\": 16,\n        \"y\": 7\n      },\n      \"id\": 19,\n      \"options\": {\n        \"legend\": {\n          \"calcs\": [],\n          \"displayMode\": \"list\",\n          \"placement\": \"bottom\",\n          \"showLegend\": false\n        },\n        \"tooltip\": {\n          \"mode\": \"multi\",\n          \"sort\": \"desc\"\n        }\n      },\n      \"pluginVersion\": \"9.1.2\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"editorMode\": \"code\",\n          \"expr\": \"beacon_processor_workers_active_total{network=~\\\"$network\\\", instance=~\\\"$node\\\"}\",\n          \"format\": \"time_series\",\n          \"interval\": \"\",\n          \"intervalFactor\": 1,\n          \"legendFormat\": \"{{instance}}\",\n          \"range\": true,\n          \"refId\": \"A\"\n        }\n      ],\n      \"title\": \"Workers Active\",\n      \"type\": \"timeseries\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"palette-classic\"\n          },\n          \"custom\": {\n            \"hideFrom\": {\n              \"legend\": false,\n              \"tooltip\": false,\n              \"viz\": false\n            }\n          },\n          \"decimals\": 0,\n          \"mappings\": [],\n          \"unit\": \"s\"\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 8,\n        \"w\": 12,\n        \"x\": 0,\n        \"y\": 13\n      },\n      \"id\": 72,\n      \"options\": {\n        \"displayLabels\": [\n          \"percent\"\n        ],\n        \"legend\": {\n          \"displayMode\": \"list\",\n          \"placement\": \"right\",\n          \"showLegend\": true,\n          \"values\": [\n            \"percent\"\n          ]\n        },\n        \"pieType\": \"pie\",\n        \"reduceOptions\": {\n          \"calcs\": [\n            \"lastNotNull\"\n          ],\n          \"fields\": \"\",\n          \"values\": false\n        },\n        \"tooltip\": {\n          \"mode\": \"single\",\n          \"sort\": \"none\"\n        }\n      },\n      \"pluginVersion\": \"9.1.2\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"editorMode\": \"code\",\n          \"expr\": \"sum by (type) (increase(beacon_processor_worker_time_sum{network=~\\\"$network\\\", instance=~\\\"$node\\\"}[$__range]))\",\n          \"format\": \"time_series\",\n          \"interval\": \"\",\n          \"intervalFactor\": 1,\n          \"legendFormat\": \"__auto\",\n          \"range\": true,\n          \"refId\": \"A\"\n        }\n      ],\n      \"title\": \"Time per Task\",\n      \"type\": \"piechart\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"palette-classic\"\n          },\n          \"custom\": {\n            \"hideFrom\": {\n              \"legend\": false,\n              \"tooltip\": false,\n              \"viz\": false\n            }\n          },\n          \"decimals\": 0,\n          \"mappings\": [],\n          \"unit\": \"none\"\n        },\n        \"overrides\": [\n          {\n            \"__systemRef\": \"hideSeriesFrom\",\n            \"matcher\": {\n              \"id\": \"byNames\",\n              \"options\": {\n                \"mode\": \"exclude\",\n                \"names\": [\n                  \"api_request_p0\",\n                  \"api_request_p1\",\n                  \"blocks_by_range_request\",\n                  \"blocks_by_roots_request\",\n                  \"chain_segment\",\n                  \"delayed_import_block\",\n                  \"gossip_aggregate_batch\",\n                  \"gossip_attestation\",\n                  \"gossip_attestation_batch\",\n                  \"gossip_attester_slashing\",\n                  \"gossip_block\",\n                  \"gossip_bls_to_execution_change\",\n                  \"gossip_sync_contribution\",\n                  \"gossip_sync_signature\",\n                  \"gossip_voluntary_exit\",\n                  \"rpc_block\",\n                  \"status_processing\",\n                  \"unknown_block_aggregate\",\n                  \"unknown_block_attestation\"\n                ],\n                \"prefix\": \"All except:\",\n                \"readOnly\": true\n              }\n            },\n            \"properties\": [\n              {\n                \"id\": \"custom.hideFrom\",\n                \"value\": {\n                  \"legend\": false,\n                  \"tooltip\": false,\n                  \"viz\": true\n                }\n              }\n            ]\n          }\n        ]\n      },\n      \"gridPos\": {\n        \"h\": 8,\n        \"w\": 12,\n        \"x\": 12,\n        \"y\": 13\n      },\n      \"id\": 73,\n      \"options\": {\n        \"displayLabels\": [\n          \"percent\"\n        ],\n        \"legend\": {\n          \"displayMode\": \"list\",\n          \"placement\": \"right\",\n          \"showLegend\": true,\n          \"values\": [\n            \"percent\"\n          ]\n        },\n        \"pieType\": \"pie\",\n        \"reduceOptions\": {\n          \"calcs\": [\n            \"lastNotNull\"\n          ],\n          \"fields\": \"\",\n          \"values\": false\n        },\n        \"tooltip\": {\n          \"mode\": \"single\",\n          \"sort\": \"none\"\n        }\n      },\n      \"pluginVersion\": \"9.1.2\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"editorMode\": \"code\",\n          \"expr\": \"sum by (type) (increase(beacon_processor_work_events_started_count{network=~\\\"$network\\\", instance=~\\\"$node\\\"}[$__range]))\",\n          \"format\": \"time_series\",\n          \"interval\": \"\",\n          \"intervalFactor\": 1,\n          \"legendFormat\": \"__auto\",\n          \"range\": true,\n          \"refId\": \"A\"\n        }\n      ],\n      \"title\": \"Count per Task\",\n      \"type\": \"piechart\"\n    },\n    {\n      \"collapsed\": false,\n      \"gridPos\": {\n        \"h\": 1,\n        \"w\": 24,\n        \"x\": 0,\n        \"y\": 21\n      },\n      \"id\": 14,\n      \"panels\": [],\n      \"title\": \"Queue Sizes\",\n      \"type\": \"row\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"palette-classic\"\n          },\n          \"custom\": {\n            \"axisBorderShow\": false,\n            \"axisCenteredZero\": false,\n            \"axisColorMode\": \"text\",\n            \"axisLabel\": \"\",\n            \"axisPlacement\": \"auto\",\n            \"barAlignment\": 0,\n            \"drawStyle\": \"line\",\n            \"fillOpacity\": 20,\n            \"gradientMode\": \"opacity\",\n            \"hideFrom\": {\n              \"legend\": false,\n              \"tooltip\": false,\n              \"viz\": false\n            },\n            \"insertNulls\": false,\n            \"lineInterpolation\": \"linear\",\n            \"lineWidth\": 1,\n            \"pointSize\": 5,\n            \"scaleDistribution\": {\n              \"type\": \"linear\"\n            },\n            \"showPoints\": \"auto\",\n            \"spanNulls\": false,\n            \"stacking\": {\n              \"group\": \"A\",\n              \"mode\": \"none\"\n            },\n            \"thresholdsStyle\": {\n              \"mode\": \"off\"\n            }\n          },\n          \"decimals\": 0,\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\",\n                \"value\": null\n              },\n              {\n                \"color\": \"red\",\n                \"value\": 80\n              }\n            ]\n          },\n          \"unit\": \"none\"\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 5,\n        \"w\": 6,\n        \"x\": 0,\n        \"y\": 22\n      },\n      \"id\": 9,\n      \"options\": {\n        \"legend\": {\n          \"calcs\": [],\n          \"displayMode\": \"list\",\n          \"placement\": \"bottom\",\n          \"showLegend\": false\n        },\n        \"tooltip\": {\n          \"mode\": \"multi\",\n          \"sort\": \"desc\"\n        }\n      },\n      \"pluginVersion\": \"9.1.2\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"editorMode\": \"code\",\n          \"expr\": \"beacon_processor_unaggregated_attestation_queue_total{network=~\\\"$network\\\", instance=~\\\"$node\\\"}\",\n          \"format\": \"time_series\",\n          \"interval\": \"\",\n          \"intervalFactor\": 1,\n          \"legendFormat\": \"{{instance}}\",\n          \"range\": true,\n          \"refId\": \"A\"\n        }\n      ],\n      \"title\": \"Unaggregated Attestation Queue\",\n      \"type\": \"timeseries\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"palette-classic\"\n          },\n          \"custom\": {\n            \"axisBorderShow\": false,\n            \"axisCenteredZero\": false,\n            \"axisColorMode\": \"text\",\n            \"axisLabel\": \"\",\n            \"axisPlacement\": \"auto\",\n            \"barAlignment\": 0,\n            \"drawStyle\": \"line\",\n            \"fillOpacity\": 20,\n            \"gradientMode\": \"opacity\",\n            \"hideFrom\": {\n              \"legend\": false,\n              \"tooltip\": false,\n              \"viz\": false\n            },\n            \"insertNulls\": false,\n            \"lineInterpolation\": \"linear\",\n            \"lineWidth\": 1,\n            \"pointSize\": 5,\n            \"scaleDistribution\": {\n              \"type\": \"linear\"\n            },\n            \"showPoints\": \"auto\",\n            \"spanNulls\": false,\n            \"stacking\": {\n              \"group\": \"A\",\n              \"mode\": \"none\"\n            },\n            \"thresholdsStyle\": {\n              \"mode\": \"off\"\n            }\n          },\n          \"decimals\": 0,\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\",\n                \"value\": null\n              },\n              {\n                \"color\": \"red\",\n                \"value\": 80\n              }\n            ]\n          },\n          \"unit\": \"none\"\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 5,\n        \"w\": 6,\n        \"x\": 6,\n        \"y\": 22\n      },\n      \"id\": 10,\n      \"options\": {\n        \"legend\": {\n          \"calcs\": [],\n          \"displayMode\": \"list\",\n          \"placement\": \"bottom\",\n          \"showLegend\": false\n        },\n        \"tooltip\": {\n          \"mode\": \"multi\",\n          \"sort\": \"desc\"\n        }\n      },\n      \"pluginVersion\": \"9.1.2\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"editorMode\": \"code\",\n          \"expr\": \"beacon_processor_aggregated_attestation_queue_total{network=~\\\"$network\\\", instance=~\\\"$node\\\"}\",\n          \"format\": \"time_series\",\n          \"interval\": \"\",\n          \"intervalFactor\": 1,\n          \"legendFormat\": \"{{instance}}\",\n          \"range\": true,\n          \"refId\": \"A\"\n        }\n      ],\n      \"title\": \"Aggregated Attestation Queue\",\n      \"type\": \"timeseries\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"palette-classic\"\n          },\n          \"custom\": {\n            \"axisBorderShow\": false,\n            \"axisCenteredZero\": false,\n            \"axisColorMode\": \"text\",\n            \"axisLabel\": \"\",\n            \"axisPlacement\": \"auto\",\n            \"barAlignment\": 0,\n            \"drawStyle\": \"line\",\n            \"fillOpacity\": 20,\n            \"gradientMode\": \"opacity\",\n            \"hideFrom\": {\n              \"legend\": false,\n              \"tooltip\": false,\n              \"viz\": false\n            },\n            \"insertNulls\": false,\n            \"lineInterpolation\": \"linear\",\n            \"lineWidth\": 1,\n            \"pointSize\": 5,\n            \"scaleDistribution\": {\n              \"type\": \"linear\"\n            },\n            \"showPoints\": \"auto\",\n            \"spanNulls\": false,\n            \"stacking\": {\n              \"group\": \"A\",\n              \"mode\": \"none\"\n            },\n            \"thresholdsStyle\": {\n              \"mode\": \"off\"\n            }\n          },\n          \"decimals\": 0,\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\",\n                \"value\": null\n              },\n              {\n                \"color\": \"red\",\n                \"value\": 80\n              }\n            ]\n          },\n          \"unit\": \"none\"\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 5,\n        \"w\": 6,\n        \"x\": 12,\n        \"y\": 22\n      },\n      \"id\": 11,\n      \"options\": {\n        \"legend\": {\n          \"calcs\": [],\n          \"displayMode\": \"list\",\n          \"placement\": \"bottom\",\n          \"showLegend\": false\n        },\n        \"tooltip\": {\n          \"mode\": \"multi\",\n          \"sort\": \"desc\"\n        }\n      },\n      \"pluginVersion\": \"9.1.2\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"editorMode\": \"code\",\n          \"expr\": \"beacon_processor_sync_contribution_queue_total{network=~\\\"$network\\\", instance=~\\\"$node\\\"}\",\n          \"format\": \"time_series\",\n          \"interval\": \"\",\n          \"intervalFactor\": 1,\n          \"legendFormat\": \"{{instance}}\",\n          \"range\": true,\n          \"refId\": \"A\"\n        }\n      ],\n      \"title\": \"Sync Contribution Queue\",\n      \"type\": \"timeseries\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"palette-classic\"\n          },\n          \"custom\": {\n            \"axisBorderShow\": false,\n            \"axisCenteredZero\": false,\n            \"axisColorMode\": \"text\",\n            \"axisLabel\": \"\",\n            \"axisPlacement\": \"auto\",\n            \"barAlignment\": 0,\n            \"drawStyle\": \"line\",\n            \"fillOpacity\": 20,\n            \"gradientMode\": \"opacity\",\n            \"hideFrom\": {\n              \"legend\": false,\n              \"tooltip\": false,\n              \"viz\": false\n            },\n            \"insertNulls\": false,\n            \"lineInterpolation\": \"linear\",\n            \"lineWidth\": 1,\n            \"pointSize\": 5,\n            \"scaleDistribution\": {\n              \"type\": \"linear\"\n            },\n            \"showPoints\": \"auto\",\n            \"spanNulls\": false,\n            \"stacking\": {\n              \"group\": \"A\",\n              \"mode\": \"none\"\n            },\n            \"thresholdsStyle\": {\n              \"mode\": \"off\"\n            }\n          },\n          \"decimals\": 0,\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\",\n                \"value\": null\n              },\n              {\n                \"color\": \"red\",\n                \"value\": 80\n              }\n            ]\n          },\n          \"unit\": \"none\"\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 5,\n        \"w\": 6,\n        \"x\": 18,\n        \"y\": 22\n      },\n      \"id\": 12,\n      \"options\": {\n        \"legend\": {\n          \"calcs\": [],\n          \"displayMode\": \"list\",\n          \"placement\": \"bottom\",\n          \"showLegend\": false\n        },\n        \"tooltip\": {\n          \"mode\": \"multi\",\n          \"sort\": \"desc\"\n        }\n      },\n      \"pluginVersion\": \"9.1.2\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"editorMode\": \"code\",\n          \"expr\": \"beacon_processor_reprocessing_queue_total{network=~\\\"$network\\\", instance=~\\\"$node\\\"}\",\n          \"format\": \"time_series\",\n          \"interval\": \"\",\n          \"intervalFactor\": 1,\n          \"legendFormat\": \"{{instance}} - {{type}}\",\n          \"range\": true,\n          \"refId\": \"A\"\n        }\n      ],\n      \"title\": \"Reprocessing Queue\",\n      \"type\": \"timeseries\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"palette-classic\"\n          },\n          \"custom\": {\n            \"axisCenteredZero\": false,\n            \"axisColorMode\": \"text\",\n            \"axisLabel\": \"\",\n            \"axisPlacement\": \"auto\",\n            \"barAlignment\": 0,\n            \"drawStyle\": \"line\",\n            \"fillOpacity\": 20,\n            \"gradientMode\": \"opacity\",\n            \"hideFrom\": {\n              \"legend\": false,\n              \"tooltip\": false,\n              \"viz\": false\n            },\n            \"lineInterpolation\": \"linear\",\n            \"lineWidth\": 1,\n            \"pointSize\": 5,\n            \"scaleDistribution\": {\n              \"type\": \"linear\"\n            },\n            \"showPoints\": \"auto\",\n            \"spanNulls\": false,\n            \"stacking\": {\n              \"group\": \"A\",\n              \"mode\": \"none\"\n            },\n            \"thresholdsStyle\": {\n              \"mode\": \"off\"\n            }\n          },\n          \"decimals\": 0,\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\"\n              },\n              {\n                \"color\": \"red\",\n                \"value\": 80\n              }\n            ]\n          },\n          \"unit\": \"none\"\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 5,\n        \"w\": 6,\n        \"x\": 0,\n        \"y\": 27\n      },\n      \"id\": 5,\n      \"options\": {\n        \"legend\": {\n          \"calcs\": [],\n          \"displayMode\": \"list\",\n          \"placement\": \"bottom\",\n          \"showLegend\": false\n        },\n        \"tooltip\": {\n          \"mode\": \"multi\",\n          \"sort\": \"desc\"\n        }\n      },\n      \"pluginVersion\": \"9.1.2\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"editorMode\": \"code\",\n          \"expr\": \"beacon_processor_attester_slashing_queue_total{network=~\\\"$network\\\", instance=~\\\"$node\\\"}\",\n          \"format\": \"time_series\",\n          \"interval\": \"\",\n          \"intervalFactor\": 1,\n          \"legendFormat\": \"{{instance}}\",\n          \"range\": true,\n          \"refId\": \"A\"\n        }\n      ],\n      \"title\": \"Attester Slashing Queue\",\n      \"type\": \"timeseries\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"palette-classic\"\n          },\n          \"custom\": {\n            \"axisCenteredZero\": false,\n            \"axisColorMode\": \"text\",\n            \"axisLabel\": \"\",\n            \"axisPlacement\": \"auto\",\n            \"barAlignment\": 0,\n            \"drawStyle\": \"line\",\n            \"fillOpacity\": 20,\n            \"gradientMode\": \"opacity\",\n            \"hideFrom\": {\n              \"legend\": false,\n              \"tooltip\": false,\n              \"viz\": false\n            },\n            \"lineInterpolation\": \"linear\",\n            \"lineWidth\": 1,\n            \"pointSize\": 5,\n            \"scaleDistribution\": {\n              \"type\": \"linear\"\n            },\n            \"showPoints\": \"auto\",\n            \"spanNulls\": false,\n            \"stacking\": {\n              \"group\": \"A\",\n              \"mode\": \"none\"\n            },\n            \"thresholdsStyle\": {\n              \"mode\": \"off\"\n            }\n          },\n          \"decimals\": 0,\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\"\n              },\n              {\n                \"color\": \"red\",\n                \"value\": 80\n              }\n            ]\n          },\n          \"unit\": \"none\"\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 5,\n        \"w\": 6,\n        \"x\": 6,\n        \"y\": 27\n      },\n      \"id\": 2,\n      \"options\": {\n        \"legend\": {\n          \"calcs\": [],\n          \"displayMode\": \"list\",\n          \"placement\": \"bottom\",\n          \"showLegend\": false\n        },\n        \"tooltip\": {\n          \"mode\": \"multi\",\n          \"sort\": \"desc\"\n        }\n      },\n      \"pluginVersion\": \"9.1.2\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"editorMode\": \"code\",\n          \"expr\": \"beacon_processor_gossip_block_queue_total{network=~\\\"$network\\\", instance=~\\\"$node\\\"}\",\n          \"format\": \"time_series\",\n          \"interval\": \"\",\n          \"intervalFactor\": 1,\n          \"legendFormat\": \"{{instance}}\",\n          \"range\": true,\n          \"refId\": \"A\"\n        }\n      ],\n      \"title\": \"Gossip Block Queue\",\n      \"type\": \"timeseries\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"palette-classic\"\n          },\n          \"custom\": {\n            \"axisCenteredZero\": false,\n            \"axisColorMode\": \"text\",\n            \"axisLabel\": \"\",\n            \"axisPlacement\": \"auto\",\n            \"barAlignment\": 0,\n            \"drawStyle\": \"line\",\n            \"fillOpacity\": 20,\n            \"gradientMode\": \"opacity\",\n            \"hideFrom\": {\n              \"legend\": false,\n              \"tooltip\": false,\n              \"viz\": false\n            },\n            \"lineInterpolation\": \"linear\",\n            \"lineWidth\": 1,\n            \"pointSize\": 5,\n            \"scaleDistribution\": {\n              \"type\": \"linear\"\n            },\n            \"showPoints\": \"auto\",\n            \"spanNulls\": false,\n            \"stacking\": {\n              \"group\": \"A\",\n              \"mode\": \"none\"\n            },\n            \"thresholdsStyle\": {\n              \"mode\": \"off\"\n            }\n          },\n          \"decimals\": 0,\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\"\n              },\n              {\n                \"color\": \"red\",\n                \"value\": 80\n              }\n            ]\n          },\n          \"unit\": \"none\"\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 5,\n        \"w\": 6,\n        \"x\": 12,\n        \"y\": 27\n      },\n      \"id\": 6,\n      \"options\": {\n        \"legend\": {\n          \"calcs\": [],\n          \"displayMode\": \"list\",\n          \"placement\": \"bottom\",\n          \"showLegend\": false\n        },\n        \"tooltip\": {\n          \"mode\": \"multi\",\n          \"sort\": \"desc\"\n        }\n      },\n      \"pluginVersion\": \"9.1.2\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"editorMode\": \"code\",\n          \"expr\": \"beacon_processor_rpc_block_queue_total{network=~\\\"$network\\\", instance=~\\\"$node\\\"}\",\n          \"format\": \"time_series\",\n          \"interval\": \"\",\n          \"intervalFactor\": 1,\n          \"legendFormat\": \"{{instance}}\",\n          \"range\": true,\n          \"refId\": \"A\"\n        }\n      ],\n      \"title\": \"RPC Block Queue\",\n      \"type\": \"timeseries\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"palette-classic\"\n          },\n          \"custom\": {\n            \"axisCenteredZero\": false,\n            \"axisColorMode\": \"text\",\n            \"axisLabel\": \"\",\n            \"axisPlacement\": \"auto\",\n            \"barAlignment\": 0,\n            \"drawStyle\": \"line\",\n            \"fillOpacity\": 20,\n            \"gradientMode\": \"opacity\",\n            \"hideFrom\": {\n              \"legend\": false,\n              \"tooltip\": false,\n              \"viz\": false\n            },\n            \"lineInterpolation\": \"linear\",\n            \"lineWidth\": 1,\n            \"pointSize\": 5,\n            \"scaleDistribution\": {\n              \"type\": \"linear\"\n            },\n            \"showPoints\": \"auto\",\n            \"spanNulls\": false,\n            \"stacking\": {\n              \"group\": \"A\",\n              \"mode\": \"none\"\n            },\n            \"thresholdsStyle\": {\n              \"mode\": \"off\"\n            }\n          },\n          \"decimals\": 0,\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\"\n              },\n              {\n                \"color\": \"red\",\n                \"value\": 80\n              }\n            ]\n          },\n          \"unit\": \"none\"\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 5,\n        \"w\": 6,\n        \"x\": 18,\n        \"y\": 27\n      },\n      \"id\": 8,\n      \"options\": {\n        \"legend\": {\n          \"calcs\": [],\n          \"displayMode\": \"list\",\n          \"placement\": \"bottom\",\n          \"showLegend\": false\n        },\n        \"tooltip\": {\n          \"mode\": \"multi\",\n          \"sort\": \"desc\"\n        }\n      },\n      \"pluginVersion\": \"9.1.2\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"editorMode\": \"code\",\n          \"expr\": \"beacon_processor_backfill_chain_segment_queue_total{network=~\\\"$network\\\", instance=~\\\"$node\\\"}\",\n          \"format\": \"time_series\",\n          \"interval\": \"\",\n          \"intervalFactor\": 1,\n          \"legendFormat\": \"{{instance}}\",\n          \"range\": true,\n          \"refId\": \"A\"\n        }\n      ],\n      \"title\": \"Backfill Chain Segment Queue\",\n      \"type\": \"timeseries\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"palette-classic\"\n          },\n          \"custom\": {\n            \"axisCenteredZero\": false,\n            \"axisColorMode\": \"text\",\n            \"axisLabel\": \"\",\n            \"axisPlacement\": \"auto\",\n            \"barAlignment\": 0,\n            \"drawStyle\": \"line\",\n            \"fillOpacity\": 20,\n            \"gradientMode\": \"opacity\",\n            \"hideFrom\": {\n              \"legend\": false,\n              \"tooltip\": false,\n              \"viz\": false\n            },\n            \"lineInterpolation\": \"linear\",\n            \"lineWidth\": 1,\n            \"pointSize\": 5,\n            \"scaleDistribution\": {\n              \"type\": \"linear\"\n            },\n            \"showPoints\": \"auto\",\n            \"spanNulls\": false,\n            \"stacking\": {\n              \"group\": \"A\",\n              \"mode\": \"none\"\n            },\n            \"thresholdsStyle\": {\n              \"mode\": \"off\"\n            }\n          },\n          \"decimals\": 0,\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\"\n              },\n              {\n                \"color\": \"red\",\n                \"value\": 80\n              }\n            ]\n          },\n          \"unit\": \"none\"\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 5,\n        \"w\": 6,\n        \"x\": 0,\n        \"y\": 32\n      },\n      \"id\": 4,\n      \"options\": {\n        \"legend\": {\n          \"calcs\": [],\n          \"displayMode\": \"list\",\n          \"placement\": \"bottom\",\n          \"showLegend\": false\n        },\n        \"tooltip\": {\n          \"mode\": \"multi\",\n          \"sort\": \"desc\"\n        }\n      },\n      \"pluginVersion\": \"9.1.2\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"editorMode\": \"code\",\n          \"expr\": \"beacon_processor_proposer_slashing_queue_total{network=~\\\"$network\\\", instance=~\\\"$node\\\"}\",\n          \"format\": \"time_series\",\n          \"interval\": \"\",\n          \"intervalFactor\": 1,\n          \"legendFormat\": \"{{instance}}\",\n          \"range\": true,\n          \"refId\": \"A\"\n        }\n      ],\n      \"title\": \"Proposer Slashing Queue\",\n      \"type\": \"timeseries\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"palette-classic\"\n          },\n          \"custom\": {\n            \"axisCenteredZero\": false,\n            \"axisColorMode\": \"text\",\n            \"axisLabel\": \"\",\n            \"axisPlacement\": \"auto\",\n            \"barAlignment\": 0,\n            \"drawStyle\": \"line\",\n            \"fillOpacity\": 20,\n            \"gradientMode\": \"opacity\",\n            \"hideFrom\": {\n              \"legend\": false,\n              \"tooltip\": false,\n              \"viz\": false\n            },\n            \"lineInterpolation\": \"linear\",\n            \"lineWidth\": 1,\n            \"pointSize\": 5,\n            \"scaleDistribution\": {\n              \"type\": \"linear\"\n            },\n            \"showPoints\": \"auto\",\n            \"spanNulls\": false,\n            \"stacking\": {\n              \"group\": \"A\",\n              \"mode\": \"none\"\n            },\n            \"thresholdsStyle\": {\n              \"mode\": \"off\"\n            }\n          },\n          \"decimals\": 0,\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\"\n              },\n              {\n                \"color\": \"red\",\n                \"value\": 80\n              }\n            ]\n          },\n          \"unit\": \"none\"\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 5,\n        \"w\": 6,\n        \"x\": 6,\n        \"y\": 32\n      },\n      \"id\": 7,\n      \"options\": {\n        \"legend\": {\n          \"calcs\": [],\n          \"displayMode\": \"list\",\n          \"placement\": \"bottom\",\n          \"showLegend\": false\n        },\n        \"tooltip\": {\n          \"mode\": \"multi\",\n          \"sort\": \"desc\"\n        }\n      },\n      \"pluginVersion\": \"9.1.2\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"editorMode\": \"code\",\n          \"expr\": \"beacon_processor_chain_segment_queue_total{network=~\\\"$network\\\", instance=~\\\"$node\\\"}\",\n          \"format\": \"time_series\",\n          \"interval\": \"\",\n          \"intervalFactor\": 1,\n          \"legendFormat\": \"{{instance}}\",\n          \"range\": true,\n          \"refId\": \"A\"\n        }\n      ],\n      \"title\": \"Chain Segment Queue\",\n      \"type\": \"timeseries\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"palette-classic\"\n          },\n          \"custom\": {\n            \"axisCenteredZero\": false,\n            \"axisColorMode\": \"text\",\n            \"axisLabel\": \"\",\n            \"axisPlacement\": \"auto\",\n            \"barAlignment\": 0,\n            \"drawStyle\": \"line\",\n            \"fillOpacity\": 20,\n            \"gradientMode\": \"opacity\",\n            \"hideFrom\": {\n              \"legend\": false,\n              \"tooltip\": false,\n              \"viz\": false\n            },\n            \"lineInterpolation\": \"linear\",\n            \"lineWidth\": 1,\n            \"pointSize\": 5,\n            \"scaleDistribution\": {\n              \"type\": \"linear\"\n            },\n            \"showPoints\": \"auto\",\n            \"spanNulls\": false,\n            \"stacking\": {\n              \"group\": \"A\",\n              \"mode\": \"none\"\n            },\n            \"thresholdsStyle\": {\n              \"mode\": \"off\"\n            }\n          },\n          \"decimals\": 0,\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\"\n              },\n              {\n                \"color\": \"red\",\n                \"value\": 80\n              }\n            ]\n          },\n          \"unit\": \"none\"\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 5,\n        \"w\": 6,\n        \"x\": 12,\n        \"y\": 32\n      },\n      \"id\": 3,\n      \"options\": {\n        \"legend\": {\n          \"calcs\": [],\n          \"displayMode\": \"list\",\n          \"placement\": \"bottom\",\n          \"showLegend\": false\n        },\n        \"tooltip\": {\n          \"mode\": \"multi\",\n          \"sort\": \"desc\"\n        }\n      },\n      \"pluginVersion\": \"9.1.2\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"editorMode\": \"code\",\n          \"expr\": \"beacon_processor_exit_queue_total{network=~\\\"$network\\\", instance=~\\\"$node\\\"}\",\n          \"format\": \"time_series\",\n          \"interval\": \"\",\n          \"intervalFactor\": 1,\n          \"legendFormat\": \"{{instance}}\",\n          \"range\": true,\n          \"refId\": \"A\"\n        }\n      ],\n      \"title\": \"Exit Queue\",\n      \"type\": \"timeseries\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"palette-classic\"\n          },\n          \"custom\": {\n            \"axisCenteredZero\": false,\n            \"axisColorMode\": \"text\",\n            \"axisLabel\": \"\",\n            \"axisPlacement\": \"auto\",\n            \"barAlignment\": 0,\n            \"drawStyle\": \"line\",\n            \"fillOpacity\": 20,\n            \"gradientMode\": \"opacity\",\n            \"hideFrom\": {\n              \"legend\": false,\n              \"tooltip\": false,\n              \"viz\": false\n            },\n            \"lineInterpolation\": \"linear\",\n            \"lineWidth\": 1,\n            \"pointSize\": 5,\n            \"scaleDistribution\": {\n              \"type\": \"linear\"\n            },\n            \"showPoints\": \"auto\",\n            \"spanNulls\": false,\n            \"stacking\": {\n              \"group\": \"A\",\n              \"mode\": \"none\"\n            },\n            \"thresholdsStyle\": {\n              \"mode\": \"off\"\n            }\n          },\n          \"decimals\": 0,\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\"\n              },\n              {\n                \"color\": \"red\",\n                \"value\": 80\n              }\n            ]\n          },\n          \"unit\": \"none\"\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 5,\n        \"w\": 6,\n        \"x\": 18,\n        \"y\": 32\n      },\n      \"id\": 66,\n      \"options\": {\n        \"legend\": {\n          \"calcs\": [],\n          \"displayMode\": \"list\",\n          \"placement\": \"bottom\",\n          \"showLegend\": false\n        },\n        \"tooltip\": {\n          \"mode\": \"multi\",\n          \"sort\": \"desc\"\n        }\n      },\n      \"pluginVersion\": \"9.1.2\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"editorMode\": \"code\",\n          \"expr\": \"beacon_processor_bls_to_execution_change_queue_total{network=~\\\"$network\\\", instance=~\\\"$node\\\"}\",\n          \"format\": \"time_series\",\n          \"interval\": \"\",\n          \"intervalFactor\": 1,\n          \"legendFormat\": \"{{instance}}\",\n          \"range\": true,\n          \"refId\": \"A\"\n        }\n      ],\n      \"title\": \"beacon_processor_bls_to_execution_change_queue_total\",\n      \"type\": \"timeseries\"\n    },\n    {\n      \"collapsed\": false,\n      \"gridPos\": {\n        \"h\": 1,\n        \"w\": 24,\n        \"x\": 0,\n        \"y\": 37\n      },\n      \"id\": 46,\n      \"panels\": [],\n      \"title\": \"Worker Event Processing Times (as per \\\"Histogram Quantile\\\" Variable)\",\n      \"type\": \"row\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"palette-classic\"\n          },\n          \"custom\": {\n            \"axisCenteredZero\": false,\n            \"axisColorMode\": \"text\",\n            \"axisLabel\": \"\",\n            \"axisPlacement\": \"auto\",\n            \"barAlignment\": 0,\n            \"drawStyle\": \"line\",\n            \"fillOpacity\": 20,\n            \"gradientMode\": \"opacity\",\n            \"hideFrom\": {\n              \"legend\": false,\n              \"tooltip\": false,\n              \"viz\": false\n            },\n            \"lineInterpolation\": \"linear\",\n            \"lineWidth\": 1,\n            \"pointSize\": 5,\n            \"scaleDistribution\": {\n              \"type\": \"linear\"\n            },\n            \"showPoints\": \"auto\",\n            \"spanNulls\": false,\n            \"stacking\": {\n              \"group\": \"A\",\n              \"mode\": \"none\"\n            },\n            \"thresholdsStyle\": {\n              \"mode\": \"off\"\n            }\n          },\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\"\n              },\n              {\n                \"color\": \"red\",\n                \"value\": 80\n              }\n            ]\n          },\n          \"unit\": \"s\"\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 5,\n        \"w\": 6,\n        \"x\": 0,\n        \"y\": 38\n      },\n      \"id\": 44,\n      \"options\": {\n        \"legend\": {\n          \"calcs\": [],\n          \"displayMode\": \"list\",\n          \"placement\": \"bottom\",\n          \"showLegend\": false\n        },\n        \"tooltip\": {\n          \"mode\": \"multi\",\n          \"sort\": \"desc\"\n        }\n      },\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"editorMode\": \"code\",\n          \"expr\": \"histogram_quantile($quantile, rate(beacon_processor_worker_time_bucket{network=~\\\"${network}\\\", instance=~\\\"${node}\\\", type=\\\"gossip_attestation\\\"}[$__rate_interval]))\",\n          \"legendFormat\": \"{{instance}}\",\n          \"range\": true,\n          \"refId\": \"A\"\n        }\n      ],\n      \"title\": \"gossip_attestation\",\n      \"type\": \"timeseries\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"palette-classic\"\n          },\n          \"custom\": {\n            \"axisCenteredZero\": false,\n            \"axisColorMode\": \"text\",\n            \"axisLabel\": \"\",\n            \"axisPlacement\": \"auto\",\n            \"barAlignment\": 0,\n            \"drawStyle\": \"line\",\n            \"fillOpacity\": 20,\n            \"gradientMode\": \"opacity\",\n            \"hideFrom\": {\n              \"legend\": false,\n              \"tooltip\": false,\n              \"viz\": false\n            },\n            \"lineInterpolation\": \"linear\",\n            \"lineWidth\": 1,\n            \"pointSize\": 5,\n            \"scaleDistribution\": {\n              \"type\": \"linear\"\n            },\n            \"showPoints\": \"auto\",\n            \"spanNulls\": false,\n            \"stacking\": {\n              \"group\": \"A\",\n              \"mode\": \"none\"\n            },\n            \"thresholdsStyle\": {\n              \"mode\": \"off\"\n            }\n          },\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\"\n              },\n              {\n                \"color\": \"red\",\n                \"value\": 80\n              }\n            ]\n          },\n          \"unit\": \"s\"\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 5,\n        \"w\": 6,\n        \"x\": 6,\n        \"y\": 38\n      },\n      \"id\": 47,\n      \"options\": {\n        \"legend\": {\n          \"calcs\": [],\n          \"displayMode\": \"list\",\n          \"placement\": \"bottom\",\n          \"showLegend\": false\n        },\n        \"tooltip\": {\n          \"mode\": \"multi\",\n          \"sort\": \"desc\"\n        }\n      },\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"editorMode\": \"code\",\n          \"expr\": \"histogram_quantile($quantile, rate(beacon_processor_worker_time_bucket{network=~\\\"${network}\\\", instance=~\\\"${node}\\\", type=\\\"gossip_attestation_batch\\\"}[$__rate_interval]))\",\n          \"legendFormat\": \"{{instance}}\",\n          \"range\": true,\n          \"refId\": \"A\"\n        }\n      ],\n      \"title\": \"gossip_attestation_batch\",\n      \"type\": \"timeseries\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"palette-classic\"\n          },\n          \"custom\": {\n            \"axisCenteredZero\": false,\n            \"axisColorMode\": \"text\",\n            \"axisLabel\": \"\",\n            \"axisPlacement\": \"auto\",\n            \"barAlignment\": 0,\n            \"drawStyle\": \"line\",\n            \"fillOpacity\": 20,\n            \"gradientMode\": \"opacity\",\n            \"hideFrom\": {\n              \"legend\": false,\n              \"tooltip\": false,\n              \"viz\": false\n            },\n            \"lineInterpolation\": \"linear\",\n            \"lineWidth\": 1,\n            \"pointSize\": 5,\n            \"scaleDistribution\": {\n              \"type\": \"linear\"\n            },\n            \"showPoints\": \"auto\",\n            \"spanNulls\": false,\n            \"stacking\": {\n              \"group\": \"A\",\n              \"mode\": \"none\"\n            },\n            \"thresholdsStyle\": {\n              \"mode\": \"off\"\n            }\n          },\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\"\n              },\n              {\n                \"color\": \"red\",\n                \"value\": 80\n              }\n            ]\n          },\n          \"unit\": \"s\"\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 5,\n        \"w\": 6,\n        \"x\": 12,\n        \"y\": 38\n      },\n      \"id\": 50,\n      \"options\": {\n        \"legend\": {\n          \"calcs\": [],\n          \"displayMode\": \"list\",\n          \"placement\": \"bottom\",\n          \"showLegend\": false\n        },\n        \"tooltip\": {\n          \"mode\": \"multi\",\n          \"sort\": \"desc\"\n        }\n      },\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"editorMode\": \"code\",\n          \"expr\": \"histogram_quantile($quantile, rate(beacon_processor_worker_time_bucket{network=~\\\"${network}\\\", instance=~\\\"${node}\\\", type=\\\"gossip_aggregate\\\"}[$__rate_interval]))\",\n          \"legendFormat\": \"{{instance}}\",\n          \"range\": true,\n          \"refId\": \"A\"\n        }\n      ],\n      \"title\": \"gossip_aggregate\",\n      \"type\": \"timeseries\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"palette-classic\"\n          },\n          \"custom\": {\n            \"axisCenteredZero\": false,\n            \"axisColorMode\": \"text\",\n            \"axisLabel\": \"\",\n            \"axisPlacement\": \"auto\",\n            \"barAlignment\": 0,\n            \"drawStyle\": \"line\",\n            \"fillOpacity\": 20,\n            \"gradientMode\": \"opacity\",\n            \"hideFrom\": {\n              \"legend\": false,\n              \"tooltip\": false,\n              \"viz\": false\n            },\n            \"lineInterpolation\": \"linear\",\n            \"lineWidth\": 1,\n            \"pointSize\": 5,\n            \"scaleDistribution\": {\n              \"type\": \"linear\"\n            },\n            \"showPoints\": \"auto\",\n            \"spanNulls\": false,\n            \"stacking\": {\n              \"group\": \"A\",\n              \"mode\": \"none\"\n            },\n            \"thresholdsStyle\": {\n              \"mode\": \"off\"\n            }\n          },\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\"\n              },\n              {\n                \"color\": \"red\",\n                \"value\": 80\n              }\n            ]\n          },\n          \"unit\": \"s\"\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 5,\n        \"w\": 6,\n        \"x\": 18,\n        \"y\": 38\n      },\n      \"id\": 51,\n      \"options\": {\n        \"legend\": {\n          \"calcs\": [],\n          \"displayMode\": \"list\",\n          \"placement\": \"bottom\",\n          \"showLegend\": false\n        },\n        \"tooltip\": {\n          \"mode\": \"multi\",\n          \"sort\": \"desc\"\n        }\n      },\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"editorMode\": \"code\",\n          \"expr\": \"histogram_quantile($quantile, rate(beacon_processor_worker_time_bucket{network=~\\\"${network}\\\", instance=~\\\"${node}\\\", type=\\\"gossip_aggregate_batch\\\"}[$__rate_interval]))\",\n          \"legendFormat\": \"{{instance}}\",\n          \"range\": true,\n          \"refId\": \"A\"\n        }\n      ],\n      \"title\": \"gossip_aggregate_batch\",\n      \"type\": \"timeseries\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"palette-classic\"\n          },\n          \"custom\": {\n            \"axisCenteredZero\": false,\n            \"axisColorMode\": \"text\",\n            \"axisLabel\": \"\",\n            \"axisPlacement\": \"auto\",\n            \"barAlignment\": 0,\n            \"drawStyle\": \"line\",\n            \"fillOpacity\": 20,\n            \"gradientMode\": \"opacity\",\n            \"hideFrom\": {\n              \"legend\": false,\n              \"tooltip\": false,\n              \"viz\": false\n            },\n            \"lineInterpolation\": \"linear\",\n            \"lineWidth\": 1,\n            \"pointSize\": 5,\n            \"scaleDistribution\": {\n              \"type\": \"linear\"\n            },\n            \"showPoints\": \"auto\",\n            \"spanNulls\": false,\n            \"stacking\": {\n              \"group\": \"A\",\n              \"mode\": \"none\"\n            },\n            \"thresholdsStyle\": {\n              \"mode\": \"off\"\n            }\n          },\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\"\n              },\n              {\n                \"color\": \"red\",\n                \"value\": 80\n              }\n            ]\n          },\n          \"unit\": \"s\"\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 5,\n        \"w\": 6,\n        \"x\": 0,\n        \"y\": 43\n      },\n      \"id\": 64,\n      \"options\": {\n        \"legend\": {\n          \"calcs\": [],\n          \"displayMode\": \"list\",\n          \"placement\": \"bottom\",\n          \"showLegend\": false\n        },\n        \"tooltip\": {\n          \"mode\": \"multi\",\n          \"sort\": \"desc\"\n        }\n      },\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"editorMode\": \"code\",\n          \"expr\": \"histogram_quantile($quantile, rate(beacon_processor_worker_time_bucket{network=~\\\"${network}\\\", instance=~\\\"${node}\\\", type=\\\"unknown_block_attestation\\\"}[$__rate_interval]))\",\n          \"legendFormat\": \"{{instance}}\",\n          \"range\": true,\n          \"refId\": \"A\"\n        }\n      ],\n      \"title\": \"unknown_block_attestation\",\n      \"type\": \"timeseries\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"palette-classic\"\n          },\n          \"custom\": {\n            \"axisCenteredZero\": false,\n            \"axisColorMode\": \"text\",\n            \"axisLabel\": \"\",\n            \"axisPlacement\": \"auto\",\n            \"barAlignment\": 0,\n            \"drawStyle\": \"line\",\n            \"fillOpacity\": 20,\n            \"gradientMode\": \"opacity\",\n            \"hideFrom\": {\n              \"legend\": false,\n              \"tooltip\": false,\n              \"viz\": false\n            },\n            \"lineInterpolation\": \"linear\",\n            \"lineWidth\": 1,\n            \"pointSize\": 5,\n            \"scaleDistribution\": {\n              \"type\": \"linear\"\n            },\n            \"showPoints\": \"auto\",\n            \"spanNulls\": false,\n            \"stacking\": {\n              \"group\": \"A\",\n              \"mode\": \"none\"\n            },\n            \"thresholdsStyle\": {\n              \"mode\": \"off\"\n            }\n          },\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\"\n              },\n              {\n                \"color\": \"red\",\n                \"value\": 80\n              }\n            ]\n          },\n          \"unit\": \"s\"\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 5,\n        \"w\": 6,\n        \"x\": 6,\n        \"y\": 43\n      },\n      \"id\": 65,\n      \"options\": {\n        \"legend\": {\n          \"calcs\": [],\n          \"displayMode\": \"list\",\n          \"placement\": \"bottom\",\n          \"showLegend\": false\n        },\n        \"tooltip\": {\n          \"mode\": \"multi\",\n          \"sort\": \"desc\"\n        }\n      },\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"editorMode\": \"code\",\n          \"expr\": \"histogram_quantile($quantile, rate(beacon_processor_worker_time_bucket{network=~\\\"${network}\\\", instance=~\\\"${node}\\\", type=\\\"unknown_block_attestation\\\"}[$__rate_interval]))\",\n          \"legendFormat\": \"{{instance}}\",\n          \"range\": true,\n          \"refId\": \"A\"\n        }\n      ],\n      \"title\": \"unknown_block_aggregate\",\n      \"type\": \"timeseries\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"palette-classic\"\n          },\n          \"custom\": {\n            \"axisCenteredZero\": false,\n            \"axisColorMode\": \"text\",\n            \"axisLabel\": \"\",\n            \"axisPlacement\": \"auto\",\n            \"barAlignment\": 0,\n            \"drawStyle\": \"line\",\n            \"fillOpacity\": 20,\n            \"gradientMode\": \"opacity\",\n            \"hideFrom\": {\n              \"legend\": false,\n              \"tooltip\": false,\n              \"viz\": false\n            },\n            \"lineInterpolation\": \"linear\",\n            \"lineWidth\": 1,\n            \"pointSize\": 5,\n            \"scaleDistribution\": {\n              \"type\": \"linear\"\n            },\n            \"showPoints\": \"auto\",\n            \"spanNulls\": false,\n            \"stacking\": {\n              \"group\": \"A\",\n              \"mode\": \"none\"\n            },\n            \"thresholdsStyle\": {\n              \"mode\": \"off\"\n            }\n          },\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\"\n              },\n              {\n                \"color\": \"red\",\n                \"value\": 80\n              }\n            ]\n          },\n          \"unit\": \"s\"\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 5,\n        \"w\": 6,\n        \"x\": 12,\n        \"y\": 43\n      },\n      \"id\": 53,\n      \"options\": {\n        \"legend\": {\n          \"calcs\": [],\n          \"displayMode\": \"list\",\n          \"placement\": \"bottom\",\n          \"showLegend\": false\n        },\n        \"tooltip\": {\n          \"mode\": \"multi\",\n          \"sort\": \"desc\"\n        }\n      },\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"editorMode\": \"code\",\n          \"expr\": \"histogram_quantile($quantile, rate(beacon_processor_worker_time_bucket{network=~\\\"${network}\\\", instance=~\\\"${node}\\\", type=\\\"delayed_import_block\\\"}[$__rate_interval]))\",\n          \"legendFormat\": \"{{instance}}\",\n          \"range\": true,\n          \"refId\": \"A\"\n        }\n      ],\n      \"title\": \"delayed_import_block\",\n      \"type\": \"timeseries\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"palette-classic\"\n          },\n          \"custom\": {\n            \"axisCenteredZero\": false,\n            \"axisColorMode\": \"text\",\n            \"axisLabel\": \"\",\n            \"axisPlacement\": \"auto\",\n            \"barAlignment\": 0,\n            \"drawStyle\": \"line\",\n            \"fillOpacity\": 20,\n            \"gradientMode\": \"opacity\",\n            \"hideFrom\": {\n              \"legend\": false,\n              \"tooltip\": false,\n              \"viz\": false\n            },\n            \"lineInterpolation\": \"linear\",\n            \"lineWidth\": 1,\n            \"pointSize\": 5,\n            \"scaleDistribution\": {\n              \"type\": \"linear\"\n            },\n            \"showPoints\": \"auto\",\n            \"spanNulls\": false,\n            \"stacking\": {\n              \"group\": \"A\",\n              \"mode\": \"none\"\n            },\n            \"thresholdsStyle\": {\n              \"mode\": \"off\"\n            }\n          },\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\"\n              },\n              {\n                \"color\": \"red\",\n                \"value\": 80\n              }\n            ]\n          },\n          \"unit\": \"s\"\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 5,\n        \"w\": 6,\n        \"x\": 18,\n        \"y\": 43\n      },\n      \"id\": 60,\n      \"options\": {\n        \"legend\": {\n          \"calcs\": [],\n          \"displayMode\": \"list\",\n          \"placement\": \"bottom\",\n          \"showLegend\": false\n        },\n        \"tooltip\": {\n          \"mode\": \"multi\",\n          \"sort\": \"desc\"\n        }\n      },\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"editorMode\": \"code\",\n          \"expr\": \"histogram_quantile($quantile, rate(beacon_processor_worker_time_bucket{network=~\\\"${network}\\\", instance=~\\\"${node}\\\", type=\\\"chain_segment\\\"}[$__rate_interval]))\",\n          \"legendFormat\": \"{{instance}}\",\n          \"range\": true,\n          \"refId\": \"A\"\n        }\n      ],\n      \"title\": \"chain_segment\",\n      \"type\": \"timeseries\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"palette-classic\"\n          },\n          \"custom\": {\n            \"axisCenteredZero\": false,\n            \"axisColorMode\": \"text\",\n            \"axisLabel\": \"\",\n            \"axisPlacement\": \"auto\",\n            \"barAlignment\": 0,\n            \"drawStyle\": \"line\",\n            \"fillOpacity\": 20,\n            \"gradientMode\": \"opacity\",\n            \"hideFrom\": {\n              \"legend\": false,\n              \"tooltip\": false,\n              \"viz\": false\n            },\n            \"lineInterpolation\": \"linear\",\n            \"lineWidth\": 1,\n            \"pointSize\": 5,\n            \"scaleDistribution\": {\n              \"type\": \"linear\"\n            },\n            \"showPoints\": \"auto\",\n            \"spanNulls\": false,\n            \"stacking\": {\n              \"group\": \"A\",\n              \"mode\": \"none\"\n            },\n            \"thresholdsStyle\": {\n              \"mode\": \"off\"\n            }\n          },\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\"\n              },\n              {\n                \"color\": \"red\",\n                \"value\": 80\n              }\n            ]\n          },\n          \"unit\": \"s\"\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 5,\n        \"w\": 6,\n        \"x\": 0,\n        \"y\": 48\n      },\n      \"id\": 67,\n      \"options\": {\n        \"legend\": {\n          \"calcs\": [],\n          \"displayMode\": \"list\",\n          \"placement\": \"bottom\",\n          \"showLegend\": false\n        },\n        \"tooltip\": {\n          \"mode\": \"multi\",\n          \"sort\": \"desc\"\n        }\n      },\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"editorMode\": \"code\",\n          \"expr\": \"histogram_quantile($quantile, rate(beacon_processor_worker_time_bucket{network=~\\\"${network}\\\", instance=~\\\"${node}\\\", type=\\\"chain_segment_backfill\\\"}[$__rate_interval]))\",\n          \"legendFormat\": \"{{instance}}\",\n          \"range\": true,\n          \"refId\": \"A\"\n        }\n      ],\n      \"title\": \"chain_segment_backfill\",\n      \"type\": \"timeseries\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"palette-classic\"\n          },\n          \"custom\": {\n            \"axisCenteredZero\": false,\n            \"axisColorMode\": \"text\",\n            \"axisLabel\": \"\",\n            \"axisPlacement\": \"auto\",\n            \"barAlignment\": 0,\n            \"drawStyle\": \"line\",\n            \"fillOpacity\": 20,\n            \"gradientMode\": \"opacity\",\n            \"hideFrom\": {\n              \"legend\": false,\n              \"tooltip\": false,\n              \"viz\": false\n            },\n            \"lineInterpolation\": \"linear\",\n            \"lineWidth\": 1,\n            \"pointSize\": 5,\n            \"scaleDistribution\": {\n              \"type\": \"linear\"\n            },\n            \"showPoints\": \"auto\",\n            \"spanNulls\": false,\n            \"stacking\": {\n              \"group\": \"A\",\n              \"mode\": \"none\"\n            },\n            \"thresholdsStyle\": {\n              \"mode\": \"off\"\n            }\n          },\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\"\n              },\n              {\n                \"color\": \"red\",\n                \"value\": 80\n              }\n            ]\n          },\n          \"unit\": \"s\"\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 5,\n        \"w\": 6,\n        \"x\": 6,\n        \"y\": 48\n      },\n      \"id\": 59,\n      \"options\": {\n        \"legend\": {\n          \"calcs\": [],\n          \"displayMode\": \"list\",\n          \"placement\": \"bottom\",\n          \"showLegend\": false\n        },\n        \"tooltip\": {\n          \"mode\": \"multi\",\n          \"sort\": \"desc\"\n        }\n      },\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"editorMode\": \"code\",\n          \"expr\": \"histogram_quantile($quantile, rate(beacon_processor_worker_time_bucket{network=~\\\"${network}\\\", instance=~\\\"${node}\\\", type=\\\"rpc_block\\\"}[$__rate_interval]))\",\n          \"legendFormat\": \"{{instance}}\",\n          \"range\": true,\n          \"refId\": \"A\"\n        }\n      ],\n      \"title\": \"rpc_block\",\n      \"type\": \"timeseries\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"palette-classic\"\n          },\n          \"custom\": {\n            \"axisCenteredZero\": false,\n            \"axisColorMode\": \"text\",\n            \"axisLabel\": \"\",\n            \"axisPlacement\": \"auto\",\n            \"barAlignment\": 0,\n            \"drawStyle\": \"line\",\n            \"fillOpacity\": 20,\n            \"gradientMode\": \"opacity\",\n            \"hideFrom\": {\n              \"legend\": false,\n              \"tooltip\": false,\n              \"viz\": false\n            },\n            \"lineInterpolation\": \"linear\",\n            \"lineWidth\": 1,\n            \"pointSize\": 5,\n            \"scaleDistribution\": {\n              \"type\": \"linear\"\n            },\n            \"showPoints\": \"auto\",\n            \"spanNulls\": false,\n            \"stacking\": {\n              \"group\": \"A\",\n              \"mode\": \"none\"\n            },\n            \"thresholdsStyle\": {\n              \"mode\": \"off\"\n            }\n          },\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\"\n              },\n              {\n                \"color\": \"red\",\n                \"value\": 80\n              }\n            ]\n          },\n          \"unit\": \"s\"\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 5,\n        \"w\": 6,\n        \"x\": 12,\n        \"y\": 48\n      },\n      \"id\": 54,\n      \"options\": {\n        \"legend\": {\n          \"calcs\": [],\n          \"displayMode\": \"list\",\n          \"placement\": \"bottom\",\n          \"showLegend\": false\n        },\n        \"tooltip\": {\n          \"mode\": \"multi\",\n          \"sort\": \"desc\"\n        }\n      },\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"editorMode\": \"code\",\n          \"expr\": \"histogram_quantile($quantile, rate(beacon_processor_worker_time_bucket{network=~\\\"${network}\\\", instance=~\\\"${node}\\\", type=\\\"gossip_voluntary_exit\\\"}[$__rate_interval]))\",\n          \"legendFormat\": \"{{instance}}\",\n          \"range\": true,\n          \"refId\": \"A\"\n        }\n      ],\n      \"title\": \"gossip_voluntary_exit\",\n      \"type\": \"timeseries\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"palette-classic\"\n          },\n          \"custom\": {\n            \"axisCenteredZero\": false,\n            \"axisColorMode\": \"text\",\n            \"axisLabel\": \"\",\n            \"axisPlacement\": \"auto\",\n            \"barAlignment\": 0,\n            \"drawStyle\": \"line\",\n            \"fillOpacity\": 20,\n            \"gradientMode\": \"opacity\",\n            \"hideFrom\": {\n              \"legend\": false,\n              \"tooltip\": false,\n              \"viz\": false\n            },\n            \"lineInterpolation\": \"linear\",\n            \"lineWidth\": 1,\n            \"pointSize\": 5,\n            \"scaleDistribution\": {\n              \"type\": \"linear\"\n            },\n            \"showPoints\": \"auto\",\n            \"spanNulls\": false,\n            \"stacking\": {\n              \"group\": \"A\",\n              \"mode\": \"none\"\n            },\n            \"thresholdsStyle\": {\n              \"mode\": \"off\"\n            }\n          },\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\"\n              },\n              {\n                \"color\": \"red\",\n                \"value\": 80\n              }\n            ]\n          },\n          \"unit\": \"s\"\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 5,\n        \"w\": 6,\n        \"x\": 18,\n        \"y\": 48\n      },\n      \"id\": 61,\n      \"options\": {\n        \"legend\": {\n          \"calcs\": [],\n          \"displayMode\": \"list\",\n          \"placement\": \"bottom\",\n          \"showLegend\": false\n        },\n        \"tooltip\": {\n          \"mode\": \"multi\",\n          \"sort\": \"desc\"\n        }\n      },\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"editorMode\": \"code\",\n          \"expr\": \"histogram_quantile($quantile, rate(beacon_processor_worker_time_bucket{network=~\\\"${network}\\\", instance=~\\\"${node}\\\", type=\\\"status_processing\\\"}[$__rate_interval]))\",\n          \"legendFormat\": \"{{instance}}\",\n          \"range\": true,\n          \"refId\": \"A\"\n        }\n      ],\n      \"title\": \"status_processing\",\n      \"type\": \"timeseries\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"palette-classic\"\n          },\n          \"custom\": {\n            \"axisCenteredZero\": false,\n            \"axisColorMode\": \"text\",\n            \"axisLabel\": \"\",\n            \"axisPlacement\": \"auto\",\n            \"barAlignment\": 0,\n            \"drawStyle\": \"line\",\n            \"fillOpacity\": 20,\n            \"gradientMode\": \"opacity\",\n            \"hideFrom\": {\n              \"legend\": false,\n              \"tooltip\": false,\n              \"viz\": false\n            },\n            \"lineInterpolation\": \"linear\",\n            \"lineWidth\": 1,\n            \"pointSize\": 5,\n            \"scaleDistribution\": {\n              \"type\": \"linear\"\n            },\n            \"showPoints\": \"auto\",\n            \"spanNulls\": false,\n            \"stacking\": {\n              \"group\": \"A\",\n              \"mode\": \"none\"\n            },\n            \"thresholdsStyle\": {\n              \"mode\": \"off\"\n            }\n          },\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\"\n              },\n              {\n                \"color\": \"red\",\n                \"value\": 80\n              }\n            ]\n          },\n          \"unit\": \"s\"\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 5,\n        \"w\": 6,\n        \"x\": 0,\n        \"y\": 53\n      },\n      \"id\": 52,\n      \"options\": {\n        \"legend\": {\n          \"calcs\": [],\n          \"displayMode\": \"list\",\n          \"placement\": \"bottom\",\n          \"showLegend\": false\n        },\n        \"tooltip\": {\n          \"mode\": \"multi\",\n          \"sort\": \"desc\"\n        }\n      },\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"editorMode\": \"code\",\n          \"expr\": \"histogram_quantile($quantile, rate(beacon_processor_worker_time_bucket{network=~\\\"${network}\\\", instance=~\\\"${node}\\\", type=\\\"gossip_block\\\"}[$__rate_interval]))\",\n          \"legendFormat\": \"{{instance}}\",\n          \"range\": true,\n          \"refId\": \"A\"\n        }\n      ],\n      \"title\": \"gossip_block\",\n      \"type\": \"timeseries\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"palette-classic\"\n          },\n          \"custom\": {\n            \"axisCenteredZero\": false,\n            \"axisColorMode\": \"text\",\n            \"axisLabel\": \"\",\n            \"axisPlacement\": \"auto\",\n            \"barAlignment\": 0,\n            \"drawStyle\": \"line\",\n            \"fillOpacity\": 20,\n            \"gradientMode\": \"opacity\",\n            \"hideFrom\": {\n              \"legend\": false,\n              \"tooltip\": false,\n              \"viz\": false\n            },\n            \"lineInterpolation\": \"linear\",\n            \"lineWidth\": 1,\n            \"pointSize\": 5,\n            \"scaleDistribution\": {\n              \"type\": \"linear\"\n            },\n            \"showPoints\": \"auto\",\n            \"spanNulls\": false,\n            \"stacking\": {\n              \"group\": \"A\",\n              \"mode\": \"none\"\n            },\n            \"thresholdsStyle\": {\n              \"mode\": \"off\"\n            }\n          },\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\"\n              },\n              {\n                \"color\": \"red\",\n                \"value\": 80\n              }\n            ]\n          },\n          \"unit\": \"s\"\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 5,\n        \"w\": 6,\n        \"x\": 6,\n        \"y\": 53\n      },\n      \"id\": 55,\n      \"options\": {\n        \"legend\": {\n          \"calcs\": [],\n          \"displayMode\": \"list\",\n          \"placement\": \"bottom\",\n          \"showLegend\": false\n        },\n        \"tooltip\": {\n          \"mode\": \"multi\",\n          \"sort\": \"desc\"\n        }\n      },\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"editorMode\": \"code\",\n          \"expr\": \"histogram_quantile($quantile, rate(beacon_processor_worker_time_bucket{network=~\\\"${network}\\\", instance=~\\\"${node}\\\", type=\\\"gossip_proposer_slashing\\\"}[$__rate_interval]))\",\n          \"legendFormat\": \"{{instance}}\",\n          \"range\": true,\n          \"refId\": \"A\"\n        }\n      ],\n      \"title\": \"gossip_proposer_slashing\",\n      \"type\": \"timeseries\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"palette-classic\"\n          },\n          \"custom\": {\n            \"axisCenteredZero\": false,\n            \"axisColorMode\": \"text\",\n            \"axisLabel\": \"\",\n            \"axisPlacement\": \"auto\",\n            \"barAlignment\": 0,\n            \"drawStyle\": \"line\",\n            \"fillOpacity\": 20,\n            \"gradientMode\": \"opacity\",\n            \"hideFrom\": {\n              \"legend\": false,\n              \"tooltip\": false,\n              \"viz\": false\n            },\n            \"lineInterpolation\": \"linear\",\n            \"lineWidth\": 1,\n            \"pointSize\": 5,\n            \"scaleDistribution\": {\n              \"type\": \"linear\"\n            },\n            \"showPoints\": \"auto\",\n            \"spanNulls\": false,\n            \"stacking\": {\n              \"group\": \"A\",\n              \"mode\": \"none\"\n            },\n            \"thresholdsStyle\": {\n              \"mode\": \"off\"\n            }\n          },\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\"\n              },\n              {\n                \"color\": \"red\",\n                \"value\": 80\n              }\n            ]\n          },\n          \"unit\": \"s\"\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 5,\n        \"w\": 6,\n        \"x\": 12,\n        \"y\": 53\n      },\n      \"id\": 63,\n      \"options\": {\n        \"legend\": {\n          \"calcs\": [],\n          \"displayMode\": \"list\",\n          \"placement\": \"bottom\",\n          \"showLegend\": false\n        },\n        \"tooltip\": {\n          \"mode\": \"multi\",\n          \"sort\": \"desc\"\n        }\n      },\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"editorMode\": \"code\",\n          \"expr\": \"histogram_quantile($quantile, rate(beacon_processor_worker_time_bucket{network=~\\\"${network}\\\", instance=~\\\"${node}\\\", type=\\\"blocks_by_roots_request\\\"}[$__rate_interval]))\",\n          \"legendFormat\": \"{{instance}}\",\n          \"range\": true,\n          \"refId\": \"A\"\n        }\n      ],\n      \"title\": \"blocks_by_roots_request\",\n      \"type\": \"timeseries\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"palette-classic\"\n          },\n          \"custom\": {\n            \"axisCenteredZero\": false,\n            \"axisColorMode\": \"text\",\n            \"axisLabel\": \"\",\n            \"axisPlacement\": \"auto\",\n            \"barAlignment\": 0,\n            \"drawStyle\": \"line\",\n            \"fillOpacity\": 20,\n            \"gradientMode\": \"opacity\",\n            \"hideFrom\": {\n              \"legend\": false,\n              \"tooltip\": false,\n              \"viz\": false\n            },\n            \"lineInterpolation\": \"linear\",\n            \"lineWidth\": 1,\n            \"pointSize\": 5,\n            \"scaleDistribution\": {\n              \"type\": \"linear\"\n            },\n            \"showPoints\": \"auto\",\n            \"spanNulls\": false,\n            \"stacking\": {\n              \"group\": \"A\",\n              \"mode\": \"none\"\n            },\n            \"thresholdsStyle\": {\n              \"mode\": \"off\"\n            }\n          },\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\"\n              },\n              {\n                \"color\": \"red\",\n                \"value\": 80\n              }\n            ]\n          },\n          \"unit\": \"s\"\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 5,\n        \"w\": 6,\n        \"x\": 18,\n        \"y\": 53\n      },\n      \"id\": 62,\n      \"options\": {\n        \"legend\": {\n          \"calcs\": [],\n          \"displayMode\": \"list\",\n          \"placement\": \"bottom\",\n          \"showLegend\": false\n        },\n        \"tooltip\": {\n          \"mode\": \"multi\",\n          \"sort\": \"desc\"\n        }\n      },\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"editorMode\": \"code\",\n          \"expr\": \"histogram_quantile($quantile, rate(beacon_processor_worker_time_bucket{network=~\\\"${network}\\\", instance=~\\\"${node}\\\", type=\\\"blocks_by_range_request\\\"}[$__rate_interval]))\",\n          \"legendFormat\": \"{{instance}}\",\n          \"range\": true,\n          \"refId\": \"A\"\n        }\n      ],\n      \"title\": \"blocks_by_range_request\",\n      \"type\": \"timeseries\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"palette-classic\"\n          },\n          \"custom\": {\n            \"axisCenteredZero\": false,\n            \"axisColorMode\": \"text\",\n            \"axisLabel\": \"\",\n            \"axisPlacement\": \"auto\",\n            \"barAlignment\": 0,\n            \"drawStyle\": \"line\",\n            \"fillOpacity\": 20,\n            \"gradientMode\": \"opacity\",\n            \"hideFrom\": {\n              \"legend\": false,\n              \"tooltip\": false,\n              \"viz\": false\n            },\n            \"lineInterpolation\": \"linear\",\n            \"lineWidth\": 1,\n            \"pointSize\": 5,\n            \"scaleDistribution\": {\n              \"type\": \"linear\"\n            },\n            \"showPoints\": \"auto\",\n            \"spanNulls\": false,\n            \"stacking\": {\n              \"group\": \"A\",\n              \"mode\": \"none\"\n            },\n            \"thresholdsStyle\": {\n              \"mode\": \"off\"\n            }\n          },\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\"\n              },\n              {\n                \"color\": \"red\",\n                \"value\": 80\n              }\n            ]\n          },\n          \"unit\": \"s\"\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 5,\n        \"w\": 6,\n        \"x\": 0,\n        \"y\": 58\n      },\n      \"id\": 56,\n      \"options\": {\n        \"legend\": {\n          \"calcs\": [],\n          \"displayMode\": \"list\",\n          \"placement\": \"bottom\",\n          \"showLegend\": false\n        },\n        \"tooltip\": {\n          \"mode\": \"multi\",\n          \"sort\": \"desc\"\n        }\n      },\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"editorMode\": \"code\",\n          \"expr\": \"histogram_quantile($quantile, rate(beacon_processor_worker_time_bucket{network=~\\\"${network}\\\", instance=~\\\"${node}\\\", type=\\\"gossip_attester_slashing\\\"}[$__rate_interval]))\",\n          \"legendFormat\": \"{{instance}}\",\n          \"range\": true,\n          \"refId\": \"A\"\n        }\n      ],\n      \"title\": \"gossip_attester_slashing\",\n      \"type\": \"timeseries\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"palette-classic\"\n          },\n          \"custom\": {\n            \"axisCenteredZero\": false,\n            \"axisColorMode\": \"text\",\n            \"axisLabel\": \"\",\n            \"axisPlacement\": \"auto\",\n            \"barAlignment\": 0,\n            \"drawStyle\": \"line\",\n            \"fillOpacity\": 20,\n            \"gradientMode\": \"opacity\",\n            \"hideFrom\": {\n              \"legend\": false,\n              \"tooltip\": false,\n              \"viz\": false\n            },\n            \"lineInterpolation\": \"linear\",\n            \"lineWidth\": 1,\n            \"pointSize\": 5,\n            \"scaleDistribution\": {\n              \"type\": \"linear\"\n            },\n            \"showPoints\": \"auto\",\n            \"spanNulls\": false,\n            \"stacking\": {\n              \"group\": \"A\",\n              \"mode\": \"none\"\n            },\n            \"thresholdsStyle\": {\n              \"mode\": \"off\"\n            }\n          },\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\"\n              },\n              {\n                \"color\": \"red\",\n                \"value\": 80\n              }\n            ]\n          },\n          \"unit\": \"s\"\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 5,\n        \"w\": 6,\n        \"x\": 6,\n        \"y\": 58\n      },\n      \"id\": 57,\n      \"options\": {\n        \"legend\": {\n          \"calcs\": [],\n          \"displayMode\": \"list\",\n          \"placement\": \"bottom\",\n          \"showLegend\": false\n        },\n        \"tooltip\": {\n          \"mode\": \"multi\",\n          \"sort\": \"desc\"\n        }\n      },\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"editorMode\": \"code\",\n          \"expr\": \"histogram_quantile($quantile, rate(beacon_processor_worker_time_bucket{network=~\\\"${network}\\\", instance=~\\\"${node}\\\", type=\\\"gossip_sync_signature\\\"}[$__rate_interval]))\",\n          \"legendFormat\": \"{{instance}}\",\n          \"range\": true,\n          \"refId\": \"A\"\n        }\n      ],\n      \"title\": \"gossip_sync_signature\",\n      \"type\": \"timeseries\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"palette-classic\"\n          },\n          \"custom\": {\n            \"axisCenteredZero\": false,\n            \"axisColorMode\": \"text\",\n            \"axisLabel\": \"\",\n            \"axisPlacement\": \"auto\",\n            \"barAlignment\": 0,\n            \"drawStyle\": \"line\",\n            \"fillOpacity\": 20,\n            \"gradientMode\": \"opacity\",\n            \"hideFrom\": {\n              \"legend\": false,\n              \"tooltip\": false,\n              \"viz\": false\n            },\n            \"lineInterpolation\": \"linear\",\n            \"lineWidth\": 1,\n            \"pointSize\": 5,\n            \"scaleDistribution\": {\n              \"type\": \"linear\"\n            },\n            \"showPoints\": \"auto\",\n            \"spanNulls\": false,\n            \"stacking\": {\n              \"group\": \"A\",\n              \"mode\": \"none\"\n            },\n            \"thresholdsStyle\": {\n              \"mode\": \"off\"\n            }\n          },\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\"\n              },\n              {\n                \"color\": \"red\",\n                \"value\": 80\n              }\n            ]\n          },\n          \"unit\": \"s\"\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 5,\n        \"w\": 6,\n        \"x\": 12,\n        \"y\": 58\n      },\n      \"id\": 58,\n      \"options\": {\n        \"legend\": {\n          \"calcs\": [],\n          \"displayMode\": \"list\",\n          \"placement\": \"bottom\",\n          \"showLegend\": false\n        },\n        \"tooltip\": {\n          \"mode\": \"multi\",\n          \"sort\": \"desc\"\n        }\n      },\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"editorMode\": \"code\",\n          \"expr\": \"histogram_quantile($quantile, rate(beacon_processor_worker_time_bucket{network=~\\\"${network}\\\", instance=~\\\"${node}\\\", type=\\\"gossip_sync_contribution\\\"}[$__rate_interval]))\",\n          \"legendFormat\": \"{{instance}}\",\n          \"range\": true,\n          \"refId\": \"A\"\n        }\n      ],\n      \"title\": \"gossip_sync_contribution\",\n      \"type\": \"timeseries\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"palette-classic\"\n          },\n          \"custom\": {\n            \"axisCenteredZero\": false,\n            \"axisColorMode\": \"text\",\n            \"axisLabel\": \"\",\n            \"axisPlacement\": \"auto\",\n            \"barAlignment\": 0,\n            \"drawStyle\": \"line\",\n            \"fillOpacity\": 20,\n            \"gradientMode\": \"opacity\",\n            \"hideFrom\": {\n              \"legend\": false,\n              \"tooltip\": false,\n              \"viz\": false\n            },\n            \"lineInterpolation\": \"linear\",\n            \"lineWidth\": 1,\n            \"pointSize\": 5,\n            \"scaleDistribution\": {\n              \"type\": \"linear\"\n            },\n            \"showPoints\": \"auto\",\n            \"spanNulls\": false,\n            \"stacking\": {\n              \"group\": \"A\",\n              \"mode\": \"none\"\n            },\n            \"thresholdsStyle\": {\n              \"mode\": \"off\"\n            }\n          },\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\"\n              },\n              {\n                \"color\": \"red\",\n                \"value\": 80\n              }\n            ]\n          },\n          \"unit\": \"s\"\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 5,\n        \"w\": 6,\n        \"x\": 18,\n        \"y\": 58\n      },\n      \"id\": 68,\n      \"options\": {\n        \"legend\": {\n          \"calcs\": [],\n          \"displayMode\": \"list\",\n          \"placement\": \"bottom\",\n          \"showLegend\": false\n        },\n        \"tooltip\": {\n          \"mode\": \"multi\",\n          \"sort\": \"desc\"\n        }\n      },\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"editorMode\": \"code\",\n          \"expr\": \"histogram_quantile($quantile, rate(beacon_processor_worker_time_bucket{network=~\\\"${network}\\\", instance=~\\\"${node}\\\", type=\\\"api_request_p0\\\"}[$__rate_interval]))\",\n          \"legendFormat\": \"{{instance}}\",\n          \"range\": true,\n          \"refId\": \"A\"\n        }\n      ],\n      \"title\": \"api_request_p0\",\n      \"type\": \"timeseries\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"palette-classic\"\n          },\n          \"custom\": {\n            \"axisCenteredZero\": false,\n            \"axisColorMode\": \"text\",\n            \"axisLabel\": \"\",\n            \"axisPlacement\": \"auto\",\n            \"barAlignment\": 0,\n            \"drawStyle\": \"line\",\n            \"fillOpacity\": 20,\n            \"gradientMode\": \"opacity\",\n            \"hideFrom\": {\n              \"legend\": false,\n              \"tooltip\": false,\n              \"viz\": false\n            },\n            \"lineInterpolation\": \"linear\",\n            \"lineWidth\": 1,\n            \"pointSize\": 5,\n            \"scaleDistribution\": {\n              \"type\": \"linear\"\n            },\n            \"showPoints\": \"auto\",\n            \"spanNulls\": false,\n            \"stacking\": {\n              \"group\": \"A\",\n              \"mode\": \"none\"\n            },\n            \"thresholdsStyle\": {\n              \"mode\": \"off\"\n            }\n          },\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\"\n              },\n              {\n                \"color\": \"red\",\n                \"value\": 80\n              }\n            ]\n          },\n          \"unit\": \"s\"\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 5,\n        \"w\": 6,\n        \"x\": 0,\n        \"y\": 63\n      },\n      \"id\": 69,\n      \"options\": {\n        \"legend\": {\n          \"calcs\": [],\n          \"displayMode\": \"list\",\n          \"placement\": \"bottom\",\n          \"showLegend\": false\n        },\n        \"tooltip\": {\n          \"mode\": \"multi\",\n          \"sort\": \"desc\"\n        }\n      },\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"editorMode\": \"code\",\n          \"expr\": \"histogram_quantile($quantile, rate(beacon_processor_worker_time_bucket{network=~\\\"${network}\\\", instance=~\\\"${node}\\\", type=\\\"api_request_p1\\\"}[$__rate_interval]))\",\n          \"legendFormat\": \"{{instance}}\",\n          \"range\": true,\n          \"refId\": \"A\"\n        }\n      ],\n      \"title\": \"api_request_p1\",\n      \"type\": \"timeseries\"\n    },\n    {\n      \"collapsed\": false,\n      \"gridPos\": {\n        \"h\": 1,\n        \"w\": 24,\n        \"x\": 0,\n        \"y\": 68\n      },\n      \"id\": 23,\n      \"panels\": [],\n      \"title\": \"Work Events Received & Started\",\n      \"type\": \"row\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"palette-classic\"\n          },\n          \"custom\": {\n            \"axisCenteredZero\": false,\n            \"axisColorMode\": \"text\",\n            \"axisLabel\": \"\",\n            \"axisPlacement\": \"auto\",\n            \"barAlignment\": 0,\n            \"drawStyle\": \"line\",\n            \"fillOpacity\": 20,\n            \"gradientMode\": \"opacity\",\n            \"hideFrom\": {\n              \"legend\": false,\n              \"tooltip\": false,\n              \"viz\": false\n            },\n            \"lineInterpolation\": \"linear\",\n            \"lineWidth\": 1,\n            \"pointSize\": 5,\n            \"scaleDistribution\": {\n              \"type\": \"linear\"\n            },\n            \"showPoints\": \"auto\",\n            \"spanNulls\": false,\n            \"stacking\": {\n              \"group\": \"A\",\n              \"mode\": \"none\"\n            },\n            \"thresholdsStyle\": {\n              \"mode\": \"off\"\n            }\n          },\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\"\n              },\n              {\n                \"color\": \"red\",\n                \"value\": 80\n              }\n            ]\n          },\n          \"unit\": \"none\"\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 5,\n        \"w\": 6,\n        \"x\": 0,\n        \"y\": 69\n      },\n      \"id\": 34,\n      \"options\": {\n        \"legend\": {\n          \"calcs\": [],\n          \"displayMode\": \"list\",\n          \"placement\": \"bottom\",\n          \"showLegend\": false\n        },\n        \"tooltip\": {\n          \"mode\": \"multi\",\n          \"sort\": \"desc\"\n        }\n      },\n      \"pluginVersion\": \"9.1.2\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"editorMode\": \"code\",\n          \"expr\": \"rate(beacon_processor_work_events_rx_count{network=~\\\"$network\\\", instance=~\\\"$node\\\", type=\\\"gossip_attestation\\\"}[$__rate_interval])\",\n          \"format\": \"time_series\",\n          \"interval\": \"\",\n          \"intervalFactor\": 1,\n          \"legendFormat\": \"{{instance}} - event received\",\n          \"range\": true,\n          \"refId\": \"A\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"editorMode\": \"code\",\n          \"expr\": \"rate(beacon_processor_work_events_started_count{network=~\\\"$network\\\", instance=~\\\"$node\\\", type=\\\"gossip_attestation\\\"}[$__rate_interval])\",\n          \"format\": \"time_series\",\n          \"hide\": false,\n          \"interval\": \"\",\n          \"intervalFactor\": 1,\n          \"legendFormat\": \"{{instance}} - work started\",\n          \"range\": true,\n          \"refId\": \"B\"\n        }\n      ],\n      \"title\": \"gossip_attestation\",\n      \"type\": \"timeseries\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"palette-classic\"\n          },\n          \"custom\": {\n            \"axisCenteredZero\": false,\n            \"axisColorMode\": \"text\",\n            \"axisLabel\": \"\",\n            \"axisPlacement\": \"auto\",\n            \"barAlignment\": 0,\n            \"drawStyle\": \"line\",\n            \"fillOpacity\": 20,\n            \"gradientMode\": \"opacity\",\n            \"hideFrom\": {\n              \"legend\": false,\n              \"tooltip\": false,\n              \"viz\": false\n            },\n            \"lineInterpolation\": \"linear\",\n            \"lineWidth\": 1,\n            \"pointSize\": 5,\n            \"scaleDistribution\": {\n              \"type\": \"linear\"\n            },\n            \"showPoints\": \"auto\",\n            \"spanNulls\": false,\n            \"stacking\": {\n              \"group\": \"A\",\n              \"mode\": \"none\"\n            },\n            \"thresholdsStyle\": {\n              \"mode\": \"off\"\n            }\n          },\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\"\n              },\n              {\n                \"color\": \"red\",\n                \"value\": 80\n              }\n            ]\n          },\n          \"unit\": \"none\"\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 5,\n        \"w\": 6,\n        \"x\": 6,\n        \"y\": 69\n      },\n      \"id\": 48,\n      \"options\": {\n        \"legend\": {\n          \"calcs\": [],\n          \"displayMode\": \"list\",\n          \"placement\": \"bottom\",\n          \"showLegend\": false\n        },\n        \"tooltip\": {\n          \"mode\": \"multi\",\n          \"sort\": \"desc\"\n        }\n      },\n      \"pluginVersion\": \"9.1.2\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"editorMode\": \"code\",\n          \"expr\": \"rate(beacon_processor_work_events_rx_count{network=~\\\"$network\\\", instance=~\\\"$node\\\", type=\\\"gossip_attestation_batch\\\"}[$__rate_interval])\",\n          \"format\": \"time_series\",\n          \"interval\": \"\",\n          \"intervalFactor\": 1,\n          \"legendFormat\": \"{{instance}} - event received\",\n          \"range\": true,\n          \"refId\": \"A\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"editorMode\": \"code\",\n          \"expr\": \"rate(beacon_processor_work_events_started_count{network=~\\\"$network\\\", instance=~\\\"$node\\\", type=\\\"gossip_attestation_batch\\\"}[$__rate_interval])\",\n          \"format\": \"time_series\",\n          \"hide\": false,\n          \"interval\": \"\",\n          \"intervalFactor\": 1,\n          \"legendFormat\": \"{{instance}} - work started\",\n          \"range\": true,\n          \"refId\": \"B\"\n        }\n      ],\n      \"title\": \"gossip_attestation_batch\",\n      \"type\": \"timeseries\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"palette-classic\"\n          },\n          \"custom\": {\n            \"axisCenteredZero\": false,\n            \"axisColorMode\": \"text\",\n            \"axisLabel\": \"\",\n            \"axisPlacement\": \"auto\",\n            \"barAlignment\": 0,\n            \"drawStyle\": \"line\",\n            \"fillOpacity\": 20,\n            \"gradientMode\": \"opacity\",\n            \"hideFrom\": {\n              \"legend\": false,\n              \"tooltip\": false,\n              \"viz\": false\n            },\n            \"lineInterpolation\": \"linear\",\n            \"lineWidth\": 1,\n            \"pointSize\": 5,\n            \"scaleDistribution\": {\n              \"type\": \"linear\"\n            },\n            \"showPoints\": \"auto\",\n            \"spanNulls\": false,\n            \"stacking\": {\n              \"group\": \"A\",\n              \"mode\": \"none\"\n            },\n            \"thresholdsStyle\": {\n              \"mode\": \"off\"\n            }\n          },\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\"\n              },\n              {\n                \"color\": \"red\",\n                \"value\": 80\n              }\n            ]\n          },\n          \"unit\": \"none\"\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 5,\n        \"w\": 6,\n        \"x\": 12,\n        \"y\": 69\n      },\n      \"id\": 27,\n      \"options\": {\n        \"legend\": {\n          \"calcs\": [],\n          \"displayMode\": \"list\",\n          \"placement\": \"bottom\",\n          \"showLegend\": false\n        },\n        \"tooltip\": {\n          \"mode\": \"multi\",\n          \"sort\": \"desc\"\n        }\n      },\n      \"pluginVersion\": \"9.1.2\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"editorMode\": \"code\",\n          \"expr\": \"rate(beacon_processor_work_events_rx_count{network=~\\\"$network\\\", instance=~\\\"$node\\\", type=\\\"gossip_aggregate\\\"}[$__rate_interval])\",\n          \"format\": \"time_series\",\n          \"interval\": \"\",\n          \"intervalFactor\": 1,\n          \"legendFormat\": \"{{instance}} - event received\",\n          \"range\": true,\n          \"refId\": \"A\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"editorMode\": \"code\",\n          \"expr\": \"rate(beacon_processor_work_events_started_count{network=~\\\"$network\\\", instance=~\\\"$node\\\", type=\\\"gossip_aggregate\\\"}[$__rate_interval])\",\n          \"format\": \"time_series\",\n          \"hide\": false,\n          \"interval\": \"\",\n          \"intervalFactor\": 1,\n          \"legendFormat\": \"{{instance}} - work started\",\n          \"range\": true,\n          \"refId\": \"B\"\n        }\n      ],\n      \"title\": \"gossip_aggregate\",\n      \"type\": \"timeseries\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"palette-classic\"\n          },\n          \"custom\": {\n            \"axisCenteredZero\": false,\n            \"axisColorMode\": \"text\",\n            \"axisLabel\": \"\",\n            \"axisPlacement\": \"auto\",\n            \"barAlignment\": 0,\n            \"drawStyle\": \"line\",\n            \"fillOpacity\": 20,\n            \"gradientMode\": \"opacity\",\n            \"hideFrom\": {\n              \"legend\": false,\n              \"tooltip\": false,\n              \"viz\": false\n            },\n            \"lineInterpolation\": \"linear\",\n            \"lineWidth\": 1,\n            \"pointSize\": 5,\n            \"scaleDistribution\": {\n              \"type\": \"linear\"\n            },\n            \"showPoints\": \"auto\",\n            \"spanNulls\": false,\n            \"stacking\": {\n              \"group\": \"A\",\n              \"mode\": \"none\"\n            },\n            \"thresholdsStyle\": {\n              \"mode\": \"off\"\n            }\n          },\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\"\n              },\n              {\n                \"color\": \"red\",\n                \"value\": 80\n              }\n            ]\n          },\n          \"unit\": \"none\"\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 5,\n        \"w\": 6,\n        \"x\": 18,\n        \"y\": 69\n      },\n      \"id\": 49,\n      \"options\": {\n        \"legend\": {\n          \"calcs\": [],\n          \"displayMode\": \"list\",\n          \"placement\": \"bottom\",\n          \"showLegend\": false\n        },\n        \"tooltip\": {\n          \"mode\": \"multi\",\n          \"sort\": \"desc\"\n        }\n      },\n      \"pluginVersion\": \"9.1.2\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"editorMode\": \"code\",\n          \"expr\": \"rate(beacon_processor_work_events_rx_count{network=~\\\"$network\\\", instance=~\\\"$node\\\", type=\\\"gossip_aggregate_batch\\\"}[$__rate_interval])\",\n          \"format\": \"time_series\",\n          \"interval\": \"\",\n          \"intervalFactor\": 1,\n          \"legendFormat\": \"{{instance}} - event received\",\n          \"range\": true,\n          \"refId\": \"A\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"editorMode\": \"code\",\n          \"expr\": \"rate(beacon_processor_work_events_started_count{network=~\\\"$network\\\", instance=~\\\"$node\\\", type=\\\"gossip_aggregate_batch\\\"}[$__rate_interval])\",\n          \"format\": \"time_series\",\n          \"hide\": false,\n          \"interval\": \"\",\n          \"intervalFactor\": 1,\n          \"legendFormat\": \"{{instance}} - work started\",\n          \"range\": true,\n          \"refId\": \"B\"\n        }\n      ],\n      \"title\": \"gossip_aggregate_batch\",\n      \"type\": \"timeseries\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"palette-classic\"\n          },\n          \"custom\": {\n            \"axisCenteredZero\": false,\n            \"axisColorMode\": \"text\",\n            \"axisLabel\": \"\",\n            \"axisPlacement\": \"auto\",\n            \"barAlignment\": 0,\n            \"drawStyle\": \"line\",\n            \"fillOpacity\": 20,\n            \"gradientMode\": \"opacity\",\n            \"hideFrom\": {\n              \"legend\": false,\n              \"tooltip\": false,\n              \"viz\": false\n            },\n            \"lineInterpolation\": \"linear\",\n            \"lineWidth\": 1,\n            \"pointSize\": 5,\n            \"scaleDistribution\": {\n              \"type\": \"linear\"\n            },\n            \"showPoints\": \"auto\",\n            \"spanNulls\": false,\n            \"stacking\": {\n              \"group\": \"A\",\n              \"mode\": \"none\"\n            },\n            \"thresholdsStyle\": {\n              \"mode\": \"off\"\n            }\n          },\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\"\n              },\n              {\n                \"color\": \"red\",\n                \"value\": 80\n              }\n            ]\n          },\n          \"unit\": \"none\"\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 5,\n        \"w\": 6,\n        \"x\": 0,\n        \"y\": 74\n      },\n      \"id\": 35,\n      \"options\": {\n        \"legend\": {\n          \"calcs\": [],\n          \"displayMode\": \"list\",\n          \"placement\": \"bottom\",\n          \"showLegend\": false\n        },\n        \"tooltip\": {\n          \"mode\": \"multi\",\n          \"sort\": \"desc\"\n        }\n      },\n      \"pluginVersion\": \"9.1.2\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"editorMode\": \"code\",\n          \"expr\": \"rate(beacon_processor_work_events_rx_count{network=~\\\"$network\\\", instance=~\\\"$node\\\", type=\\\"unknown_block_attestation\\\"}[$__rate_interval])\",\n          \"format\": \"time_series\",\n          \"interval\": \"\",\n          \"intervalFactor\": 1,\n          \"legendFormat\": \"{{instance}} - event received\",\n          \"range\": true,\n          \"refId\": \"A\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"editorMode\": \"code\",\n          \"expr\": \"rate(beacon_processor_work_events_started_count{network=~\\\"$network\\\", instance=~\\\"$node\\\", type=\\\"unknown_block_attestation\\\"}[$__rate_interval])\",\n          \"format\": \"time_series\",\n          \"hide\": false,\n          \"interval\": \"\",\n          \"intervalFactor\": 1,\n          \"legendFormat\": \"{{instance}} - work started\",\n          \"range\": true,\n          \"refId\": \"B\"\n        }\n      ],\n      \"title\": \"unknown_block_attestation\",\n      \"type\": \"timeseries\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"palette-classic\"\n          },\n          \"custom\": {\n            \"axisCenteredZero\": false,\n            \"axisColorMode\": \"text\",\n            \"axisLabel\": \"\",\n            \"axisPlacement\": \"auto\",\n            \"barAlignment\": 0,\n            \"drawStyle\": \"line\",\n            \"fillOpacity\": 20,\n            \"gradientMode\": \"opacity\",\n            \"hideFrom\": {\n              \"legend\": false,\n              \"tooltip\": false,\n              \"viz\": false\n            },\n            \"lineInterpolation\": \"linear\",\n            \"lineWidth\": 1,\n            \"pointSize\": 5,\n            \"scaleDistribution\": {\n              \"type\": \"linear\"\n            },\n            \"showPoints\": \"auto\",\n            \"spanNulls\": false,\n            \"stacking\": {\n              \"group\": \"A\",\n              \"mode\": \"none\"\n            },\n            \"thresholdsStyle\": {\n              \"mode\": \"off\"\n            }\n          },\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\"\n              },\n              {\n                \"color\": \"red\",\n                \"value\": 80\n              }\n            ]\n          },\n          \"unit\": \"none\"\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 5,\n        \"w\": 6,\n        \"x\": 6,\n        \"y\": 74\n      },\n      \"id\": 33,\n      \"options\": {\n        \"legend\": {\n          \"calcs\": [],\n          \"displayMode\": \"list\",\n          \"placement\": \"bottom\",\n          \"showLegend\": false\n        },\n        \"tooltip\": {\n          \"mode\": \"multi\",\n          \"sort\": \"desc\"\n        }\n      },\n      \"pluginVersion\": \"9.1.2\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"editorMode\": \"code\",\n          \"expr\": \"rate(beacon_processor_work_events_rx_count{network=~\\\"$network\\\", instance=~\\\"$node\\\", type=\\\"unknown_block_aggregate\\\"}[$__rate_interval])\",\n          \"format\": \"time_series\",\n          \"interval\": \"\",\n          \"intervalFactor\": 1,\n          \"legendFormat\": \"{{instance}} - event received\",\n          \"range\": true,\n          \"refId\": \"A\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"editorMode\": \"code\",\n          \"expr\": \"rate(beacon_processor_work_events_started_count{network=~\\\"$network\\\", instance=~\\\"$node\\\", type=\\\"unknown_block_aggregate\\\"}[$__rate_interval])\",\n          \"format\": \"time_series\",\n          \"hide\": false,\n          \"interval\": \"\",\n          \"intervalFactor\": 1,\n          \"legendFormat\": \"{{instance}} - work started\",\n          \"range\": true,\n          \"refId\": \"B\"\n        }\n      ],\n      \"title\": \"unknown_block_aggregate\",\n      \"type\": \"timeseries\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"palette-classic\"\n          },\n          \"custom\": {\n            \"axisCenteredZero\": false,\n            \"axisColorMode\": \"text\",\n            \"axisLabel\": \"\",\n            \"axisPlacement\": \"auto\",\n            \"barAlignment\": 0,\n            \"drawStyle\": \"line\",\n            \"fillOpacity\": 20,\n            \"gradientMode\": \"opacity\",\n            \"hideFrom\": {\n              \"legend\": false,\n              \"tooltip\": false,\n              \"viz\": false\n            },\n            \"lineInterpolation\": \"linear\",\n            \"lineWidth\": 1,\n            \"pointSize\": 5,\n            \"scaleDistribution\": {\n              \"type\": \"linear\"\n            },\n            \"showPoints\": \"auto\",\n            \"spanNulls\": false,\n            \"stacking\": {\n              \"group\": \"A\",\n              \"mode\": \"none\"\n            },\n            \"thresholdsStyle\": {\n              \"mode\": \"off\"\n            }\n          },\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\"\n              },\n              {\n                \"color\": \"red\",\n                \"value\": 80\n              }\n            ]\n          },\n          \"unit\": \"none\"\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 5,\n        \"w\": 6,\n        \"x\": 12,\n        \"y\": 74\n      },\n      \"id\": 26,\n      \"options\": {\n        \"legend\": {\n          \"calcs\": [],\n          \"displayMode\": \"list\",\n          \"placement\": \"bottom\",\n          \"showLegend\": false\n        },\n        \"tooltip\": {\n          \"mode\": \"multi\",\n          \"sort\": \"desc\"\n        }\n      },\n      \"pluginVersion\": \"9.1.2\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"editorMode\": \"code\",\n          \"expr\": \"rate(beacon_processor_work_events_rx_count{network=~\\\"$network\\\", instance=~\\\"$node\\\", type=\\\"delayed_import_block\\\"}[$__rate_interval])\",\n          \"format\": \"time_series\",\n          \"interval\": \"\",\n          \"intervalFactor\": 1,\n          \"legendFormat\": \"{{instance}} - event received\",\n          \"range\": true,\n          \"refId\": \"A\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"editorMode\": \"code\",\n          \"expr\": \"rate(beacon_processor_work_events_started_count{network=~\\\"$network\\\", instance=~\\\"$node\\\", type=\\\"delayed_import_block\\\"}[$__rate_interval])\",\n          \"format\": \"time_series\",\n          \"hide\": false,\n          \"interval\": \"\",\n          \"intervalFactor\": 1,\n          \"legendFormat\": \"{{instance}} - work started\",\n          \"range\": true,\n          \"refId\": \"B\"\n        }\n      ],\n      \"title\": \"delayed_import_block\",\n      \"type\": \"timeseries\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"palette-classic\"\n          },\n          \"custom\": {\n            \"axisCenteredZero\": false,\n            \"axisColorMode\": \"text\",\n            \"axisLabel\": \"\",\n            \"axisPlacement\": \"auto\",\n            \"barAlignment\": 0,\n            \"drawStyle\": \"line\",\n            \"fillOpacity\": 20,\n            \"gradientMode\": \"opacity\",\n            \"hideFrom\": {\n              \"legend\": false,\n              \"tooltip\": false,\n              \"viz\": false\n            },\n            \"lineInterpolation\": \"linear\",\n            \"lineWidth\": 1,\n            \"pointSize\": 5,\n            \"scaleDistribution\": {\n              \"type\": \"linear\"\n            },\n            \"showPoints\": \"auto\",\n            \"spanNulls\": false,\n            \"stacking\": {\n              \"group\": \"A\",\n              \"mode\": \"none\"\n            },\n            \"thresholdsStyle\": {\n              \"mode\": \"off\"\n            }\n          },\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\"\n              },\n              {\n                \"color\": \"red\",\n                \"value\": 80\n              }\n            ]\n          },\n          \"unit\": \"none\"\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 5,\n        \"w\": 6,\n        \"x\": 18,\n        \"y\": 74\n      },\n      \"id\": 42,\n      \"options\": {\n        \"legend\": {\n          \"calcs\": [],\n          \"displayMode\": \"list\",\n          \"placement\": \"bottom\",\n          \"showLegend\": false\n        },\n        \"tooltip\": {\n          \"mode\": \"multi\",\n          \"sort\": \"desc\"\n        }\n      },\n      \"pluginVersion\": \"9.1.2\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"editorMode\": \"code\",\n          \"expr\": \"rate(beacon_processor_work_events_rx_count{network=~\\\"$network\\\", instance=~\\\"$node\\\", type=\\\"chain_segment\\\"}[$__rate_interval])\",\n          \"format\": \"time_series\",\n          \"interval\": \"\",\n          \"intervalFactor\": 1,\n          \"legendFormat\": \"{{instance}} - event received\",\n          \"range\": true,\n          \"refId\": \"A\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"editorMode\": \"code\",\n          \"expr\": \"rate(beacon_processor_work_events_started_count{network=~\\\"$network\\\", instance=~\\\"$node\\\", type=\\\"chain_segment\\\"}[$__rate_interval])\",\n          \"format\": \"time_series\",\n          \"hide\": false,\n          \"interval\": \"\",\n          \"intervalFactor\": 1,\n          \"legendFormat\": \"{{instance}} - work started\",\n          \"range\": true,\n          \"refId\": \"B\"\n        }\n      ],\n      \"title\": \"chain_segment\",\n      \"type\": \"timeseries\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"palette-classic\"\n          },\n          \"custom\": {\n            \"axisCenteredZero\": false,\n            \"axisColorMode\": \"text\",\n            \"axisLabel\": \"\",\n            \"axisPlacement\": \"auto\",\n            \"barAlignment\": 0,\n            \"drawStyle\": \"line\",\n            \"fillOpacity\": 20,\n            \"gradientMode\": \"opacity\",\n            \"hideFrom\": {\n              \"legend\": false,\n              \"tooltip\": false,\n              \"viz\": false\n            },\n            \"lineInterpolation\": \"linear\",\n            \"lineWidth\": 1,\n            \"pointSize\": 5,\n            \"scaleDistribution\": {\n              \"type\": \"linear\"\n            },\n            \"showPoints\": \"auto\",\n            \"spanNulls\": false,\n            \"stacking\": {\n              \"group\": \"A\",\n              \"mode\": \"none\"\n            },\n            \"thresholdsStyle\": {\n              \"mode\": \"off\"\n            }\n          },\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\"\n              },\n              {\n                \"color\": \"red\",\n                \"value\": 80\n              }\n            ]\n          },\n          \"unit\": \"none\"\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 5,\n        \"w\": 6,\n        \"x\": 0,\n        \"y\": 79\n      },\n      \"id\": 28,\n      \"options\": {\n        \"legend\": {\n          \"calcs\": [],\n          \"displayMode\": \"list\",\n          \"placement\": \"bottom\",\n          \"showLegend\": false\n        },\n        \"tooltip\": {\n          \"mode\": \"multi\",\n          \"sort\": \"desc\"\n        }\n      },\n      \"pluginVersion\": \"9.1.2\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"editorMode\": \"code\",\n          \"expr\": \"rate(beacon_processor_work_events_rx_count{network=~\\\"$network\\\", instance=~\\\"$node\\\", type=\\\"gossip_block\\\"}[$__rate_interval])\",\n          \"format\": \"time_series\",\n          \"interval\": \"\",\n          \"intervalFactor\": 1,\n          \"legendFormat\": \"{{instance}} - event received\",\n          \"range\": true,\n          \"refId\": \"A\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"editorMode\": \"code\",\n          \"expr\": \"rate(beacon_processor_work_events_started_count{network=~\\\"$network\\\", instance=~\\\"$node\\\", type=\\\"gossip_block\\\"}[$__rate_interval])\",\n          \"format\": \"time_series\",\n          \"hide\": false,\n          \"interval\": \"\",\n          \"intervalFactor\": 1,\n          \"legendFormat\": \"{{instance}} - work started\",\n          \"range\": true,\n          \"refId\": \"B\"\n        }\n      ],\n      \"title\": \"gossip_block\",\n      \"type\": \"timeseries\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"palette-classic\"\n          },\n          \"custom\": {\n            \"axisCenteredZero\": false,\n            \"axisColorMode\": \"text\",\n            \"axisLabel\": \"\",\n            \"axisPlacement\": \"auto\",\n            \"barAlignment\": 0,\n            \"drawStyle\": \"line\",\n            \"fillOpacity\": 20,\n            \"gradientMode\": \"opacity\",\n            \"hideFrom\": {\n              \"legend\": false,\n              \"tooltip\": false,\n              \"viz\": false\n            },\n            \"lineInterpolation\": \"linear\",\n            \"lineWidth\": 1,\n            \"pointSize\": 5,\n            \"scaleDistribution\": {\n              \"type\": \"linear\"\n            },\n            \"showPoints\": \"auto\",\n            \"spanNulls\": false,\n            \"stacking\": {\n              \"group\": \"A\",\n              \"mode\": \"none\"\n            },\n            \"thresholdsStyle\": {\n              \"mode\": \"off\"\n            }\n          },\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\"\n              },\n              {\n                \"color\": \"red\",\n                \"value\": 80\n              }\n            ]\n          },\n          \"unit\": \"none\"\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 5,\n        \"w\": 6,\n        \"x\": 6,\n        \"y\": 79\n      },\n      \"id\": 31,\n      \"options\": {\n        \"legend\": {\n          \"calcs\": [],\n          \"displayMode\": \"list\",\n          \"placement\": \"bottom\",\n          \"showLegend\": false\n        },\n        \"tooltip\": {\n          \"mode\": \"multi\",\n          \"sort\": \"desc\"\n        }\n      },\n      \"pluginVersion\": \"9.1.2\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"editorMode\": \"code\",\n          \"expr\": \"rate(beacon_processor_work_events_rx_count{network=~\\\"$network\\\", instance=~\\\"$node\\\", type=\\\"rpc_block\\\"}[$__rate_interval])\",\n          \"format\": \"time_series\",\n          \"interval\": \"\",\n          \"intervalFactor\": 1,\n          \"legendFormat\": \"{{instance}} - event received\",\n          \"range\": true,\n          \"refId\": \"A\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"editorMode\": \"code\",\n          \"expr\": \"rate(beacon_processor_work_events_started_count{network=~\\\"$network\\\", instance=~\\\"$node\\\", type=\\\"rpc_block\\\"}[$__rate_interval])\",\n          \"format\": \"time_series\",\n          \"hide\": false,\n          \"interval\": \"\",\n          \"intervalFactor\": 1,\n          \"legendFormat\": \"{{instance}} - work started\",\n          \"range\": true,\n          \"refId\": \"B\"\n        }\n      ],\n      \"title\": \"rpc_block\",\n      \"type\": \"timeseries\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"palette-classic\"\n          },\n          \"custom\": {\n            \"axisCenteredZero\": false,\n            \"axisColorMode\": \"text\",\n            \"axisLabel\": \"\",\n            \"axisPlacement\": \"auto\",\n            \"barAlignment\": 0,\n            \"drawStyle\": \"line\",\n            \"fillOpacity\": 20,\n            \"gradientMode\": \"opacity\",\n            \"hideFrom\": {\n              \"legend\": false,\n              \"tooltip\": false,\n              \"viz\": false\n            },\n            \"lineInterpolation\": \"linear\",\n            \"lineWidth\": 1,\n            \"pointSize\": 5,\n            \"scaleDistribution\": {\n              \"type\": \"linear\"\n            },\n            \"showPoints\": \"auto\",\n            \"spanNulls\": false,\n            \"stacking\": {\n              \"group\": \"A\",\n              \"mode\": \"none\"\n            },\n            \"thresholdsStyle\": {\n              \"mode\": \"off\"\n            }\n          },\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\"\n              },\n              {\n                \"color\": \"red\",\n                \"value\": 80\n              }\n            ]\n          },\n          \"unit\": \"none\"\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 5,\n        \"w\": 6,\n        \"x\": 12,\n        \"y\": 79\n      },\n      \"id\": 30,\n      \"options\": {\n        \"legend\": {\n          \"calcs\": [],\n          \"displayMode\": \"list\",\n          \"placement\": \"bottom\",\n          \"showLegend\": false\n        },\n        \"tooltip\": {\n          \"mode\": \"multi\",\n          \"sort\": \"desc\"\n        }\n      },\n      \"pluginVersion\": \"9.1.2\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"editorMode\": \"code\",\n          \"expr\": \"rate(beacon_processor_work_events_rx_count{network=~\\\"$network\\\", instance=~\\\"$node\\\", type=\\\"gossip_voluntary_exit\\\"}[$__rate_interval])\",\n          \"format\": \"time_series\",\n          \"interval\": \"\",\n          \"intervalFactor\": 1,\n          \"legendFormat\": \"{{instance}} - event received\",\n          \"range\": true,\n          \"refId\": \"A\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"editorMode\": \"code\",\n          \"expr\": \"rate(beacon_processor_work_events_started_count{network=~\\\"$network\\\", instance=~\\\"$node\\\", type=\\\"gossip_voluntary_exit\\\"}[$__rate_interval])\",\n          \"format\": \"time_series\",\n          \"hide\": false,\n          \"interval\": \"\",\n          \"intervalFactor\": 1,\n          \"legendFormat\": \"{{instance}} - work started\",\n          \"range\": true,\n          \"refId\": \"B\"\n        }\n      ],\n      \"title\": \"gossip_voluntary_exit\",\n      \"type\": \"timeseries\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"palette-classic\"\n          },\n          \"custom\": {\n            \"axisCenteredZero\": false,\n            \"axisColorMode\": \"text\",\n            \"axisLabel\": \"\",\n            \"axisPlacement\": \"auto\",\n            \"barAlignment\": 0,\n            \"drawStyle\": \"line\",\n            \"fillOpacity\": 20,\n            \"gradientMode\": \"opacity\",\n            \"hideFrom\": {\n              \"legend\": false,\n              \"tooltip\": false,\n              \"viz\": false\n            },\n            \"lineInterpolation\": \"linear\",\n            \"lineWidth\": 1,\n            \"pointSize\": 5,\n            \"scaleDistribution\": {\n              \"type\": \"linear\"\n            },\n            \"showPoints\": \"auto\",\n            \"spanNulls\": false,\n            \"stacking\": {\n              \"group\": \"A\",\n              \"mode\": \"none\"\n            },\n            \"thresholdsStyle\": {\n              \"mode\": \"off\"\n            }\n          },\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\"\n              },\n              {\n                \"color\": \"red\",\n                \"value\": 80\n              }\n            ]\n          },\n          \"unit\": \"none\"\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 5,\n        \"w\": 6,\n        \"x\": 18,\n        \"y\": 79\n      },\n      \"id\": 32,\n      \"options\": {\n        \"legend\": {\n          \"calcs\": [],\n          \"displayMode\": \"list\",\n          \"placement\": \"bottom\",\n          \"showLegend\": false\n        },\n        \"tooltip\": {\n          \"mode\": \"multi\",\n          \"sort\": \"desc\"\n        }\n      },\n      \"pluginVersion\": \"9.1.2\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"editorMode\": \"code\",\n          \"expr\": \"rate(beacon_processor_work_events_rx_count{network=~\\\"$network\\\", instance=~\\\"$node\\\", type=\\\"status_processing\\\"}[$__rate_interval])\",\n          \"format\": \"time_series\",\n          \"interval\": \"\",\n          \"intervalFactor\": 1,\n          \"legendFormat\": \"{{instance}} - event received\",\n          \"range\": true,\n          \"refId\": \"A\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"editorMode\": \"code\",\n          \"expr\": \"rate(beacon_processor_work_events_started_count{network=~\\\"$network\\\", instance=~\\\"$node\\\", type=\\\"status_processing\\\"}[$__rate_interval])\",\n          \"format\": \"time_series\",\n          \"hide\": false,\n          \"interval\": \"\",\n          \"intervalFactor\": 1,\n          \"legendFormat\": \"{{instance}} - work started\",\n          \"range\": true,\n          \"refId\": \"B\"\n        }\n      ],\n      \"title\": \"status_processing\",\n      \"type\": \"timeseries\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"palette-classic\"\n          },\n          \"custom\": {\n            \"axisCenteredZero\": false,\n            \"axisColorMode\": \"text\",\n            \"axisLabel\": \"\",\n            \"axisPlacement\": \"auto\",\n            \"barAlignment\": 0,\n            \"drawStyle\": \"line\",\n            \"fillOpacity\": 20,\n            \"gradientMode\": \"opacity\",\n            \"hideFrom\": {\n              \"legend\": false,\n              \"tooltip\": false,\n              \"viz\": false\n            },\n            \"lineInterpolation\": \"linear\",\n            \"lineWidth\": 1,\n            \"pointSize\": 5,\n            \"scaleDistribution\": {\n              \"type\": \"linear\"\n            },\n            \"showPoints\": \"auto\",\n            \"spanNulls\": false,\n            \"stacking\": {\n              \"group\": \"A\",\n              \"mode\": \"none\"\n            },\n            \"thresholdsStyle\": {\n              \"mode\": \"off\"\n            }\n          },\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\"\n              },\n              {\n                \"color\": \"red\",\n                \"value\": 80\n              }\n            ]\n          },\n          \"unit\": \"none\"\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 5,\n        \"w\": 6,\n        \"x\": 0,\n        \"y\": 84\n      },\n      \"id\": 36,\n      \"options\": {\n        \"legend\": {\n          \"calcs\": [],\n          \"displayMode\": \"list\",\n          \"placement\": \"bottom\",\n          \"showLegend\": false\n        },\n        \"tooltip\": {\n          \"mode\": \"multi\",\n          \"sort\": \"desc\"\n        }\n      },\n      \"pluginVersion\": \"9.1.2\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"editorMode\": \"code\",\n          \"expr\": \"rate(beacon_processor_work_events_rx_count{network=~\\\"$network\\\", instance=~\\\"$node\\\", type=\\\"gossip_attester_slashing\\\"}[$__rate_interval])\",\n          \"format\": \"time_series\",\n          \"interval\": \"\",\n          \"intervalFactor\": 1,\n          \"legendFormat\": \"{{instance}} - event received\",\n          \"range\": true,\n          \"refId\": \"A\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"editorMode\": \"code\",\n          \"expr\": \"rate(beacon_processor_work_events_started_count{network=~\\\"$network\\\", instance=~\\\"$node\\\", type=\\\"gossip_attester_slashing\\\"}[$__rate_interval])\",\n          \"format\": \"time_series\",\n          \"hide\": false,\n          \"interval\": \"\",\n          \"intervalFactor\": 1,\n          \"legendFormat\": \"{{instance}} - work started\",\n          \"range\": true,\n          \"refId\": \"B\"\n        }\n      ],\n      \"title\": \"gossip_attester_slashing\",\n      \"type\": \"timeseries\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"palette-classic\"\n          },\n          \"custom\": {\n            \"axisCenteredZero\": false,\n            \"axisColorMode\": \"text\",\n            \"axisLabel\": \"\",\n            \"axisPlacement\": \"auto\",\n            \"barAlignment\": 0,\n            \"drawStyle\": \"line\",\n            \"fillOpacity\": 20,\n            \"gradientMode\": \"opacity\",\n            \"hideFrom\": {\n              \"legend\": false,\n              \"tooltip\": false,\n              \"viz\": false\n            },\n            \"lineInterpolation\": \"linear\",\n            \"lineWidth\": 1,\n            \"pointSize\": 5,\n            \"scaleDistribution\": {\n              \"type\": \"linear\"\n            },\n            \"showPoints\": \"auto\",\n            \"spanNulls\": false,\n            \"stacking\": {\n              \"group\": \"A\",\n              \"mode\": \"none\"\n            },\n            \"thresholdsStyle\": {\n              \"mode\": \"off\"\n            }\n          },\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\"\n              },\n              {\n                \"color\": \"red\",\n                \"value\": 80\n              }\n            ]\n          },\n          \"unit\": \"none\"\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 5,\n        \"w\": 6,\n        \"x\": 6,\n        \"y\": 84\n      },\n      \"id\": 38,\n      \"options\": {\n        \"legend\": {\n          \"calcs\": [],\n          \"displayMode\": \"list\",\n          \"placement\": \"bottom\",\n          \"showLegend\": false\n        },\n        \"tooltip\": {\n          \"mode\": \"multi\",\n          \"sort\": \"desc\"\n        }\n      },\n      \"pluginVersion\": \"9.1.2\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"editorMode\": \"code\",\n          \"expr\": \"rate(beacon_processor_work_events_rx_count{network=~\\\"$network\\\", instance=~\\\"$node\\\", type=\\\"gossip_proposer_slashing\\\"}[$__rate_interval])\",\n          \"format\": \"time_series\",\n          \"interval\": \"\",\n          \"intervalFactor\": 1,\n          \"legendFormat\": \"{{instance}} - event received\",\n          \"range\": true,\n          \"refId\": \"A\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"editorMode\": \"code\",\n          \"expr\": \"rate(beacon_processor_work_events_started_count{network=~\\\"$network\\\", instance=~\\\"$node\\\", type=\\\"gossip_proposer_slashing\\\"}[$__rate_interval])\",\n          \"format\": \"time_series\",\n          \"hide\": false,\n          \"interval\": \"\",\n          \"intervalFactor\": 1,\n          \"legendFormat\": \"{{instance}} - work started\",\n          \"range\": true,\n          \"refId\": \"B\"\n        }\n      ],\n      \"title\": \"gossip_proposer_slashing\",\n      \"type\": \"timeseries\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"palette-classic\"\n          },\n          \"custom\": {\n            \"axisCenteredZero\": false,\n            \"axisColorMode\": \"text\",\n            \"axisLabel\": \"\",\n            \"axisPlacement\": \"auto\",\n            \"barAlignment\": 0,\n            \"drawStyle\": \"line\",\n            \"fillOpacity\": 20,\n            \"gradientMode\": \"opacity\",\n            \"hideFrom\": {\n              \"legend\": false,\n              \"tooltip\": false,\n              \"viz\": false\n            },\n            \"lineInterpolation\": \"linear\",\n            \"lineWidth\": 1,\n            \"pointSize\": 5,\n            \"scaleDistribution\": {\n              \"type\": \"linear\"\n            },\n            \"showPoints\": \"auto\",\n            \"spanNulls\": false,\n            \"stacking\": {\n              \"group\": \"A\",\n              \"mode\": \"none\"\n            },\n            \"thresholdsStyle\": {\n              \"mode\": \"off\"\n            }\n          },\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\"\n              },\n              {\n                \"color\": \"red\",\n                \"value\": 80\n              }\n            ]\n          },\n          \"unit\": \"none\"\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 5,\n        \"w\": 6,\n        \"x\": 12,\n        \"y\": 84\n      },\n      \"id\": 24,\n      \"options\": {\n        \"legend\": {\n          \"calcs\": [],\n          \"displayMode\": \"list\",\n          \"placement\": \"bottom\",\n          \"showLegend\": false\n        },\n        \"tooltip\": {\n          \"mode\": \"multi\",\n          \"sort\": \"desc\"\n        }\n      },\n      \"pluginVersion\": \"9.1.2\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"editorMode\": \"code\",\n          \"expr\": \"rate(beacon_processor_work_events_rx_count{network=~\\\"$network\\\", instance=~\\\"$node\\\", type=\\\"blocks_by_roots_request\\\"}[$__rate_interval])\",\n          \"format\": \"time_series\",\n          \"interval\": \"\",\n          \"intervalFactor\": 1,\n          \"legendFormat\": \"{{instance}} - event received\",\n          \"range\": true,\n          \"refId\": \"A\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"editorMode\": \"code\",\n          \"expr\": \"rate(beacon_processor_work_events_started_count{network=~\\\"$network\\\", instance=~\\\"$node\\\", type=\\\"blocks_by_roots_request\\\"}[$__rate_interval])\",\n          \"format\": \"time_series\",\n          \"hide\": false,\n          \"interval\": \"\",\n          \"intervalFactor\": 1,\n          \"legendFormat\": \"{{instance}} - work started\",\n          \"range\": true,\n          \"refId\": \"B\"\n        }\n      ],\n      \"title\": \"blocks_by_roots_request\",\n      \"type\": \"timeseries\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"palette-classic\"\n          },\n          \"custom\": {\n            \"axisCenteredZero\": false,\n            \"axisColorMode\": \"text\",\n            \"axisLabel\": \"\",\n            \"axisPlacement\": \"auto\",\n            \"barAlignment\": 0,\n            \"drawStyle\": \"line\",\n            \"fillOpacity\": 20,\n            \"gradientMode\": \"opacity\",\n            \"hideFrom\": {\n              \"legend\": false,\n              \"tooltip\": false,\n              \"viz\": false\n            },\n            \"lineInterpolation\": \"linear\",\n            \"lineWidth\": 1,\n            \"pointSize\": 5,\n            \"scaleDistribution\": {\n              \"type\": \"linear\"\n            },\n            \"showPoints\": \"auto\",\n            \"spanNulls\": false,\n            \"stacking\": {\n              \"group\": \"A\",\n              \"mode\": \"none\"\n            },\n            \"thresholdsStyle\": {\n              \"mode\": \"off\"\n            }\n          },\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\"\n              },\n              {\n                \"color\": \"red\",\n                \"value\": 80\n              }\n            ]\n          },\n          \"unit\": \"none\"\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 5,\n        \"w\": 6,\n        \"x\": 18,\n        \"y\": 84\n      },\n      \"id\": 21,\n      \"options\": {\n        \"legend\": {\n          \"calcs\": [],\n          \"displayMode\": \"list\",\n          \"placement\": \"bottom\",\n          \"showLegend\": false\n        },\n        \"tooltip\": {\n          \"mode\": \"multi\",\n          \"sort\": \"desc\"\n        }\n      },\n      \"pluginVersion\": \"9.1.2\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"editorMode\": \"code\",\n          \"expr\": \"rate(beacon_processor_work_events_rx_count{network=~\\\"$network\\\", instance=~\\\"$node\\\", type=\\\"blocks_by_range_request\\\"}[$__rate_interval])\",\n          \"format\": \"time_series\",\n          \"interval\": \"\",\n          \"intervalFactor\": 1,\n          \"legendFormat\": \"{{instance}} - event received\",\n          \"range\": true,\n          \"refId\": \"A\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"editorMode\": \"code\",\n          \"expr\": \"rate(beacon_processor_work_events_started_count{network=~\\\"$network\\\", instance=~\\\"$node\\\", type=\\\"blocks_by_range_request\\\"}[$__rate_interval])\",\n          \"format\": \"time_series\",\n          \"hide\": false,\n          \"interval\": \"\",\n          \"intervalFactor\": 1,\n          \"legendFormat\": \"{{instance}} - work started\",\n          \"range\": true,\n          \"refId\": \"B\"\n        }\n      ],\n      \"title\": \"blocks_by_range_request\",\n      \"type\": \"timeseries\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"palette-classic\"\n          },\n          \"custom\": {\n            \"axisCenteredZero\": false,\n            \"axisColorMode\": \"text\",\n            \"axisLabel\": \"\",\n            \"axisPlacement\": \"auto\",\n            \"barAlignment\": 0,\n            \"drawStyle\": \"line\",\n            \"fillOpacity\": 20,\n            \"gradientMode\": \"opacity\",\n            \"hideFrom\": {\n              \"legend\": false,\n              \"tooltip\": false,\n              \"viz\": false\n            },\n            \"lineInterpolation\": \"linear\",\n            \"lineWidth\": 1,\n            \"pointSize\": 5,\n            \"scaleDistribution\": {\n              \"type\": \"linear\"\n            },\n            \"showPoints\": \"auto\",\n            \"spanNulls\": false,\n            \"stacking\": {\n              \"group\": \"A\",\n              \"mode\": \"none\"\n            },\n            \"thresholdsStyle\": {\n              \"mode\": \"off\"\n            }\n          },\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\"\n              },\n              {\n                \"color\": \"red\",\n                \"value\": 80\n              }\n            ]\n          },\n          \"unit\": \"none\"\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 5,\n        \"w\": 6,\n        \"x\": 0,\n        \"y\": 89\n      },\n      \"id\": 29,\n      \"options\": {\n        \"legend\": {\n          \"calcs\": [],\n          \"displayMode\": \"list\",\n          \"placement\": \"bottom\",\n          \"showLegend\": false\n        },\n        \"tooltip\": {\n          \"mode\": \"multi\",\n          \"sort\": \"desc\"\n        }\n      },\n      \"pluginVersion\": \"9.1.2\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"editorMode\": \"code\",\n          \"expr\": \"rate(beacon_processor_work_events_rx_count{network=~\\\"$network\\\", instance=~\\\"$node\\\", type=\\\"gossip_sync_contribution\\\"}[$__rate_interval])\",\n          \"format\": \"time_series\",\n          \"interval\": \"\",\n          \"intervalFactor\": 1,\n          \"legendFormat\": \"{{instance}} - event received\",\n          \"range\": true,\n          \"refId\": \"A\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"editorMode\": \"code\",\n          \"expr\": \"rate(beacon_processor_work_events_started_count{network=~\\\"$network\\\", instance=~\\\"$node\\\", type=\\\"gossip_sync_contribution\\\"}[$__rate_interval])\",\n          \"format\": \"time_series\",\n          \"hide\": false,\n          \"interval\": \"\",\n          \"intervalFactor\": 1,\n          \"legendFormat\": \"{{instance}} - work started\",\n          \"range\": true,\n          \"refId\": \"B\"\n        }\n      ],\n      \"title\": \"gossip_sync_contribution\",\n      \"type\": \"timeseries\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"palette-classic\"\n          },\n          \"custom\": {\n            \"axisCenteredZero\": false,\n            \"axisColorMode\": \"text\",\n            \"axisLabel\": \"\",\n            \"axisPlacement\": \"auto\",\n            \"barAlignment\": 0,\n            \"drawStyle\": \"line\",\n            \"fillOpacity\": 20,\n            \"gradientMode\": \"opacity\",\n            \"hideFrom\": {\n              \"legend\": false,\n              \"tooltip\": false,\n              \"viz\": false\n            },\n            \"lineInterpolation\": \"linear\",\n            \"lineWidth\": 1,\n            \"pointSize\": 5,\n            \"scaleDistribution\": {\n              \"type\": \"linear\"\n            },\n            \"showPoints\": \"auto\",\n            \"spanNulls\": false,\n            \"stacking\": {\n              \"group\": \"A\",\n              \"mode\": \"none\"\n            },\n            \"thresholdsStyle\": {\n              \"mode\": \"off\"\n            }\n          },\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\"\n              },\n              {\n                \"color\": \"red\",\n                \"value\": 80\n              }\n            ]\n          },\n          \"unit\": \"none\"\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 5,\n        \"w\": 6,\n        \"x\": 6,\n        \"y\": 89\n      },\n      \"id\": 37,\n      \"options\": {\n        \"legend\": {\n          \"calcs\": [],\n          \"displayMode\": \"list\",\n          \"placement\": \"bottom\",\n          \"showLegend\": false\n        },\n        \"tooltip\": {\n          \"mode\": \"multi\",\n          \"sort\": \"desc\"\n        }\n      },\n      \"pluginVersion\": \"9.1.2\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"editorMode\": \"code\",\n          \"expr\": \"rate(beacon_processor_work_events_rx_count{network=~\\\"$network\\\", instance=~\\\"$node\\\", type=\\\"gossip_sync_signature\\\"}[$__rate_interval])\",\n          \"format\": \"time_series\",\n          \"interval\": \"\",\n          \"intervalFactor\": 1,\n          \"legendFormat\": \"{{instance}} - event received\",\n          \"range\": true,\n          \"refId\": \"A\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"editorMode\": \"code\",\n          \"expr\": \"rate(beacon_processor_work_events_started_count{network=~\\\"$network\\\", instance=~\\\"$node\\\", type=\\\"gossip_sync_signature\\\"}[$__rate_interval])\",\n          \"format\": \"time_series\",\n          \"hide\": false,\n          \"interval\": \"\",\n          \"intervalFactor\": 1,\n          \"legendFormat\": \"{{instance}} - work started\",\n          \"range\": true,\n          \"refId\": \"B\"\n        }\n      ],\n      \"title\": \"gossip_sync_signature\",\n      \"type\": \"timeseries\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"palette-classic\"\n          },\n          \"custom\": {\n            \"axisCenteredZero\": false,\n            \"axisColorMode\": \"text\",\n            \"axisLabel\": \"\",\n            \"axisPlacement\": \"auto\",\n            \"barAlignment\": 0,\n            \"drawStyle\": \"line\",\n            \"fillOpacity\": 20,\n            \"gradientMode\": \"opacity\",\n            \"hideFrom\": {\n              \"legend\": false,\n              \"tooltip\": false,\n              \"viz\": false\n            },\n            \"lineInterpolation\": \"linear\",\n            \"lineWidth\": 1,\n            \"pointSize\": 5,\n            \"scaleDistribution\": {\n              \"type\": \"linear\"\n            },\n            \"showPoints\": \"auto\",\n            \"spanNulls\": false,\n            \"stacking\": {\n              \"group\": \"A\",\n              \"mode\": \"none\"\n            },\n            \"thresholdsStyle\": {\n              \"mode\": \"off\"\n            }\n          },\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\"\n              },\n              {\n                \"color\": \"red\",\n                \"value\": 80\n              }\n            ]\n          },\n          \"unit\": \"none\"\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 5,\n        \"w\": 6,\n        \"x\": 12,\n        \"y\": 89\n      },\n      \"id\": 70,\n      \"options\": {\n        \"legend\": {\n          \"calcs\": [],\n          \"displayMode\": \"list\",\n          \"placement\": \"bottom\",\n          \"showLegend\": false\n        },\n        \"tooltip\": {\n          \"mode\": \"multi\",\n          \"sort\": \"desc\"\n        }\n      },\n      \"pluginVersion\": \"9.1.2\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"editorMode\": \"code\",\n          \"expr\": \"rate(beacon_processor_work_events_rx_count{network=~\\\"$network\\\", instance=~\\\"$node\\\", type=\\\"api_request_p0\\\"}[$__rate_interval])\",\n          \"format\": \"time_series\",\n          \"interval\": \"\",\n          \"intervalFactor\": 1,\n          \"legendFormat\": \"{{instance}} - event received\",\n          \"range\": true,\n          \"refId\": \"A\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"editorMode\": \"code\",\n          \"expr\": \"rate(beacon_processor_work_events_started_count{network=~\\\"$network\\\", instance=~\\\"$node\\\", type=\\\"api_request_p0\\\"}[$__rate_interval])\",\n          \"format\": \"time_series\",\n          \"hide\": false,\n          \"interval\": \"\",\n          \"intervalFactor\": 1,\n          \"legendFormat\": \"{{instance}} - work started\",\n          \"range\": true,\n          \"refId\": \"B\"\n        }\n      ],\n      \"title\": \"api_request_p0\",\n      \"type\": \"timeseries\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"palette-classic\"\n          },\n          \"custom\": {\n            \"axisCenteredZero\": false,\n            \"axisColorMode\": \"text\",\n            \"axisLabel\": \"\",\n            \"axisPlacement\": \"auto\",\n            \"barAlignment\": 0,\n            \"drawStyle\": \"line\",\n            \"fillOpacity\": 20,\n            \"gradientMode\": \"opacity\",\n            \"hideFrom\": {\n              \"legend\": false,\n              \"tooltip\": false,\n              \"viz\": false\n            },\n            \"lineInterpolation\": \"linear\",\n            \"lineWidth\": 1,\n            \"pointSize\": 5,\n            \"scaleDistribution\": {\n              \"type\": \"linear\"\n            },\n            \"showPoints\": \"auto\",\n            \"spanNulls\": false,\n            \"stacking\": {\n              \"group\": \"A\",\n              \"mode\": \"none\"\n            },\n            \"thresholdsStyle\": {\n              \"mode\": \"off\"\n            }\n          },\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\"\n              },\n              {\n                \"color\": \"red\",\n                \"value\": 80\n              }\n            ]\n          },\n          \"unit\": \"none\"\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 5,\n        \"w\": 6,\n        \"x\": 18,\n        \"y\": 89\n      },\n      \"id\": 71,\n      \"options\": {\n        \"legend\": {\n          \"calcs\": [],\n          \"displayMode\": \"list\",\n          \"placement\": \"bottom\",\n          \"showLegend\": false\n        },\n        \"tooltip\": {\n          \"mode\": \"multi\",\n          \"sort\": \"desc\"\n        }\n      },\n      \"pluginVersion\": \"9.1.2\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"editorMode\": \"code\",\n          \"expr\": \"rate(beacon_processor_work_events_rx_count{network=~\\\"$network\\\", instance=~\\\"$node\\\", type=\\\"api_request_p1\\\"}[$__rate_interval])\",\n          \"format\": \"time_series\",\n          \"interval\": \"\",\n          \"intervalFactor\": 1,\n          \"legendFormat\": \"{{instance}} - event received\",\n          \"range\": true,\n          \"refId\": \"A\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"editorMode\": \"code\",\n          \"expr\": \"rate(beacon_processor_work_events_started_count{network=~\\\"$network\\\", instance=~\\\"$node\\\", type=\\\"api_request_p1\\\"}[$__rate_interval])\",\n          \"format\": \"time_series\",\n          \"hide\": false,\n          \"interval\": \"\",\n          \"intervalFactor\": 1,\n          \"legendFormat\": \"{{instance}} - work started\",\n          \"range\": true,\n          \"refId\": \"B\"\n        }\n      ],\n      \"title\": \"api_request_p1\",\n      \"type\": \"timeseries\"\n    }\n  ],\n  \"refresh\": \"\",\n  \"revision\": 1,\n  \"schemaVersion\": 39,\n  \"tags\": [\n    \"lighthouse\"\n  ],\n  \"templating\": {\n    \"list\": [\n      {\n        \"current\": {\n          \"selected\": false,\n          \"text\": \"Prometheus\",\n          \"value\": \"b204e0bd-1b02-41f7-903e-8614d3bf4cd3\"\n        },\n        \"hide\": 0,\n        \"includeAll\": false,\n        \"label\": \"Prometheus\",\n        \"multi\": false,\n        \"name\": \"prometheus\",\n        \"options\": [],\n        \"query\": \"prometheus\",\n        \"refresh\": 1,\n        \"regex\": \"\",\n        \"skipUrlSync\": false,\n        \"type\": \"datasource\"\n      },\n      {\n        \"current\": {\n          \"selected\": false,\n          \"text\": \"No data sources found\",\n          \"value\": \"\"\n        },\n        \"hide\": 0,\n        \"includeAll\": false,\n        \"label\": \"Loki\",\n        \"multi\": false,\n        \"name\": \"loki\",\n        \"options\": [],\n        \"query\": \"loki\",\n        \"refresh\": 1,\n        \"regex\": \"\",\n        \"skipUrlSync\": false,\n        \"type\": \"datasource\"\n      },\n      {\n        \"allValue\": \".*\",\n        \"current\": {},\n        \"datasource\": {\n          \"type\": \"prometheus\",\n          \"uid\": \"PBFA97CFB590B2093\"\n        },\n        \"definition\": \"label_values(node_uname_info, network)\",\n        \"hide\": 0,\n        \"includeAll\": true,\n        \"label\": \"Network\",\n        \"multi\": true,\n        \"name\": \"network\",\n        \"options\": [],\n        \"query\": {\n          \"query\": \"label_values(node_uname_info, network)\",\n          \"refId\": \"StandardVariableQuery\"\n        },\n        \"refresh\": 1,\n        \"regex\": \"\",\n        \"skipUrlSync\": false,\n        \"sort\": 1,\n        \"type\": \"query\"\n      },\n      {\n        \"current\": {\n          \"selected\": false,\n          \"text\": \".*\",\n          \"value\": \".*\"\n        },\n        \"hide\": 0,\n        \"label\": \"Instance Filter (regex)\",\n        \"name\": \"node\",\n        \"options\": [\n          {\n            \"selected\": true,\n            \"text\": \".*\",\n            \"value\": \".*\"\n          }\n        ],\n        \"query\": \".*\",\n        \"skipUrlSync\": false,\n        \"type\": \"textbox\"\n      },\n      {\n        \"current\": {\n          \"selected\": false,\n          \"text\": \"0.99\",\n          \"value\": \"0.99\"\n        },\n        \"hide\": 0,\n        \"label\": \"Histogram Quantile\",\n        \"name\": \"quantile\",\n        \"options\": [\n          {\n            \"selected\": true,\n            \"text\": \"0.99\",\n            \"value\": \"0.99\"\n          }\n        ],\n        \"query\": \"0.99\",\n        \"skipUrlSync\": false,\n        \"type\": \"textbox\"\n      }\n    ]\n  },\n  \"time\": {\n    \"from\": \"now-1h\",\n    \"to\": \"now\"\n  },\n  \"timepicker\": {},\n  \"timezone\": \"\",\n  \"title\": \"Beacon Processor v2\",\n  \"uid\": \"1VW73knVz\",\n  \"version\": 1,\n  \"weekStart\": \"\"\n}\n"
  },
  {
    "path": "static_files/grafana-config/dashboards/lighthouse/BlockProcessing.json",
    "content": "{\n  \"__inputs\": [\n    {\n      \"name\": \"DS_PROMETHEUS\",\n      \"label\": \"Prometheus\",\n      \"description\": \"\",\n      \"type\": \"datasource\",\n      \"pluginId\": \"prometheus\",\n      \"pluginName\": \"Prometheus\"\n    }\n  ],\n  \"__elements\": {},\n  \"__requires\": [\n    {\n      \"type\": \"grafana\",\n      \"id\": \"grafana\",\n      \"name\": \"Grafana\",\n      \"version\": \"10.4.1\"\n    },\n    {\n      \"type\": \"datasource\",\n      \"id\": \"prometheus\",\n      \"name\": \"Prometheus\",\n      \"version\": \"1.0.0\"\n    },\n    {\n      \"type\": \"panel\",\n      \"id\": \"text\",\n      \"name\": \"Text\",\n      \"version\": \"\"\n    },\n    {\n      \"type\": \"panel\",\n      \"id\": \"timeseries\",\n      \"name\": \"Time series\",\n      \"version\": \"\"\n    }\n  ],\n  \"annotations\": {\n    \"list\": [\n      {\n        \"builtIn\": 1,\n        \"datasource\": {\n          \"type\": \"datasource\",\n          \"uid\": \"grafana\"\n        },\n        \"enable\": true,\n        \"hide\": true,\n        \"iconColor\": \"rgba(0, 211, 255, 1)\",\n        \"name\": \"Annotations & Alerts\",\n        \"type\": \"dashboard\"\n      }\n    ]\n  },\n  \"editable\": true,\n  \"fiscalYearStartMonth\": 0,\n  \"graphTooltip\": 0,\n  \"id\": null,\n  \"links\": [],\n  \"panels\": [\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"gridPos\": {\n        \"h\": 6,\n        \"w\": 9,\n        \"x\": 0,\n        \"y\": 0\n      },\n      \"id\": 11,\n      \"options\": {\n        \"code\": {\n          \"language\": \"plaintext\",\n          \"showLineNumbers\": false,\n          \"showMiniMap\": false\n        },\n        \"content\": \"\\n# Block Processing Metrics\\n\\nMetrics collected from a Lighthouse Beacon Node about a `BeaconChain` processing `BeaconBlocks`.\\n\\nCollected from the `beacon_chain` crate.\\n\\n\\n\\n\",\n        \"mode\": \"markdown\"\n      },\n      \"pluginVersion\": \"10.4.1\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"refId\": \"A\"\n        }\n      ],\n      \"transparent\": true,\n      \"type\": \"text\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"palette-classic\"\n          },\n          \"custom\": {\n            \"axisBorderShow\": false,\n            \"axisCenteredZero\": false,\n            \"axisColorMode\": \"text\",\n            \"axisLabel\": \"\",\n            \"axisPlacement\": \"auto\",\n            \"barAlignment\": 0,\n            \"drawStyle\": \"line\",\n            \"fillOpacity\": 10,\n            \"gradientMode\": \"none\",\n            \"hideFrom\": {\n              \"legend\": false,\n              \"tooltip\": false,\n              \"viz\": false\n            },\n            \"insertNulls\": false,\n            \"lineInterpolation\": \"linear\",\n            \"lineWidth\": 1,\n            \"pointSize\": 5,\n            \"scaleDistribution\": {\n              \"type\": \"linear\"\n            },\n            \"showPoints\": \"never\",\n            \"spanNulls\": false,\n            \"stacking\": {\n              \"group\": \"A\",\n              \"mode\": \"none\"\n            },\n            \"thresholdsStyle\": {\n              \"mode\": \"off\"\n            }\n          },\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\",\n                \"value\": null\n              },\n              {\n                \"color\": \"red\",\n                \"value\": 80\n              }\n            ]\n          },\n          \"unit\": \"s\"\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 6,\n        \"w\": 15,\n        \"x\": 9,\n        \"y\": 0\n      },\n      \"id\": 2,\n      \"options\": {\n        \"legend\": {\n          \"calcs\": [],\n          \"displayMode\": \"list\",\n          \"placement\": \"bottom\",\n          \"showLegend\": false\n        },\n        \"tooltip\": {\n          \"mode\": \"multi\",\n          \"sort\": \"none\"\n        }\n      },\n      \"pluginVersion\": \"7.1.3\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"expr\": \"rate(beacon_block_processing_seconds_sum[5m])\\n/\\nrate(beacon_block_processing_seconds_count[5m])\",\n          \"format\": \"time_series\",\n          \"intervalFactor\": 1,\n          \"refId\": \"A\"\n        }\n      ],\n      \"title\": \"Block Processing Total Time\",\n      \"transparent\": true,\n      \"type\": \"timeseries\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"gridPos\": {\n        \"h\": 2,\n        \"w\": 16,\n        \"x\": 0,\n        \"y\": 6\n      },\n      \"id\": 12,\n      \"options\": {\n        \"code\": {\n          \"language\": \"plaintext\",\n          \"showLineNumbers\": false,\n          \"showMiniMap\": false\n        },\n        \"content\": \"\\n### Read from database\\n\\n\\nCheck that the hash isn't already known in the database, load the block and state for processing.\\n\",\n        \"mode\": \"markdown\"\n      },\n      \"pluginVersion\": \"10.4.1\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"refId\": \"A\"\n        }\n      ],\n      \"transparent\": true,\n      \"type\": \"text\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"gridPos\": {\n        \"h\": 2,\n        \"w\": 8,\n        \"x\": 16,\n        \"y\": 6\n      },\n      \"id\": 14,\n      \"options\": {\n        \"code\": {\n          \"language\": \"plaintext\",\n          \"showLineNumbers\": false,\n          \"showMiniMap\": false\n        },\n        \"content\": \"\\n### Committees/Shuffling\\n\\n\\nCheck that the committees cache is build, building if not.\\n\",\n        \"mode\": \"markdown\"\n      },\n      \"pluginVersion\": \"10.4.1\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"refId\": \"A\"\n        }\n      ],\n      \"transparent\": true,\n      \"type\": \"text\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"palette-classic\"\n          },\n          \"custom\": {\n            \"axisBorderShow\": false,\n            \"axisCenteredZero\": false,\n            \"axisColorMode\": \"text\",\n            \"axisLabel\": \"\",\n            \"axisPlacement\": \"auto\",\n            \"barAlignment\": 0,\n            \"drawStyle\": \"line\",\n            \"fillOpacity\": 10,\n            \"gradientMode\": \"none\",\n            \"hideFrom\": {\n              \"legend\": false,\n              \"tooltip\": false,\n              \"viz\": false\n            },\n            \"insertNulls\": false,\n            \"lineInterpolation\": \"linear\",\n            \"lineWidth\": 1,\n            \"pointSize\": 5,\n            \"scaleDistribution\": {\n              \"type\": \"linear\"\n            },\n            \"showPoints\": \"never\",\n            \"spanNulls\": false,\n            \"stacking\": {\n              \"group\": \"A\",\n              \"mode\": \"none\"\n            },\n            \"thresholdsStyle\": {\n              \"mode\": \"off\"\n            }\n          },\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\",\n                \"value\": null\n              },\n              {\n                \"color\": \"red\",\n                \"value\": 80\n              }\n            ]\n          },\n          \"unit\": \"s\"\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 6,\n        \"w\": 8,\n        \"x\": 0,\n        \"y\": 8\n      },\n      \"id\": 3,\n      \"options\": {\n        \"legend\": {\n          \"calcs\": [],\n          \"displayMode\": \"list\",\n          \"placement\": \"bottom\",\n          \"showLegend\": false\n        },\n        \"tooltip\": {\n          \"mode\": \"multi\",\n          \"sort\": \"none\"\n        }\n      },\n      \"pluginVersion\": \"7.1.3\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"expr\": \"rate(beacon_block_processing_db_read_seconds_sum[5m])\\n/\\nrate(beacon_block_processing_db_read_seconds_count[5m])\",\n          \"format\": \"time_series\",\n          \"intervalFactor\": 1,\n          \"refId\": \"A\"\n        }\n      ],\n      \"title\": \"Block Processing DB Read\",\n      \"type\": \"timeseries\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"palette-classic\"\n          },\n          \"custom\": {\n            \"axisBorderShow\": false,\n            \"axisCenteredZero\": false,\n            \"axisColorMode\": \"text\",\n            \"axisLabel\": \"\",\n            \"axisPlacement\": \"auto\",\n            \"barAlignment\": 0,\n            \"drawStyle\": \"line\",\n            \"fillOpacity\": 10,\n            \"gradientMode\": \"none\",\n            \"hideFrom\": {\n              \"legend\": false,\n              \"tooltip\": false,\n              \"viz\": false\n            },\n            \"insertNulls\": false,\n            \"lineInterpolation\": \"linear\",\n            \"lineWidth\": 1,\n            \"pointSize\": 5,\n            \"scaleDistribution\": {\n              \"type\": \"linear\"\n            },\n            \"showPoints\": \"never\",\n            \"spanNulls\": false,\n            \"stacking\": {\n              \"group\": \"A\",\n              \"mode\": \"none\"\n            },\n            \"thresholdsStyle\": {\n              \"mode\": \"off\"\n            }\n          },\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\",\n                \"value\": null\n              },\n              {\n                \"color\": \"red\",\n                \"value\": 80\n              }\n            ]\n          },\n          \"unit\": \"s\"\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 6,\n        \"w\": 8,\n        \"x\": 8,\n        \"y\": 8\n      },\n      \"id\": 4,\n      \"options\": {\n        \"legend\": {\n          \"calcs\": [],\n          \"displayMode\": \"list\",\n          \"placement\": \"bottom\",\n          \"showLegend\": false\n        },\n        \"tooltip\": {\n          \"mode\": \"multi\",\n          \"sort\": \"none\"\n        }\n      },\n      \"pluginVersion\": \"7.1.3\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"expr\": \"rate(beacon_block_processing_db_write_seconds_sum[5m])\\n/\\nrate(beacon_block_processing_db_write_seconds_count[5m])\",\n          \"format\": \"time_series\",\n          \"intervalFactor\": 1,\n          \"refId\": \"A\"\n        }\n      ],\n      \"title\": \"Block Processing DB Write\",\n      \"type\": \"timeseries\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"description\": \"\",\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"palette-classic\"\n          },\n          \"custom\": {\n            \"axisBorderShow\": false,\n            \"axisCenteredZero\": false,\n            \"axisColorMode\": \"text\",\n            \"axisLabel\": \"\",\n            \"axisPlacement\": \"auto\",\n            \"barAlignment\": 0,\n            \"drawStyle\": \"line\",\n            \"fillOpacity\": 10,\n            \"gradientMode\": \"none\",\n            \"hideFrom\": {\n              \"legend\": false,\n              \"tooltip\": false,\n              \"viz\": false\n            },\n            \"insertNulls\": false,\n            \"lineInterpolation\": \"linear\",\n            \"lineWidth\": 1,\n            \"pointSize\": 5,\n            \"scaleDistribution\": {\n              \"type\": \"linear\"\n            },\n            \"showPoints\": \"never\",\n            \"spanNulls\": false,\n            \"stacking\": {\n              \"group\": \"A\",\n              \"mode\": \"none\"\n            },\n            \"thresholdsStyle\": {\n              \"mode\": \"off\"\n            }\n          },\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\",\n                \"value\": null\n              },\n              {\n                \"color\": \"red\",\n                \"value\": 80\n              }\n            ]\n          },\n          \"unit\": \"s\"\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 6,\n        \"w\": 8,\n        \"x\": 16,\n        \"y\": 8\n      },\n      \"id\": 5,\n      \"options\": {\n        \"legend\": {\n          \"calcs\": [],\n          \"displayMode\": \"list\",\n          \"placement\": \"bottom\",\n          \"showLegend\": false\n        },\n        \"tooltip\": {\n          \"mode\": \"multi\",\n          \"sort\": \"none\"\n        }\n      },\n      \"pluginVersion\": \"7.1.3\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"expr\": \"rate(beacon_block_processing_committee_building_seconds_sum[5m])\\n/\\nrate(beacon_block_processing_committee_building_seconds_count[5m])\",\n          \"format\": \"time_series\",\n          \"intervalFactor\": 1,\n          \"refId\": \"A\"\n        }\n      ],\n      \"title\": \"Block Processing Committee Times\",\n      \"type\": \"timeseries\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"gridPos\": {\n        \"h\": 2,\n        \"w\": 14,\n        \"x\": 0,\n        \"y\": 14\n      },\n      \"id\": 15,\n      \"options\": {\n        \"code\": {\n          \"language\": \"plaintext\",\n          \"showLineNumbers\": false,\n          \"showMiniMap\": false\n        },\n        \"content\": \"\\n### Run per_block_processing\\n\\n\\nThe core `state_processing::per_block_processing` verification/state updating function, as defined in the spec.\\n\",\n        \"mode\": \"markdown\"\n      },\n      \"pluginVersion\": \"10.4.1\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"refId\": \"A\"\n        }\n      ],\n      \"transparent\": true,\n      \"type\": \"text\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"gridPos\": {\n        \"h\": 2,\n        \"w\": 8,\n        \"x\": 16,\n        \"y\": 14\n      },\n      \"id\": 13,\n      \"options\": {\n        \"code\": {\n          \"language\": \"plaintext\",\n          \"showLineNumbers\": false,\n          \"showMiniMap\": false\n        },\n        \"content\": \"\\n### Tree hash the beacon state\\n\\n\\nGet the merkle root of the state after `state_processing::per_block_processing`\\n\",\n        \"mode\": \"markdown\"\n      },\n      \"pluginVersion\": \"10.4.1\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"refId\": \"A\"\n        }\n      ],\n      \"transparent\": true,\n      \"type\": \"text\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"description\": \"\",\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"palette-classic\"\n          },\n          \"custom\": {\n            \"axisBorderShow\": false,\n            \"axisCenteredZero\": false,\n            \"axisColorMode\": \"text\",\n            \"axisLabel\": \"\",\n            \"axisPlacement\": \"auto\",\n            \"barAlignment\": 0,\n            \"drawStyle\": \"line\",\n            \"fillOpacity\": 10,\n            \"gradientMode\": \"none\",\n            \"hideFrom\": {\n              \"legend\": false,\n              \"tooltip\": false,\n              \"viz\": false\n            },\n            \"insertNulls\": false,\n            \"lineInterpolation\": \"linear\",\n            \"lineWidth\": 1,\n            \"pointSize\": 5,\n            \"scaleDistribution\": {\n              \"type\": \"linear\"\n            },\n            \"showPoints\": \"never\",\n            \"spanNulls\": false,\n            \"stacking\": {\n              \"group\": \"A\",\n              \"mode\": \"none\"\n            },\n            \"thresholdsStyle\": {\n              \"mode\": \"off\"\n            }\n          },\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\",\n                \"value\": null\n              },\n              {\n                \"color\": \"red\",\n                \"value\": 80\n              }\n            ]\n          },\n          \"unit\": \"s\"\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 6,\n        \"w\": 16,\n        \"x\": 0,\n        \"y\": 16\n      },\n      \"id\": 7,\n      \"options\": {\n        \"legend\": {\n          \"calcs\": [],\n          \"displayMode\": \"list\",\n          \"placement\": \"bottom\",\n          \"showLegend\": false\n        },\n        \"tooltip\": {\n          \"mode\": \"multi\",\n          \"sort\": \"none\"\n        }\n      },\n      \"pluginVersion\": \"7.1.3\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"expr\": \"rate(beacon_block_processing_core_seconds_sum[5m])\\n/\\nrate(beacon_block_processing_core_seconds_count[5m])\",\n          \"format\": \"time_series\",\n          \"intervalFactor\": 1,\n          \"refId\": \"A\"\n        }\n      ],\n      \"title\": \"Block Processing Core-Processing Times\",\n      \"type\": \"timeseries\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"description\": \"\",\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"palette-classic\"\n          },\n          \"custom\": {\n            \"axisBorderShow\": false,\n            \"axisCenteredZero\": false,\n            \"axisColorMode\": \"text\",\n            \"axisLabel\": \"\",\n            \"axisPlacement\": \"auto\",\n            \"barAlignment\": 0,\n            \"drawStyle\": \"line\",\n            \"fillOpacity\": 10,\n            \"gradientMode\": \"none\",\n            \"hideFrom\": {\n              \"legend\": false,\n              \"tooltip\": false,\n              \"viz\": false\n            },\n            \"insertNulls\": false,\n            \"lineInterpolation\": \"linear\",\n            \"lineWidth\": 1,\n            \"pointSize\": 5,\n            \"scaleDistribution\": {\n              \"type\": \"linear\"\n            },\n            \"showPoints\": \"never\",\n            \"spanNulls\": false,\n            \"stacking\": {\n              \"group\": \"A\",\n              \"mode\": \"none\"\n            },\n            \"thresholdsStyle\": {\n              \"mode\": \"off\"\n            }\n          },\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\",\n                \"value\": null\n              },\n              {\n                \"color\": \"red\",\n                \"value\": 80\n              }\n            ]\n          },\n          \"unit\": \"s\"\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 6,\n        \"w\": 8,\n        \"x\": 16,\n        \"y\": 16\n      },\n      \"id\": 8,\n      \"options\": {\n        \"legend\": {\n          \"calcs\": [],\n          \"displayMode\": \"list\",\n          \"placement\": \"bottom\",\n          \"showLegend\": false\n        },\n        \"tooltip\": {\n          \"mode\": \"multi\",\n          \"sort\": \"none\"\n        }\n      },\n      \"pluginVersion\": \"7.1.3\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"expr\": \"rate(beacon_block_processing_state_root_seconds_sum[5m])\\n/\\nrate(beacon_block_processing_state_root_seconds_count[5m])\",\n          \"format\": \"time_series\",\n          \"intervalFactor\": 1,\n          \"refId\": \"A\"\n        }\n      ],\n      \"title\": \"Block Processing State Hashing Times\",\n      \"type\": \"timeseries\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"gridPos\": {\n        \"h\": 3,\n        \"w\": 12,\n        \"x\": 0,\n        \"y\": 22\n      },\n      \"id\": 16,\n      \"options\": {\n        \"code\": {\n          \"language\": \"plaintext\",\n          \"showLineNumbers\": false,\n          \"showMiniMap\": false\n        },\n        \"content\": \"\\n### Update the fork choice algorithm\\n\\n\\nSubmit the block (and all containied attestation) to the LMD GHOST fork choice algorithm. Does not find the head, just updates the votes.\\n\",\n        \"mode\": \"markdown\"\n      },\n      \"pluginVersion\": \"10.4.1\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"refId\": \"A\"\n        }\n      ],\n      \"transparent\": true,\n      \"type\": \"text\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"gridPos\": {\n        \"h\": 3,\n        \"w\": 12,\n        \"x\": 12,\n        \"y\": 22\n      },\n      \"id\": 17,\n      \"options\": {\n        \"code\": {\n          \"language\": \"plaintext\",\n          \"showLineNumbers\": false,\n          \"showMiniMap\": false\n        },\n        \"content\": \"\\n### Find the new head\\n\\n\\nRun the LMD GHOST `find_head` algorithm and find the new head `BeaconBlock`.\",\n        \"mode\": \"markdown\"\n      },\n      \"pluginVersion\": \"10.4.1\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"refId\": \"A\"\n        }\n      ],\n      \"transparent\": true,\n      \"type\": \"text\"\n    },\n    {\n      \"aliasColors\": {},\n      \"autoMigrateFrom\": \"graph\",\n      \"bars\": false,\n      \"dashLength\": 10,\n      \"dashes\": false,\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"description\": \"\",\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"custom\": {}\n        },\n        \"overrides\": []\n      },\n      \"fill\": 1,\n      \"fillGradient\": 0,\n      \"gridPos\": {\n        \"h\": 6,\n        \"w\": 12,\n        \"x\": 0,\n        \"y\": 25\n      },\n      \"hiddenSeries\": false,\n      \"id\": 9,\n      \"legend\": {\n        \"avg\": false,\n        \"current\": false,\n        \"max\": false,\n        \"min\": false,\n        \"show\": false,\n        \"total\": false,\n        \"values\": false\n      },\n      \"lines\": true,\n      \"linewidth\": 1,\n      \"nullPointMode\": \"null\",\n      \"percentage\": false,\n      \"pluginVersion\": \"7.1.3\",\n      \"pointradius\": 2,\n      \"points\": false,\n      \"renderer\": \"flot\",\n      \"seriesOverrides\": [],\n      \"spaceLength\": 10,\n      \"stack\": false,\n      \"steppedLine\": false,\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"expr\": \"rate(beacon_block_processing_fork_choice_register_seconds_sum[5m])\\n/\\nrate(beacon_block_processing_fork_choice_register_seconds_count[5m])\",\n          \"format\": \"time_series\",\n          \"intervalFactor\": 1,\n          \"refId\": \"A\"\n        }\n      ],\n      \"thresholds\": [],\n      \"timeRegions\": [],\n      \"title\": \"Block Processing Fork Choice Register Times\",\n      \"tooltip\": {\n        \"shared\": true,\n        \"sort\": 0,\n        \"value_type\": \"individual\"\n      },\n      \"type\": \"timeseries\",\n      \"xaxis\": {\n        \"mode\": \"time\",\n        \"show\": true,\n        \"values\": []\n      },\n      \"yaxes\": [\n        {\n          \"format\": \"s\",\n          \"logBase\": 1,\n          \"show\": true\n        },\n        {\n          \"format\": \"short\",\n          \"logBase\": 1,\n          \"show\": true\n        }\n      ],\n      \"yaxis\": {\n        \"align\": false\n      }\n    },\n    {\n      \"aliasColors\": {},\n      \"autoMigrateFrom\": \"graph\",\n      \"bars\": false,\n      \"dashLength\": 10,\n      \"dashes\": false,\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"description\": \"\",\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"custom\": {}\n        },\n        \"overrides\": []\n      },\n      \"fill\": 1,\n      \"fillGradient\": 0,\n      \"gridPos\": {\n        \"h\": 6,\n        \"w\": 11,\n        \"x\": 12,\n        \"y\": 25\n      },\n      \"hiddenSeries\": false,\n      \"id\": 6,\n      \"legend\": {\n        \"avg\": false,\n        \"current\": false,\n        \"max\": false,\n        \"min\": false,\n        \"show\": false,\n        \"total\": false,\n        \"values\": false\n      },\n      \"lines\": true,\n      \"linewidth\": 1,\n      \"nullPointMode\": \"null\",\n      \"percentage\": false,\n      \"pluginVersion\": \"7.1.3\",\n      \"pointradius\": 2,\n      \"points\": false,\n      \"renderer\": \"flot\",\n      \"seriesOverrides\": [],\n      \"spaceLength\": 10,\n      \"stack\": false,\n      \"steppedLine\": false,\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"expr\": \"rate(beacon_block_processing_fork_choice_find_head_seconds_sum[5m])\\n/\\nrate(beacon_block_processing_fork_choice_find_head_seconds_count[5m])\",\n          \"format\": \"time_series\",\n          \"intervalFactor\": 1,\n          \"refId\": \"A\"\n        }\n      ],\n      \"thresholds\": [],\n      \"timeRegions\": [],\n      \"title\": \"Block Processing Find Head\",\n      \"tooltip\": {\n        \"shared\": true,\n        \"sort\": 0,\n        \"value_type\": \"individual\"\n      },\n      \"type\": \"timeseries\",\n      \"xaxis\": {\n        \"mode\": \"time\",\n        \"show\": true,\n        \"values\": []\n      },\n      \"yaxes\": [\n        {\n          \"format\": \"s\",\n          \"logBase\": 1,\n          \"show\": true\n        },\n        {\n          \"format\": \"short\",\n          \"logBase\": 1,\n          \"show\": true\n        }\n      ],\n      \"yaxis\": {\n        \"align\": false\n      }\n    }\n  ],\n  \"refresh\": false,\n  \"schemaVersion\": 39,\n  \"tags\": [\n    \"lighthouse\"\n  ],\n  \"templating\": {\n    \"list\": []\n  },\n  \"time\": {\n    \"from\": \"now-15m\",\n    \"to\": \"now\"\n  },\n  \"timepicker\": {\n    \"refresh_intervals\": [\n      \"5s\",\n      \"10s\",\n      \"30s\",\n      \"1m\",\n      \"5m\",\n      \"15m\",\n      \"30m\",\n      \"1h\",\n      \"2h\",\n      \"1d\"\n    ],\n    \"time_options\": [\n      \"5m\",\n      \"15m\",\n      \"1h\",\n      \"6h\",\n      \"12h\",\n      \"24h\",\n      \"2d\",\n      \"7d\",\n      \"30d\"\n    ]\n  },\n  \"timezone\": \"\",\n  \"title\": \"Block Processing\",\n  \"uid\": \"tQbhcmOWk\",\n  \"version\": 1,\n  \"weekStart\": \"\"\n}\n"
  },
  {
    "path": "static_files/grafana-config/dashboards/lighthouse/BlockProduction.json",
    "content": "{\n  \"__inputs\": [\n    {\n      \"name\": \"DS_PROMETHEUS\",\n      \"label\": \"Prometheus\",\n      \"description\": \"\",\n      \"type\": \"datasource\",\n      \"pluginId\": \"prometheus\",\n      \"pluginName\": \"Prometheus\"\n    }\n  ],\n  \"__elements\": {},\n  \"__requires\": [\n    {\n      \"type\": \"grafana\",\n      \"id\": \"grafana\",\n      \"name\": \"Grafana\",\n      \"version\": \"10.4.1\"\n    },\n    {\n      \"type\": \"datasource\",\n      \"id\": \"prometheus\",\n      \"name\": \"Prometheus\",\n      \"version\": \"1.0.0\"\n    },\n    {\n      \"type\": \"panel\",\n      \"id\": \"text\",\n      \"name\": \"Text\",\n      \"version\": \"\"\n    },\n    {\n      \"type\": \"panel\",\n      \"id\": \"timeseries\",\n      \"name\": \"Time series\",\n      \"version\": \"\"\n    }\n  ],\n  \"annotations\": {\n    \"list\": [\n      {\n        \"builtIn\": 1,\n        \"datasource\": {\n          \"type\": \"datasource\",\n          \"uid\": \"grafana\"\n        },\n        \"enable\": true,\n        \"hide\": true,\n        \"iconColor\": \"rgba(0, 211, 255, 1)\",\n        \"name\": \"Annotations & Alerts\",\n        \"type\": \"dashboard\"\n      }\n    ]\n  },\n  \"editable\": true,\n  \"fiscalYearStartMonth\": 0,\n  \"graphTooltip\": 0,\n  \"id\": null,\n  \"links\": [],\n  \"panels\": [\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"palette-classic\"\n          },\n          \"custom\": {\n            \"axisBorderShow\": false,\n            \"axisCenteredZero\": false,\n            \"axisColorMode\": \"text\",\n            \"axisLabel\": \"\",\n            \"axisPlacement\": \"auto\",\n            \"barAlignment\": 0,\n            \"drawStyle\": \"line\",\n            \"fillOpacity\": 10,\n            \"gradientMode\": \"none\",\n            \"hideFrom\": {\n              \"legend\": false,\n              \"tooltip\": false,\n              \"viz\": false\n            },\n            \"insertNulls\": false,\n            \"lineInterpolation\": \"linear\",\n            \"lineWidth\": 1,\n            \"pointSize\": 5,\n            \"scaleDistribution\": {\n              \"type\": \"linear\"\n            },\n            \"showPoints\": \"never\",\n            \"spanNulls\": false,\n            \"stacking\": {\n              \"group\": \"A\",\n              \"mode\": \"none\"\n            },\n            \"thresholdsStyle\": {\n              \"mode\": \"off\"\n            }\n          },\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\",\n                \"value\": null\n              },\n              {\n                \"color\": \"red\",\n                \"value\": 80\n              }\n            ]\n          },\n          \"unit\": \"s\"\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 9,\n        \"w\": 12,\n        \"x\": 0,\n        \"y\": 0\n      },\n      \"id\": 4,\n      \"options\": {\n        \"legend\": {\n          \"calcs\": [],\n          \"displayMode\": \"list\",\n          \"placement\": \"bottom\",\n          \"showLegend\": true\n        },\n        \"tooltip\": {\n          \"mode\": \"multi\",\n          \"sort\": \"none\"\n        }\n      },\n      \"pluginVersion\": \"8.0.6\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"expr\": \"rate(beacon_block_production_seconds_sum[1m])\\n/\\nrate(beacon_block_production_seconds_count[1m])\",\n          \"interval\": \"\",\n          \"legendFormat\": \"\",\n          \"queryType\": \"randomWalk\",\n          \"refId\": \"A\"\n        }\n      ],\n      \"title\": \"Total Time\",\n      \"type\": \"timeseries\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"palette-classic\"\n          },\n          \"custom\": {\n            \"axisBorderShow\": false,\n            \"axisCenteredZero\": false,\n            \"axisColorMode\": \"text\",\n            \"axisLabel\": \"\",\n            \"axisPlacement\": \"auto\",\n            \"barAlignment\": 0,\n            \"drawStyle\": \"line\",\n            \"fillOpacity\": 10,\n            \"gradientMode\": \"none\",\n            \"hideFrom\": {\n              \"legend\": false,\n              \"tooltip\": false,\n              \"viz\": false\n            },\n            \"insertNulls\": false,\n            \"lineInterpolation\": \"linear\",\n            \"lineWidth\": 1,\n            \"pointSize\": 5,\n            \"scaleDistribution\": {\n              \"type\": \"linear\"\n            },\n            \"showPoints\": \"never\",\n            \"spanNulls\": false,\n            \"stacking\": {\n              \"group\": \"A\",\n              \"mode\": \"none\"\n            },\n            \"thresholdsStyle\": {\n              \"mode\": \"off\"\n            }\n          },\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\",\n                \"value\": null\n              },\n              {\n                \"color\": \"red\",\n                \"value\": 80\n              }\n            ]\n          },\n          \"unit\": \"s\"\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 9,\n        \"w\": 12,\n        \"x\": 12,\n        \"y\": 0\n      },\n      \"id\": 3,\n      \"options\": {\n        \"legend\": {\n          \"calcs\": [],\n          \"displayMode\": \"list\",\n          \"placement\": \"bottom\",\n          \"showLegend\": true\n        },\n        \"tooltip\": {\n          \"mode\": \"multi\",\n          \"sort\": \"none\"\n        }\n      },\n      \"pluginVersion\": \"8.0.6\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"expr\": \"rate(beacon_block_production_state_load_seconds_sum[1m])\\n/\\nrate(beacon_block_production_state_load_seconds_count[1m])\",\n          \"interval\": \"\",\n          \"legendFormat\": \"\",\n          \"queryType\": \"randomWalk\",\n          \"refId\": \"A\"\n        }\n      ],\n      \"title\": \"State Load Time\",\n      \"type\": \"timeseries\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"description\": \"\",\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"palette-classic\"\n          },\n          \"custom\": {\n            \"axisBorderShow\": false,\n            \"axisCenteredZero\": false,\n            \"axisColorMode\": \"text\",\n            \"axisLabel\": \"\",\n            \"axisPlacement\": \"auto\",\n            \"barAlignment\": 0,\n            \"drawStyle\": \"line\",\n            \"fillOpacity\": 10,\n            \"gradientMode\": \"none\",\n            \"hideFrom\": {\n              \"legend\": false,\n              \"tooltip\": false,\n              \"viz\": false\n            },\n            \"insertNulls\": false,\n            \"lineInterpolation\": \"linear\",\n            \"lineWidth\": 1,\n            \"pointSize\": 5,\n            \"scaleDistribution\": {\n              \"type\": \"linear\"\n            },\n            \"showPoints\": \"never\",\n            \"spanNulls\": false,\n            \"stacking\": {\n              \"group\": \"A\",\n              \"mode\": \"none\"\n            },\n            \"thresholdsStyle\": {\n              \"mode\": \"off\"\n            }\n          },\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\",\n                \"value\": null\n              },\n              {\n                \"color\": \"red\",\n                \"value\": 80\n              }\n            ]\n          },\n          \"unit\": \"s\"\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 9,\n        \"w\": 12,\n        \"x\": 0,\n        \"y\": 9\n      },\n      \"id\": 11,\n      \"options\": {\n        \"legend\": {\n          \"calcs\": [],\n          \"displayMode\": \"list\",\n          \"placement\": \"bottom\",\n          \"showLegend\": true\n        },\n        \"tooltip\": {\n          \"mode\": \"multi\",\n          \"sort\": \"none\"\n        }\n      },\n      \"pluginVersion\": \"8.0.6\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"expr\": \"rate(beacon_block_production_slot_process_seconds_sum[1m])\\n/\\nrate(beacon_block_production_slot_process_seconds_count[1m])\",\n          \"interval\": \"\",\n          \"legendFormat\": \"\",\n          \"queryType\": \"randomWalk\",\n          \"refId\": \"A\"\n        }\n      ],\n      \"title\": \"Slot Processing\",\n      \"type\": \"timeseries\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"palette-classic\"\n          },\n          \"custom\": {\n            \"axisBorderShow\": false,\n            \"axisCenteredZero\": false,\n            \"axisColorMode\": \"text\",\n            \"axisLabel\": \"\",\n            \"axisPlacement\": \"auto\",\n            \"barAlignment\": 0,\n            \"drawStyle\": \"line\",\n            \"fillOpacity\": 10,\n            \"gradientMode\": \"none\",\n            \"hideFrom\": {\n              \"legend\": false,\n              \"tooltip\": false,\n              \"viz\": false\n            },\n            \"insertNulls\": false,\n            \"lineInterpolation\": \"linear\",\n            \"lineWidth\": 1,\n            \"pointSize\": 5,\n            \"scaleDistribution\": {\n              \"type\": \"linear\"\n            },\n            \"showPoints\": \"never\",\n            \"spanNulls\": false,\n            \"stacking\": {\n              \"group\": \"A\",\n              \"mode\": \"none\"\n            },\n            \"thresholdsStyle\": {\n              \"mode\": \"off\"\n            }\n          },\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\",\n                \"value\": null\n              },\n              {\n                \"color\": \"red\",\n                \"value\": 80\n              }\n            ]\n          },\n          \"unit\": \"s\"\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 9,\n        \"w\": 12,\n        \"x\": 12,\n        \"y\": 9\n      },\n      \"id\": 5,\n      \"options\": {\n        \"legend\": {\n          \"calcs\": [],\n          \"displayMode\": \"list\",\n          \"placement\": \"bottom\",\n          \"showLegend\": true\n        },\n        \"tooltip\": {\n          \"mode\": \"multi\",\n          \"sort\": \"none\"\n        }\n      },\n      \"pluginVersion\": \"8.0.6\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"expr\": \"rate(beacon_block_production_attestation_seconds_sum[1m])\\n/\\nrate(beacon_block_production_attestation_seconds_count[1m])\",\n          \"interval\": \"\",\n          \"legendFormat\": \"\",\n          \"queryType\": \"randomWalk\",\n          \"refId\": \"A\"\n        }\n      ],\n      \"title\": \"Attestation Packing Time\",\n      \"type\": \"timeseries\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"palette-classic\"\n          },\n          \"custom\": {\n            \"axisBorderShow\": false,\n            \"axisCenteredZero\": false,\n            \"axisColorMode\": \"text\",\n            \"axisLabel\": \"\",\n            \"axisPlacement\": \"auto\",\n            \"barAlignment\": 0,\n            \"drawStyle\": \"line\",\n            \"fillOpacity\": 10,\n            \"gradientMode\": \"none\",\n            \"hideFrom\": {\n              \"legend\": false,\n              \"tooltip\": false,\n              \"viz\": false\n            },\n            \"insertNulls\": false,\n            \"lineInterpolation\": \"linear\",\n            \"lineWidth\": 1,\n            \"pointSize\": 5,\n            \"scaleDistribution\": {\n              \"type\": \"linear\"\n            },\n            \"showPoints\": \"never\",\n            \"spanNulls\": false,\n            \"stacking\": {\n              \"group\": \"A\",\n              \"mode\": \"none\"\n            },\n            \"thresholdsStyle\": {\n              \"mode\": \"off\"\n            }\n          },\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\",\n                \"value\": null\n              },\n              {\n                \"color\": \"red\",\n                \"value\": 80\n              }\n            ]\n          },\n          \"unit\": \"s\"\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 9,\n        \"w\": 12,\n        \"x\": 0,\n        \"y\": 18\n      },\n      \"id\": 9,\n      \"options\": {\n        \"legend\": {\n          \"calcs\": [],\n          \"displayMode\": \"list\",\n          \"placement\": \"bottom\",\n          \"showLegend\": true\n        },\n        \"tooltip\": {\n          \"mode\": \"multi\",\n          \"sort\": \"none\"\n        }\n      },\n      \"pluginVersion\": \"8.0.6\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"expr\": \"rate(beacon_block_production_state_root_seconds_sum[1m])\\n/\\nrate(beacon_block_production_state_root_seconds_count[1m])\",\n          \"interval\": \"\",\n          \"legendFormat\": \"\",\n          \"queryType\": \"randomWalk\",\n          \"refId\": \"A\"\n        }\n      ],\n      \"title\": \"State Root Time\",\n      \"type\": \"timeseries\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"palette-classic\"\n          },\n          \"custom\": {\n            \"axisBorderShow\": false,\n            \"axisCenteredZero\": false,\n            \"axisColorMode\": \"text\",\n            \"axisLabel\": \"\",\n            \"axisPlacement\": \"auto\",\n            \"barAlignment\": 0,\n            \"drawStyle\": \"line\",\n            \"fillOpacity\": 10,\n            \"gradientMode\": \"none\",\n            \"hideFrom\": {\n              \"legend\": false,\n              \"tooltip\": false,\n              \"viz\": false\n            },\n            \"insertNulls\": false,\n            \"lineInterpolation\": \"linear\",\n            \"lineWidth\": 1,\n            \"pointSize\": 5,\n            \"scaleDistribution\": {\n              \"type\": \"linear\"\n            },\n            \"showPoints\": \"never\",\n            \"spanNulls\": false,\n            \"stacking\": {\n              \"group\": \"A\",\n              \"mode\": \"none\"\n            },\n            \"thresholdsStyle\": {\n              \"mode\": \"off\"\n            }\n          },\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\",\n                \"value\": null\n              },\n              {\n                \"color\": \"red\",\n                \"value\": 80\n              }\n            ]\n          },\n          \"unit\": \"s\"\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 9,\n        \"w\": 12,\n        \"x\": 12,\n        \"y\": 18\n      },\n      \"id\": 2,\n      \"options\": {\n        \"legend\": {\n          \"calcs\": [],\n          \"displayMode\": \"list\",\n          \"placement\": \"bottom\",\n          \"showLegend\": true\n        },\n        \"tooltip\": {\n          \"mode\": \"multi\",\n          \"sort\": \"none\"\n        }\n      },\n      \"pluginVersion\": \"8.0.6\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"expr\": \"rate(beacon_block_production_unaggregated_seconds_sum[1m])\\n/\\nrate(beacon_block_production_unaggregated_seconds_count[1m])\",\n          \"interval\": \"\",\n          \"legendFormat\": \"\",\n          \"queryType\": \"randomWalk\",\n          \"refId\": \"A\"\n        }\n      ],\n      \"title\": \"Naive Import Time\",\n      \"type\": \"timeseries\"\n    },\n    {\n      \"aliasColors\": {},\n      \"autoMigrateFrom\": \"graph\",\n      \"bars\": false,\n      \"dashLength\": 10,\n      \"dashes\": false,\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"fill\": 1,\n      \"fillGradient\": 0,\n      \"gridPos\": {\n        \"h\": 9,\n        \"w\": 12,\n        \"x\": 0,\n        \"y\": 27\n      },\n      \"hiddenSeries\": false,\n      \"id\": 8,\n      \"legend\": {\n        \"avg\": false,\n        \"current\": false,\n        \"max\": false,\n        \"min\": false,\n        \"show\": true,\n        \"total\": false,\n        \"values\": false\n      },\n      \"lines\": true,\n      \"linewidth\": 1,\n      \"nullPointMode\": \"null\",\n      \"options\": {\n        \"alertThreshold\": true\n      },\n      \"percentage\": false,\n      \"pluginVersion\": \"8.0.6\",\n      \"pointradius\": 2,\n      \"points\": false,\n      \"renderer\": \"flot\",\n      \"seriesOverrides\": [],\n      \"spaceLength\": 10,\n      \"stack\": false,\n      \"steppedLine\": false,\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"expr\": \"rate(beacon_block_production_process_seconds_sum[1m])\\n/\\nrate(beacon_block_production_process_seconds_count[1m])\",\n          \"interval\": \"\",\n          \"legendFormat\": \"\",\n          \"queryType\": \"randomWalk\",\n          \"refId\": \"A\"\n        }\n      ],\n      \"thresholds\": [],\n      \"timeRegions\": [],\n      \"title\": \"Process Block Time\",\n      \"tooltip\": {\n        \"shared\": true,\n        \"sort\": 0,\n        \"value_type\": \"individual\"\n      },\n      \"type\": \"timeseries\",\n      \"xaxis\": {\n        \"mode\": \"time\",\n        \"show\": true,\n        \"values\": []\n      },\n      \"yaxes\": [\n        {\n          \"$$hashKey\": \"object:82\",\n          \"format\": \"s\",\n          \"logBase\": 1,\n          \"show\": true\n        },\n        {\n          \"$$hashKey\": \"object:83\",\n          \"format\": \"short\",\n          \"logBase\": 1,\n          \"show\": true\n        }\n      ],\n      \"yaxis\": {\n        \"align\": false\n      }\n    },\n    {\n      \"aliasColors\": {},\n      \"autoMigrateFrom\": \"graph\",\n      \"bars\": false,\n      \"dashLength\": 10,\n      \"dashes\": false,\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"fill\": 1,\n      \"fillGradient\": 0,\n      \"gridPos\": {\n        \"h\": 9,\n        \"w\": 12,\n        \"x\": 12,\n        \"y\": 27\n      },\n      \"hiddenSeries\": false,\n      \"id\": 12,\n      \"legend\": {\n        \"avg\": false,\n        \"current\": false,\n        \"max\": false,\n        \"min\": false,\n        \"show\": true,\n        \"total\": false,\n        \"values\": false\n      },\n      \"lines\": true,\n      \"linewidth\": 1,\n      \"nullPointMode\": \"null\",\n      \"options\": {\n        \"alertThreshold\": true\n      },\n      \"percentage\": false,\n      \"pluginVersion\": \"8.0.6\",\n      \"pointradius\": 2,\n      \"points\": false,\n      \"renderer\": \"flot\",\n      \"seriesOverrides\": [],\n      \"spaceLength\": 10,\n      \"stack\": false,\n      \"steppedLine\": false,\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"expr\": \"rate(http_api_block_broadcast_delay_times_sum[1m])\\n/\\nrate(http_api_block_broadcast_delay_times_count[1m])\",\n          \"interval\": \"\",\n          \"legendFormat\": \"\",\n          \"queryType\": \"randomWalk\",\n          \"refId\": \"A\"\n        }\n      ],\n      \"thresholds\": [],\n      \"timeRegions\": [],\n      \"title\": \"HTTP API Block Broadcast Delay Times\",\n      \"tooltip\": {\n        \"shared\": true,\n        \"sort\": 0,\n        \"value_type\": \"individual\"\n      },\n      \"type\": \"timeseries\",\n      \"xaxis\": {\n        \"mode\": \"time\",\n        \"show\": true,\n        \"values\": []\n      },\n      \"yaxes\": [\n        {\n          \"$$hashKey\": \"object:82\",\n          \"format\": \"s\",\n          \"logBase\": 1,\n          \"show\": true\n        },\n        {\n          \"$$hashKey\": \"object:83\",\n          \"format\": \"short\",\n          \"logBase\": 1,\n          \"show\": true\n        }\n      ],\n      \"yaxis\": {\n        \"align\": false\n      }\n    },\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"gridPos\": {\n        \"h\": 3,\n        \"w\": 24,\n        \"x\": 0,\n        \"y\": 36\n      },\n      \"id\": 18,\n      \"options\": {\n        \"content\": \"\\n# Aggregated Timing Data\\n\\nData for all nodes combined, using percentiles to detect outliers\",\n        \"mode\": \"markdown\"\n      },\n      \"pluginVersion\": \"8.0.6\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"refId\": \"A\"\n        }\n      ],\n      \"transparent\": true,\n      \"type\": \"text\"\n    },\n    {\n      \"aliasColors\": {},\n      \"autoMigrateFrom\": \"graph\",\n      \"bars\": false,\n      \"dashLength\": 10,\n      \"dashes\": false,\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"fill\": 1,\n      \"fillGradient\": 0,\n      \"gridPos\": {\n        \"h\": 10,\n        \"w\": 12,\n        \"x\": 0,\n        \"y\": 39\n      },\n      \"hiddenSeries\": false,\n      \"id\": 25,\n      \"legend\": {\n        \"avg\": false,\n        \"current\": false,\n        \"max\": false,\n        \"min\": false,\n        \"show\": true,\n        \"total\": false,\n        \"values\": false\n      },\n      \"lines\": true,\n      \"linewidth\": 1,\n      \"nullPointMode\": \"null\",\n      \"options\": {\n        \"alertThreshold\": true\n      },\n      \"percentage\": false,\n      \"pluginVersion\": \"8.0.6\",\n      \"pointradius\": 2,\n      \"points\": false,\n      \"renderer\": \"flot\",\n      \"seriesOverrides\": [],\n      \"spaceLength\": 10,\n      \"stack\": false,\n      \"steppedLine\": false,\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"expr\": \"histogram_quantile(0.95, sum(rate(beacon_block_production_seconds_bucket[30m])) by (le))\",\n          \"interval\": \"\",\n          \"legendFormat\": \"95th percentile\",\n          \"queryType\": \"randomWalk\",\n          \"refId\": \"A\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"expr\": \"sum(rate(beacon_block_production_seconds_sum[30m])) / sum(rate(beacon_block_production_seconds_count[30m]))\",\n          \"hide\": false,\n          \"interval\": \"\",\n          \"legendFormat\": \"Mean\",\n          \"refId\": \"B\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"expr\": \"histogram_quantile(0.5, sum(rate(beacon_block_production_seconds_bucket[30m])) by (le))\",\n          \"hide\": false,\n          \"interval\": \"\",\n          \"legendFormat\": \"Median\",\n          \"refId\": \"C\"\n        }\n      ],\n      \"thresholds\": [],\n      \"timeRegions\": [],\n      \"title\": \"Total Time\",\n      \"tooltip\": {\n        \"shared\": true,\n        \"sort\": 0,\n        \"value_type\": \"individual\"\n      },\n      \"type\": \"timeseries\",\n      \"xaxis\": {\n        \"mode\": \"time\",\n        \"show\": true,\n        \"values\": []\n      },\n      \"yaxes\": [\n        {\n          \"$$hashKey\": \"object:82\",\n          \"format\": \"s\",\n          \"logBase\": 1,\n          \"show\": true\n        },\n        {\n          \"$$hashKey\": \"object:83\",\n          \"format\": \"short\",\n          \"logBase\": 1,\n          \"show\": true\n        }\n      ],\n      \"yaxis\": {\n        \"align\": false\n      }\n    },\n    {\n      \"aliasColors\": {},\n      \"autoMigrateFrom\": \"graph\",\n      \"bars\": false,\n      \"dashLength\": 10,\n      \"dashes\": false,\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"fill\": 1,\n      \"fillGradient\": 0,\n      \"gridPos\": {\n        \"h\": 10,\n        \"w\": 12,\n        \"x\": 12,\n        \"y\": 39\n      },\n      \"hiddenSeries\": false,\n      \"id\": 26,\n      \"legend\": {\n        \"avg\": false,\n        \"current\": false,\n        \"max\": false,\n        \"min\": false,\n        \"show\": true,\n        \"total\": false,\n        \"values\": false\n      },\n      \"lines\": true,\n      \"linewidth\": 1,\n      \"nullPointMode\": \"null\",\n      \"options\": {\n        \"alertThreshold\": true\n      },\n      \"percentage\": false,\n      \"pluginVersion\": \"8.0.6\",\n      \"pointradius\": 2,\n      \"points\": false,\n      \"renderer\": \"flot\",\n      \"seriesOverrides\": [],\n      \"spaceLength\": 10,\n      \"stack\": false,\n      \"steppedLine\": false,\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"expr\": \"max(increase(beacon_block_production_seconds_sum[5m]) / increase(beacon_block_production_process_seconds_count[5m]))\",\n          \"instant\": false,\n          \"interval\": \"\",\n          \"legendFormat\": \"\",\n          \"queryType\": \"randomWalk\",\n          \"refId\": \"A\"\n        }\n      ],\n      \"thresholds\": [],\n      \"timeRegions\": [],\n      \"title\": \"Total Time (Max)\",\n      \"tooltip\": {\n        \"shared\": true,\n        \"sort\": 0,\n        \"value_type\": \"individual\"\n      },\n      \"type\": \"timeseries\",\n      \"xaxis\": {\n        \"mode\": \"time\",\n        \"show\": true,\n        \"values\": []\n      },\n      \"yaxes\": [\n        {\n          \"$$hashKey\": \"object:82\",\n          \"format\": \"s\",\n          \"logBase\": 1,\n          \"show\": true\n        },\n        {\n          \"$$hashKey\": \"object:83\",\n          \"format\": \"short\",\n          \"logBase\": 1,\n          \"show\": true\n        }\n      ],\n      \"yaxis\": {\n        \"align\": false\n      }\n    },\n    {\n      \"aliasColors\": {},\n      \"autoMigrateFrom\": \"graph\",\n      \"bars\": false,\n      \"dashLength\": 10,\n      \"dashes\": false,\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"fill\": 1,\n      \"fillGradient\": 0,\n      \"gridPos\": {\n        \"h\": 10,\n        \"w\": 24,\n        \"x\": 0,\n        \"y\": 49\n      },\n      \"hiddenSeries\": false,\n      \"id\": 22,\n      \"legend\": {\n        \"avg\": false,\n        \"current\": false,\n        \"max\": false,\n        \"min\": false,\n        \"show\": true,\n        \"total\": false,\n        \"values\": false\n      },\n      \"lines\": true,\n      \"linewidth\": 1,\n      \"nullPointMode\": \"null\",\n      \"options\": {\n        \"alertThreshold\": true\n      },\n      \"percentage\": false,\n      \"pluginVersion\": \"8.0.6\",\n      \"pointradius\": 2,\n      \"points\": false,\n      \"renderer\": \"flot\",\n      \"seriesOverrides\": [],\n      \"spaceLength\": 10,\n      \"stack\": false,\n      \"steppedLine\": false,\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"expr\": \"histogram_quantile(0.95, sum(rate(beacon_block_production_attestation_seconds_bucket[30m])) by (le))\",\n          \"interval\": \"\",\n          \"legendFormat\": \"95th percentile\",\n          \"queryType\": \"randomWalk\",\n          \"refId\": \"A\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"expr\": \"sum(rate(beacon_block_production_attestation_seconds_sum[30m])) / sum(rate(beacon_block_production_attestation_seconds_count[30m]))\",\n          \"hide\": false,\n          \"interval\": \"\",\n          \"legendFormat\": \"Mean\",\n          \"refId\": \"B\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"expr\": \"histogram_quantile(0.5, sum(rate(beacon_block_production_attestation_seconds_bucket[30m])) by (le))\",\n          \"hide\": false,\n          \"interval\": \"\",\n          \"legendFormat\": \"Median\",\n          \"refId\": \"C\"\n        }\n      ],\n      \"thresholds\": [],\n      \"timeRegions\": [],\n      \"title\": \"Attestation Packing Time\",\n      \"tooltip\": {\n        \"shared\": true,\n        \"sort\": 0,\n        \"value_type\": \"individual\"\n      },\n      \"type\": \"timeseries\",\n      \"xaxis\": {\n        \"mode\": \"time\",\n        \"show\": true,\n        \"values\": []\n      },\n      \"yaxes\": [\n        {\n          \"$$hashKey\": \"object:82\",\n          \"format\": \"s\",\n          \"logBase\": 1,\n          \"show\": true\n        },\n        {\n          \"$$hashKey\": \"object:83\",\n          \"format\": \"short\",\n          \"logBase\": 1,\n          \"show\": true\n        }\n      ],\n      \"yaxis\": {\n        \"align\": false\n      }\n    },\n    {\n      \"aliasColors\": {},\n      \"autoMigrateFrom\": \"graph\",\n      \"bars\": false,\n      \"dashLength\": 10,\n      \"dashes\": false,\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"fill\": 1,\n      \"fillGradient\": 0,\n      \"gridPos\": {\n        \"h\": 10,\n        \"w\": 12,\n        \"x\": 0,\n        \"y\": 59\n      },\n      \"hiddenSeries\": false,\n      \"id\": 23,\n      \"legend\": {\n        \"avg\": false,\n        \"current\": false,\n        \"max\": false,\n        \"min\": false,\n        \"show\": true,\n        \"total\": false,\n        \"values\": false\n      },\n      \"lines\": true,\n      \"linewidth\": 1,\n      \"nullPointMode\": \"null\",\n      \"options\": {\n        \"alertThreshold\": true\n      },\n      \"percentage\": false,\n      \"pluginVersion\": \"8.0.6\",\n      \"pointradius\": 2,\n      \"points\": false,\n      \"renderer\": \"flot\",\n      \"seriesOverrides\": [],\n      \"spaceLength\": 10,\n      \"stack\": false,\n      \"steppedLine\": false,\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"expr\": \"histogram_quantile(0.95, sum(rate(op_pool_attestation_prev_epoch_packing_time_bucket[30m])) by (le))\",\n          \"interval\": \"\",\n          \"legendFormat\": \"95th percentile\",\n          \"queryType\": \"randomWalk\",\n          \"refId\": \"A\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"expr\": \"sum(rate(op_pool_attestation_prev_epoch_packing_time_sum[30m])) / sum(rate(op_pool_attestation_prev_epoch_packing_time_count[30m]))\",\n          \"hide\": false,\n          \"interval\": \"\",\n          \"legendFormat\": \"Mean\",\n          \"refId\": \"B\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"expr\": \"histogram_quantile(0.5, sum(rate(op_pool_attestation_prev_epoch_packing_time_bucket[30m])) by (le))\",\n          \"hide\": false,\n          \"interval\": \"\",\n          \"legendFormat\": \"Median\",\n          \"refId\": \"C\"\n        }\n      ],\n      \"thresholds\": [],\n      \"timeRegions\": [],\n      \"title\": \"Previous Epoch Packing Time\",\n      \"tooltip\": {\n        \"shared\": true,\n        \"sort\": 0,\n        \"value_type\": \"individual\"\n      },\n      \"type\": \"timeseries\",\n      \"xaxis\": {\n        \"mode\": \"time\",\n        \"show\": true,\n        \"values\": []\n      },\n      \"yaxes\": [\n        {\n          \"$$hashKey\": \"object:82\",\n          \"format\": \"s\",\n          \"logBase\": 1,\n          \"show\": true\n        },\n        {\n          \"$$hashKey\": \"object:83\",\n          \"format\": \"short\",\n          \"logBase\": 1,\n          \"show\": true\n        }\n      ],\n      \"yaxis\": {\n        \"align\": false\n      }\n    },\n    {\n      \"aliasColors\": {},\n      \"autoMigrateFrom\": \"graph\",\n      \"bars\": false,\n      \"dashLength\": 10,\n      \"dashes\": false,\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"description\": \"\",\n      \"fill\": 1,\n      \"fillGradient\": 0,\n      \"gridPos\": {\n        \"h\": 10,\n        \"w\": 12,\n        \"x\": 12,\n        \"y\": 59\n      },\n      \"hiddenSeries\": false,\n      \"id\": 24,\n      \"legend\": {\n        \"avg\": false,\n        \"current\": false,\n        \"max\": false,\n        \"min\": false,\n        \"show\": true,\n        \"total\": false,\n        \"values\": false\n      },\n      \"lines\": true,\n      \"linewidth\": 1,\n      \"nullPointMode\": \"null\",\n      \"options\": {\n        \"alertThreshold\": true\n      },\n      \"percentage\": false,\n      \"pluginVersion\": \"8.0.6\",\n      \"pointradius\": 2,\n      \"points\": false,\n      \"renderer\": \"flot\",\n      \"seriesOverrides\": [],\n      \"spaceLength\": 10,\n      \"stack\": false,\n      \"steppedLine\": false,\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"expr\": \"histogram_quantile(0.95, sum(rate(op_pool_attestation_curr_epoch_packing_time_bucket[30m])) by (le))\",\n          \"interval\": \"\",\n          \"legendFormat\": \"95th percentile\",\n          \"queryType\": \"randomWalk\",\n          \"refId\": \"A\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"expr\": \"sum(rate(op_pool_attestation_curr_epoch_packing_time_sum[30m])) / sum(rate(op_pool_attestation_curr_epoch_packing_time_count[30m]))\",\n          \"hide\": false,\n          \"interval\": \"\",\n          \"legendFormat\": \"Mean\",\n          \"refId\": \"B\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"expr\": \"histogram_quantile(0.5, sum(rate(op_pool_attestation_curr_epoch_packing_time_bucket[30m])) by (le))\",\n          \"hide\": false,\n          \"interval\": \"\",\n          \"legendFormat\": \"Median\",\n          \"refId\": \"C\"\n        }\n      ],\n      \"thresholds\": [],\n      \"timeRegions\": [],\n      \"title\": \"Current Epoch Packing Time\",\n      \"tooltip\": {\n        \"shared\": true,\n        \"sort\": 0,\n        \"value_type\": \"individual\"\n      },\n      \"type\": \"timeseries\",\n      \"xaxis\": {\n        \"mode\": \"time\",\n        \"show\": true,\n        \"values\": []\n      },\n      \"yaxes\": [\n        {\n          \"$$hashKey\": \"object:82\",\n          \"format\": \"s\",\n          \"logBase\": 1,\n          \"show\": true\n        },\n        {\n          \"$$hashKey\": \"object:83\",\n          \"format\": \"short\",\n          \"logBase\": 1,\n          \"show\": true\n        }\n      ],\n      \"yaxis\": {\n        \"align\": false\n      }\n    }\n  ],\n  \"refresh\": \"10s\",\n  \"schemaVersion\": 39,\n  \"tags\": [\n    \"lighthouse\"\n  ],\n  \"templating\": {\n    \"list\": []\n  },\n  \"time\": {\n    \"from\": \"now-1h\",\n    \"to\": \"now\"\n  },\n  \"timepicker\": {},\n  \"timezone\": \"\",\n  \"title\": \"Block Production\",\n  \"uid\": \"3oAjdyJMk\",\n  \"version\": 1,\n  \"weekStart\": \"\"\n}\n"
  },
  {
    "path": "static_files/grafana-config/dashboards/lighthouse/EIP8025ProofEngine.json",
    "content": "{\n  \"__inputs\": [\n    {\n      \"name\": \"DS_PROMETHEUS\",\n      \"label\": \"Prometheus\",\n      \"description\": \"\",\n      \"type\": \"datasource\",\n      \"pluginId\": \"prometheus\",\n      \"pluginName\": \"Prometheus\"\n    }\n  ],\n  \"__elements\": {},\n  \"__requires\": [\n    {\n      \"type\": \"grafana\",\n      \"id\": \"grafana\",\n      \"name\": \"Grafana\",\n      \"version\": \"10.4.1\"\n    },\n    {\n      \"type\": \"datasource\",\n      \"id\": \"prometheus\",\n      \"name\": \"Prometheus\",\n      \"version\": \"1.0.0\"\n    },\n    {\n      \"type\": \"panel\",\n      \"id\": \"timeseries\",\n      \"name\": \"Time series\",\n      \"version\": \"\"\n    },\n    {\n      \"type\": \"panel\",\n      \"id\": \"stat\",\n      \"name\": \"Stat\",\n      \"version\": \"\"\n    }\n  ],\n  \"annotations\": {\n    \"list\": [\n      {\n        \"builtIn\": 1,\n        \"datasource\": { \"type\": \"datasource\", \"uid\": \"grafana\" },\n        \"enable\": true,\n        \"hide\": true,\n        \"iconColor\": \"rgba(0, 211, 255, 1)\",\n        \"name\": \"Annotations & Alerts\",\n        \"type\": \"dashboard\"\n      }\n    ]\n  },\n  \"editable\": true,\n  \"fiscalYearStartMonth\": 0,\n  \"graphTooltip\": 0,\n  \"id\": null,\n  \"links\": [],\n  \"panels\": [\n    {\n      \"collapsed\": false,\n      \"datasource\": { \"type\": \"prometheus\", \"uid\": \"PBFA97CFB590B2093\" },\n      \"gridPos\": { \"h\": 1, \"w\": 24, \"x\": 0, \"y\": 0 },\n      \"id\": 100,\n      \"title\": \"State\",\n      \"type\": \"row\"\n    },\n    {\n      \"datasource\": { \"type\": \"prometheus\", \"uid\": \"PBFA97CFB590B2093\" },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": { \"mode\": \"palette-classic\" },\n          \"custom\": {\n            \"axisBorderShow\": false, \"axisCenteredZero\": false, \"axisColorMode\": \"text\",\n            \"axisLabel\": \"Requests\", \"axisPlacement\": \"auto\", \"barAlignment\": 0,\n            \"drawStyle\": \"line\", \"fillOpacity\": 10, \"gradientMode\": \"none\",\n            \"hideFrom\": { \"legend\": false, \"tooltip\": false, \"viz\": false },\n            \"insertNulls\": false, \"lineInterpolation\": \"linear\", \"lineWidth\": 2,\n            \"pointSize\": 5, \"scaleDistribution\": { \"type\": \"linear\" },\n            \"showPoints\": \"never\", \"spanNulls\": false,\n            \"stacking\": { \"group\": \"A\", \"mode\": \"none\" },\n            \"thresholdsStyle\": { \"mode\": \"off\" }\n          },\n          \"decimals\": 0, \"links\": [], \"mappings\": [], \"min\": 0,\n          \"thresholds\": { \"mode\": \"absolute\", \"steps\": [{ \"color\": \"green\", \"value\": null }] },\n          \"unit\": \"short\"\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": { \"h\": 7, \"w\": 6, \"x\": 0, \"y\": 1 },\n      \"id\": 1,\n      \"options\": {\n        \"legend\": { \"calcs\": [\"lastNotNull\"], \"displayMode\": \"list\", \"placement\": \"bottom\", \"showLegend\": true },\n        \"tooltip\": { \"mode\": \"multi\", \"sort\": \"none\" }\n      },\n      \"targets\": [\n        {\n          \"datasource\": { \"type\": \"prometheus\", \"uid\": \"PBFA97CFB590B2093\" },\n          \"expr\": \"proof_engine_tree_size{instance=~\\\"$Instance\\\"}\",\n          \"legendFormat\": \"{{instance}}\",\n          \"refId\": \"A\"\n        }\n      ],\n      \"title\": \"Tree Size\",\n      \"type\": \"timeseries\"\n    },\n    {\n      \"datasource\": { \"type\": \"prometheus\", \"uid\": \"PBFA97CFB590B2093\" },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": { \"mode\": \"palette-classic\" },\n          \"custom\": {\n            \"axisBorderShow\": false, \"axisCenteredZero\": false, \"axisColorMode\": \"text\",\n            \"axisLabel\": \"\", \"axisPlacement\": \"auto\", \"barAlignment\": 0,\n            \"drawStyle\": \"line\", \"fillOpacity\": 10, \"gradientMode\": \"none\",\n            \"hideFrom\": { \"legend\": false, \"tooltip\": false, \"viz\": false },\n            \"insertNulls\": false, \"lineInterpolation\": \"linear\", \"lineWidth\": 2,\n            \"pointSize\": 5, \"scaleDistribution\": { \"type\": \"linear\" },\n            \"showPoints\": \"never\", \"spanNulls\": false,\n            \"stacking\": { \"group\": \"A\", \"mode\": \"none\" },\n            \"thresholdsStyle\": { \"mode\": \"off\" }\n          },\n          \"decimals\": 0, \"links\": [], \"mappings\": [], \"min\": 0,\n          \"thresholds\": { \"mode\": \"absolute\", \"steps\": [{ \"color\": \"green\", \"value\": null }] },\n          \"unit\": \"short\"\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": { \"h\": 7, \"w\": 6, \"x\": 6, \"y\": 1 },\n      \"id\": 2,\n      \"options\": {\n        \"legend\": { \"calcs\": [\"lastNotNull\"], \"displayMode\": \"list\", \"placement\": \"bottom\", \"showLegend\": true },\n        \"tooltip\": { \"mode\": \"multi\", \"sort\": \"none\" }\n      },\n      \"targets\": [\n        {\n          \"datasource\": { \"type\": \"prometheus\", \"uid\": \"PBFA97CFB590B2093\" },\n          \"expr\": \"proof_engine_buffer_size{instance=~\\\"$Instance\\\"}\",\n          \"legendFormat\": \"{{instance}}\",\n          \"refId\": \"A\"\n        }\n      ],\n      \"title\": \"Buffer Size (Pending Promotion)\",\n      \"type\": \"timeseries\"\n    },\n    {\n      \"datasource\": { \"type\": \"prometheus\", \"uid\": \"PBFA97CFB590B2093\" },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": { \"mode\": \"palette-classic\" },\n          \"custom\": {\n            \"axisBorderShow\": false, \"axisCenteredZero\": false, \"axisColorMode\": \"text\",\n            \"axisLabel\": \"\", \"axisPlacement\": \"auto\", \"barAlignment\": 0,\n            \"drawStyle\": \"line\", \"fillOpacity\": 10, \"gradientMode\": \"none\",\n            \"hideFrom\": { \"legend\": false, \"tooltip\": false, \"viz\": false },\n            \"insertNulls\": false, \"lineInterpolation\": \"linear\", \"lineWidth\": 2,\n            \"pointSize\": 5, \"scaleDistribution\": { \"type\": \"linear\" },\n            \"showPoints\": \"never\", \"spanNulls\": false,\n            \"stacking\": { \"group\": \"A\", \"mode\": \"none\" },\n            \"thresholdsStyle\": { \"mode\": \"off\" }\n          },\n          \"decimals\": 0, \"links\": [], \"mappings\": [], \"min\": 0,\n          \"thresholds\": { \"mode\": \"absolute\", \"steps\": [{ \"color\": \"green\", \"value\": null }] },\n          \"unit\": \"short\"\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": { \"h\": 7, \"w\": 6, \"x\": 12, \"y\": 1 },\n      \"id\": 3,\n      \"options\": {\n        \"legend\": { \"calcs\": [\"lastNotNull\"], \"displayMode\": \"list\", \"placement\": \"bottom\", \"showLegend\": true },\n        \"tooltip\": { \"mode\": \"multi\", \"sort\": \"none\" }\n      },\n      \"targets\": [\n        {\n          \"datasource\": { \"type\": \"prometheus\", \"uid\": \"PBFA97CFB590B2093\" },\n          \"expr\": \"proof_engine_buffered_proof_count{instance=~\\\"$Instance\\\"}\",\n          \"legendFormat\": \"{{instance}}\",\n          \"refId\": \"A\"\n        }\n      ],\n      \"title\": \"Buffered Proofs (Unknown Root)\",\n      \"type\": \"timeseries\"\n    },\n    {\n      \"datasource\": { \"type\": \"prometheus\", \"uid\": \"PBFA97CFB590B2093\" },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": { \"mode\": \"palette-classic\" },\n          \"custom\": {\n            \"axisBorderShow\": false, \"axisCenteredZero\": false, \"axisColorMode\": \"text\",\n            \"axisLabel\": \"\", \"axisPlacement\": \"auto\", \"barAlignment\": 0,\n            \"drawStyle\": \"line\", \"fillOpacity\": 10, \"gradientMode\": \"none\",\n            \"hideFrom\": { \"legend\": false, \"tooltip\": false, \"viz\": false },\n            \"insertNulls\": false, \"lineInterpolation\": \"linear\", \"lineWidth\": 2,\n            \"pointSize\": 5, \"scaleDistribution\": { \"type\": \"linear\" },\n            \"showPoints\": \"never\", \"spanNulls\": false,\n            \"stacking\": { \"group\": \"A\", \"mode\": \"none\" },\n            \"thresholdsStyle\": { \"mode\": \"off\" }\n          },\n          \"decimals\": 0, \"links\": [], \"mappings\": [], \"min\": 0,\n          \"thresholds\": { \"mode\": \"absolute\", \"steps\": [{ \"color\": \"green\", \"value\": null }] },\n          \"unit\": \"short\"\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": { \"h\": 7, \"w\": 6, \"x\": 18, \"y\": 1 },\n      \"id\": 4,\n      \"options\": {\n        \"legend\": { \"calcs\": [\"lastNotNull\"], \"displayMode\": \"list\", \"placement\": \"bottom\", \"showLegend\": true },\n        \"tooltip\": { \"mode\": \"multi\", \"sort\": \"none\" }\n      },\n      \"targets\": [\n        {\n          \"datasource\": { \"type\": \"prometheus\", \"uid\": \"PBFA97CFB590B2093\" },\n          \"expr\": \"proof_engine_missing_proof_count{instance=~\\\"$Instance\\\"}\",\n          \"legendFormat\": \"{{instance}}\",\n          \"refId\": \"A\"\n        }\n      ],\n      \"title\": \"Missing Proof Count\",\n      \"type\": \"timeseries\"\n    },\n    {\n      \"collapsed\": false,\n      \"datasource\": { \"type\": \"prometheus\", \"uid\": \"PBFA97CFB590B2093\" },\n      \"gridPos\": { \"h\": 1, \"w\": 24, \"x\": 0, \"y\": 8 },\n      \"id\": 101,\n      \"title\": \"Throughput\",\n      \"type\": \"row\"\n    },\n    {\n      \"datasource\": { \"type\": \"prometheus\", \"uid\": \"PBFA97CFB590B2093\" },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": { \"mode\": \"palette-classic\" },\n          \"custom\": {\n            \"axisBorderShow\": false, \"axisCenteredZero\": false, \"axisColorMode\": \"text\",\n            \"axisLabel\": \"rate/s\", \"axisPlacement\": \"auto\", \"barAlignment\": 0,\n            \"drawStyle\": \"line\", \"fillOpacity\": 10, \"gradientMode\": \"none\",\n            \"hideFrom\": { \"legend\": false, \"tooltip\": false, \"viz\": false },\n            \"insertNulls\": false, \"lineInterpolation\": \"linear\", \"lineWidth\": 2,\n            \"pointSize\": 5, \"scaleDistribution\": { \"type\": \"linear\" },\n            \"showPoints\": \"never\", \"spanNulls\": false,\n            \"stacking\": { \"group\": \"A\", \"mode\": \"none\" },\n            \"thresholdsStyle\": { \"mode\": \"off\" }\n          },\n          \"links\": [], \"mappings\": [], \"min\": 0,\n          \"thresholds\": { \"mode\": \"absolute\", \"steps\": [{ \"color\": \"green\", \"value\": null }] },\n          \"unit\": \"short\"\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": { \"h\": 7, \"w\": 8, \"x\": 0, \"y\": 9 },\n      \"id\": 5,\n      \"options\": {\n        \"legend\": { \"calcs\": [\"lastNotNull\"], \"displayMode\": \"list\", \"placement\": \"bottom\", \"showLegend\": true },\n        \"tooltip\": { \"mode\": \"multi\", \"sort\": \"none\" }\n      },\n      \"targets\": [\n        {\n          \"datasource\": { \"type\": \"prometheus\", \"uid\": \"PBFA97CFB590B2093\" },\n          \"expr\": \"sum by (instance, proof_type, status) (rate(proof_engine_verifications_total{instance=~\\\"$Instance\\\"}[2m]))\",\n          \"legendFormat\": \"{{instance}} {{proof_type}} {{status}}\",\n          \"refId\": \"A\"\n        }\n      ],\n      \"title\": \"Verification Rate (by type & outcome)\",\n      \"type\": \"timeseries\"\n    },\n    {\n      \"datasource\": { \"type\": \"prometheus\", \"uid\": \"PBFA97CFB590B2093\" },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": { \"mode\": \"palette-classic\" },\n          \"custom\": {\n            \"axisBorderShow\": false, \"axisCenteredZero\": false, \"axisColorMode\": \"text\",\n            \"axisLabel\": \"rate/s\", \"axisPlacement\": \"auto\", \"barAlignment\": 0,\n            \"drawStyle\": \"line\", \"fillOpacity\": 10, \"gradientMode\": \"none\",\n            \"hideFrom\": { \"legend\": false, \"tooltip\": false, \"viz\": false },\n            \"insertNulls\": false, \"lineInterpolation\": \"linear\", \"lineWidth\": 2,\n            \"pointSize\": 5, \"scaleDistribution\": { \"type\": \"linear\" },\n            \"showPoints\": \"never\", \"spanNulls\": false,\n            \"stacking\": { \"group\": \"A\", \"mode\": \"none\" },\n            \"thresholdsStyle\": { \"mode\": \"off\" }\n          },\n          \"links\": [], \"mappings\": [], \"min\": 0,\n          \"thresholds\": { \"mode\": \"absolute\", \"steps\": [{ \"color\": \"green\", \"value\": null }] },\n          \"unit\": \"short\"\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": { \"h\": 7, \"w\": 8, \"x\": 8, \"y\": 9 },\n      \"id\": 6,\n      \"options\": {\n        \"legend\": { \"calcs\": [\"lastNotNull\"], \"displayMode\": \"list\", \"placement\": \"bottom\", \"showLegend\": true },\n        \"tooltip\": { \"mode\": \"multi\", \"sort\": \"none\" }\n      },\n      \"targets\": [\n        {\n          \"datasource\": { \"type\": \"prometheus\", \"uid\": \"PBFA97CFB590B2093\" },\n          \"expr\": \"sum by (instance, proof_type) (rate(proof_engine_requests_total{instance=~\\\"$Instance\\\"}[2m]))\",\n          \"legendFormat\": \"{{instance}} {{proof_type}}\",\n          \"refId\": \"A\"\n        }\n      ],\n      \"title\": \"Proof Request Rate (to Proof Node)\",\n      \"type\": \"timeseries\"\n    },\n    {\n      \"datasource\": { \"type\": \"prometheus\", \"uid\": \"PBFA97CFB590B2093\" },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": { \"mode\": \"palette-classic\" },\n          \"custom\": {\n            \"axisBorderShow\": false, \"axisCenteredZero\": false, \"axisColorMode\": \"text\",\n            \"axisLabel\": \"rate/s\", \"axisPlacement\": \"auto\", \"barAlignment\": 0,\n            \"drawStyle\": \"line\", \"fillOpacity\": 10, \"gradientMode\": \"none\",\n            \"hideFrom\": { \"legend\": false, \"tooltip\": false, \"viz\": false },\n            \"insertNulls\": false, \"lineInterpolation\": \"linear\", \"lineWidth\": 2,\n            \"pointSize\": 5, \"scaleDistribution\": { \"type\": \"linear\" },\n            \"showPoints\": \"never\", \"spanNulls\": false,\n            \"stacking\": { \"group\": \"A\", \"mode\": \"none\" },\n            \"thresholdsStyle\": { \"mode\": \"off\" }\n          },\n          \"links\": [], \"mappings\": [], \"min\": 0,\n          \"thresholds\": { \"mode\": \"absolute\", \"steps\": [{ \"color\": \"green\", \"value\": null }] },\n          \"unit\": \"short\"\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": { \"h\": 7, \"w\": 8, \"x\": 16, \"y\": 9 },\n      \"id\": 7,\n      \"options\": {\n        \"legend\": { \"calcs\": [\"lastNotNull\"], \"displayMode\": \"list\", \"placement\": \"bottom\", \"showLegend\": true },\n        \"tooltip\": { \"mode\": \"multi\", \"sort\": \"none\" }\n      },\n      \"targets\": [\n        {\n          \"datasource\": { \"type\": \"prometheus\", \"uid\": \"PBFA97CFB590B2093\" },\n          \"expr\": \"sum by (instance) (rate(proof_engine_new_payloads_total{instance=~\\\"$Instance\\\"}[2m]))\",\n          \"legendFormat\": \"{{instance}} new_payloads\",\n          \"refId\": \"A\"\n        },\n        {\n          \"datasource\": { \"type\": \"prometheus\", \"uid\": \"PBFA97CFB590B2093\" },\n          \"expr\": \"sum by (instance, status) (rate(proof_engine_forkchoice_updates_total{instance=~\\\"$Instance\\\"}[2m]))\",\n          \"legendFormat\": \"{{instance}} fcu {{status}}\",\n          \"refId\": \"B\"\n        }\n      ],\n      \"title\": \"Engine API Call Rate\",\n      \"type\": \"timeseries\"\n    },\n    {\n      \"collapsed\": false,\n      \"datasource\": { \"type\": \"prometheus\", \"uid\": \"PBFA97CFB590B2093\" },\n      \"gridPos\": { \"h\": 1, \"w\": 24, \"x\": 0, \"y\": 16 },\n      \"id\": 102,\n      \"title\": \"Verification Latency\",\n      \"type\": \"row\"\n    },\n    {\n      \"datasource\": { \"type\": \"prometheus\", \"uid\": \"PBFA97CFB590B2093\" },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": { \"mode\": \"palette-classic\" },\n          \"custom\": {\n            \"axisBorderShow\": false, \"axisCenteredZero\": false, \"axisColorMode\": \"text\",\n            \"axisLabel\": \"seconds\", \"axisPlacement\": \"auto\", \"barAlignment\": 0,\n            \"drawStyle\": \"line\", \"fillOpacity\": 10, \"gradientMode\": \"none\",\n            \"hideFrom\": { \"legend\": false, \"tooltip\": false, \"viz\": false },\n            \"insertNulls\": false, \"lineInterpolation\": \"linear\", \"lineWidth\": 2,\n            \"pointSize\": 5, \"scaleDistribution\": { \"type\": \"linear\" },\n            \"showPoints\": \"never\", \"spanNulls\": false,\n            \"stacking\": { \"group\": \"A\", \"mode\": \"none\" },\n            \"thresholdsStyle\": { \"mode\": \"off\" }\n          },\n          \"links\": [], \"mappings\": [], \"min\": 0,\n          \"thresholds\": { \"mode\": \"absolute\", \"steps\": [{ \"color\": \"green\", \"value\": null }] },\n          \"unit\": \"s\"\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": { \"h\": 7, \"w\": 12, \"x\": 0, \"y\": 17 },\n      \"id\": 8,\n      \"options\": {\n        \"legend\": { \"calcs\": [\"lastNotNull\"], \"displayMode\": \"list\", \"placement\": \"bottom\", \"showLegend\": true },\n        \"tooltip\": { \"mode\": \"multi\", \"sort\": \"none\" }\n      },\n      \"targets\": [\n        {\n          \"datasource\": { \"type\": \"prometheus\", \"uid\": \"PBFA97CFB590B2093\" },\n          \"expr\": \"histogram_quantile(0.50, sum by (le, instance, proof_type) (rate(proof_engine_verification_duration_seconds_bucket{instance=~\\\"$Instance\\\"}[5m])))\",\n          \"legendFormat\": \"p50 {{instance}} {{proof_type}}\",\n          \"refId\": \"A\"\n        },\n        {\n          \"datasource\": { \"type\": \"prometheus\", \"uid\": \"PBFA97CFB590B2093\" },\n          \"expr\": \"histogram_quantile(0.95, sum by (le, instance, proof_type) (rate(proof_engine_verification_duration_seconds_bucket{instance=~\\\"$Instance\\\"}[5m])))\",\n          \"legendFormat\": \"p95 {{instance}} {{proof_type}}\",\n          \"refId\": \"B\"\n        },\n        {\n          \"datasource\": { \"type\": \"prometheus\", \"uid\": \"PBFA97CFB590B2093\" },\n          \"expr\": \"histogram_quantile(0.99, sum by (le, instance, proof_type) (rate(proof_engine_verification_duration_seconds_bucket{instance=~\\\"$Instance\\\"}[5m])))\",\n          \"legendFormat\": \"p99 {{instance}} {{proof_type}}\",\n          \"refId\": \"C\"\n        }\n      ],\n      \"title\": \"Verification Duration Percentiles\",\n      \"type\": \"timeseries\"\n    },\n    {\n      \"datasource\": { \"type\": \"prometheus\", \"uid\": \"PBFA97CFB590B2093\" },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": { \"mode\": \"palette-classic\" },\n          \"custom\": {\n            \"axisBorderShow\": false, \"axisCenteredZero\": false, \"axisColorMode\": \"text\",\n            \"axisLabel\": \"rate/s\", \"axisPlacement\": \"auto\", \"barAlignment\": 0,\n            \"drawStyle\": \"line\", \"fillOpacity\": 10, \"gradientMode\": \"none\",\n            \"hideFrom\": { \"legend\": false, \"tooltip\": false, \"viz\": false },\n            \"insertNulls\": false, \"lineInterpolation\": \"linear\", \"lineWidth\": 2,\n            \"pointSize\": 5, \"scaleDistribution\": { \"type\": \"linear\" },\n            \"showPoints\": \"never\", \"spanNulls\": false,\n            \"stacking\": { \"group\": \"A\", \"mode\": \"none\" },\n            \"thresholdsStyle\": { \"mode\": \"off\" }\n          },\n          \"links\": [], \"mappings\": [], \"min\": 0,\n          \"thresholds\": { \"mode\": \"absolute\", \"steps\": [{ \"color\": \"green\", \"value\": null }] },\n          \"unit\": \"ops\"\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": { \"h\": 7, \"w\": 12, \"x\": 12, \"y\": 17 },\n      \"id\": 9,\n      \"options\": {\n        \"legend\": { \"calcs\": [\"lastNotNull\"], \"displayMode\": \"list\", \"placement\": \"bottom\", \"showLegend\": true },\n        \"tooltip\": { \"mode\": \"multi\", \"sort\": \"none\" }\n      },\n      \"targets\": [\n        {\n          \"datasource\": { \"type\": \"prometheus\", \"uid\": \"PBFA97CFB590B2093\" },\n          \"expr\": \"sum by (instance, proof_type) (rate(proof_engine_verification_duration_seconds_count{instance=~\\\"$Instance\\\"}[2m]))\",\n          \"legendFormat\": \"{{instance}} {{proof_type}}\",\n          \"refId\": \"A\"\n        }\n      ],\n      \"title\": \"Verification Throughput (ops/s)\",\n      \"type\": \"timeseries\"\n    }\n  ],\n  \"refresh\": \"5s\",\n  \"schemaVersion\": 39,\n  \"tags\": [\"lighthouse\", \"eip8025\"],\n  \"templating\": {\n    \"list\": [\n      {\n        \"current\": {},\n        \"datasource\": { \"type\": \"prometheus\", \"uid\": \"PBFA97CFB590B2093\" },\n        \"definition\": \"label_values(proof_engine_new_payloads_total, instance)\",\n        \"hide\": 0,\n        \"includeAll\": true,\n        \"multi\": true,\n        \"name\": \"Instance\",\n        \"options\": [],\n        \"query\": {\n          \"query\": \"label_values(proof_engine_new_payloads_total, instance)\",\n          \"refId\": \"StandardVariableQuery\"\n        },\n        \"refresh\": 2,\n        \"regex\": \"\",\n        \"sort\": 0,\n        \"type\": \"query\",\n        \"label\": \"Instance\"\n      }\n    ]\n  },\n  \"time\": { \"from\": \"now-30m\", \"to\": \"now\" },\n  \"timepicker\": {},\n  \"timezone\": \"\",\n  \"title\": \"EIP-8025 Proof Engine\",\n  \"uid\": \"eip8025-proof-engine\",\n  \"version\": 1,\n  \"weekStart\": \"\"\n}\n"
  },
  {
    "path": "static_files/grafana-config/dashboards/lighthouse/EIP8025ProofSync.json",
    "content": "{\n  \"__inputs\": [\n    {\n      \"name\": \"DS_PROMETHEUS\",\n      \"label\": \"Prometheus\",\n      \"description\": \"\",\n      \"type\": \"datasource\",\n      \"pluginId\": \"prometheus\",\n      \"pluginName\": \"Prometheus\"\n    }\n  ],\n  \"__elements\": {},\n  \"__requires\": [\n    {\n      \"type\": \"grafana\",\n      \"id\": \"grafana\",\n      \"name\": \"Grafana\",\n      \"version\": \"10.4.1\"\n    },\n    {\n      \"type\": \"datasource\",\n      \"id\": \"prometheus\",\n      \"name\": \"Prometheus\",\n      \"version\": \"1.0.0\"\n    },\n    {\n      \"type\": \"panel\",\n      \"id\": \"timeseries\",\n      \"name\": \"Time series\",\n      \"version\": \"\"\n    },\n    {\n      \"type\": \"panel\",\n      \"id\": \"stat\",\n      \"name\": \"Stat\",\n      \"version\": \"\"\n    }\n  ],\n  \"annotations\": {\n    \"list\": [\n      {\n        \"builtIn\": 1,\n        \"datasource\": { \"type\": \"datasource\", \"uid\": \"grafana\" },\n        \"enable\": true,\n        \"hide\": true,\n        \"iconColor\": \"rgba(0, 211, 255, 1)\",\n        \"name\": \"Annotations & Alerts\",\n        \"type\": \"dashboard\"\n      }\n    ]\n  },\n  \"editable\": true,\n  \"fiscalYearStartMonth\": 0,\n  \"graphTooltip\": 0,\n  \"id\": null,\n  \"links\": [],\n  \"panels\": [\n    {\n      \"collapsed\": false,\n      \"datasource\": { \"type\": \"prometheus\", \"uid\": \"PBFA97CFB590B2093\" },\n      \"gridPos\": { \"h\": 1, \"w\": 24, \"x\": 0, \"y\": 0 },\n      \"id\": 100,\n      \"title\": \"State\",\n      \"type\": \"row\"\n    },\n    {\n      \"datasource\": { \"type\": \"prometheus\", \"uid\": \"PBFA97CFB590B2093\" },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": { \"mode\": \"palette-classic\" },\n          \"custom\": {\n            \"axisBorderShow\": false, \"axisCenteredZero\": false, \"axisColorMode\": \"text\",\n            \"axisLabel\": \"\", \"axisPlacement\": \"auto\", \"barAlignment\": 0,\n            \"drawStyle\": \"line\", \"fillOpacity\": 10, \"gradientMode\": \"none\",\n            \"hideFrom\": { \"legend\": false, \"tooltip\": false, \"viz\": false },\n            \"insertNulls\": false, \"lineInterpolation\": \"stepAfter\", \"lineWidth\": 2,\n            \"pointSize\": 5, \"scaleDistribution\": { \"type\": \"linear\" },\n            \"showPoints\": \"never\", \"spanNulls\": false,\n            \"stacking\": { \"group\": \"A\", \"mode\": \"none\" },\n            \"thresholdsStyle\": { \"mode\": \"off\" }\n          },\n          \"decimals\": 0, \"links\": [], \"mappings\": [\n            { \"options\": { \"0\": { \"text\": \"Idle\" }, \"1\": { \"text\": \"Waiting\" }, \"2\": { \"text\": \"Syncing\" } }, \"type\": \"value\" }\n          ],\n          \"min\": 0, \"max\": 2,\n          \"thresholds\": { \"mode\": \"absolute\", \"steps\": [{ \"color\": \"green\", \"value\": null }] },\n          \"unit\": \"short\"\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": { \"h\": 7, \"w\": 8, \"x\": 0, \"y\": 1 },\n      \"id\": 1,\n      \"options\": {\n        \"legend\": { \"calcs\": [\"lastNotNull\"], \"displayMode\": \"list\", \"placement\": \"bottom\", \"showLegend\": true },\n        \"tooltip\": { \"mode\": \"multi\", \"sort\": \"none\" }\n      },\n      \"targets\": [\n        {\n          \"datasource\": { \"type\": \"prometheus\", \"uid\": \"PBFA97CFB590B2093\" },\n          \"expr\": \"proof_sync_state{instance=~\\\"$Instance\\\"}\",\n          \"legendFormat\": \"{{instance}}\",\n          \"refId\": \"A\"\n        }\n      ],\n      \"title\": \"Proof Sync State (0=Idle, 1=Waiting, 2=Syncing)\",\n      \"type\": \"timeseries\"\n    },\n    {\n      \"datasource\": { \"type\": \"prometheus\", \"uid\": \"PBFA97CFB590B2093\" },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": { \"mode\": \"palette-classic\" },\n          \"custom\": {\n            \"axisBorderShow\": false, \"axisCenteredZero\": false, \"axisColorMode\": \"text\",\n            \"axisLabel\": \"Peers\", \"axisPlacement\": \"auto\", \"barAlignment\": 0,\n            \"drawStyle\": \"line\", \"fillOpacity\": 10, \"gradientMode\": \"none\",\n            \"hideFrom\": { \"legend\": false, \"tooltip\": false, \"viz\": false },\n            \"insertNulls\": false, \"lineInterpolation\": \"linear\", \"lineWidth\": 2,\n            \"pointSize\": 5, \"scaleDistribution\": { \"type\": \"linear\" },\n            \"showPoints\": \"never\", \"spanNulls\": false,\n            \"stacking\": { \"group\": \"A\", \"mode\": \"none\" },\n            \"thresholdsStyle\": { \"mode\": \"off\" }\n          },\n          \"decimals\": 0, \"links\": [], \"mappings\": [], \"min\": 0,\n          \"thresholds\": { \"mode\": \"absolute\", \"steps\": [{ \"color\": \"green\", \"value\": null }] },\n          \"unit\": \"short\"\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": { \"h\": 7, \"w\": 8, \"x\": 8, \"y\": 1 },\n      \"id\": 2,\n      \"options\": {\n        \"legend\": { \"calcs\": [\"lastNotNull\"], \"displayMode\": \"list\", \"placement\": \"bottom\", \"showLegend\": true },\n        \"tooltip\": { \"mode\": \"multi\", \"sort\": \"none\" }\n      },\n      \"targets\": [\n        {\n          \"datasource\": { \"type\": \"prometheus\", \"uid\": \"PBFA97CFB590B2093\" },\n          \"expr\": \"proof_sync_peer_count{instance=~\\\"$Instance\\\"}\",\n          \"legendFormat\": \"{{instance}}\",\n          \"refId\": \"A\"\n        }\n      ],\n      \"title\": \"Proof-Capable Peer Count\",\n      \"type\": \"timeseries\"\n    },\n    {\n      \"datasource\": { \"type\": \"prometheus\", \"uid\": \"PBFA97CFB590B2093\" },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": { \"mode\": \"palette-classic\" },\n          \"custom\": {\n            \"axisBorderShow\": false, \"axisCenteredZero\": false, \"axisColorMode\": \"text\",\n            \"axisLabel\": \"\", \"axisPlacement\": \"auto\", \"barAlignment\": 0,\n            \"drawStyle\": \"line\", \"fillOpacity\": 10, \"gradientMode\": \"none\",\n            \"hideFrom\": { \"legend\": false, \"tooltip\": false, \"viz\": false },\n            \"insertNulls\": false, \"lineInterpolation\": \"stepAfter\", \"lineWidth\": 2,\n            \"pointSize\": 5, \"scaleDistribution\": { \"type\": \"linear\" },\n            \"showPoints\": \"never\", \"spanNulls\": false,\n            \"stacking\": { \"group\": \"A\", \"mode\": \"none\" },\n            \"thresholdsStyle\": { \"mode\": \"off\" }\n          },\n          \"decimals\": 0, \"links\": [], \"mappings\": [], \"min\": 0, \"max\": 1,\n          \"thresholds\": { \"mode\": \"absolute\", \"steps\": [{ \"color\": \"green\", \"value\": null }] },\n          \"unit\": \"short\"\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": { \"h\": 7, \"w\": 8, \"x\": 16, \"y\": 1 },\n      \"id\": 3,\n      \"options\": {\n        \"legend\": { \"calcs\": [\"lastNotNull\"], \"displayMode\": \"list\", \"placement\": \"bottom\", \"showLegend\": true },\n        \"tooltip\": { \"mode\": \"multi\", \"sort\": \"none\" }\n      },\n      \"targets\": [\n        {\n          \"datasource\": { \"type\": \"prometheus\", \"uid\": \"PBFA97CFB590B2093\" },\n          \"expr\": \"proof_sync_range_request_in_flight{instance=~\\\"$Instance\\\"}\",\n          \"legendFormat\": \"{{instance}} range\",\n          \"refId\": \"A\"\n        },\n        {\n          \"datasource\": { \"type\": \"prometheus\", \"uid\": \"PBFA97CFB590B2093\" },\n          \"expr\": \"proof_sync_root_request_in_flight{instance=~\\\"$Instance\\\"}\",\n          \"legendFormat\": \"{{instance}} root\",\n          \"refId\": \"B\"\n        }\n      ],\n      \"title\": \"In-Flight Requests\",\n      \"type\": \"timeseries\"\n    },\n    {\n      \"collapsed\": false,\n      \"datasource\": { \"type\": \"prometheus\", \"uid\": \"PBFA97CFB590B2093\" },\n      \"gridPos\": { \"h\": 1, \"w\": 24, \"x\": 0, \"y\": 8 },\n      \"id\": 101,\n      \"title\": \"RPC Activity\",\n      \"type\": \"row\"\n    },\n    {\n      \"datasource\": { \"type\": \"prometheus\", \"uid\": \"PBFA97CFB590B2093\" },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": { \"mode\": \"palette-classic\" },\n          \"custom\": {\n            \"axisBorderShow\": false, \"axisCenteredZero\": false, \"axisColorMode\": \"text\",\n            \"axisLabel\": \"rate/s\", \"axisPlacement\": \"auto\", \"barAlignment\": 0,\n            \"drawStyle\": \"line\", \"fillOpacity\": 10, \"gradientMode\": \"none\",\n            \"hideFrom\": { \"legend\": false, \"tooltip\": false, \"viz\": false },\n            \"insertNulls\": false, \"lineInterpolation\": \"linear\", \"lineWidth\": 2,\n            \"pointSize\": 5, \"scaleDistribution\": { \"type\": \"linear\" },\n            \"showPoints\": \"never\", \"spanNulls\": false,\n            \"stacking\": { \"group\": \"A\", \"mode\": \"none\" },\n            \"thresholdsStyle\": { \"mode\": \"off\" }\n          },\n          \"links\": [], \"mappings\": [], \"min\": 0,\n          \"thresholds\": { \"mode\": \"absolute\", \"steps\": [{ \"color\": \"green\", \"value\": null }] },\n          \"unit\": \"short\"\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": { \"h\": 7, \"w\": 8, \"x\": 0, \"y\": 9 },\n      \"id\": 4,\n      \"options\": {\n        \"legend\": { \"calcs\": [\"lastNotNull\"], \"displayMode\": \"list\", \"placement\": \"bottom\", \"showLegend\": true },\n        \"tooltip\": { \"mode\": \"multi\", \"sort\": \"none\" }\n      },\n      \"targets\": [\n        {\n          \"datasource\": { \"type\": \"prometheus\", \"uid\": \"PBFA97CFB590B2093\" },\n          \"expr\": \"sum by (instance, result) (rate(proof_sync_range_requests_total{instance=~\\\"$Instance\\\"}[2m]))\",\n          \"legendFormat\": \"{{instance}} {{result}}\",\n          \"refId\": \"A\"\n        }\n      ],\n      \"title\": \"ByRange Request Rate\",\n      \"type\": \"timeseries\"\n    },\n    {\n      \"datasource\": { \"type\": \"prometheus\", \"uid\": \"PBFA97CFB590B2093\" },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": { \"mode\": \"palette-classic\" },\n          \"custom\": {\n            \"axisBorderShow\": false, \"axisCenteredZero\": false, \"axisColorMode\": \"text\",\n            \"axisLabel\": \"rate/s\", \"axisPlacement\": \"auto\", \"barAlignment\": 0,\n            \"drawStyle\": \"line\", \"fillOpacity\": 10, \"gradientMode\": \"none\",\n            \"hideFrom\": { \"legend\": false, \"tooltip\": false, \"viz\": false },\n            \"insertNulls\": false, \"lineInterpolation\": \"linear\", \"lineWidth\": 2,\n            \"pointSize\": 5, \"scaleDistribution\": { \"type\": \"linear\" },\n            \"showPoints\": \"never\", \"spanNulls\": false,\n            \"stacking\": { \"group\": \"A\", \"mode\": \"none\" },\n            \"thresholdsStyle\": { \"mode\": \"off\" }\n          },\n          \"links\": [], \"mappings\": [], \"min\": 0,\n          \"thresholds\": { \"mode\": \"absolute\", \"steps\": [{ \"color\": \"green\", \"value\": null }] },\n          \"unit\": \"short\"\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": { \"h\": 7, \"w\": 8, \"x\": 8, \"y\": 9 },\n      \"id\": 5,\n      \"options\": {\n        \"legend\": { \"calcs\": [\"lastNotNull\"], \"displayMode\": \"list\", \"placement\": \"bottom\", \"showLegend\": true },\n        \"tooltip\": { \"mode\": \"multi\", \"sort\": \"none\" }\n      },\n      \"targets\": [\n        {\n          \"datasource\": { \"type\": \"prometheus\", \"uid\": \"PBFA97CFB590B2093\" },\n          \"expr\": \"sum by (instance, result) (rate(proof_sync_root_requests_total{instance=~\\\"$Instance\\\"}[2m]))\",\n          \"legendFormat\": \"{{instance}} {{result}}\",\n          \"refId\": \"A\"\n        }\n      ],\n      \"title\": \"ByRoot Request Rate\",\n      \"type\": \"timeseries\"\n    },\n    {\n      \"datasource\": { \"type\": \"prometheus\", \"uid\": \"PBFA97CFB590B2093\" },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": { \"mode\": \"palette-classic\" },\n          \"custom\": {\n            \"axisBorderShow\": false, \"axisCenteredZero\": false, \"axisColorMode\": \"text\",\n            \"axisLabel\": \"rate/s\", \"axisPlacement\": \"auto\", \"barAlignment\": 0,\n            \"drawStyle\": \"line\", \"fillOpacity\": 10, \"gradientMode\": \"none\",\n            \"hideFrom\": { \"legend\": false, \"tooltip\": false, \"viz\": false },\n            \"insertNulls\": false, \"lineInterpolation\": \"linear\", \"lineWidth\": 2,\n            \"pointSize\": 5, \"scaleDistribution\": { \"type\": \"linear\" },\n            \"showPoints\": \"never\", \"spanNulls\": false,\n            \"stacking\": { \"group\": \"A\", \"mode\": \"none\" },\n            \"thresholdsStyle\": { \"mode\": \"off\" }\n          },\n          \"links\": [], \"mappings\": [], \"min\": 0,\n          \"thresholds\": { \"mode\": \"absolute\", \"steps\": [{ \"color\": \"green\", \"value\": null }] },\n          \"unit\": \"short\"\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": { \"h\": 7, \"w\": 8, \"x\": 16, \"y\": 9 },\n      \"id\": 6,\n      \"options\": {\n        \"legend\": { \"calcs\": [\"lastNotNull\"], \"displayMode\": \"list\", \"placement\": \"bottom\", \"showLegend\": true },\n        \"tooltip\": { \"mode\": \"multi\", \"sort\": \"none\" }\n      },\n      \"targets\": [\n        {\n          \"datasource\": { \"type\": \"prometheus\", \"uid\": \"PBFA97CFB590B2093\" },\n          \"expr\": \"sum by (instance) (rate(proof_sync_status_requests_total{instance=~\\\"$Instance\\\"}[2m]))\",\n          \"legendFormat\": \"{{instance}} requests\",\n          \"refId\": \"A\"\n        },\n        {\n          \"datasource\": { \"type\": \"prometheus\", \"uid\": \"PBFA97CFB590B2093\" },\n          \"expr\": \"sum by (instance, verified) (rate(proof_sync_status_responses_total{instance=~\\\"$Instance\\\"}[2m]))\",\n          \"legendFormat\": \"{{instance}} responses verified={{verified}}\",\n          \"refId\": \"B\"\n        }\n      ],\n      \"title\": \"Status Request/Response Rate\",\n      \"type\": \"timeseries\"\n    },\n    {\n      \"collapsed\": false,\n      \"datasource\": { \"type\": \"prometheus\", \"uid\": \"PBFA97CFB590B2093\" },\n      \"gridPos\": { \"h\": 1, \"w\": 24, \"x\": 0, \"y\": 16 },\n      \"id\": 102,\n      \"title\": \"Peer Events\",\n      \"type\": \"row\"\n    },\n    {\n      \"datasource\": { \"type\": \"prometheus\", \"uid\": \"PBFA97CFB590B2093\" },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": { \"mode\": \"palette-classic\" },\n          \"custom\": {\n            \"axisBorderShow\": false, \"axisCenteredZero\": false, \"axisColorMode\": \"text\",\n            \"axisLabel\": \"rate/s\", \"axisPlacement\": \"auto\", \"barAlignment\": 0,\n            \"drawStyle\": \"line\", \"fillOpacity\": 10, \"gradientMode\": \"none\",\n            \"hideFrom\": { \"legend\": false, \"tooltip\": false, \"viz\": false },\n            \"insertNulls\": false, \"lineInterpolation\": \"linear\", \"lineWidth\": 2,\n            \"pointSize\": 5, \"scaleDistribution\": { \"type\": \"linear\" },\n            \"showPoints\": \"never\", \"spanNulls\": false,\n            \"stacking\": { \"group\": \"A\", \"mode\": \"none\" },\n            \"thresholdsStyle\": { \"mode\": \"off\" }\n          },\n          \"links\": [], \"mappings\": [], \"min\": 0,\n          \"thresholds\": { \"mode\": \"absolute\", \"steps\": [{ \"color\": \"green\", \"value\": null }] },\n          \"unit\": \"short\"\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": { \"h\": 7, \"w\": 12, \"x\": 0, \"y\": 17 },\n      \"id\": 7,\n      \"options\": {\n        \"legend\": { \"calcs\": [\"lastNotNull\"], \"displayMode\": \"list\", \"placement\": \"bottom\", \"showLegend\": true },\n        \"tooltip\": { \"mode\": \"multi\", \"sort\": \"none\" }\n      },\n      \"targets\": [\n        {\n          \"datasource\": { \"type\": \"prometheus\", \"uid\": \"PBFA97CFB590B2093\" },\n          \"expr\": \"sum by (instance) (rate(proof_sync_peer_disconnects_total{instance=~\\\"$Instance\\\"}[2m]))\",\n          \"legendFormat\": \"{{instance}}\",\n          \"refId\": \"A\"\n        }\n      ],\n      \"title\": \"Proof-Capable Peer Disconnect Rate\",\n      \"type\": \"timeseries\"\n    },\n    {\n      \"datasource\": { \"type\": \"prometheus\", \"uid\": \"PBFA97CFB590B2093\" },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": { \"mode\": \"palette-classic\" },\n          \"custom\": {\n            \"axisBorderShow\": false, \"axisCenteredZero\": false, \"axisColorMode\": \"text\",\n            \"axisLabel\": \"\", \"axisPlacement\": \"auto\", \"barAlignment\": 0,\n            \"drawStyle\": \"bars\", \"fillOpacity\": 80, \"gradientMode\": \"none\",\n            \"hideFrom\": { \"legend\": false, \"tooltip\": false, \"viz\": false },\n            \"insertNulls\": false, \"lineInterpolation\": \"linear\", \"lineWidth\": 1,\n            \"pointSize\": 5, \"scaleDistribution\": { \"type\": \"linear\" },\n            \"showPoints\": \"never\", \"spanNulls\": false,\n            \"stacking\": { \"group\": \"A\", \"mode\": \"normal\" },\n            \"thresholdsStyle\": { \"mode\": \"off\" }\n          },\n          \"links\": [], \"mappings\": [], \"min\": 0,\n          \"thresholds\": { \"mode\": \"absolute\", \"steps\": [{ \"color\": \"green\", \"value\": null }] },\n          \"unit\": \"short\"\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": { \"h\": 7, \"w\": 12, \"x\": 12, \"y\": 17 },\n      \"id\": 8,\n      \"options\": {\n        \"legend\": { \"calcs\": [\"lastNotNull\"], \"displayMode\": \"list\", \"placement\": \"bottom\", \"showLegend\": true },\n        \"tooltip\": { \"mode\": \"multi\", \"sort\": \"none\" }\n      },\n      \"targets\": [\n        {\n          \"datasource\": { \"type\": \"prometheus\", \"uid\": \"PBFA97CFB590B2093\" },\n          \"expr\": \"sum by (instance, verified) (increase(proof_sync_status_responses_total{instance=~\\\"$Instance\\\"}[5m]))\",\n          \"legendFormat\": \"{{instance}} verified={{verified}}\",\n          \"refId\": \"A\"\n        }\n      ],\n      \"title\": \"Status Responses (verified vs unverified, 5m window)\",\n      \"type\": \"timeseries\"\n    }\n  ],\n  \"refresh\": \"5s\",\n  \"schemaVersion\": 39,\n  \"tags\": [\"lighthouse\", \"eip8025\"],\n  \"templating\": {\n    \"list\": [\n      {\n        \"current\": {},\n        \"datasource\": { \"type\": \"prometheus\", \"uid\": \"PBFA97CFB590B2093\" },\n        \"definition\": \"label_values(proof_sync_state, instance)\",\n        \"hide\": 0,\n        \"includeAll\": true,\n        \"multi\": true,\n        \"name\": \"Instance\",\n        \"options\": [],\n        \"query\": {\n          \"query\": \"label_values(proof_sync_state, instance)\",\n          \"refId\": \"StandardVariableQuery\"\n        },\n        \"refresh\": 2,\n        \"regex\": \"\",\n        \"sort\": 0,\n        \"type\": \"query\",\n        \"label\": \"Instance\"\n      }\n    ]\n  },\n  \"time\": { \"from\": \"now-30m\", \"to\": \"now\" },\n  \"timepicker\": {},\n  \"timezone\": \"\",\n  \"title\": \"EIP-8025 Proof Sync\",\n  \"uid\": \"eip8025-proof-sync\",\n  \"version\": 1,\n  \"weekStart\": \"\"\n}\n"
  },
  {
    "path": "static_files/grafana-config/dashboards/lighthouse/ForkChoice.json",
    "content": "{\n  \"__inputs\": [\n    {\n      \"name\": \"DS_PROMETHEUS\",\n      \"label\": \"Prometheus\",\n      \"description\": \"\",\n      \"type\": \"datasource\",\n      \"pluginId\": \"prometheus\",\n      \"pluginName\": \"Prometheus\"\n    }\n  ],\n  \"__elements\": {},\n  \"__requires\": [\n    {\n      \"type\": \"grafana\",\n      \"id\": \"grafana\",\n      \"name\": \"Grafana\",\n      \"version\": \"10.4.1\"\n    },\n    {\n      \"type\": \"datasource\",\n      \"id\": \"prometheus\",\n      \"name\": \"Prometheus\",\n      \"version\": \"1.0.0\"\n    },\n    {\n      \"type\": \"panel\",\n      \"id\": \"text\",\n      \"name\": \"Text\",\n      \"version\": \"\"\n    },\n    {\n      \"type\": \"panel\",\n      \"id\": \"timeseries\",\n      \"name\": \"Time series\",\n      \"version\": \"\"\n    }\n  ],\n  \"annotations\": {\n    \"list\": [\n      {\n        \"builtIn\": 1,\n        \"datasource\": {\n          \"type\": \"datasource\",\n          \"uid\": \"grafana\"\n        },\n        \"enable\": true,\n        \"hide\": true,\n        \"iconColor\": \"rgba(0, 211, 255, 1)\",\n        \"name\": \"Annotations & Alerts\",\n        \"type\": \"dashboard\"\n      }\n    ]\n  },\n  \"editable\": true,\n  \"fiscalYearStartMonth\": 0,\n  \"graphTooltip\": 0,\n  \"id\": null,\n  \"links\": [],\n  \"panels\": [\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"gridPos\": {\n        \"h\": 6,\n        \"w\": 9,\n        \"x\": 0,\n        \"y\": 0\n      },\n      \"id\": 11,\n      \"options\": {\n        \"code\": {\n          \"language\": \"plaintext\",\n          \"showLineNumbers\": false,\n          \"showMiniMap\": false\n        },\n        \"content\": \"\\n# Fork Choice Metrics\\n\\nMetrics collected regarding the LMD GHOST fork choice function.\\n\\nInvovles the `BeaconChain` analysing all non-finalized fork blocks and choosing a winning head block. Utilizes the \\\"reduced tree\\\" fork choice method.\\n\\nCollected from the [`beacon_chain`](https://github.com/sigp/lighthouse/tree/master/beacon_node/beacon_chain) and [`lmd_ghost`](https://github.com/sigp/lighthouse/tree/master/eth2/lmd_ghost) crates.\\n\\n\\n\\n\",\n        \"mode\": \"markdown\"\n      },\n      \"pluginVersion\": \"10.4.1\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"refId\": \"A\"\n        }\n      ],\n      \"transparent\": true,\n      \"type\": \"text\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"description\": \"The `BeaconChain::fork_choice` function.\",\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"palette-classic\"\n          },\n          \"custom\": {\n            \"axisBorderShow\": false,\n            \"axisCenteredZero\": false,\n            \"axisColorMode\": \"text\",\n            \"axisLabel\": \"\",\n            \"axisPlacement\": \"auto\",\n            \"barAlignment\": 0,\n            \"drawStyle\": \"line\",\n            \"fillOpacity\": 10,\n            \"gradientMode\": \"none\",\n            \"hideFrom\": {\n              \"legend\": false,\n              \"tooltip\": false,\n              \"viz\": false\n            },\n            \"insertNulls\": false,\n            \"lineInterpolation\": \"linear\",\n            \"lineWidth\": 1,\n            \"pointSize\": 5,\n            \"scaleDistribution\": {\n              \"type\": \"linear\"\n            },\n            \"showPoints\": \"never\",\n            \"spanNulls\": false,\n            \"stacking\": {\n              \"group\": \"A\",\n              \"mode\": \"none\"\n            },\n            \"thresholdsStyle\": {\n              \"mode\": \"off\"\n            }\n          },\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\",\n                \"value\": null\n              },\n              {\n                \"color\": \"red\",\n                \"value\": 80\n              }\n            ]\n          },\n          \"unit\": \"s\"\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 6,\n        \"w\": 15,\n        \"x\": 9,\n        \"y\": 0\n      },\n      \"id\": 2,\n      \"options\": {\n        \"legend\": {\n          \"calcs\": [],\n          \"displayMode\": \"list\",\n          \"placement\": \"bottom\",\n          \"showLegend\": false\n        },\n        \"tooltip\": {\n          \"mode\": \"multi\",\n          \"sort\": \"none\"\n        }\n      },\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"expr\": \"rate(beacon_fork_choice_seconds_sum[5m])\\n/\\nrate(beacon_fork_choice_seconds_count[5m])\",\n          \"format\": \"time_series\",\n          \"intervalFactor\": 1,\n          \"refId\": \"A\"\n        }\n      ],\n      \"title\": \"Full Fork Choice Runtime\",\n      \"transparent\": true,\n      \"type\": \"timeseries\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"gridPos\": {\n        \"h\": 2,\n        \"w\": 15,\n        \"x\": 0,\n        \"y\": 6\n      },\n      \"id\": 27,\n      \"options\": {\n        \"code\": {\n          \"language\": \"plaintext\",\n          \"showLineNumbers\": false,\n          \"showMiniMap\": false\n        },\n        \"content\": \"\\n### Core find_head() function\\n\\n\\nThe core function which reads the block tree and finds a winning block.\\n\",\n        \"mode\": \"markdown\"\n      },\n      \"pluginVersion\": \"10.4.1\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"refId\": \"A\"\n        }\n      ],\n      \"transparent\": true,\n      \"type\": \"text\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"gridPos\": {\n        \"h\": 2,\n        \"w\": 8,\n        \"x\": 15,\n        \"y\": 6\n      },\n      \"id\": 14,\n      \"options\": {\n        \"code\": {\n          \"language\": \"plaintext\",\n          \"showLineNumbers\": false,\n          \"showMiniMap\": false\n        },\n        \"content\": \"\\n### Usage rates (per minute)\\n\\n\\nRequests, head changes and re-org count.\",\n        \"mode\": \"markdown\"\n      },\n      \"pluginVersion\": \"10.4.1\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"refId\": \"A\"\n        }\n      ],\n      \"transparent\": true,\n      \"type\": \"text\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"palette-classic\"\n          },\n          \"custom\": {\n            \"axisBorderShow\": false,\n            \"axisCenteredZero\": false,\n            \"axisColorMode\": \"text\",\n            \"axisLabel\": \"\",\n            \"axisPlacement\": \"auto\",\n            \"barAlignment\": 0,\n            \"drawStyle\": \"line\",\n            \"fillOpacity\": 10,\n            \"gradientMode\": \"none\",\n            \"hideFrom\": {\n              \"legend\": false,\n              \"tooltip\": false,\n              \"viz\": false\n            },\n            \"insertNulls\": false,\n            \"lineInterpolation\": \"linear\",\n            \"lineWidth\": 1,\n            \"pointSize\": 5,\n            \"scaleDistribution\": {\n              \"type\": \"linear\"\n            },\n            \"showPoints\": \"never\",\n            \"spanNulls\": false,\n            \"stacking\": {\n              \"group\": \"A\",\n              \"mode\": \"none\"\n            },\n            \"thresholdsStyle\": {\n              \"mode\": \"off\"\n            }\n          },\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\",\n                \"value\": null\n              },\n              {\n                \"color\": \"red\",\n                \"value\": 80\n              }\n            ]\n          },\n          \"unit\": \"s\"\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 6,\n        \"w\": 15,\n        \"x\": 0,\n        \"y\": 8\n      },\n      \"id\": 3,\n      \"options\": {\n        \"legend\": {\n          \"calcs\": [],\n          \"displayMode\": \"list\",\n          \"placement\": \"bottom\",\n          \"showLegend\": false\n        },\n        \"tooltip\": {\n          \"mode\": \"multi\",\n          \"sort\": \"none\"\n        }\n      },\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"expr\": \"rate(beacon_fork_choice_find_head_seconds_sum[5m])\\n/\\nrate(beacon_fork_choice_find_head_seconds_count[5m])\",\n          \"format\": \"time_series\",\n          \"intervalFactor\": 1,\n          \"refId\": \"A\"\n        }\n      ],\n      \"title\": \"Core find_head() Function\",\n      \"type\": \"timeseries\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"palette-classic\"\n          },\n          \"custom\": {\n            \"axisBorderShow\": false,\n            \"axisCenteredZero\": false,\n            \"axisColorMode\": \"text\",\n            \"axisLabel\": \"Requests\",\n            \"axisPlacement\": \"auto\",\n            \"barAlignment\": 0,\n            \"drawStyle\": \"line\",\n            \"fillOpacity\": 10,\n            \"gradientMode\": \"none\",\n            \"hideFrom\": {\n              \"legend\": false,\n              \"tooltip\": false,\n              \"viz\": false\n            },\n            \"insertNulls\": false,\n            \"lineInterpolation\": \"linear\",\n            \"lineWidth\": 1,\n            \"pointSize\": 5,\n            \"scaleDistribution\": {\n              \"type\": \"linear\"\n            },\n            \"showPoints\": \"never\",\n            \"spanNulls\": false,\n            \"stacking\": {\n              \"group\": \"A\",\n              \"mode\": \"none\"\n            },\n            \"thresholdsStyle\": {\n              \"mode\": \"off\"\n            }\n          },\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\",\n                \"value\": null\n              },\n              {\n                \"color\": \"red\",\n                \"value\": 80\n              }\n            ]\n          },\n          \"unit\": \"none\"\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 6,\n        \"w\": 9,\n        \"x\": 15,\n        \"y\": 8\n      },\n      \"id\": 22,\n      \"options\": {\n        \"legend\": {\n          \"calcs\": [],\n          \"displayMode\": \"list\",\n          \"placement\": \"bottom\",\n          \"showLegend\": false\n        },\n        \"tooltip\": {\n          \"mode\": \"multi\",\n          \"sort\": \"none\"\n        }\n      },\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"expr\": \"increase(beacon_fork_choice_requests_total [1m])\",\n          \"format\": \"time_series\",\n          \"intervalFactor\": 1,\n          \"refId\": \"A\"\n        }\n      ],\n      \"title\": \"Fork Choice Requests per Minute\",\n      \"type\": \"timeseries\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"gridPos\": {\n        \"h\": 2,\n        \"w\": 15,\n        \"x\": 0,\n        \"y\": 14\n      },\n      \"id\": 18,\n      \"options\": {\n        \"code\": {\n          \"language\": \"plaintext\",\n          \"showLineNumbers\": false,\n          \"showMiniMap\": false\n        },\n        \"content\": \"\\n### Block fork-choice processing times\\n\\n\\nThe time it takes to update the fork-choice block-graph with a block (and all included attestations). Does not find the head.\\n\",\n        \"mode\": \"markdown\"\n      },\n      \"pluginVersion\": \"10.4.1\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"refId\": \"A\"\n        }\n      ],\n      \"transparent\": true,\n      \"type\": \"text\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"palette-classic\"\n          },\n          \"custom\": {\n            \"axisBorderShow\": false,\n            \"axisCenteredZero\": false,\n            \"axisColorMode\": \"text\",\n            \"axisLabel\": \"Requests\",\n            \"axisPlacement\": \"auto\",\n            \"barAlignment\": 0,\n            \"drawStyle\": \"line\",\n            \"fillOpacity\": 10,\n            \"gradientMode\": \"none\",\n            \"hideFrom\": {\n              \"legend\": false,\n              \"tooltip\": false,\n              \"viz\": false\n            },\n            \"insertNulls\": false,\n            \"lineInterpolation\": \"linear\",\n            \"lineWidth\": 1,\n            \"pointSize\": 5,\n            \"scaleDistribution\": {\n              \"type\": \"linear\"\n            },\n            \"showPoints\": \"never\",\n            \"spanNulls\": false,\n            \"stacking\": {\n              \"group\": \"A\",\n              \"mode\": \"none\"\n            },\n            \"thresholdsStyle\": {\n              \"mode\": \"off\"\n            }\n          },\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\",\n                \"value\": null\n              },\n              {\n                \"color\": \"red\",\n                \"value\": 80\n              }\n            ]\n          },\n          \"unit\": \"none\"\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 6,\n        \"w\": 9,\n        \"x\": 15,\n        \"y\": 14\n      },\n      \"id\": 15,\n      \"options\": {\n        \"legend\": {\n          \"calcs\": [],\n          \"displayMode\": \"list\",\n          \"placement\": \"bottom\",\n          \"showLegend\": false\n        },\n        \"tooltip\": {\n          \"mode\": \"multi\",\n          \"sort\": \"none\"\n        }\n      },\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"expr\": \"increase(beacon_fork_choice_changed_head_total [1m])\",\n          \"format\": \"time_series\",\n          \"intervalFactor\": 1,\n          \"refId\": \"A\"\n        }\n      ],\n      \"title\": \"Head Changes per Minute\",\n      \"type\": \"timeseries\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"palette-classic\"\n          },\n          \"custom\": {\n            \"axisBorderShow\": false,\n            \"axisCenteredZero\": false,\n            \"axisColorMode\": \"text\",\n            \"axisLabel\": \"\",\n            \"axisPlacement\": \"auto\",\n            \"barAlignment\": 0,\n            \"drawStyle\": \"line\",\n            \"fillOpacity\": 10,\n            \"gradientMode\": \"none\",\n            \"hideFrom\": {\n              \"legend\": false,\n              \"tooltip\": false,\n              \"viz\": false\n            },\n            \"insertNulls\": false,\n            \"lineInterpolation\": \"linear\",\n            \"lineWidth\": 1,\n            \"pointSize\": 5,\n            \"scaleDistribution\": {\n              \"type\": \"linear\"\n            },\n            \"showPoints\": \"never\",\n            \"spanNulls\": false,\n            \"stacking\": {\n              \"group\": \"A\",\n              \"mode\": \"none\"\n            },\n            \"thresholdsStyle\": {\n              \"mode\": \"off\"\n            }\n          },\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\",\n                \"value\": null\n              },\n              {\n                \"color\": \"red\",\n                \"value\": 80\n              }\n            ]\n          },\n          \"unit\": \"s\"\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 6,\n        \"w\": 15,\n        \"x\": 0,\n        \"y\": 16\n      },\n      \"id\": 17,\n      \"options\": {\n        \"legend\": {\n          \"calcs\": [],\n          \"displayMode\": \"list\",\n          \"placement\": \"bottom\",\n          \"showLegend\": false\n        },\n        \"tooltip\": {\n          \"mode\": \"multi\",\n          \"sort\": \"none\"\n        }\n      },\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"expr\": \"rate(beacon_fork_choice_process_block_seconds_sum[5m])\\n/\\nrate(beacon_fork_choice_process_block_seconds_count[5m])\",\n          \"format\": \"time_series\",\n          \"intervalFactor\": 1,\n          \"refId\": \"A\"\n        }\n      ],\n      \"title\": \"Fork Choice Process Block\",\n      \"type\": \"timeseries\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"palette-classic\"\n          },\n          \"custom\": {\n            \"axisBorderShow\": false,\n            \"axisCenteredZero\": false,\n            \"axisColorMode\": \"text\",\n            \"axisLabel\": \"Requests\",\n            \"axisPlacement\": \"auto\",\n            \"barAlignment\": 0,\n            \"drawStyle\": \"line\",\n            \"fillOpacity\": 10,\n            \"gradientMode\": \"none\",\n            \"hideFrom\": {\n              \"legend\": false,\n              \"tooltip\": false,\n              \"viz\": false\n            },\n            \"insertNulls\": false,\n            \"lineInterpolation\": \"linear\",\n            \"lineWidth\": 1,\n            \"pointSize\": 5,\n            \"scaleDistribution\": {\n              \"type\": \"linear\"\n            },\n            \"showPoints\": \"never\",\n            \"spanNulls\": false,\n            \"stacking\": {\n              \"group\": \"A\",\n              \"mode\": \"none\"\n            },\n            \"thresholdsStyle\": {\n              \"mode\": \"off\"\n            }\n          },\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\",\n                \"value\": null\n              },\n              {\n                \"color\": \"red\",\n                \"value\": 80\n              }\n            ]\n          },\n          \"unit\": \"none\"\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 6,\n        \"w\": 9,\n        \"x\": 15,\n        \"y\": 20\n      },\n      \"id\": 16,\n      \"options\": {\n        \"legend\": {\n          \"calcs\": [],\n          \"displayMode\": \"list\",\n          \"placement\": \"bottom\",\n          \"showLegend\": false\n        },\n        \"tooltip\": {\n          \"mode\": \"multi\",\n          \"sort\": \"none\"\n        }\n      },\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"expr\": \"increase(beacon_fork_choice_reorg_total [1m])\",\n          \"format\": \"time_series\",\n          \"intervalFactor\": 1,\n          \"refId\": \"A\"\n        }\n      ],\n      \"title\": \"Re-orgs per Minute\",\n      \"type\": \"timeseries\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"gridPos\": {\n        \"h\": 2,\n        \"w\": 15,\n        \"x\": 0,\n        \"y\": 22\n      },\n      \"id\": 20,\n      \"options\": {\n        \"code\": {\n          \"language\": \"plaintext\",\n          \"showLineNumbers\": false,\n          \"showMiniMap\": false\n        },\n        \"content\": \"\\n### Attestation fork-choice processing times\\n\\n\\nThe time it takes to update the fork-choice block-graph with an attestation, which may come in a block, from the network or other source.\\n\",\n        \"mode\": \"markdown\"\n      },\n      \"pluginVersion\": \"10.4.1\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"refId\": \"A\"\n        }\n      ],\n      \"transparent\": true,\n      \"type\": \"text\"\n    },\n    {\n      \"aliasColors\": {},\n      \"autoMigrateFrom\": \"graph\",\n      \"bars\": false,\n      \"dashLength\": 10,\n      \"dashes\": false,\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"fill\": 1,\n      \"fillGradient\": 0,\n      \"gridPos\": {\n        \"h\": 6,\n        \"w\": 15,\n        \"x\": 0,\n        \"y\": 24\n      },\n      \"id\": 19,\n      \"legend\": {\n        \"avg\": false,\n        \"current\": false,\n        \"max\": false,\n        \"min\": false,\n        \"show\": false,\n        \"total\": false,\n        \"values\": false\n      },\n      \"lines\": true,\n      \"linewidth\": 1,\n      \"nullPointMode\": \"null\",\n      \"options\": {\n        \"dataLinks\": []\n      },\n      \"percentage\": false,\n      \"pointradius\": 2,\n      \"points\": false,\n      \"renderer\": \"flot\",\n      \"seriesOverrides\": [],\n      \"spaceLength\": 10,\n      \"stack\": false,\n      \"steppedLine\": false,\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"expr\": \"rate(beacon_fork_choice_process_attestation_seconds_sum[5m])\\n/\\nrate(beacon_fork_choice_process_attestation_seconds_count[5m])\",\n          \"format\": \"time_series\",\n          \"intervalFactor\": 1,\n          \"refId\": \"A\"\n        }\n      ],\n      \"thresholds\": [],\n      \"timeRegions\": [],\n      \"title\": \"Fork Choice Process Attestation\",\n      \"tooltip\": {\n        \"shared\": true,\n        \"sort\": 0,\n        \"value_type\": \"individual\"\n      },\n      \"type\": \"timeseries\",\n      \"xaxis\": {\n        \"mode\": \"time\",\n        \"show\": true,\n        \"values\": []\n      },\n      \"yaxes\": [\n        {\n          \"format\": \"s\",\n          \"logBase\": 1,\n          \"show\": true\n        },\n        {\n          \"format\": \"short\",\n          \"logBase\": 1,\n          \"show\": true\n        }\n      ],\n      \"yaxis\": {\n        \"align\": false\n      }\n    },\n    {\n      \"content\": \"\\n### Excess find_head() rate.\\n\\n\\nTracks the ratio between calls to `find_head()` that change the head and those that don't. A rate of `1` is theoretically ideal, less means we called `find_head` when we had no new information that would cause a change.\",\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"gridPos\": {\n        \"h\": 3,\n        \"w\": 9,\n        \"x\": 15,\n        \"y\": 26\n      },\n      \"id\": 21,\n      \"mode\": \"markdown\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"refId\": \"A\"\n        }\n      ],\n      \"transparent\": true,\n      \"type\": \"text\"\n    },\n    {\n      \"aliasColors\": {},\n      \"autoMigrateFrom\": \"graph\",\n      \"bars\": false,\n      \"dashLength\": 10,\n      \"dashes\": false,\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"fill\": 1,\n      \"fillGradient\": 0,\n      \"gridPos\": {\n        \"h\": 6,\n        \"w\": 9,\n        \"x\": 15,\n        \"y\": 29\n      },\n      \"id\": 13,\n      \"legend\": {\n        \"avg\": false,\n        \"current\": false,\n        \"max\": false,\n        \"min\": false,\n        \"show\": false,\n        \"total\": false,\n        \"values\": false\n      },\n      \"lines\": true,\n      \"linewidth\": 1,\n      \"nullPointMode\": \"null\",\n      \"options\": {\n        \"dataLinks\": []\n      },\n      \"percentage\": false,\n      \"pointradius\": 2,\n      \"points\": false,\n      \"renderer\": \"flot\",\n      \"seriesOverrides\": [],\n      \"spaceLength\": 10,\n      \"stack\": false,\n      \"steppedLine\": false,\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"expr\": \"increase(beacon_fork_choice_requests_total [1m]) / increase(beacon_fork_choice_changed_head_total [1m])\",\n          \"format\": \"time_series\",\n          \"intervalFactor\": 1,\n          \"refId\": \"A\"\n        }\n      ],\n      \"thresholds\": [],\n      \"timeRegions\": [],\n      \"title\": \"Fork Choice Waste Ratio\",\n      \"tooltip\": {\n        \"shared\": true,\n        \"sort\": 0,\n        \"value_type\": \"individual\"\n      },\n      \"type\": \"timeseries\",\n      \"xaxis\": {\n        \"mode\": \"time\",\n        \"show\": true,\n        \"values\": []\n      },\n      \"yaxes\": [\n        {\n          \"format\": \"none\",\n          \"label\": \"Requests\",\n          \"logBase\": 1,\n          \"show\": true\n        },\n        {\n          \"format\": \"short\",\n          \"logBase\": 1,\n          \"show\": true\n        }\n      ],\n      \"yaxis\": {\n        \"align\": false\n      }\n    },\n    {\n      \"aliasColors\": {},\n      \"autoMigrateFrom\": \"graph\",\n      \"bars\": false,\n      \"dashLength\": 10,\n      \"dashes\": false,\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"description\": \"\",\n      \"fill\": 1,\n      \"fillGradient\": 0,\n      \"gridPos\": {\n        \"h\": 5,\n        \"w\": 6,\n        \"x\": 0,\n        \"y\": 30\n      },\n      \"id\": 24,\n      \"legend\": {\n        \"avg\": false,\n        \"current\": false,\n        \"max\": false,\n        \"min\": false,\n        \"show\": false,\n        \"total\": false,\n        \"values\": false\n      },\n      \"lines\": true,\n      \"linewidth\": 1,\n      \"nullPointMode\": \"null\",\n      \"options\": {\n        \"dataLinks\": []\n      },\n      \"percentage\": false,\n      \"pointradius\": 2,\n      \"points\": false,\n      \"renderer\": \"flot\",\n      \"seriesOverrides\": [],\n      \"spaceLength\": 10,\n      \"stack\": false,\n      \"steppedLine\": false,\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"expr\": \"beacon_balances_cache_hits_total\",\n          \"format\": \"time_series\",\n          \"intervalFactor\": 1,\n          \"refId\": \"A\"\n        }\n      ],\n      \"thresholds\": [],\n      \"timeRegions\": [],\n      \"title\": \"Balance Cache Hits\",\n      \"tooltip\": {\n        \"shared\": true,\n        \"sort\": 0,\n        \"value_type\": \"individual\"\n      },\n      \"type\": \"timeseries\",\n      \"xaxis\": {\n        \"mode\": \"time\",\n        \"show\": true,\n        \"values\": []\n      },\n      \"yaxes\": [\n        {\n          \"format\": \"none\",\n          \"logBase\": 1,\n          \"show\": true\n        },\n        {\n          \"format\": \"short\",\n          \"logBase\": 1,\n          \"show\": true\n        }\n      ],\n      \"yaxis\": {\n        \"align\": false\n      }\n    },\n    {\n      \"aliasColors\": {},\n      \"autoMigrateFrom\": \"graph\",\n      \"bars\": false,\n      \"dashLength\": 10,\n      \"dashes\": false,\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"description\": \"\",\n      \"fill\": 1,\n      \"fillGradient\": 0,\n      \"gridPos\": {\n        \"h\": 5,\n        \"w\": 6,\n        \"x\": 6,\n        \"y\": 30\n      },\n      \"id\": 25,\n      \"legend\": {\n        \"avg\": false,\n        \"current\": false,\n        \"max\": false,\n        \"min\": false,\n        \"show\": false,\n        \"total\": false,\n        \"values\": false\n      },\n      \"lines\": true,\n      \"linewidth\": 1,\n      \"nullPointMode\": \"null\",\n      \"options\": {\n        \"dataLinks\": []\n      },\n      \"percentage\": false,\n      \"pointradius\": 2,\n      \"points\": false,\n      \"renderer\": \"flot\",\n      \"seriesOverrides\": [],\n      \"spaceLength\": 10,\n      \"stack\": false,\n      \"steppedLine\": false,\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"expr\": \"beacon_balances_cache_misses_total\",\n          \"format\": \"time_series\",\n          \"intervalFactor\": 1,\n          \"refId\": \"A\"\n        }\n      ],\n      \"thresholds\": [],\n      \"timeRegions\": [],\n      \"title\": \"Balance Cache Misses\",\n      \"tooltip\": {\n        \"shared\": true,\n        \"sort\": 0,\n        \"value_type\": \"individual\"\n      },\n      \"type\": \"timeseries\",\n      \"xaxis\": {\n        \"mode\": \"time\",\n        \"show\": true,\n        \"values\": []\n      },\n      \"yaxes\": [\n        {\n          \"format\": \"none\",\n          \"logBase\": 1,\n          \"show\": true\n        },\n        {\n          \"format\": \"short\",\n          \"logBase\": 1,\n          \"show\": true\n        }\n      ],\n      \"yaxis\": {\n        \"align\": false\n      }\n    },\n    {\n      \"content\": \"\\n### Head Updating\\n\\nDistinct from actually finding the head, these metrics track how long it takes the update the BeaconChain head once a new one has been found (or not)\",\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"gridPos\": {\n        \"h\": 2,\n        \"w\": 23,\n        \"x\": 0,\n        \"y\": 35\n      },\n      \"id\": 12,\n      \"mode\": \"markdown\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"refId\": \"A\"\n        }\n      ],\n      \"transparent\": true,\n      \"type\": \"text\"\n    },\n    {\n      \"aliasColors\": {},\n      \"autoMigrateFrom\": \"graph\",\n      \"bars\": false,\n      \"dashLength\": 10,\n      \"dashes\": false,\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"fill\": 1,\n      \"fillGradient\": 0,\n      \"gridPos\": {\n        \"h\": 6,\n        \"w\": 8,\n        \"x\": 0,\n        \"y\": 37\n      },\n      \"id\": 26,\n      \"legend\": {\n        \"avg\": false,\n        \"current\": false,\n        \"max\": false,\n        \"min\": false,\n        \"show\": false,\n        \"total\": false,\n        \"values\": false\n      },\n      \"lines\": true,\n      \"linewidth\": 1,\n      \"nullPointMode\": \"null\",\n      \"options\": {\n        \"dataLinks\": []\n      },\n      \"percentage\": false,\n      \"pointradius\": 2,\n      \"points\": false,\n      \"renderer\": \"flot\",\n      \"seriesOverrides\": [],\n      \"spaceLength\": 10,\n      \"stack\": false,\n      \"steppedLine\": false,\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"expr\": \"rate(beacon_fork_choice_database_read_seconds_sum[1m])\\n/\\nrate(beacon_fork_choice_database_read_seconds_count[1m])\",\n          \"format\": \"time_series\",\n          \"intervalFactor\": 1,\n          \"refId\": \"A\"\n        }\n      ],\n      \"thresholds\": [],\n      \"timeRegions\": [],\n      \"title\": \"Database Read\",\n      \"tooltip\": {\n        \"shared\": true,\n        \"sort\": 0,\n        \"value_type\": \"individual\"\n      },\n      \"type\": \"timeseries\",\n      \"xaxis\": {\n        \"mode\": \"time\",\n        \"show\": true,\n        \"values\": []\n      },\n      \"yaxes\": [\n        {\n          \"format\": \"s\",\n          \"logBase\": 1,\n          \"show\": true\n        },\n        {\n          \"format\": \"short\",\n          \"logBase\": 1,\n          \"show\": true\n        }\n      ],\n      \"yaxis\": {\n        \"align\": false\n      }\n    },\n    {\n      \"aliasColors\": {},\n      \"autoMigrateFrom\": \"graph\",\n      \"bars\": false,\n      \"dashLength\": 10,\n      \"dashes\": false,\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"fill\": 1,\n      \"fillGradient\": 0,\n      \"gridPos\": {\n        \"h\": 6,\n        \"w\": 8,\n        \"x\": 8,\n        \"y\": 37\n      },\n      \"id\": 29,\n      \"legend\": {\n        \"avg\": false,\n        \"current\": false,\n        \"max\": false,\n        \"min\": false,\n        \"show\": false,\n        \"total\": false,\n        \"values\": false\n      },\n      \"lines\": true,\n      \"linewidth\": 1,\n      \"nullPointMode\": \"null\",\n      \"options\": {\n        \"dataLinks\": []\n      },\n      \"percentage\": false,\n      \"pointradius\": 2,\n      \"points\": false,\n      \"renderer\": \"flot\",\n      \"seriesOverrides\": [],\n      \"spaceLength\": 10,\n      \"stack\": false,\n      \"steppedLine\": false,\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"expr\": \"rate(beacon_fork_choice_inspect_new_head_seconds_sum[1m])\\n/\\nrate(beacon_fork_choice_inspect_new_head_seconds_count[1m])\",\n          \"format\": \"time_series\",\n          \"intervalFactor\": 1,\n          \"refId\": \"A\"\n        }\n      ],\n      \"thresholds\": [],\n      \"timeRegions\": [],\n      \"title\": \"Inspect New Head\",\n      \"tooltip\": {\n        \"shared\": true,\n        \"sort\": 0,\n        \"value_type\": \"individual\"\n      },\n      \"type\": \"timeseries\",\n      \"xaxis\": {\n        \"mode\": \"time\",\n        \"show\": true,\n        \"values\": []\n      },\n      \"yaxes\": [\n        {\n          \"format\": \"s\",\n          \"logBase\": 1,\n          \"show\": true\n        },\n        {\n          \"format\": \"short\",\n          \"logBase\": 1,\n          \"show\": true\n        }\n      ],\n      \"yaxis\": {\n        \"align\": false\n      }\n    },\n    {\n      \"aliasColors\": {},\n      \"autoMigrateFrom\": \"graph\",\n      \"bars\": false,\n      \"dashLength\": 10,\n      \"dashes\": false,\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"fill\": 1,\n      \"fillGradient\": 0,\n      \"gridPos\": {\n        \"h\": 6,\n        \"w\": 8,\n        \"x\": 16,\n        \"y\": 37\n      },\n      \"id\": 30,\n      \"legend\": {\n        \"avg\": false,\n        \"current\": false,\n        \"max\": false,\n        \"min\": false,\n        \"show\": false,\n        \"total\": false,\n        \"values\": false\n      },\n      \"lines\": true,\n      \"linewidth\": 1,\n      \"nullPointMode\": \"null\",\n      \"options\": {\n        \"dataLinks\": []\n      },\n      \"percentage\": false,\n      \"pointradius\": 2,\n      \"points\": false,\n      \"renderer\": \"flot\",\n      \"seriesOverrides\": [],\n      \"spaceLength\": 10,\n      \"stack\": false,\n      \"steppedLine\": false,\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"expr\": \"rate(beacon_fork_choice_prepare_new_head_seconds_sum[1m])\\n/\\nrate(beacon_fork_choice_prepare_new_head_seconds_count[1m])\",\n          \"format\": \"time_series\",\n          \"intervalFactor\": 1,\n          \"refId\": \"A\"\n        }\n      ],\n      \"thresholds\": [],\n      \"timeRegions\": [],\n      \"title\": \"Prepare New Head\",\n      \"tooltip\": {\n        \"shared\": true,\n        \"sort\": 0,\n        \"value_type\": \"individual\"\n      },\n      \"type\": \"timeseries\",\n      \"xaxis\": {\n        \"mode\": \"time\",\n        \"show\": true,\n        \"values\": []\n      },\n      \"yaxes\": [\n        {\n          \"format\": \"s\",\n          \"logBase\": 1,\n          \"show\": true\n        },\n        {\n          \"format\": \"short\",\n          \"logBase\": 1,\n          \"show\": true\n        }\n      ],\n      \"yaxis\": {\n        \"align\": false\n      }\n    },\n    {\n      \"aliasColors\": {},\n      \"autoMigrateFrom\": \"graph\",\n      \"bars\": false,\n      \"dashLength\": 10,\n      \"dashes\": false,\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"fill\": 1,\n      \"fillGradient\": 0,\n      \"gridPos\": {\n        \"h\": 6,\n        \"w\": 8,\n        \"x\": 0,\n        \"y\": 43\n      },\n      \"id\": 28,\n      \"legend\": {\n        \"avg\": false,\n        \"current\": false,\n        \"max\": false,\n        \"min\": false,\n        \"show\": false,\n        \"total\": false,\n        \"values\": false\n      },\n      \"lines\": true,\n      \"linewidth\": 1,\n      \"nullPointMode\": \"null\",\n      \"options\": {\n        \"dataLinks\": []\n      },\n      \"percentage\": false,\n      \"pointradius\": 2,\n      \"points\": false,\n      \"renderer\": \"flot\",\n      \"seriesOverrides\": [],\n      \"spaceLength\": 10,\n      \"stack\": false,\n      \"steppedLine\": false,\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"expr\": \"rate(beacon_update_head_seconds_sum[1m])\\n/\\nrate(beacon_update_head_seconds_count[1m])\",\n          \"format\": \"time_series\",\n          \"intervalFactor\": 1,\n          \"refId\": \"A\"\n        }\n      ],\n      \"thresholds\": [],\n      \"timeRegions\": [],\n      \"title\": \"Update Canonical Head RwLock\",\n      \"tooltip\": {\n        \"shared\": true,\n        \"sort\": 0,\n        \"value_type\": \"individual\"\n      },\n      \"type\": \"timeseries\",\n      \"xaxis\": {\n        \"mode\": \"time\",\n        \"show\": true,\n        \"values\": []\n      },\n      \"yaxes\": [\n        {\n          \"format\": \"s\",\n          \"logBase\": 1,\n          \"show\": true\n        },\n        {\n          \"format\": \"short\",\n          \"logBase\": 1,\n          \"show\": true\n        }\n      ],\n      \"yaxis\": {\n        \"align\": false\n      }\n    },\n    {\n      \"aliasColors\": {},\n      \"autoMigrateFrom\": \"graph\",\n      \"bars\": false,\n      \"dashLength\": 10,\n      \"dashes\": false,\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"fill\": 1,\n      \"fillGradient\": 0,\n      \"gridPos\": {\n        \"h\": 6,\n        \"w\": 8,\n        \"x\": 8,\n        \"y\": 43\n      },\n      \"id\": 31,\n      \"legend\": {\n        \"avg\": false,\n        \"current\": false,\n        \"max\": false,\n        \"min\": false,\n        \"show\": false,\n        \"total\": false,\n        \"values\": false\n      },\n      \"lines\": true,\n      \"linewidth\": 1,\n      \"nullPointMode\": \"null\",\n      \"options\": {\n        \"dataLinks\": []\n      },\n      \"percentage\": false,\n      \"pointradius\": 2,\n      \"points\": false,\n      \"renderer\": \"flot\",\n      \"seriesOverrides\": [],\n      \"spaceLength\": 10,\n      \"stack\": false,\n      \"steppedLine\": false,\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"expr\": \"rate(beacon_persist_chain_sum[1m])\\n/\\nrate(beacon_persist_chain_count[1m])\",\n          \"format\": \"time_series\",\n          \"intervalFactor\": 1,\n          \"refId\": \"A\"\n        }\n      ],\n      \"thresholds\": [],\n      \"timeRegions\": [],\n      \"title\": \"Persist BeaconChain to DB\",\n      \"tooltip\": {\n        \"shared\": true,\n        \"sort\": 0,\n        \"value_type\": \"individual\"\n      },\n      \"type\": \"timeseries\",\n      \"xaxis\": {\n        \"mode\": \"time\",\n        \"show\": true,\n        \"values\": []\n      },\n      \"yaxes\": [\n        {\n          \"format\": \"s\",\n          \"logBase\": 1,\n          \"show\": true\n        },\n        {\n          \"format\": \"short\",\n          \"logBase\": 1,\n          \"show\": true\n        }\n      ],\n      \"yaxis\": {\n        \"align\": false\n      }\n    },\n    {\n      \"aliasColors\": {},\n      \"autoMigrateFrom\": \"graph\",\n      \"bars\": false,\n      \"dashLength\": 10,\n      \"dashes\": false,\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"fill\": 1,\n      \"fillGradient\": 0,\n      \"gridPos\": {\n        \"h\": 6,\n        \"w\": 8,\n        \"x\": 16,\n        \"y\": 43\n      },\n      \"id\": 32,\n      \"legend\": {\n        \"avg\": false,\n        \"current\": false,\n        \"max\": false,\n        \"min\": false,\n        \"show\": false,\n        \"total\": false,\n        \"values\": false\n      },\n      \"lines\": true,\n      \"linewidth\": 1,\n      \"nullPointMode\": \"null\",\n      \"options\": {\n        \"dataLinks\": []\n      },\n      \"percentage\": false,\n      \"pointradius\": 2,\n      \"points\": false,\n      \"renderer\": \"flot\",\n      \"seriesOverrides\": [],\n      \"spaceLength\": 10,\n      \"stack\": false,\n      \"steppedLine\": false,\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"expr\": \"rate(beacon_after_finalization_sum[1m])\\n/\\nrate(beacon_after_finalization_count[1m])\",\n          \"format\": \"time_series\",\n          \"intervalFactor\": 1,\n          \"refId\": \"A\"\n        }\n      ],\n      \"thresholds\": [],\n      \"timeRegions\": [],\n      \"title\": \"Run Post-Finalization Routines\",\n      \"tooltip\": {\n        \"shared\": true,\n        \"sort\": 0,\n        \"value_type\": \"individual\"\n      },\n      \"type\": \"timeseries\",\n      \"xaxis\": {\n        \"mode\": \"time\",\n        \"show\": true,\n        \"values\": []\n      },\n      \"yaxes\": [\n        {\n          \"format\": \"s\",\n          \"logBase\": 1,\n          \"show\": true\n        },\n        {\n          \"format\": \"short\",\n          \"logBase\": 1,\n          \"show\": true\n        }\n      ],\n      \"yaxis\": {\n        \"align\": false\n      }\n    }\n  ],\n  \"refresh\": \"5s\",\n  \"schemaVersion\": 39,\n  \"tags\": [\n    \"lighthouse\"\n  ],\n  \"templating\": {\n    \"list\": []\n  },\n  \"time\": {\n    \"from\": \"now-15m\",\n    \"to\": \"now\"\n  },\n  \"timepicker\": {\n    \"refresh_intervals\": [\n      \"5s\",\n      \"10s\",\n      \"30s\",\n      \"1m\",\n      \"5m\",\n      \"15m\",\n      \"30m\",\n      \"1h\",\n      \"2h\",\n      \"1d\"\n    ],\n    \"time_options\": [\n      \"5m\",\n      \"15m\",\n      \"1h\",\n      \"6h\",\n      \"12h\",\n      \"24h\",\n      \"2d\",\n      \"7d\",\n      \"30d\"\n    ]\n  },\n  \"timezone\": \"\",\n  \"title\": \"Fork Choice\",\n  \"uid\": \"tQbhcCATWk\",\n  \"version\": 1,\n  \"weekStart\": \"\"\n}\n"
  },
  {
    "path": "static_files/grafana-config/dashboards/lighthouse/Network.json",
    "content": "{\n  \"__inputs\": [\n    {\n      \"name\": \"DS_PROMETHEUS\",\n      \"label\": \"Prometheus\",\n      \"description\": \"\",\n      \"type\": \"datasource\",\n      \"pluginId\": \"prometheus\",\n      \"pluginName\": \"Prometheus\"\n    }\n  ],\n  \"__elements\": {},\n  \"__requires\": [\n    {\n      \"type\": \"panel\",\n      \"id\": \"bargauge\",\n      \"name\": \"Bar gauge\",\n      \"version\": \"\"\n    },\n    {\n      \"type\": \"panel\",\n      \"id\": \"gauge\",\n      \"name\": \"Gauge\",\n      \"version\": \"\"\n    },\n    {\n      \"type\": \"grafana\",\n      \"id\": \"grafana\",\n      \"name\": \"Grafana\",\n      \"version\": \"10.4.1\"\n    },\n    {\n      \"type\": \"panel\",\n      \"id\": \"heatmap\",\n      \"name\": \"Heatmap\",\n      \"version\": \"\"\n    },\n    {\n      \"type\": \"panel\",\n      \"id\": \"piechart\",\n      \"name\": \"Pie chart\",\n      \"version\": \"\"\n    },\n    {\n      \"type\": \"datasource\",\n      \"id\": \"prometheus\",\n      \"name\": \"Prometheus\",\n      \"version\": \"1.0.0\"\n    },\n    {\n      \"type\": \"panel\",\n      \"id\": \"stat\",\n      \"name\": \"Stat\",\n      \"version\": \"\"\n    },\n    {\n      \"type\": \"panel\",\n      \"id\": \"table\",\n      \"name\": \"Table\",\n      \"version\": \"\"\n    },\n    {\n      \"type\": \"panel\",\n      \"id\": \"timeseries\",\n      \"name\": \"Time series\",\n      \"version\": \"\"\n    }\n  ],\n  \"annotations\": {\n    \"list\": [\n      {\n        \"builtIn\": 1,\n        \"datasource\": {\n          \"type\": \"datasource\",\n          \"uid\": \"grafana\"\n        },\n        \"enable\": true,\n        \"hide\": true,\n        \"iconColor\": \"rgba(0, 211, 255, 1)\",\n        \"name\": \"Annotations & Alerts\",\n        \"target\": {\n          \"limit\": 100,\n          \"matchAny\": false,\n          \"tags\": [],\n          \"type\": \"dashboard\"\n        },\n        \"type\": \"dashboard\"\n      }\n    ]\n  },\n  \"editable\": true,\n  \"fiscalYearStartMonth\": 0,\n  \"graphTooltip\": 0,\n  \"id\": null,\n  \"links\": [],\n  \"liveNow\": false,\n  \"panels\": [\n    {\n      \"collapsed\": false,\n      \"gridPos\": {\n        \"h\": 1,\n        \"w\": 24,\n        \"x\": 0,\n        \"y\": 0\n      },\n      \"id\": 92,\n      \"panels\": [],\n      \"title\": \"Health\",\n      \"type\": \"row\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"description\": \"\",\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"continuous-BlPu\"\n          },\n          \"custom\": {\n            \"axisBorderShow\": false,\n            \"axisCenteredZero\": false,\n            \"axisColorMode\": \"text\",\n            \"axisLabel\": \"Peers\",\n            \"axisPlacement\": \"auto\",\n            \"barAlignment\": 0,\n            \"drawStyle\": \"line\",\n            \"fillOpacity\": 10,\n            \"gradientMode\": \"scheme\",\n            \"hideFrom\": {\n              \"legend\": false,\n              \"tooltip\": false,\n              \"viz\": false\n            },\n            \"insertNulls\": false,\n            \"lineInterpolation\": \"smooth\",\n            \"lineStyle\": {\n              \"fill\": \"solid\"\n            },\n            \"lineWidth\": 1,\n            \"pointSize\": 5,\n            \"scaleDistribution\": {\n              \"type\": \"linear\"\n            },\n            \"showPoints\": \"always\",\n            \"spanNulls\": true,\n            \"stacking\": {\n              \"group\": \"A\",\n              \"mode\": \"none\"\n            },\n            \"thresholdsStyle\": {\n              \"mode\": \"off\"\n            }\n          },\n          \"decimals\": 0,\n          \"links\": [],\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\",\n                \"value\": null\n              }\n            ]\n          },\n          \"unit\": \"short\"\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 7,\n        \"w\": 15,\n        \"x\": 0,\n        \"y\": 1\n      },\n      \"id\": 4,\n      \"options\": {\n        \"legend\": {\n          \"calcs\": [],\n          \"displayMode\": \"list\",\n          \"placement\": \"bottom\",\n          \"showLegend\": false\n        },\n        \"tooltip\": {\n          \"mode\": \"single\",\n          \"sort\": \"none\"\n        }\n      },\n      \"pluginVersion\": \"8.1.3\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"exemplar\": true,\n          \"expr\": \"libp2p_peers{instance=~\\\"$Instance\\\"}\",\n          \"format\": \"time_series\",\n          \"instant\": false,\n          \"interval\": \"\",\n          \"intervalFactor\": 1,\n          \"legendFormat\": \"{{instance}}\",\n          \"refId\": \"A\"\n        }\n      ],\n      \"title\": \"Connected Peers\",\n      \"transparent\": true,\n      \"type\": \"timeseries\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"description\": \"Is the UDP port forwarded\",\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"continuous-GrYlRd\"\n          },\n          \"mappings\": [\n            {\n              \"options\": {\n                \"0\": {\n                  \"color\": \"red\",\n                  \"index\": 1,\n                  \"text\": \"Closed\"\n                },\n                \"1\": {\n                  \"color\": \"green\",\n                  \"index\": 0,\n                  \"text\": \"Open\"\n                }\n              },\n              \"type\": \"value\"\n            },\n            {\n              \"options\": {\n                \"match\": \"null+nan\",\n                \"result\": {\n                  \"color\": \"red\",\n                  \"index\": 2,\n                  \"text\": \"Closed\"\n                }\n              },\n              \"type\": \"special\"\n            }\n          ],\n          \"max\": 1,\n          \"min\": 0,\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\",\n                \"value\": null\n              },\n              {\n                \"color\": \"dark-red\",\n                \"value\": 0\n              },\n              {\n                \"color\": \"dark-green\",\n                \"value\": 1\n              }\n            ]\n          }\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 4,\n        \"w\": 2,\n        \"x\": 15,\n        \"y\": 1\n      },\n      \"id\": 34,\n      \"options\": {\n        \"colorMode\": \"value\",\n        \"graphMode\": \"area\",\n        \"justifyMode\": \"auto\",\n        \"orientation\": \"auto\",\n        \"reduceOptions\": {\n          \"calcs\": [\n            \"firstNotNull\"\n          ],\n          \"fields\": \"\",\n          \"values\": true\n        },\n        \"showPercentChange\": false,\n        \"text\": {},\n        \"textMode\": \"auto\",\n        \"wideLayout\": true\n      },\n      \"pluginVersion\": \"10.4.1\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"editorMode\": \"code\",\n          \"exemplar\": false,\n          \"expr\": \"nat_open{instance=~\\\"$Instance\\\"}\",\n          \"instant\": true,\n          \"interval\": \"\",\n          \"legendFormat\": \"{{instance}}:{{protocol}}\",\n          \"refId\": \"A\"\n        }\n      ],\n      \"title\": \"NAT\",\n      \"transparent\": true,\n      \"type\": \"stat\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"thresholds\"\n          },\n          \"custom\": {\n            \"align\": \"auto\",\n            \"cellOptions\": {\n              \"type\": \"auto\"\n            },\n            \"inspect\": false\n          },\n          \"mappings\": [],\n          \"min\": 0,\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\",\n                \"value\": null\n              },\n              {\n                \"color\": \"red\",\n                \"value\": 80\n              }\n            ]\n          },\n          \"unit\": \"none\"\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 6,\n        \"w\": 7,\n        \"x\": 17,\n        \"y\": 1\n      },\n      \"id\": 126,\n      \"options\": {\n        \"cellHeight\": \"sm\",\n        \"footer\": {\n          \"countRows\": false,\n          \"fields\": \"\",\n          \"reducer\": [\n            \"sum\"\n          ],\n          \"show\": false\n        },\n        \"showHeader\": true,\n        \"sortBy\": [\n          {\n            \"desc\": true,\n            \"displayName\": \"version\"\n          }\n        ]\n      },\n      \"pluginVersion\": \"10.4.1\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"editorMode\": \"builder\",\n          \"exemplar\": false,\n          \"expr\": \"lighthouse_info{instance=~\\\"$Instance\\\"}\",\n          \"format\": \"table\",\n          \"instant\": true,\n          \"legendFormat\": \"{{instance}} - {{ version }}\",\n          \"range\": false,\n          \"refId\": \"A\"\n        }\n      ],\n      \"title\": \"BN Version\",\n      \"transformations\": [\n        {\n          \"id\": \"organize\",\n          \"options\": {\n            \"excludeByName\": {\n              \"Time\": true,\n              \"Value\": true,\n              \"__name__\": true,\n              \"job\": true,\n              \"network\": true\n            },\n            \"indexByName\": {},\n            \"renameByName\": {\n              \"instance\": \"Instance\"\n            }\n          }\n        }\n      ],\n      \"transparent\": true,\n      \"type\": \"table\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"description\": \"Number of Dependency Errors\",\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"palette-classic\"\n          },\n          \"custom\": {\n            \"axisBorderShow\": false,\n            \"axisCenteredZero\": false,\n            \"axisColorMode\": \"text\",\n            \"axisLabel\": \"\",\n            \"axisPlacement\": \"auto\",\n            \"barAlignment\": 0,\n            \"drawStyle\": \"line\",\n            \"fillOpacity\": 0,\n            \"gradientMode\": \"none\",\n            \"hideFrom\": {\n              \"legend\": false,\n              \"tooltip\": false,\n              \"viz\": false\n            },\n            \"insertNulls\": false,\n            \"lineInterpolation\": \"linear\",\n            \"lineWidth\": 1,\n            \"pointSize\": 5,\n            \"scaleDistribution\": {\n              \"type\": \"linear\"\n            },\n            \"showPoints\": \"auto\",\n            \"spanNulls\": false,\n            \"stacking\": {\n              \"group\": \"A\",\n              \"mode\": \"none\"\n            },\n            \"thresholdsStyle\": {\n              \"mode\": \"off\"\n            }\n          },\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\",\n                \"value\": null\n              },\n              {\n                \"color\": \"red\",\n                \"value\": 80\n              }\n            ]\n          }\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 7,\n        \"w\": 9,\n        \"x\": 15,\n        \"y\": 7\n      },\n      \"id\": 138,\n      \"options\": {\n        \"legend\": {\n          \"calcs\": [],\n          \"displayMode\": \"list\",\n          \"placement\": \"bottom\",\n          \"showLegend\": true\n        },\n        \"tooltip\": {\n          \"mode\": \"single\",\n          \"sort\": \"none\"\n        }\n      },\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"disableTextWrap\": false,\n          \"editorMode\": \"builder\",\n          \"expr\": \"increase(dep_error_total{instance=~\\\"$Instance\\\"}[$__rate_interval])\",\n          \"fullMetaSearch\": false,\n          \"includeNullMetadata\": true,\n          \"instant\": false,\n          \"legendFormat\": \"{{instance}}: {{target}}\",\n          \"range\": true,\n          \"refId\": \"A\",\n          \"useBackend\": false\n        }\n      ],\n      \"title\": \"Dependency Errors\",\n      \"transparent\": true,\n      \"type\": \"timeseries\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"palette-classic\"\n          },\n          \"custom\": {\n            \"axisBorderShow\": false,\n            \"axisCenteredZero\": false,\n            \"axisColorMode\": \"text\",\n            \"axisLabel\": \"\",\n            \"axisPlacement\": \"auto\",\n            \"barAlignment\": 0,\n            \"drawStyle\": \"line\",\n            \"fillOpacity\": 10,\n            \"gradientMode\": \"opacity\",\n            \"hideFrom\": {\n              \"legend\": false,\n              \"tooltip\": false,\n              \"viz\": false\n            },\n            \"insertNulls\": false,\n            \"lineInterpolation\": \"smooth\",\n            \"lineStyle\": {\n              \"fill\": \"solid\"\n            },\n            \"lineWidth\": 1,\n            \"pointSize\": 5,\n            \"scaleDistribution\": {\n              \"type\": \"linear\"\n            },\n            \"showPoints\": \"never\",\n            \"spanNulls\": true,\n            \"stacking\": {\n              \"group\": \"A\",\n              \"mode\": \"none\"\n            },\n            \"thresholdsStyle\": {\n              \"mode\": \"off\"\n            }\n          },\n          \"links\": [],\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"percentage\",\n            \"steps\": [\n              {\n                \"color\": \"semi-dark-blue\",\n                \"value\": null\n              }\n            ]\n          },\n          \"unit\": \"short\"\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 6,\n        \"w\": 5,\n        \"x\": 0,\n        \"y\": 8\n      },\n      \"id\": 59,\n      \"interval\": \"\",\n      \"options\": {\n        \"legend\": {\n          \"calcs\": [\n            \"lastNotNull\"\n          ],\n          \"displayMode\": \"table\",\n          \"placement\": \"bottom\",\n          \"showLegend\": true\n        },\n        \"tooltip\": {\n          \"mode\": \"single\",\n          \"sort\": \"none\"\n        }\n      },\n      \"pluginVersion\": \"10.2.2\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"editorMode\": \"code\",\n          \"exemplar\": false,\n          \"expr\": \"sum by (direction)(rate(libp2p_bandwidth_bytes_total{instance=~\\\"$Instance\\\",protocols=~\\\".*/p2p\\\"}[$__rate_interval]))\",\n          \"instant\": false,\n          \"interval\": \"\",\n          \"legendFormat\": \"{{direction}} {{protocols}} {{instance}}\",\n          \"range\": true,\n          \"refId\": \"A\"\n        }\n      ],\n      \"title\": \"Libp2p Total Bandwidth\",\n      \"transparent\": true,\n      \"type\": \"timeseries\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"palette-classic\"\n          },\n          \"custom\": {\n            \"axisBorderShow\": false,\n            \"axisCenteredZero\": false,\n            \"axisColorMode\": \"text\",\n            \"axisLabel\": \"\",\n            \"axisPlacement\": \"auto\",\n            \"barAlignment\": 0,\n            \"drawStyle\": \"line\",\n            \"fillOpacity\": 10,\n            \"gradientMode\": \"opacity\",\n            \"hideFrom\": {\n              \"legend\": false,\n              \"tooltip\": false,\n              \"viz\": false\n            },\n            \"insertNulls\": false,\n            \"lineInterpolation\": \"smooth\",\n            \"lineStyle\": {\n              \"fill\": \"solid\"\n            },\n            \"lineWidth\": 1,\n            \"pointSize\": 5,\n            \"scaleDistribution\": {\n              \"type\": \"linear\"\n            },\n            \"showPoints\": \"never\",\n            \"spanNulls\": true,\n            \"stacking\": {\n              \"group\": \"A\",\n              \"mode\": \"none\"\n            },\n            \"thresholdsStyle\": {\n              \"mode\": \"off\"\n            }\n          },\n          \"links\": [],\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"percentage\",\n            \"steps\": [\n              {\n                \"color\": \"semi-dark-blue\",\n                \"value\": null\n              }\n            ]\n          },\n          \"unit\": \"short\"\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 6,\n        \"w\": 5,\n        \"x\": 5,\n        \"y\": 8\n      },\n      \"id\": 128,\n      \"interval\": \"\",\n      \"options\": {\n        \"legend\": {\n          \"calcs\": [\n            \"lastNotNull\"\n          ],\n          \"displayMode\": \"table\",\n          \"placement\": \"bottom\",\n          \"showLegend\": true\n        },\n        \"tooltip\": {\n          \"mode\": \"single\",\n          \"sort\": \"none\"\n        }\n      },\n      \"pluginVersion\": \"10.2.2\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"editorMode\": \"code\",\n          \"exemplar\": false,\n          \"expr\": \"rate(libp2p_bandwidth_bytes_total{instance=~\\\"$Instance\\\",direction=\\\"Inbound\\\",protocols=~\\\".*/p2p\\\"}[$__rate_interval])\",\n          \"instant\": false,\n          \"interval\": \"\",\n          \"legendFormat\": \"{{instance}} {{protocols}}\",\n          \"range\": true,\n          \"refId\": \"A\"\n        }\n      ],\n      \"title\": \"Libp2p Inbound Bandwidth\",\n      \"transparent\": true,\n      \"type\": \"timeseries\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"palette-classic\"\n          },\n          \"custom\": {\n            \"axisBorderShow\": false,\n            \"axisCenteredZero\": false,\n            \"axisColorMode\": \"text\",\n            \"axisLabel\": \"\",\n            \"axisPlacement\": \"auto\",\n            \"barAlignment\": 0,\n            \"drawStyle\": \"line\",\n            \"fillOpacity\": 10,\n            \"gradientMode\": \"opacity\",\n            \"hideFrom\": {\n              \"legend\": false,\n              \"tooltip\": false,\n              \"viz\": false\n            },\n            \"insertNulls\": false,\n            \"lineInterpolation\": \"smooth\",\n            \"lineStyle\": {\n              \"fill\": \"solid\"\n            },\n            \"lineWidth\": 1,\n            \"pointSize\": 5,\n            \"scaleDistribution\": {\n              \"type\": \"linear\"\n            },\n            \"showPoints\": \"never\",\n            \"spanNulls\": true,\n            \"stacking\": {\n              \"group\": \"A\",\n              \"mode\": \"none\"\n            },\n            \"thresholdsStyle\": {\n              \"mode\": \"off\"\n            }\n          },\n          \"links\": [],\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"percentage\",\n            \"steps\": [\n              {\n                \"color\": \"semi-dark-blue\",\n                \"value\": null\n              }\n            ]\n          },\n          \"unit\": \"short\"\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 6,\n        \"w\": 5,\n        \"x\": 10,\n        \"y\": 8\n      },\n      \"id\": 129,\n      \"interval\": \"\",\n      \"options\": {\n        \"legend\": {\n          \"calcs\": [\n            \"lastNotNull\"\n          ],\n          \"displayMode\": \"table\",\n          \"placement\": \"bottom\",\n          \"showLegend\": true\n        },\n        \"tooltip\": {\n          \"mode\": \"single\",\n          \"sort\": \"none\"\n        }\n      },\n      \"pluginVersion\": \"10.2.2\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"editorMode\": \"code\",\n          \"exemplar\": false,\n          \"expr\": \"rate(libp2p_bandwidth_bytes_total{instance=~\\\"$Instance\\\",direction=\\\"Outbound\\\",protocols=~\\\".*/p2p\\\"}[$__rate_interval])\",\n          \"instant\": false,\n          \"interval\": \"\",\n          \"legendFormat\": \"{{instance}} {{protocols}}\",\n          \"range\": true,\n          \"refId\": \"A\"\n        }\n      ],\n      \"title\": \"Libp2p Outbound Bandwidth\",\n      \"transparent\": true,\n      \"type\": \"timeseries\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"palette-classic\"\n          },\n          \"custom\": {\n            \"axisBorderShow\": false,\n            \"axisCenteredZero\": false,\n            \"axisColorMode\": \"text\",\n            \"axisLabel\": \"\",\n            \"axisPlacement\": \"auto\",\n            \"barAlignment\": 0,\n            \"drawStyle\": \"line\",\n            \"fillOpacity\": 10,\n            \"gradientMode\": \"opacity\",\n            \"hideFrom\": {\n              \"legend\": false,\n              \"tooltip\": false,\n              \"viz\": false\n            },\n            \"insertNulls\": false,\n            \"lineInterpolation\": \"smooth\",\n            \"lineStyle\": {\n              \"fill\": \"solid\"\n            },\n            \"lineWidth\": 1,\n            \"pointSize\": 5,\n            \"scaleDistribution\": {\n              \"type\": \"linear\"\n            },\n            \"showPoints\": \"never\",\n            \"spanNulls\": true,\n            \"stacking\": {\n              \"group\": \"A\",\n              \"mode\": \"none\"\n            },\n            \"thresholdsStyle\": {\n              \"mode\": \"off\"\n            }\n          },\n          \"links\": [],\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"percentage\",\n            \"steps\": [\n              {\n                \"color\": \"semi-dark-blue\",\n                \"value\": null\n              }\n            ]\n          },\n          \"unit\": \"short\"\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 6,\n        \"w\": 5,\n        \"x\": 0,\n        \"y\": 14\n      },\n      \"id\": 130,\n      \"interval\": \"\",\n      \"options\": {\n        \"legend\": {\n          \"calcs\": [\n            \"lastNotNull\"\n          ],\n          \"displayMode\": \"table\",\n          \"placement\": \"bottom\",\n          \"showLegend\": true\n        },\n        \"tooltip\": {\n          \"mode\": \"single\",\n          \"sort\": \"none\"\n        }\n      },\n      \"pluginVersion\": \"10.2.2\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"editorMode\": \"code\",\n          \"exemplar\": false,\n          \"expr\": \"sum by (instance)(rate(libp2p_bandwidth_bytes_total{instance=~\\\"$Instance\\\",protocols=~\\\".*/p2p\\\"}[$__rate_interval]))\",\n          \"instant\": false,\n          \"interval\": \"\",\n          \"legendFormat\": \"{{instance}}\",\n          \"range\": true,\n          \"refId\": \"A\"\n        }\n      ],\n      \"title\": \"Libp2p Total Bandwidth\",\n      \"transparent\": true,\n      \"type\": \"timeseries\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"description\": \"\",\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"thresholds\"\n          },\n          \"custom\": {\n            \"axisBorderShow\": false,\n            \"axisCenteredZero\": false,\n            \"axisColorMode\": \"text\",\n            \"axisLabel\": \"\",\n            \"axisPlacement\": \"auto\",\n            \"barAlignment\": 0,\n            \"drawStyle\": \"line\",\n            \"fillOpacity\": 10,\n            \"gradientMode\": \"opacity\",\n            \"hideFrom\": {\n              \"legend\": false,\n              \"tooltip\": false,\n              \"viz\": false\n            },\n            \"insertNulls\": false,\n            \"lineInterpolation\": \"smooth\",\n            \"lineWidth\": 1,\n            \"pointSize\": 5,\n            \"scaleDistribution\": {\n              \"type\": \"linear\"\n            },\n            \"showPoints\": \"never\",\n            \"spanNulls\": true,\n            \"stacking\": {\n              \"group\": \"A\",\n              \"mode\": \"none\"\n            },\n            \"thresholdsStyle\": {\n              \"mode\": \"off\"\n            }\n          },\n          \"links\": [],\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"semi-dark-blue\",\n                \"value\": null\n              }\n            ]\n          },\n          \"unit\": \"short\"\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 6,\n        \"w\": 5,\n        \"x\": 5,\n        \"y\": 14\n      },\n      \"id\": 76,\n      \"interval\": \"\",\n      \"options\": {\n        \"legend\": {\n          \"calcs\": [\n            \"lastNotNull\"\n          ],\n          \"displayMode\": \"table\",\n          \"placement\": \"bottom\",\n          \"showLegend\": true\n        },\n        \"tooltip\": {\n          \"mode\": \"single\",\n          \"sort\": \"none\"\n        }\n      },\n      \"pluginVersion\": \"8.1.3\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"editorMode\": \"code\",\n          \"exemplar\": true,\n          \"expr\": \"rate(discovery_bytes{instance=~\\\"$Instance\\\", direction=\\\"inbound\\\"}[$__rate_interval])\",\n          \"interval\": \"\",\n          \"legendFormat\": \"{{instance}}\",\n          \"range\": true,\n          \"refId\": \"A\"\n        }\n      ],\n      \"title\": \"Discovery Inbound Bandwith\",\n      \"transparent\": true,\n      \"type\": \"timeseries\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"description\": \"\",\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"thresholds\"\n          },\n          \"custom\": {\n            \"axisBorderShow\": false,\n            \"axisCenteredZero\": false,\n            \"axisColorMode\": \"text\",\n            \"axisLabel\": \"\",\n            \"axisPlacement\": \"auto\",\n            \"barAlignment\": 0,\n            \"drawStyle\": \"line\",\n            \"fillOpacity\": 10,\n            \"gradientMode\": \"opacity\",\n            \"hideFrom\": {\n              \"legend\": false,\n              \"tooltip\": false,\n              \"viz\": false\n            },\n            \"insertNulls\": false,\n            \"lineInterpolation\": \"smooth\",\n            \"lineWidth\": 1,\n            \"pointSize\": 5,\n            \"scaleDistribution\": {\n              \"type\": \"linear\"\n            },\n            \"showPoints\": \"never\",\n            \"spanNulls\": true,\n            \"stacking\": {\n              \"group\": \"A\",\n              \"mode\": \"none\"\n            },\n            \"thresholdsStyle\": {\n              \"mode\": \"off\"\n            }\n          },\n          \"links\": [],\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"light-purple\",\n                \"value\": null\n              }\n            ]\n          },\n          \"unit\": \"short\"\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 6,\n        \"w\": 5,\n        \"x\": 10,\n        \"y\": 14\n      },\n      \"id\": 77,\n      \"interval\": \"\",\n      \"options\": {\n        \"legend\": {\n          \"calcs\": [\n            \"lastNotNull\"\n          ],\n          \"displayMode\": \"table\",\n          \"placement\": \"bottom\",\n          \"showLegend\": true\n        },\n        \"tooltip\": {\n          \"mode\": \"single\",\n          \"sort\": \"none\"\n        }\n      },\n      \"pluginVersion\": \"8.1.3\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"editorMode\": \"code\",\n          \"exemplar\": true,\n          \"expr\": \"rate(discovery_bytes{instance=~\\\"$Instance\\\",direction=\\\"outbound\\\"}[$__rate_interval])\",\n          \"interval\": \"\",\n          \"legendFormat\": \"bytes/s\",\n          \"range\": true,\n          \"refId\": \"A\"\n        }\n      ],\n      \"title\": \"Discovery Outbound Bandwidth\",\n      \"transparent\": true,\n      \"type\": \"timeseries\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"description\": \"Number of Dependency Warnings\",\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"palette-classic\"\n          },\n          \"custom\": {\n            \"axisBorderShow\": false,\n            \"axisCenteredZero\": false,\n            \"axisColorMode\": \"text\",\n            \"axisLabel\": \"\",\n            \"axisPlacement\": \"auto\",\n            \"barAlignment\": 0,\n            \"drawStyle\": \"line\",\n            \"fillOpacity\": 0,\n            \"gradientMode\": \"none\",\n            \"hideFrom\": {\n              \"legend\": false,\n              \"tooltip\": false,\n              \"viz\": false\n            },\n            \"insertNulls\": false,\n            \"lineInterpolation\": \"linear\",\n            \"lineWidth\": 1,\n            \"pointSize\": 5,\n            \"scaleDistribution\": {\n              \"type\": \"linear\"\n            },\n            \"showPoints\": \"auto\",\n            \"spanNulls\": false,\n            \"stacking\": {\n              \"group\": \"A\",\n              \"mode\": \"none\"\n            },\n            \"thresholdsStyle\": {\n              \"mode\": \"off\"\n            }\n          },\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\",\n                \"value\": null\n              },\n              {\n                \"color\": \"red\",\n                \"value\": 80\n              }\n            ]\n          }\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 7,\n        \"w\": 9,\n        \"x\": 15,\n        \"y\": 14\n      },\n      \"id\": 137,\n      \"options\": {\n        \"legend\": {\n          \"calcs\": [],\n          \"displayMode\": \"list\",\n          \"placement\": \"bottom\",\n          \"showLegend\": true\n        },\n        \"tooltip\": {\n          \"mode\": \"single\",\n          \"sort\": \"none\"\n        }\n      },\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"disableTextWrap\": false,\n          \"editorMode\": \"code\",\n          \"expr\": \"increase(dep_warn_total{instance=~\\\"$Instance\\\"}[$__rate_interval])\",\n          \"fullMetaSearch\": false,\n          \"includeNullMetadata\": true,\n          \"instant\": false,\n          \"legendFormat\": \"{{instance}}: {{target}}\",\n          \"range\": true,\n          \"refId\": \"A\",\n          \"useBackend\": false\n        }\n      ],\n      \"title\": \"Dependency Warnings\",\n      \"transparent\": true,\n      \"type\": \"timeseries\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"description\": \"Average Peer score per client shifted by 100\",\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"palette-classic\"\n          },\n          \"custom\": {\n            \"axisBorderShow\": false,\n            \"axisCenteredZero\": false,\n            \"axisColorMode\": \"text\",\n            \"axisLabel\": \"\",\n            \"axisPlacement\": \"auto\",\n            \"barAlignment\": 0,\n            \"drawStyle\": \"line\",\n            \"fillOpacity\": 0,\n            \"gradientMode\": \"none\",\n            \"hideFrom\": {\n              \"legend\": false,\n              \"tooltip\": false,\n              \"viz\": false\n            },\n            \"insertNulls\": false,\n            \"lineInterpolation\": \"linear\",\n            \"lineWidth\": 1,\n            \"pointSize\": 5,\n            \"scaleDistribution\": {\n              \"type\": \"linear\"\n            },\n            \"showPoints\": \"auto\",\n            \"spanNulls\": false,\n            \"stacking\": {\n              \"group\": \"A\",\n              \"mode\": \"none\"\n            },\n            \"thresholdsStyle\": {\n              \"mode\": \"off\"\n            }\n          },\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\",\n                \"value\": null\n              },\n              {\n                \"color\": \"red\",\n                \"value\": 80\n              }\n            ]\n          }\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 7,\n        \"w\": 5,\n        \"x\": 0,\n        \"y\": 20\n      },\n      \"id\": 53,\n      \"options\": {\n        \"legend\": {\n          \"calcs\": [],\n          \"displayMode\": \"list\",\n          \"placement\": \"bottom\",\n          \"showLegend\": true\n        },\n        \"tooltip\": {\n          \"mode\": \"single\",\n          \"sort\": \"none\"\n        }\n      },\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"exemplar\": true,\n          \"expr\": \"peer_score_per_client{instance=~\\\"$Instance\\\"}+100\",\n          \"interval\": \"\",\n          \"legendFormat\": \"{{client}}\",\n          \"refId\": \"A\"\n        }\n      ],\n      \"title\": \"Average Peer Score Per Client\",\n      \"transparent\": true,\n      \"type\": \"timeseries\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"palette-classic\"\n          },\n          \"custom\": {\n            \"axisBorderShow\": false,\n            \"axisCenteredZero\": false,\n            \"axisColorMode\": \"text\",\n            \"axisLabel\": \"\",\n            \"axisPlacement\": \"auto\",\n            \"barAlignment\": 0,\n            \"drawStyle\": \"line\",\n            \"fillOpacity\": 0,\n            \"gradientMode\": \"none\",\n            \"hideFrom\": {\n              \"legend\": false,\n              \"tooltip\": false,\n              \"viz\": false\n            },\n            \"insertNulls\": false,\n            \"lineInterpolation\": \"linear\",\n            \"lineWidth\": 1,\n            \"pointSize\": 5,\n            \"scaleDistribution\": {\n              \"type\": \"linear\"\n            },\n            \"showPoints\": \"auto\",\n            \"spanNulls\": false,\n            \"stacking\": {\n              \"group\": \"A\",\n              \"mode\": \"none\"\n            },\n            \"thresholdsStyle\": {\n              \"mode\": \"off\"\n            }\n          },\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\",\n                \"value\": null\n              },\n              {\n                \"color\": \"red\",\n                \"value\": 80\n              }\n            ]\n          }\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 7,\n        \"w\": 5,\n        \"x\": 5,\n        \"y\": 20\n      },\n      \"id\": 80,\n      \"options\": {\n        \"legend\": {\n          \"calcs\": [],\n          \"displayMode\": \"list\",\n          \"placement\": \"bottom\",\n          \"showLegend\": true\n        },\n        \"tooltip\": {\n          \"mode\": \"single\",\n          \"sort\": \"none\"\n        }\n      },\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"exemplar\": true,\n          \"expr\": \"increase(libp2p_report_peer_msgs_total{instance=~\\\"$Instance\\\"}[1m])\",\n          \"interval\": \"\",\n          \"legendFormat\": \"{{msg}}\",\n          \"refId\": \"A\"\n        }\n      ],\n      \"title\": \"Peer Penalty Events\",\n      \"transparent\": true,\n      \"type\": \"timeseries\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"description\": \"Peers sync status\",\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"palette-classic\"\n          },\n          \"custom\": {\n            \"axisBorderShow\": false,\n            \"axisCenteredZero\": false,\n            \"axisColorMode\": \"text\",\n            \"axisLabel\": \"\",\n            \"axisPlacement\": \"auto\",\n            \"barAlignment\": 0,\n            \"drawStyle\": \"line\",\n            \"fillOpacity\": 0,\n            \"gradientMode\": \"none\",\n            \"hideFrom\": {\n              \"legend\": false,\n              \"tooltip\": false,\n              \"viz\": false\n            },\n            \"insertNulls\": false,\n            \"lineInterpolation\": \"linear\",\n            \"lineWidth\": 1,\n            \"pointSize\": 5,\n            \"scaleDistribution\": {\n              \"type\": \"linear\"\n            },\n            \"showPoints\": \"auto\",\n            \"spanNulls\": false,\n            \"stacking\": {\n              \"group\": \"A\",\n              \"mode\": \"none\"\n            },\n            \"thresholdsStyle\": {\n              \"mode\": \"off\"\n            }\n          },\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\",\n                \"value\": null\n              },\n              {\n                \"color\": \"red\",\n                \"value\": 80\n              }\n            ]\n          }\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 7,\n        \"w\": 5,\n        \"x\": 10,\n        \"y\": 20\n      },\n      \"id\": 7,\n      \"options\": {\n        \"legend\": {\n          \"calcs\": [],\n          \"displayMode\": \"list\",\n          \"placement\": \"bottom\",\n          \"showLegend\": true\n        },\n        \"tooltip\": {\n          \"mode\": \"single\",\n          \"sort\": \"none\"\n        }\n      },\n      \"pluginVersion\": \"8.1.3\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"editorMode\": \"code\",\n          \"exemplar\": true,\n          \"expr\": \"sync_peers_per_status{instance=~\\\"$Instance\\\"}\",\n          \"format\": \"time_series\",\n          \"instant\": false,\n          \"interval\": \"\",\n          \"legendFormat\": \"{{sync_status}}\",\n          \"range\": true,\n          \"refId\": \"A\"\n        }\n      ],\n      \"title\": \"Peer Sync Status\",\n      \"transparent\": true,\n      \"type\": \"timeseries\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"description\": \"\",\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"palette-classic\"\n          },\n          \"custom\": {\n            \"axisBorderShow\": false,\n            \"axisCenteredZero\": false,\n            \"axisColorMode\": \"text\",\n            \"axisLabel\": \"\",\n            \"axisPlacement\": \"auto\",\n            \"barAlignment\": 0,\n            \"drawStyle\": \"line\",\n            \"fillOpacity\": 0,\n            \"gradientMode\": \"none\",\n            \"hideFrom\": {\n              \"legend\": false,\n              \"tooltip\": false,\n              \"viz\": false\n            },\n            \"insertNulls\": false,\n            \"lineInterpolation\": \"linear\",\n            \"lineWidth\": 1,\n            \"pointSize\": 5,\n            \"scaleDistribution\": {\n              \"type\": \"linear\"\n            },\n            \"showPoints\": \"auto\",\n            \"spanNulls\": false,\n            \"stacking\": {\n              \"group\": \"A\",\n              \"mode\": \"none\"\n            },\n            \"thresholdsStyle\": {\n              \"mode\": \"off\"\n            }\n          },\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\",\n                \"value\": null\n              },\n              {\n                \"color\": \"#6ED0E0\",\n                \"value\": \"\"\n              },\n              {\n                \"color\": \"red\",\n                \"value\": 0.3\n              },\n              {\n                \"color\": \"#EAB839\",\n                \"value\": 0.6\n              }\n            ]\n          }\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 6,\n        \"w\": 9,\n        \"x\": 15,\n        \"y\": 21\n      },\n      \"id\": 36,\n      \"options\": {\n        \"legend\": {\n          \"calcs\": [],\n          \"displayMode\": \"list\",\n          \"placement\": \"bottom\",\n          \"showLegend\": true\n        },\n        \"tooltip\": {\n          \"mode\": \"single\",\n          \"sort\": \"none\"\n        }\n      },\n      \"pluginVersion\": \"10.0.3\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"editorMode\": \"code\",\n          \"exemplar\": true,\n          \"expr\": \"rate(gossipsub_topic_msg_recv_counts_total{hash=~\\\".*beacon_block.*\\\", instance=~\\\"$Instance\\\"}[$__rate_interval])*12\",\n          \"format\": \"time_series\",\n          \"instant\": false,\n          \"interval\": \"\",\n          \"legendFormat\": \"{{instance}}\",\n          \"refId\": \"A\"\n        }\n      ],\n      \"title\": \"Blocks Per Slot\",\n      \"transparent\": true,\n      \"type\": \"timeseries\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"description\": \"Peers via client implementations\",\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"palette-classic\"\n          },\n          \"custom\": {\n            \"axisBorderShow\": false,\n            \"axisCenteredZero\": false,\n            \"axisColorMode\": \"text\",\n            \"axisLabel\": \"\",\n            \"axisPlacement\": \"auto\",\n            \"barAlignment\": 0,\n            \"drawStyle\": \"line\",\n            \"fillOpacity\": 0,\n            \"gradientMode\": \"none\",\n            \"hideFrom\": {\n              \"legend\": false,\n              \"tooltip\": false,\n              \"viz\": false\n            },\n            \"insertNulls\": false,\n            \"lineInterpolation\": \"linear\",\n            \"lineWidth\": 1,\n            \"pointSize\": 5,\n            \"scaleDistribution\": {\n              \"type\": \"linear\"\n            },\n            \"showPoints\": \"auto\",\n            \"spanNulls\": false,\n            \"stacking\": {\n              \"group\": \"A\",\n              \"mode\": \"none\"\n            },\n            \"thresholdsStyle\": {\n              \"mode\": \"off\"\n            }\n          },\n          \"mappings\": [],\n          \"max\": 100,\n          \"min\": 0,\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\"\n              },\n              {\n                \"color\": \"red\",\n                \"value\": 80\n              }\n            ]\n          },\n          \"unitScale\": true\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 8,\n        \"w\": 7,\n        \"x\": 0,\n        \"y\": 27\n      },\n      \"id\": 6,\n      \"options\": {\n        \"legend\": {\n          \"calcs\": [],\n          \"displayMode\": \"list\",\n          \"placement\": \"bottom\",\n          \"showLegend\": true\n        },\n        \"tooltip\": {\n          \"mode\": \"single\",\n          \"sort\": \"none\"\n        }\n      },\n      \"pluginVersion\": \"8.1.3\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"editorMode\": \"code\",\n          \"exemplar\": true,\n          \"expr\": \"libp2p_peers_per_client{instance=~\\\"$Instance\\\"}\",\n          \"format\": \"time_series\",\n          \"instant\": false,\n          \"interval\": \"\",\n          \"legendFormat\": \"{{Client}}:{{instance}}\",\n          \"range\": true,\n          \"refId\": \"A\"\n        }\n      ],\n      \"title\": \"Connected Clients\",\n      \"transparent\": true,\n      \"type\": \"timeseries\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"description\": \"Peers that have dialed us\",\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"palette-classic\"\n          },\n          \"custom\": {\n            \"axisBorderShow\": false,\n            \"axisCenteredZero\": false,\n            \"axisColorMode\": \"text\",\n            \"axisLabel\": \"\",\n            \"axisPlacement\": \"auto\",\n            \"barAlignment\": 0,\n            \"drawStyle\": \"line\",\n            \"fillOpacity\": 0,\n            \"gradientMode\": \"none\",\n            \"hideFrom\": {\n              \"legend\": false,\n              \"tooltip\": false,\n              \"viz\": false\n            },\n            \"insertNulls\": false,\n            \"lineInterpolation\": \"linear\",\n            \"lineWidth\": 1,\n            \"pointSize\": 5,\n            \"scaleDistribution\": {\n              \"type\": \"linear\"\n            },\n            \"showPoints\": \"auto\",\n            \"spanNulls\": false,\n            \"stacking\": {\n              \"group\": \"A\",\n              \"mode\": \"none\"\n            },\n            \"thresholdsStyle\": {\n              \"mode\": \"off\"\n            }\n          },\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\"\n              },\n              {\n                \"color\": \"red\",\n                \"value\": 80\n              }\n            ]\n          },\n          \"unitScale\": true\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 7,\n        \"w\": 8,\n        \"x\": 7,\n        \"y\": 27\n      },\n      \"id\": 2,\n      \"options\": {\n        \"legend\": {\n          \"calcs\": [],\n          \"displayMode\": \"list\",\n          \"placement\": \"bottom\",\n          \"showLegend\": true\n        },\n        \"tooltip\": {\n          \"mode\": \"single\",\n          \"sort\": \"none\"\n        }\n      },\n      \"pluginVersion\": \"8.1.3\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"disableTextWrap\": false,\n          \"editorMode\": \"builder\",\n          \"exemplar\": true,\n          \"expr\": \"sum by(direction) (libp2p_peers_multi{instance=~\\\"$Instance\\\"})\",\n          \"format\": \"time_series\",\n          \"fullMetaSearch\": false,\n          \"includeNullMetadata\": true,\n          \"instant\": false,\n          \"interval\": \"\",\n          \"legendFormat\": \"__auto\",\n          \"range\": true,\n          \"refId\": \"A\",\n          \"useBackend\": false\n        }\n      ],\n      \"title\": \"Inbound/Outbound Connected Peers\",\n      \"transparent\": true,\n      \"type\": \"timeseries\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"palette-classic\"\n          },\n          \"custom\": {\n            \"axisBorderShow\": false,\n            \"axisCenteredZero\": false,\n            \"axisColorMode\": \"text\",\n            \"axisLabel\": \"\",\n            \"axisPlacement\": \"auto\",\n            \"barAlignment\": 0,\n            \"drawStyle\": \"line\",\n            \"fillOpacity\": 0,\n            \"gradientMode\": \"none\",\n            \"hideFrom\": {\n              \"legend\": false,\n              \"tooltip\": false,\n              \"viz\": false\n            },\n            \"insertNulls\": false,\n            \"lineInterpolation\": \"linear\",\n            \"lineWidth\": 1,\n            \"pointSize\": 5,\n            \"scaleDistribution\": {\n              \"type\": \"linear\"\n            },\n            \"showPoints\": \"auto\",\n            \"spanNulls\": false,\n            \"stacking\": {\n              \"group\": \"A\",\n              \"mode\": \"none\"\n            },\n            \"thresholdsStyle\": {\n              \"mode\": \"off\"\n            }\n          },\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\"\n              },\n              {\n                \"color\": \"red\",\n                \"value\": 80\n              }\n            ]\n          },\n          \"unitScale\": true\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 7,\n        \"w\": 9,\n        \"x\": 15,\n        \"y\": 27\n      },\n      \"id\": 127,\n      \"options\": {\n        \"legend\": {\n          \"calcs\": [],\n          \"displayMode\": \"list\",\n          \"placement\": \"bottom\",\n          \"showLegend\": true\n        },\n        \"tooltip\": {\n          \"mode\": \"single\",\n          \"sort\": \"none\"\n        }\n      },\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"disableTextWrap\": false,\n          \"editorMode\": \"builder\",\n          \"exemplar\": false,\n          \"expr\": \"sum by(transport) (libp2p_peers_multi{instance=~\\\"$Instance\\\"})\",\n          \"fullMetaSearch\": false,\n          \"hide\": false,\n          \"includeNullMetadata\": true,\n          \"instant\": false,\n          \"legendFormat\": \"{{instance}}: {{transport}}\",\n          \"range\": true,\n          \"refId\": \"A\",\n          \"useBackend\": false\n        }\n      ],\n      \"title\": \"Connected Peers By Transport\",\n      \"transparent\": true,\n      \"type\": \"timeseries\"\n    },\n    {\n      \"collapsed\": false,\n      \"gridPos\": {\n        \"h\": 1,\n        \"w\": 24,\n        \"x\": 0,\n        \"y\": 35\n      },\n      \"id\": 94,\n      \"panels\": [],\n      \"title\": \"Discovery\",\n      \"type\": \"row\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"description\": \"\",\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"continuous-GrYlRd\"\n          },\n          \"custom\": {\n            \"axisBorderShow\": false,\n            \"axisCenteredZero\": false,\n            \"axisColorMode\": \"text\",\n            \"axisLabel\": \"\",\n            \"axisPlacement\": \"auto\",\n            \"barAlignment\": 0,\n            \"drawStyle\": \"line\",\n            \"fillOpacity\": 10,\n            \"gradientMode\": \"scheme\",\n            \"hideFrom\": {\n              \"legend\": false,\n              \"tooltip\": false,\n              \"viz\": false\n            },\n            \"insertNulls\": false,\n            \"lineInterpolation\": \"smooth\",\n            \"lineWidth\": 1,\n            \"pointSize\": 5,\n            \"scaleDistribution\": {\n              \"type\": \"linear\"\n            },\n            \"showPoints\": \"never\",\n            \"spanNulls\": true,\n            \"stacking\": {\n              \"group\": \"A\",\n              \"mode\": \"none\"\n            },\n            \"thresholdsStyle\": {\n              \"mode\": \"off\"\n            }\n          },\n          \"links\": [],\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\"\n              }\n            ]\n          },\n          \"unit\": \"short\",\n          \"unitScale\": true\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 7,\n        \"w\": 10,\n        \"x\": 0,\n        \"y\": 36\n      },\n      \"id\": 65,\n      \"options\": {\n        \"legend\": {\n          \"calcs\": [\n            \"lastNotNull\"\n          ],\n          \"displayMode\": \"table\",\n          \"placement\": \"bottom\",\n          \"showLegend\": true\n        },\n        \"tooltip\": {\n          \"mode\": \"single\",\n          \"sort\": \"none\"\n        }\n      },\n      \"pluginVersion\": \"8.1.3\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"exemplar\": true,\n          \"expr\": \"discovery_requests{instance=~\\\"$Instance\\\"}\",\n          \"interval\": \"\",\n          \"legendFormat\": \"Requests/s\",\n          \"refId\": \"A\"\n        }\n      ],\n      \"title\": \"Unsolicited Discovery Requests/s\",\n      \"transparent\": true,\n      \"type\": \"timeseries\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"description\": \"\",\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"palette-classic\"\n          },\n          \"custom\": {\n            \"axisBorderShow\": false,\n            \"axisCenteredZero\": false,\n            \"axisColorMode\": \"text\",\n            \"axisLabel\": \"\",\n            \"axisPlacement\": \"auto\",\n            \"barAlignment\": 0,\n            \"drawStyle\": \"line\",\n            \"fillOpacity\": 10,\n            \"gradientMode\": \"opacity\",\n            \"hideFrom\": {\n              \"legend\": false,\n              \"tooltip\": false,\n              \"viz\": false\n            },\n            \"insertNulls\": false,\n            \"lineInterpolation\": \"smooth\",\n            \"lineWidth\": 1,\n            \"pointSize\": 5,\n            \"scaleDistribution\": {\n              \"type\": \"linear\"\n            },\n            \"showPoints\": \"never\",\n            \"spanNulls\": true,\n            \"stacking\": {\n              \"group\": \"A\",\n              \"mode\": \"none\"\n            },\n            \"thresholdsStyle\": {\n              \"mode\": \"off\"\n            }\n          },\n          \"links\": [],\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\"\n              },\n              {\n                \"color\": \"red\",\n                \"value\": 80\n              }\n            ]\n          },\n          \"unit\": \"short\",\n          \"unitScale\": true\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 7,\n        \"w\": 10,\n        \"x\": 10,\n        \"y\": 36\n      },\n      \"id\": 67,\n      \"options\": {\n        \"legend\": {\n          \"calcs\": [\n            \"lastNotNull\"\n          ],\n          \"displayMode\": \"table\",\n          \"placement\": \"bottom\",\n          \"showLegend\": true\n        },\n        \"tooltip\": {\n          \"mode\": \"single\",\n          \"sort\": \"none\"\n        }\n      },\n      \"pluginVersion\": \"8.1.3\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"exemplar\": true,\n          \"expr\": \"discovery_sessions{instance=~\\\"$Instance\\\"}\",\n          \"interval\": \"\",\n          \"legendFormat\": \"active sessions\",\n          \"refId\": \"A\"\n        }\n      ],\n      \"title\": \"Active Discv5 Sessions\",\n      \"transparent\": true,\n      \"type\": \"timeseries\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"thresholds\"\n          },\n          \"mappings\": [],\n          \"max\": 100,\n          \"min\": 0,\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\"\n              },\n              {\n                \"color\": \"red\",\n                \"value\": 80\n              }\n            ]\n          },\n          \"unitScale\": true\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 7,\n        \"w\": 4,\n        \"x\": 20,\n        \"y\": 36\n      },\n      \"id\": 69,\n      \"options\": {\n        \"minVizHeight\": 75,\n        \"minVizWidth\": 75,\n        \"orientation\": \"auto\",\n        \"reduceOptions\": {\n          \"calcs\": [\n            \"mean\"\n          ],\n          \"fields\": \"\",\n          \"values\": false\n        },\n        \"showThresholdLabels\": false,\n        \"showThresholdMarkers\": true,\n        \"sizing\": \"auto\",\n        \"text\": {}\n      },\n      \"pluginVersion\": \"10.3.3\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"exemplar\": false,\n          \"expr\": \"discovery_queue_size{instance=~\\\"$Instance\\\"}\",\n          \"instant\": true,\n          \"interval\": \"\",\n          \"legendFormat\": \"Queued Discoveries\",\n          \"refId\": \"A\"\n        }\n      ],\n      \"title\": \"Queued Discovery Queries\",\n      \"transparent\": true,\n      \"type\": \"gauge\"\n    },\n    {\n      \"collapsed\": false,\n      \"gridPos\": {\n        \"h\": 1,\n        \"w\": 24,\n        \"x\": 0,\n        \"y\": 43\n      },\n      \"id\": 96,\n      \"panels\": [],\n      \"title\": \"RPC\",\n      \"type\": \"row\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"description\": \"Distribution of connected peer's score by quartile\",\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"palette-classic\"\n          },\n          \"custom\": {\n            \"axisBorderShow\": false,\n            \"axisCenteredZero\": false,\n            \"axisColorMode\": \"text\",\n            \"axisLabel\": \"\",\n            \"axisPlacement\": \"auto\",\n            \"barAlignment\": 0,\n            \"drawStyle\": \"line\",\n            \"fillOpacity\": 0,\n            \"gradientMode\": \"opacity\",\n            \"hideFrom\": {\n              \"legend\": false,\n              \"tooltip\": false,\n              \"viz\": false\n            },\n            \"insertNulls\": false,\n            \"lineInterpolation\": \"smooth\",\n            \"lineStyle\": {\n              \"fill\": \"solid\"\n            },\n            \"lineWidth\": 1,\n            \"pointSize\": 5,\n            \"scaleDistribution\": {\n              \"type\": \"linear\"\n            },\n            \"showPoints\": \"auto\",\n            \"spanNulls\": false,\n            \"stacking\": {\n              \"group\": \"A\",\n              \"mode\": \"none\"\n            },\n            \"thresholdsStyle\": {\n              \"mode\": \"area\"\n            }\n          },\n          \"mappings\": [],\n          \"max\": 0,\n          \"min\": -25,\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\"\n              },\n              {\n                \"color\": \"light-orange\",\n                \"value\": -30\n              },\n              {\n                \"color\": \"transparent\",\n                \"value\": -20\n              }\n            ]\n          },\n          \"unitScale\": true\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 7,\n        \"w\": 12,\n        \"x\": 0,\n        \"y\": 44\n      },\n      \"id\": 51,\n      \"options\": {\n        \"legend\": {\n          \"calcs\": [\n            \"lastNotNull\"\n          ],\n          \"displayMode\": \"table\",\n          \"placement\": \"right\",\n          \"showLegend\": true\n        },\n        \"tooltip\": {\n          \"mode\": \"single\",\n          \"sort\": \"none\"\n        }\n      },\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"exemplar\": true,\n          \"expr\": \"peer_score_distribution{instance=~\\\"$Instance\\\"}\",\n          \"interval\": \"\",\n          \"legendFormat\": \"{{position}}\",\n          \"refId\": \"A\"\n        }\n      ],\n      \"title\": \"Connected Peer Score Distribution\",\n      \"transparent\": true,\n      \"type\": \"timeseries\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"palette-classic\"\n          },\n          \"custom\": {\n            \"axisBorderShow\": false,\n            \"axisCenteredZero\": false,\n            \"axisColorMode\": \"text\",\n            \"axisLabel\": \"\",\n            \"axisPlacement\": \"auto\",\n            \"barAlignment\": 0,\n            \"drawStyle\": \"line\",\n            \"fillOpacity\": 0,\n            \"gradientMode\": \"opacity\",\n            \"hideFrom\": {\n              \"legend\": false,\n              \"tooltip\": false,\n              \"viz\": false\n            },\n            \"insertNulls\": false,\n            \"lineInterpolation\": \"smooth\",\n            \"lineStyle\": {\n              \"fill\": \"solid\"\n            },\n            \"lineWidth\": 1,\n            \"pointSize\": 5,\n            \"scaleDistribution\": {\n              \"type\": \"linear\"\n            },\n            \"showPoints\": \"auto\",\n            \"spanNulls\": false,\n            \"stacking\": {\n              \"group\": \"A\",\n              \"mode\": \"none\"\n            },\n            \"thresholdsStyle\": {\n              \"mode\": \"off\"\n            }\n          },\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\"\n              }\n            ]\n          },\n          \"unitScale\": true\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 7,\n        \"w\": 12,\n        \"x\": 12,\n        \"y\": 44\n      },\n      \"id\": 32,\n      \"options\": {\n        \"legend\": {\n          \"calcs\": [\n            \"lastNotNull\"\n          ],\n          \"displayMode\": \"list\",\n          \"placement\": \"right\",\n          \"showLegend\": true\n        },\n        \"tooltip\": {\n          \"mode\": \"single\",\n          \"sort\": \"none\"\n        }\n      },\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"exemplar\": true,\n          \"expr\": \"sum(rate(libp2p_rpc_errors_per_client{instance=~\\\"$Instance\\\"}[$__rate_interval]))\",\n          \"instant\": false,\n          \"interval\": \"\",\n          \"legendFormat\": \"Errors Per Second\",\n          \"refId\": \"A\"\n        }\n      ],\n      \"title\": \"RPC Error Rate\",\n      \"transparent\": true,\n      \"type\": \"timeseries\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"description\": \"\",\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"palette-classic\"\n          },\n          \"custom\": {\n            \"axisBorderShow\": false,\n            \"axisCenteredZero\": false,\n            \"axisColorMode\": \"text\",\n            \"axisLabel\": \"\",\n            \"axisPlacement\": \"auto\",\n            \"barAlignment\": 0,\n            \"drawStyle\": \"line\",\n            \"fillOpacity\": 0,\n            \"gradientMode\": \"none\",\n            \"hideFrom\": {\n              \"legend\": false,\n              \"tooltip\": false,\n              \"viz\": false\n            },\n            \"insertNulls\": false,\n            \"lineInterpolation\": \"linear\",\n            \"lineWidth\": 1,\n            \"pointSize\": 5,\n            \"scaleDistribution\": {\n              \"type\": \"linear\"\n            },\n            \"showPoints\": \"auto\",\n            \"spanNulls\": false,\n            \"stacking\": {\n              \"group\": \"A\",\n              \"mode\": \"none\"\n            },\n            \"thresholdsStyle\": {\n              \"mode\": \"off\"\n            }\n          },\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\"\n              },\n              {\n                \"color\": \"red\",\n                \"value\": 80\n              }\n            ]\n          },\n          \"unitScale\": true\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 7,\n        \"w\": 11,\n        \"x\": 0,\n        \"y\": 51\n      },\n      \"id\": 30,\n      \"options\": {\n        \"legend\": {\n          \"calcs\": [],\n          \"displayMode\": \"list\",\n          \"placement\": \"bottom\",\n          \"showLegend\": true\n        },\n        \"tooltip\": {\n          \"mode\": \"single\",\n          \"sort\": \"none\"\n        }\n      },\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"exemplar\": true,\n          \"expr\": \"rate(libp2p_rpc_errors_per_client{rpc_error!~\\\"timeout\\\", instance=~\\\"$Instance\\\"}[$__rate_interval])\",\n          \"interval\": \"\",\n          \"legendFormat\": \"{{client}} - {{rpc_error}}\",\n          \"refId\": \"A\"\n        }\n      ],\n      \"title\": \"RPC Errors (Non timeout)\",\n      \"transparent\": true,\n      \"type\": \"timeseries\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"palette-classic\"\n          },\n          \"custom\": {\n            \"axisBorderShow\": false,\n            \"axisCenteredZero\": false,\n            \"axisColorMode\": \"text\",\n            \"axisLabel\": \"\",\n            \"axisPlacement\": \"auto\",\n            \"barAlignment\": 0,\n            \"drawStyle\": \"line\",\n            \"fillOpacity\": 0,\n            \"gradientMode\": \"none\",\n            \"hideFrom\": {\n              \"legend\": false,\n              \"tooltip\": false,\n              \"viz\": false\n            },\n            \"insertNulls\": false,\n            \"lineInterpolation\": \"smooth\",\n            \"lineWidth\": 1,\n            \"pointSize\": 5,\n            \"scaleDistribution\": {\n              \"type\": \"linear\"\n            },\n            \"showPoints\": \"auto\",\n            \"spanNulls\": false,\n            \"stacking\": {\n              \"group\": \"A\",\n              \"mode\": \"none\"\n            },\n            \"thresholdsStyle\": {\n              \"mode\": \"off\"\n            }\n          },\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\"\n              }\n            ]\n          },\n          \"unitScale\": true\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 8,\n        \"w\": 13,\n        \"x\": 11,\n        \"y\": 51\n      },\n      \"id\": 75,\n      \"options\": {\n        \"legend\": {\n          \"calcs\": [\n            \"lastNotNull\"\n          ],\n          \"displayMode\": \"table\",\n          \"placement\": \"right\",\n          \"showLegend\": true\n        },\n        \"tooltip\": {\n          \"mode\": \"single\",\n          \"sort\": \"none\"\n        }\n      },\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"exemplar\": true,\n          \"expr\": \"rate(libp2p_rpc_requests_total{instance=~\\\"$Instance\\\"}[10m])\",\n          \"interval\": \"\",\n          \"legendFormat\": \"{{type}}\",\n          \"refId\": \"A\"\n        }\n      ],\n      \"title\": \"10m Average RPC Requests per Second\",\n      \"transparent\": true,\n      \"type\": \"timeseries\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"palette-classic\"\n          },\n          \"custom\": {\n            \"axisBorderShow\": false,\n            \"axisCenteredZero\": false,\n            \"axisColorMode\": \"text\",\n            \"axisLabel\": \"\",\n            \"axisPlacement\": \"auto\",\n            \"barAlignment\": 0,\n            \"drawStyle\": \"line\",\n            \"fillOpacity\": 0,\n            \"gradientMode\": \"none\",\n            \"hideFrom\": {\n              \"legend\": false,\n              \"tooltip\": false,\n              \"viz\": false\n            },\n            \"insertNulls\": false,\n            \"lineInterpolation\": \"linear\",\n            \"lineWidth\": 1,\n            \"pointSize\": 5,\n            \"scaleDistribution\": {\n              \"type\": \"linear\"\n            },\n            \"showPoints\": \"auto\",\n            \"spanNulls\": false,\n            \"stacking\": {\n              \"group\": \"A\",\n              \"mode\": \"none\"\n            },\n            \"thresholdsStyle\": {\n              \"mode\": \"off\"\n            }\n          },\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\"\n              },\n              {\n                \"color\": \"red\",\n                \"value\": 80\n              }\n            ]\n          },\n          \"unitScale\": true\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 7,\n        \"w\": 11,\n        \"x\": 0,\n        \"y\": 58\n      },\n      \"id\": 28,\n      \"options\": {\n        \"legend\": {\n          \"calcs\": [],\n          \"displayMode\": \"list\",\n          \"placement\": \"bottom\",\n          \"showLegend\": true\n        },\n        \"tooltip\": {\n          \"mode\": \"single\",\n          \"sort\": \"none\"\n        }\n      },\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"exemplar\": true,\n          \"expr\": \"rate(libp2p_rpc_errors_per_client{rpc_error=~\\\"negotiation_timeout|stream_timeout\\\", instance=~\\\"$Instance\\\"}[$__rate_interval])\",\n          \"interval\": \"\",\n          \"legendFormat\": \"{{client}} -{{rpc_error}}\",\n          \"refId\": \"A\"\n        }\n      ],\n      \"title\": \"RPC Timeouts Per Client\",\n      \"transparent\": true,\n      \"type\": \"timeseries\"\n    },\n    {\n      \"collapsed\": false,\n      \"gridPos\": {\n        \"h\": 1,\n        \"w\": 24,\n        \"x\": 0,\n        \"y\": 65\n      },\n      \"id\": 98,\n      \"panels\": [],\n      \"title\": \"Gossipsub\",\n      \"type\": \"row\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"description\": \"\",\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"palette-classic\"\n          },\n          \"custom\": {\n            \"axisBorderShow\": false,\n            \"axisCenteredZero\": false,\n            \"axisColorMode\": \"text\",\n            \"axisLabel\": \"\",\n            \"axisPlacement\": \"auto\",\n            \"barAlignment\": 0,\n            \"drawStyle\": \"line\",\n            \"fillOpacity\": 0,\n            \"gradientMode\": \"none\",\n            \"hideFrom\": {\n              \"legend\": false,\n              \"tooltip\": false,\n              \"viz\": false\n            },\n            \"insertNulls\": false,\n            \"lineInterpolation\": \"linear\",\n            \"lineWidth\": 1,\n            \"pointSize\": 5,\n            \"scaleDistribution\": {\n              \"type\": \"linear\"\n            },\n            \"showPoints\": \"auto\",\n            \"spanNulls\": false,\n            \"stacking\": {\n              \"group\": \"A\",\n              \"mode\": \"none\"\n            },\n            \"thresholdsStyle\": {\n              \"mode\": \"off\"\n            }\n          },\n          \"mappings\": [],\n          \"max\": 12,\n          \"min\": 0,\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"semi-dark-blue\"\n              },\n              {\n                \"color\": \"semi-dark-blue\",\n                \"value\": 3\n              },\n              {\n                \"color\": \"#6ED0E0\",\n                \"value\": 4\n              },\n              {\n                \"color\": \"light-green\",\n                \"value\": 5\n              },\n              {\n                \"color\": \"semi-dark-green\",\n                \"value\": 7\n              },\n              {\n                \"color\": \"#EAB839\",\n                \"value\": 10\n              },\n              {\n                \"color\": \"semi-dark-red\",\n                \"value\": 12\n              }\n            ]\n          },\n          \"unitScale\": true\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 6,\n        \"w\": 12,\n        \"x\": 0,\n        \"y\": 66\n      },\n      \"id\": 12,\n      \"options\": {\n        \"legend\": {\n          \"calcs\": [\n            \"last\"\n          ],\n          \"displayMode\": \"table\",\n          \"placement\": \"bottom\",\n          \"showLegend\": true\n        },\n        \"tooltip\": {\n          \"mode\": \"single\",\n          \"sort\": \"none\"\n        }\n      },\n      \"pluginVersion\": \"8.1.3\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"editorMode\": \"code\",\n          \"exemplar\": true,\n          \"expr\": \"gossipsub_mesh_peer_counts{hash=~\\\".*$Topic.*\\\", instance=~\\\"$Instance\\\"}\",\n          \"instant\": false,\n          \"interval\": \"\",\n          \"legendFormat\": \"{{hash}}\",\n          \"refId\": \"A\"\n        }\n      ],\n      \"title\": \"Mesh Peers\",\n      \"transformations\": [\n        {\n          \"id\": \"renameByRegex\",\n          \"options\": {\n            \"regex\": \"/(/eth2/.{8}/)/\",\n            \"renamePattern\": \"\"\n          }\n        },\n        {\n          \"id\": \"renameByRegex\",\n          \"options\": {\n            \"regex\": \"/(/ssz_snappy)/\",\n            \"renamePattern\": \"\"\n          }\n        }\n      ],\n      \"transparent\": true,\n      \"type\": \"timeseries\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"description\": \"\",\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"thresholds\"\n          },\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\"\n              },\n              {\n                \"color\": \"#EAB839\",\n                \"value\": 2\n              }\n            ]\n          },\n          \"unitScale\": true\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 6,\n        \"w\": 3,\n        \"x\": 12,\n        \"y\": 66\n      },\n      \"id\": 38,\n      \"options\": {\n        \"minVizHeight\": 75,\n        \"minVizWidth\": 75,\n        \"orientation\": \"auto\",\n        \"reduceOptions\": {\n          \"calcs\": [\n            \"lastNotNull\"\n          ],\n          \"fields\": \"\",\n          \"values\": false\n        },\n        \"showThresholdLabels\": false,\n        \"showThresholdMarkers\": true,\n        \"sizing\": \"auto\",\n        \"text\": {}\n      },\n      \"pluginVersion\": \"10.3.3\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"exemplar\": true,\n          \"expr\": \"rate(gossipsub_topic_msg_recv_counts_total{hash=~\\\".*beacon_block.*\\\", instance=~\\\"$Instance\\\"}[$__rate_interval])*12\",\n          \"instant\": false,\n          \"interval\": \"\",\n          \"legendFormat\": \"\",\n          \"refId\": \"A\"\n        }\n      ],\n      \"title\": \"Blocks Per Slot\",\n      \"transparent\": true,\n      \"type\": \"gauge\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"description\": \"\",\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"thresholds\"\n          },\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\"\n              },\n              {\n                \"color\": \"#EAB839\",\n                \"value\": 768\n              },\n              {\n                \"color\": \"dark-red\",\n                \"value\": 1000\n              }\n            ]\n          },\n          \"unitScale\": true\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 6,\n        \"w\": 3,\n        \"x\": 15,\n        \"y\": 66\n      },\n      \"id\": 37,\n      \"options\": {\n        \"minVizHeight\": 75,\n        \"minVizWidth\": 75,\n        \"orientation\": \"auto\",\n        \"reduceOptions\": {\n          \"calcs\": [\n            \"lastNotNull\"\n          ],\n          \"fields\": \"\",\n          \"values\": false\n        },\n        \"showThresholdLabels\": false,\n        \"showThresholdMarkers\": true,\n        \"sizing\": \"auto\",\n        \"text\": {}\n      },\n      \"pluginVersion\": \"10.3.3\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"exemplar\": true,\n          \"expr\": \"rate(gossipsub_topic_msg_recv_counts_total{hash=~\\\".*beacon_aggregate_and_proof.*\\\", instance=~\\\"$Instance\\\"}[$__rate_interval])*12\",\n          \"instant\": false,\n          \"interval\": \"\",\n          \"legendFormat\": \"\",\n          \"refId\": \"A\"\n        }\n      ],\n      \"title\": \"Aggregated Attestations Per Slot\",\n      \"transparent\": true,\n      \"type\": \"gauge\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"description\": \"\",\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"thresholds\"\n          },\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\"\n              },\n              {\n                \"color\": \"red\",\n                \"value\": 80\n              }\n            ]\n          },\n          \"unitScale\": true\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 6,\n        \"w\": 3,\n        \"x\": 18,\n        \"y\": 66\n      },\n      \"id\": 44,\n      \"options\": {\n        \"minVizHeight\": 75,\n        \"minVizWidth\": 75,\n        \"orientation\": \"auto\",\n        \"reduceOptions\": {\n          \"calcs\": [\n            \"lastNotNull\"\n          ],\n          \"fields\": \"\",\n          \"values\": false\n        },\n        \"showThresholdLabels\": false,\n        \"showThresholdMarkers\": true,\n        \"sizing\": \"auto\",\n        \"text\": {}\n      },\n      \"pluginVersion\": \"10.3.3\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"exemplar\": false,\n          \"expr\": \"sum(rate(gossipsub_invalid_messages_per_topic{instance=~\\\"$Instance\\\"}[$__rate_interval]))\",\n          \"instant\": true,\n          \"interval\": \"\",\n          \"legendFormat\": \"{{topic}}\",\n          \"refId\": \"A\"\n        }\n      ],\n      \"title\": \"Invalid Messages Per Slot\",\n      \"transparent\": true,\n      \"type\": \"gauge\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"description\": \"Cache Misses over a 10m window\",\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"thresholds\"\n          },\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\"\n              },\n              {\n                \"color\": \"red\",\n                \"value\": 5\n              }\n            ]\n          },\n          \"unitScale\": true\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 6,\n        \"w\": 3,\n        \"x\": 21,\n        \"y\": 66\n      },\n      \"id\": 42,\n      \"options\": {\n        \"minVizHeight\": 75,\n        \"minVizWidth\": 75,\n        \"orientation\": \"auto\",\n        \"reduceOptions\": {\n          \"calcs\": [\n            \"lastNotNull\"\n          ],\n          \"fields\": \"\",\n          \"values\": false\n        },\n        \"showThresholdLabels\": false,\n        \"showThresholdMarkers\": true,\n        \"sizing\": \"auto\",\n        \"text\": {}\n      },\n      \"pluginVersion\": \"10.3.3\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"exemplar\": true,\n          \"expr\": \"rate(gossipsub_memcache_misses_total{instance=~\\\"$Instance\\\"}[$__rate_interval])\",\n          \"interval\": \"\",\n          \"legendFormat\": \"\",\n          \"refId\": \"A\"\n        }\n      ],\n      \"title\": \"Cache Misses\",\n      \"transparent\": true,\n      \"type\": \"gauge\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"thresholds\"\n          },\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\"\n              }\n            ]\n          },\n          \"unitScale\": true\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 10,\n        \"w\": 24,\n        \"x\": 0,\n        \"y\": 72\n      },\n      \"id\": 14,\n      \"options\": {\n        \"displayMode\": \"gradient\",\n        \"maxVizHeight\": 300,\n        \"minVizHeight\": 10,\n        \"minVizWidth\": 0,\n        \"namePlacement\": \"auto\",\n        \"orientation\": \"auto\",\n        \"reduceOptions\": {\n          \"calcs\": [\n            \"lastNotNull\"\n          ],\n          \"fields\": \"\",\n          \"values\": false\n        },\n        \"showUnfilled\": true,\n        \"sizing\": \"auto\",\n        \"text\": {},\n        \"valueMode\": \"color\"\n      },\n      \"pluginVersion\": \"10.3.3\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"exemplar\": false,\n          \"expr\": \"rate(gossipsub_score_per_mesh_bucket{hash=~\\\".*beacon_aggregate_and_proof.*\\\", instance=~\\\"$Instance\\\"}[$__rate_interval])\",\n          \"format\": \"heatmap\",\n          \"instant\": true,\n          \"interval\": \"\",\n          \"legendFormat\": \"{{le}}\",\n          \"refId\": \"A\"\n        }\n      ],\n      \"title\": \"Aggregate and Proof Peer Score\",\n      \"transparent\": true,\n      \"type\": \"bargauge\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"thresholds\"\n          },\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\"\n              }\n            ]\n          },\n          \"unit\": \"none\",\n          \"unitScale\": true\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 10,\n        \"w\": 12,\n        \"x\": 0,\n        \"y\": 82\n      },\n      \"id\": 71,\n      \"options\": {\n        \"displayMode\": \"gradient\",\n        \"maxVizHeight\": 300,\n        \"minVizHeight\": 10,\n        \"minVizWidth\": 0,\n        \"namePlacement\": \"auto\",\n        \"orientation\": \"auto\",\n        \"reduceOptions\": {\n          \"calcs\": [\n            \"lastNotNull\"\n          ],\n          \"fields\": \"\",\n          \"values\": false\n        },\n        \"showUnfilled\": true,\n        \"sizing\": \"auto\",\n        \"text\": {},\n        \"valueMode\": \"color\"\n      },\n      \"pluginVersion\": \"10.3.3\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"exemplar\": true,\n          \"expr\": \"rate(beacon_block_gossip_slot_start_delay_time_bucket{instance=~\\\"$Instance\\\"}[10m])*12\",\n          \"format\": \"heatmap\",\n          \"instant\": false,\n          \"interval\": \"\",\n          \"legendFormat\": \"{{le}}\",\n          \"refId\": \"A\"\n        }\n      ],\n      \"title\": \"10m Average of Block Delay from Start of Slot\",\n      \"transparent\": true,\n      \"type\": \"bargauge\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"continuous-GrYlRd\"\n          },\n          \"custom\": {\n            \"axisBorderShow\": false,\n            \"axisCenteredZero\": false,\n            \"axisColorMode\": \"text\",\n            \"axisLabel\": \"\",\n            \"axisPlacement\": \"auto\",\n            \"barAlignment\": 0,\n            \"drawStyle\": \"line\",\n            \"fillOpacity\": 0,\n            \"gradientMode\": \"scheme\",\n            \"hideFrom\": {\n              \"legend\": false,\n              \"tooltip\": false,\n              \"viz\": false\n            },\n            \"insertNulls\": false,\n            \"lineInterpolation\": \"smooth\",\n            \"lineWidth\": 1,\n            \"pointSize\": 5,\n            \"scaleDistribution\": {\n              \"type\": \"linear\"\n            },\n            \"showPoints\": \"auto\",\n            \"spanNulls\": false,\n            \"stacking\": {\n              \"group\": \"A\",\n              \"mode\": \"none\"\n            },\n            \"thresholdsStyle\": {\n              \"mode\": \"off\"\n            }\n          },\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\"\n              }\n            ]\n          },\n          \"unitScale\": true\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 10,\n        \"w\": 12,\n        \"x\": 12,\n        \"y\": 82\n      },\n      \"id\": 73,\n      \"options\": {\n        \"legend\": {\n          \"calcs\": [\n            \"lastNotNull\"\n          ],\n          \"displayMode\": \"table\",\n          \"placement\": \"right\",\n          \"showLegend\": true\n        },\n        \"tooltip\": {\n          \"mode\": \"single\",\n          \"sort\": \"none\"\n        }\n      },\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"exemplar\": true,\n          \"expr\": \"rate(beacon_block_gossip_slot_start_delay_time_sum{instance=~\\\"$Instance\\\"}[30s])/rate(beacon_block_gossip_slot_start_delay_time_count{instance=~\\\"$Instance\\\"}[30s])\",\n          \"interval\": \"\",\n          \"legendFormat\": \"Block Delay\",\n          \"refId\": \"A\"\n        }\n      ],\n      \"title\": \"30s Block Delay Average\",\n      \"transparent\": true,\n      \"type\": \"timeseries\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"description\": \"\",\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"palette-classic\"\n          },\n          \"custom\": {\n            \"axisBorderShow\": false,\n            \"axisCenteredZero\": false,\n            \"axisColorMode\": \"text\",\n            \"axisLabel\": \"\",\n            \"axisPlacement\": \"auto\",\n            \"barAlignment\": 0,\n            \"drawStyle\": \"line\",\n            \"fillOpacity\": 0,\n            \"gradientMode\": \"none\",\n            \"hideFrom\": {\n              \"legend\": false,\n              \"tooltip\": false,\n              \"viz\": false\n            },\n            \"insertNulls\": false,\n            \"lineInterpolation\": \"linear\",\n            \"lineWidth\": 1,\n            \"pointSize\": 5,\n            \"scaleDistribution\": {\n              \"type\": \"linear\"\n            },\n            \"showPoints\": \"auto\",\n            \"spanNulls\": false,\n            \"stacking\": {\n              \"group\": \"A\",\n              \"mode\": \"none\"\n            },\n            \"thresholdsStyle\": {\n              \"mode\": \"off\"\n            }\n          },\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\"\n              },\n              {\n                \"color\": \"red\",\n                \"value\": 80\n              }\n            ]\n          },\n          \"unitScale\": true\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 8,\n        \"w\": 12,\n        \"x\": 0,\n        \"y\": 92\n      },\n      \"id\": 43,\n      \"options\": {\n        \"legend\": {\n          \"calcs\": [\n            \"last\"\n          ],\n          \"displayMode\": \"table\",\n          \"placement\": \"right\",\n          \"showLegend\": true\n        },\n        \"tooltip\": {\n          \"mode\": \"single\",\n          \"sort\": \"none\"\n        }\n      },\n      \"pluginVersion\": \"8.1.3\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"editorMode\": \"code\",\n          \"exemplar\": true,\n          \"expr\": \"increase(gossipsub_topic_iwant_msgs_total{instance=~\\\"$Instance\\\", hash=~\\\"/eth2/$Fork/.*\\\", hash=~\\\".*$Topic.*\\\"}[$__rate_interval])\",\n          \"instant\": false,\n          \"interval\": \"\",\n          \"legendFormat\": \"{{hash}}\",\n          \"refId\": \"A\"\n        }\n      ],\n      \"title\": \"IWANT Requests Per Slot\",\n      \"transformations\": [\n        {\n          \"id\": \"renameByRegex\",\n          \"options\": {\n            \"regex\": \"/(/ssz_snappy)/\",\n            \"renamePattern\": \"\"\n          }\n        },\n        {\n          \"id\": \"renameByRegex\",\n          \"options\": {\n            \"regex\": \"/(.*/beacon_aggregate)/\",\n            \"renamePattern\": \"beacon_aggregate\"\n          }\n        },\n        {\n          \"id\": \"renameByRegex\",\n          \"options\": {\n            \"regex\": \"/(.*/beacon_block)/\",\n            \"renamePattern\": \"beacon_block\"\n          }\n        },\n        {\n          \"id\": \"renameByRegex\",\n          \"options\": {\n            \"regex\": \"/(.*/beacon_attestation)/\",\n            \"renamePattern\": \"beacon_attestation\"\n          }\n        },\n        {\n          \"id\": \"renameByRegex\",\n          \"options\": {\n            \"regex\": \"/(.*/sync_committee)/\",\n            \"renamePattern\": \"sync_committee\"\n          }\n        },\n        {\n          \"id\": \"renameByRegex\",\n          \"options\": {\n            \"regex\": \"/(.*/attester_slashing)/\",\n            \"renamePattern\": \"attester_slashing\"\n          }\n        },\n        {\n          \"id\": \"renameByRegex\",\n          \"options\": {\n            \"regex\": \"/(.*/voluntary_exit)/\",\n            \"renamePattern\": \"voluntary_exit\"\n          }\n        }\n      ],\n      \"transparent\": true,\n      \"type\": \"timeseries\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"palette-classic\"\n          },\n          \"custom\": {\n            \"axisBorderShow\": false,\n            \"axisCenteredZero\": false,\n            \"axisColorMode\": \"text\",\n            \"axisLabel\": \"\",\n            \"axisPlacement\": \"auto\",\n            \"barAlignment\": 0,\n            \"drawStyle\": \"line\",\n            \"fillOpacity\": 0,\n            \"gradientMode\": \"none\",\n            \"hideFrom\": {\n              \"legend\": false,\n              \"tooltip\": false,\n              \"viz\": false\n            },\n            \"insertNulls\": false,\n            \"lineInterpolation\": \"linear\",\n            \"lineWidth\": 1,\n            \"pointSize\": 5,\n            \"scaleDistribution\": {\n              \"type\": \"linear\"\n            },\n            \"showPoints\": \"auto\",\n            \"spanNulls\": false,\n            \"stacking\": {\n              \"group\": \"A\",\n              \"mode\": \"none\"\n            },\n            \"thresholdsStyle\": {\n              \"mode\": \"off\"\n            }\n          },\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\"\n              },\n              {\n                \"color\": \"red\",\n                \"value\": 80\n              }\n            ]\n          },\n          \"unitScale\": true\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 8,\n        \"w\": 12,\n        \"x\": 12,\n        \"y\": 92\n      },\n      \"id\": 46,\n      \"options\": {\n        \"legend\": {\n          \"calcs\": [\n            \"last\"\n          ],\n          \"displayMode\": \"table\",\n          \"placement\": \"right\",\n          \"showLegend\": true\n        },\n        \"tooltip\": {\n          \"mode\": \"single\",\n          \"sort\": \"none\"\n        }\n      },\n      \"pluginVersion\": \"8.1.3\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"editorMode\": \"code\",\n          \"exemplar\": true,\n          \"expr\": \"rate(gossipsub_topic_msg_recv_counts_unfiltered_total{hash=~\\\"/eth2/$Fork/.*\\\", hash=~\\\".*$Topic.*\\\", instance=~\\\"$Instance\\\"}[$__rate_interval])*12 - rate(gossipsub_topic_msg_recv_counts_total{hash=~\\\"/eth2/$Fork/.*\\\", hash=~\\\".*$Topic.*\\\", instance=~\\\"$Instance\\\"}[$__rate_interval])*12\",\n          \"instant\": false,\n          \"interval\": \"\",\n          \"legendFormat\": \"{{hash}}\",\n          \"refId\": \"A\"\n        }\n      ],\n      \"title\": \"Duplicates Filtered Per Slot\",\n      \"transformations\": [\n        {\n          \"id\": \"renameByRegex\",\n          \"options\": {\n            \"regex\": \"/(/ssz_snappy)/\",\n            \"renamePattern\": \"\"\n          }\n        },\n        {\n          \"id\": \"renameByRegex\",\n          \"options\": {\n            \"regex\": \"/(.*/beacon_aggregate)/\",\n            \"renamePattern\": \"beacon_aggregate\"\n          }\n        },\n        {\n          \"id\": \"renameByRegex\",\n          \"options\": {\n            \"regex\": \"/(.*/beacon_block)/\",\n            \"renamePattern\": \"beacon_block\"\n          }\n        }\n      ],\n      \"transparent\": true,\n      \"type\": \"timeseries\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"description\": \"Gossipsub Attestation Errors By Type\",\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"palette-classic\"\n          },\n          \"custom\": {\n            \"axisBorderShow\": false,\n            \"axisCenteredZero\": false,\n            \"axisColorMode\": \"text\",\n            \"axisLabel\": \"\",\n            \"axisPlacement\": \"auto\",\n            \"barAlignment\": 0,\n            \"drawStyle\": \"line\",\n            \"fillOpacity\": 0,\n            \"gradientMode\": \"none\",\n            \"hideFrom\": {\n              \"legend\": false,\n              \"tooltip\": false,\n              \"viz\": false\n            },\n            \"insertNulls\": false,\n            \"lineInterpolation\": \"linear\",\n            \"lineWidth\": 1,\n            \"pointSize\": 5,\n            \"scaleDistribution\": {\n              \"type\": \"linear\"\n            },\n            \"showPoints\": \"auto\",\n            \"spanNulls\": false,\n            \"stacking\": {\n              \"group\": \"A\",\n              \"mode\": \"none\"\n            },\n            \"thresholdsStyle\": {\n              \"mode\": \"off\"\n            }\n          },\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\"\n              },\n              {\n                \"color\": \"red\",\n                \"value\": 80\n              }\n            ]\n          },\n          \"unitScale\": true\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 8,\n        \"w\": 12,\n        \"x\": 0,\n        \"y\": 100\n      },\n      \"id\": 40,\n      \"options\": {\n        \"legend\": {\n          \"calcs\": [\n            \"lastNotNull\"\n          ],\n          \"displayMode\": \"table\",\n          \"placement\": \"right\",\n          \"showLegend\": true\n        },\n        \"tooltip\": {\n          \"mode\": \"single\",\n          \"sort\": \"none\"\n        }\n      },\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"editorMode\": \"builder\",\n          \"exemplar\": true,\n          \"expr\": \"changes(gossipsub_attestation_errors_per_type[$__interval])\",\n          \"instant\": false,\n          \"interval\": \"\",\n          \"legendFormat\": \"{{type}}\",\n          \"refId\": \"A\"\n        }\n      ],\n      \"title\": \"Attestation Errors Per Slot\",\n      \"transparent\": true,\n      \"type\": \"timeseries\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"description\": \"\",\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"palette-classic\"\n          },\n          \"custom\": {\n            \"axisBorderShow\": false,\n            \"axisCenteredZero\": false,\n            \"axisColorMode\": \"text\",\n            \"axisLabel\": \"\",\n            \"axisPlacement\": \"auto\",\n            \"barAlignment\": 0,\n            \"drawStyle\": \"line\",\n            \"fillOpacity\": 0,\n            \"gradientMode\": \"none\",\n            \"hideFrom\": {\n              \"legend\": false,\n              \"tooltip\": false,\n              \"viz\": false\n            },\n            \"insertNulls\": false,\n            \"lineInterpolation\": \"linear\",\n            \"lineWidth\": 1,\n            \"pointSize\": 5,\n            \"scaleDistribution\": {\n              \"type\": \"linear\"\n            },\n            \"showPoints\": \"auto\",\n            \"spanNulls\": false,\n            \"stacking\": {\n              \"group\": \"A\",\n              \"mode\": \"none\"\n            },\n            \"thresholdsStyle\": {\n              \"mode\": \"off\"\n            }\n          },\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\"\n              },\n              {\n                \"color\": \"red\",\n                \"value\": 80\n              }\n            ]\n          },\n          \"unitScale\": true\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 8,\n        \"w\": 12,\n        \"x\": 12,\n        \"y\": 100\n      },\n      \"id\": 57,\n      \"options\": {\n        \"legend\": {\n          \"calcs\": [\n            \"last\"\n          ],\n          \"displayMode\": \"table\",\n          \"placement\": \"right\",\n          \"showLegend\": true\n        },\n        \"tooltip\": {\n          \"mode\": \"single\",\n          \"sort\": \"none\"\n        }\n      },\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"exemplar\": true,\n          \"expr\": \"rate(gossipsub_scoring_penalties_total{instance=~\\\"$Instance\\\"}[$__rate_interval])*12\",\n          \"interval\": \"\",\n          \"legendFormat\": \"{{penalty}}\",\n          \"refId\": \"A\"\n        }\n      ],\n      \"title\": \"Gossip Penalties Per Slot\",\n      \"transparent\": true,\n      \"type\": \"timeseries\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"palette-classic\"\n          },\n          \"custom\": {\n            \"axisBorderShow\": false,\n            \"axisCenteredZero\": false,\n            \"axisColorMode\": \"text\",\n            \"axisLabel\": \"ms\",\n            \"axisPlacement\": \"auto\",\n            \"barAlignment\": 0,\n            \"drawStyle\": \"line\",\n            \"fillOpacity\": 0,\n            \"gradientMode\": \"none\",\n            \"hideFrom\": {\n              \"legend\": false,\n              \"tooltip\": false,\n              \"viz\": false\n            },\n            \"insertNulls\": false,\n            \"lineInterpolation\": \"smooth\",\n            \"lineWidth\": 1,\n            \"pointSize\": 5,\n            \"scaleDistribution\": {\n              \"type\": \"linear\"\n            },\n            \"showPoints\": \"auto\",\n            \"spanNulls\": false,\n            \"stacking\": {\n              \"group\": \"A\",\n              \"mode\": \"none\"\n            },\n            \"thresholdsStyle\": {\n              \"mode\": \"off\"\n            }\n          },\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\"\n              },\n              {\n                \"color\": \"red\",\n                \"value\": 80\n              }\n            ]\n          },\n          \"unitScale\": true\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 8,\n        \"w\": 12,\n        \"x\": 0,\n        \"y\": 108\n      },\n      \"id\": 82,\n      \"options\": {\n        \"legend\": {\n          \"calcs\": [\n            \"lastNotNull\"\n          ],\n          \"displayMode\": \"table\",\n          \"placement\": \"right\",\n          \"showLegend\": true\n        },\n        \"tooltip\": {\n          \"mode\": \"single\",\n          \"sort\": \"none\"\n        }\n      },\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"exemplar\": true,\n          \"expr\": \"sum(rate(gossipsub_heartbeat_duration_sum{instance=~\\\"$Instance\\\"}[$__rate_interval]))/sum(rate(gossipsub_heartbeat_duration_count{instance=~\\\"$Instance\\\"}[$__rate_interval]))\",\n          \"interval\": \"\",\n          \"legendFormat\": \"{{Instance}}\",\n          \"refId\": \"A\"\n        }\n      ],\n      \"title\": \"Heartbeat Duration\",\n      \"transparent\": true,\n      \"type\": \"timeseries\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"description\": \"\",\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"palette-classic\"\n          },\n          \"custom\": {\n            \"axisBorderShow\": false,\n            \"axisCenteredZero\": false,\n            \"axisColorMode\": \"text\",\n            \"axisLabel\": \"\",\n            \"axisPlacement\": \"auto\",\n            \"barAlignment\": 0,\n            \"drawStyle\": \"line\",\n            \"fillOpacity\": 0,\n            \"gradientMode\": \"none\",\n            \"hideFrom\": {\n              \"legend\": false,\n              \"tooltip\": false,\n              \"viz\": false\n            },\n            \"insertNulls\": false,\n            \"lineInterpolation\": \"linear\",\n            \"lineWidth\": 1,\n            \"pointSize\": 5,\n            \"scaleDistribution\": {\n              \"type\": \"linear\"\n            },\n            \"showPoints\": \"auto\",\n            \"spanNulls\": false,\n            \"stacking\": {\n              \"group\": \"A\",\n              \"mode\": \"none\"\n            },\n            \"thresholdsStyle\": {\n              \"mode\": \"off\"\n            }\n          },\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\"\n              },\n              {\n                \"color\": \"red\",\n                \"value\": 80\n              }\n            ]\n          },\n          \"unit\": \"Bps\",\n          \"unitScale\": true\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 8,\n        \"w\": 12,\n        \"x\": 12,\n        \"y\": 108\n      },\n      \"id\": 124,\n      \"options\": {\n        \"legend\": {\n          \"calcs\": [\n            \"last\"\n          ],\n          \"displayMode\": \"table\",\n          \"placement\": \"bottom\",\n          \"showLegend\": true\n        },\n        \"tooltip\": {\n          \"mode\": \"single\",\n          \"sort\": \"none\"\n        }\n      },\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"editorMode\": \"code\",\n          \"exemplar\": true,\n          \"expr\": \"rate(gossipsub_topic_msg_recv_bytes_total{hash=~\\\"/eth2/$Fork/.*\\\", hash=~\\\".*$Topic.*\\\", instance=~\\\"$Instance\\\"}[$__rate_interval])\",\n          \"interval\": \"\",\n          \"legendFormat\": \"{{hash}}\",\n          \"range\": true,\n          \"refId\": \"A\"\n        }\n      ],\n      \"title\": \"Recv Bytes per Topic\",\n      \"transformations\": [\n        {\n          \"id\": \"renameByRegex\",\n          \"options\": {\n            \"regex\": \"/(/ssz_snappy)/\",\n            \"renamePattern\": \"\"\n          }\n        },\n        {\n          \"id\": \"renameByRegex\",\n          \"options\": {\n            \"regex\": \"/(.*/.*/)/\",\n            \"renamePattern\": \"\"\n          }\n        }\n      ],\n      \"transparent\": true,\n      \"type\": \"timeseries\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"custom\": {\n            \"hideFrom\": {\n              \"legend\": false,\n              \"tooltip\": false,\n              \"viz\": false\n            },\n            \"scaleDistribution\": {\n              \"type\": \"linear\"\n            }\n          },\n          \"unitScale\": true\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 8,\n        \"w\": 12,\n        \"x\": 0,\n        \"y\": 116\n      },\n      \"id\": 132,\n      \"maxDataPoints\": 50,\n      \"options\": {\n        \"calculate\": false,\n        \"cellGap\": 1,\n        \"color\": {\n          \"exponent\": 0.5,\n          \"fill\": \"dark-orange\",\n          \"mode\": \"scheme\",\n          \"reverse\": false,\n          \"scale\": \"exponential\",\n          \"scheme\": \"Oranges\",\n          \"steps\": 64\n        },\n        \"exemplars\": {\n          \"color\": \"rgba(255,0,255,0.7)\"\n        },\n        \"filterValues\": {\n          \"le\": 1E-9\n        },\n        \"legend\": {\n          \"show\": true\n        },\n        \"rowsFrame\": {\n          \"layout\": \"auto\"\n        },\n        \"tooltip\": {\n          \"mode\": \"single\",\n          \"showColorScale\": false,\n          \"yHistogram\": false\n        },\n        \"yAxis\": {\n          \"axisPlacement\": \"left\",\n          \"reverse\": false\n        }\n      },\n      \"pluginVersion\": \"10.3.3\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"editorMode\": \"code\",\n          \"expr\": \"sum(increase(gossipsub_priority_queue_size_bucket{instance=~\\\"$Instance\\\"}[$__rate_interval])) by (le)\",\n          \"format\": \"heatmap\",\n          \"instant\": false,\n          \"legendFormat\": \"__auto\",\n          \"range\": true,\n          \"refId\": \"A\"\n        }\n      ],\n      \"title\": \"Priority Send Queue Sizes\",\n      \"transparent\": true,\n      \"type\": \"heatmap\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"custom\": {\n            \"hideFrom\": {\n              \"legend\": false,\n              \"tooltip\": false,\n              \"viz\": false\n            },\n            \"scaleDistribution\": {\n              \"type\": \"linear\"\n            }\n          },\n          \"unitScale\": true\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 8,\n        \"w\": 12,\n        \"x\": 12,\n        \"y\": 116\n      },\n      \"id\": 131,\n      \"maxDataPoints\": 50,\n      \"options\": {\n        \"calculate\": false,\n        \"cellGap\": 1,\n        \"color\": {\n          \"exponent\": 0.5,\n          \"fill\": \"dark-orange\",\n          \"mode\": \"scheme\",\n          \"reverse\": false,\n          \"scale\": \"exponential\",\n          \"scheme\": \"Oranges\",\n          \"steps\": 64\n        },\n        \"exemplars\": {\n          \"color\": \"rgba(255,0,255,0.7)\"\n        },\n        \"filterValues\": {\n          \"le\": 1E-9\n        },\n        \"legend\": {\n          \"show\": true\n        },\n        \"rowsFrame\": {\n          \"layout\": \"auto\"\n        },\n        \"tooltip\": {\n          \"mode\": \"single\",\n          \"showColorScale\": false,\n          \"yHistogram\": false\n        },\n        \"yAxis\": {\n          \"axisPlacement\": \"left\",\n          \"reverse\": false\n        }\n      },\n      \"pluginVersion\": \"10.3.3\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"editorMode\": \"code\",\n          \"expr\": \"sum(increase(gossipsub_non_priority_queue_size_bucket[$__rate_interval])) by (le)\",\n          \"format\": \"heatmap\",\n          \"instant\": false,\n          \"legendFormat\": \"__auto\",\n          \"range\": true,\n          \"refId\": \"A\"\n        }\n      ],\n      \"title\": \"Non Priority Send Queue Sizes\",\n      \"transparent\": true,\n      \"type\": \"heatmap\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"description\": \"\",\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"continuous-BlPu\"\n          },\n          \"custom\": {\n            \"axisBorderShow\": false,\n            \"axisCenteredZero\": false,\n            \"axisColorMode\": \"text\",\n            \"axisLabel\": \"\",\n            \"axisPlacement\": \"auto\",\n            \"barAlignment\": 0,\n            \"drawStyle\": \"line\",\n            \"fillOpacity\": 8,\n            \"gradientMode\": \"opacity\",\n            \"hideFrom\": {\n              \"legend\": false,\n              \"tooltip\": false,\n              \"viz\": false\n            },\n            \"insertNulls\": false,\n            \"lineInterpolation\": \"smooth\",\n            \"lineWidth\": 1,\n            \"pointSize\": 5,\n            \"scaleDistribution\": {\n              \"type\": \"linear\"\n            },\n            \"showPoints\": \"auto\",\n            \"spanNulls\": false,\n            \"stacking\": {\n              \"group\": \"A\",\n              \"mode\": \"none\"\n            },\n            \"thresholdsStyle\": {\n              \"mode\": \"off\"\n            }\n          },\n          \"mappings\": [],\n          \"noValue\": \"0\",\n          \"thresholds\": {\n            \"mode\": \"percentage\",\n            \"steps\": [\n              {\n                \"color\": \"green\"\n              }\n            ]\n          },\n          \"unitScale\": true\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 8,\n        \"w\": 12,\n        \"x\": 0,\n        \"y\": 124\n      },\n      \"id\": 90,\n      \"options\": {\n        \"legend\": {\n          \"calcs\": [],\n          \"displayMode\": \"list\",\n          \"placement\": \"bottom\",\n          \"showLegend\": true\n        },\n        \"tooltip\": {\n          \"mode\": \"single\",\n          \"sort\": \"none\"\n        }\n      },\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"editorMode\": \"code\",\n          \"expr\": \"count by(instance) (gossipsub_topic_subscription_status{hash=~\\\"/eth2/$Fork/.*\\\", instance=~\\\"$Instance\\\"} == 1)\",\n          \"legendFormat\": \"__auto\",\n          \"range\": true,\n          \"refId\": \"A\"\n        }\n      ],\n      \"title\": \"Subscribed Topics\",\n      \"transparent\": true,\n      \"type\": \"timeseries\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"continuous-BlPu\"\n          },\n          \"custom\": {\n            \"axisBorderShow\": false,\n            \"axisCenteredZero\": false,\n            \"axisColorMode\": \"text\",\n            \"axisLabel\": \"\",\n            \"axisPlacement\": \"auto\",\n            \"barAlignment\": 0,\n            \"drawStyle\": \"line\",\n            \"fillOpacity\": 18,\n            \"gradientMode\": \"opacity\",\n            \"hideFrom\": {\n              \"legend\": false,\n              \"tooltip\": false,\n              \"viz\": false\n            },\n            \"insertNulls\": false,\n            \"lineInterpolation\": \"smooth\",\n            \"lineWidth\": 1,\n            \"pointSize\": 5,\n            \"scaleDistribution\": {\n              \"type\": \"linear\"\n            },\n            \"showPoints\": \"auto\",\n            \"spanNulls\": false,\n            \"stacking\": {\n              \"group\": \"A\",\n              \"mode\": \"none\"\n            },\n            \"thresholdsStyle\": {\n              \"mode\": \"off\"\n            }\n          },\n          \"mappings\": [],\n          \"min\": 0,\n          \"noValue\": \"0\",\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"blue\"\n              }\n            ]\n          },\n          \"unitScale\": true\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 8,\n        \"w\": 12,\n        \"x\": 12,\n        \"y\": 124\n      },\n      \"id\": 89,\n      \"options\": {\n        \"legend\": {\n          \"calcs\": [\n            \"lastNotNull\"\n          ],\n          \"displayMode\": \"list\",\n          \"placement\": \"bottom\",\n          \"showLegend\": true\n        },\n        \"tooltip\": {\n          \"mode\": \"single\",\n          \"sort\": \"none\"\n        }\n      },\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"editorMode\": \"code\",\n          \"expr\": \"count by(instance) (gossipsub_topic_subscription_status{hash=~\\\"/eth2/$Fork/beacon_attestation.*\\\", instance=~\\\"$Instance\\\"} == 1)\",\n          \"legendFormat\": \"__auto\",\n          \"range\": true,\n          \"refId\": \"A\"\n        }\n      ],\n      \"title\": \"Subscribed AttNets\",\n      \"transparent\": true,\n      \"type\": \"timeseries\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"description\": \"\",\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"palette-classic\"\n          },\n          \"custom\": {\n            \"axisBorderShow\": false,\n            \"axisCenteredZero\": false,\n            \"axisColorMode\": \"text\",\n            \"axisLabel\": \"\",\n            \"axisPlacement\": \"auto\",\n            \"barAlignment\": 0,\n            \"drawStyle\": \"line\",\n            \"fillOpacity\": 0,\n            \"gradientMode\": \"none\",\n            \"hideFrom\": {\n              \"legend\": false,\n              \"tooltip\": false,\n              \"viz\": false\n            },\n            \"insertNulls\": false,\n            \"lineInterpolation\": \"linear\",\n            \"lineWidth\": 1,\n            \"pointSize\": 5,\n            \"scaleDistribution\": {\n              \"type\": \"linear\"\n            },\n            \"showPoints\": \"auto\",\n            \"spanNulls\": false,\n            \"stacking\": {\n              \"group\": \"A\",\n              \"mode\": \"none\"\n            },\n            \"thresholdsStyle\": {\n              \"mode\": \"off\"\n            }\n          },\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\"\n              },\n              {\n                \"color\": \"red\",\n                \"value\": 80\n              }\n            ]\n          },\n          \"unit\": \"none\",\n          \"unitScale\": true\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 8,\n        \"w\": 12,\n        \"x\": 0,\n        \"y\": 132\n      },\n      \"id\": 123,\n      \"options\": {\n        \"legend\": {\n          \"calcs\": [\n            \"last\"\n          ],\n          \"displayMode\": \"table\",\n          \"placement\": \"bottom\",\n          \"showLegend\": true\n        },\n        \"tooltip\": {\n          \"mode\": \"single\",\n          \"sort\": \"none\"\n        }\n      },\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"editorMode\": \"builder\",\n          \"exemplar\": true,\n          \"expr\": \"changes(gossipsub_topic_msg_recv_counts_total{hash=~\\\"/eth2/$Fork/.*\\\", hash=~\\\".*$Topic.*\\\", instance=~\\\"$Instance\\\"}[$__interval])\",\n          \"interval\": \"\",\n          \"legendFormat\": \"{{hash}}\",\n          \"range\": true,\n          \"refId\": \"A\"\n        }\n      ],\n      \"title\": \"Recv Message Counts\",\n      \"transformations\": [\n        {\n          \"id\": \"renameByRegex\",\n          \"options\": {\n            \"regex\": \"/(/ssz_snappy)/\",\n            \"renamePattern\": \"\"\n          }\n        },\n        {\n          \"id\": \"renameByRegex\",\n          \"options\": {\n            \"regex\": \"/(.*/.*/)/\",\n            \"renamePattern\": \"\"\n          }\n        }\n      ],\n      \"transparent\": true,\n      \"type\": \"timeseries\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"description\": \"\",\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"palette-classic\"\n          },\n          \"custom\": {\n            \"axisBorderShow\": false,\n            \"axisCenteredZero\": false,\n            \"axisColorMode\": \"text\",\n            \"axisLabel\": \"\",\n            \"axisPlacement\": \"auto\",\n            \"barAlignment\": 0,\n            \"drawStyle\": \"line\",\n            \"fillOpacity\": 0,\n            \"gradientMode\": \"none\",\n            \"hideFrom\": {\n              \"legend\": false,\n              \"tooltip\": false,\n              \"viz\": false\n            },\n            \"insertNulls\": false,\n            \"lineInterpolation\": \"linear\",\n            \"lineWidth\": 1,\n            \"pointSize\": 5,\n            \"scaleDistribution\": {\n              \"type\": \"linear\"\n            },\n            \"showPoints\": \"auto\",\n            \"spanNulls\": false,\n            \"stacking\": {\n              \"group\": \"A\",\n              \"mode\": \"none\"\n            },\n            \"thresholdsStyle\": {\n              \"mode\": \"off\"\n            }\n          },\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\"\n              },\n              {\n                \"color\": \"red\",\n                \"value\": 80\n              }\n            ]\n          },\n          \"unit\": \"Bps\",\n          \"unitScale\": true\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 10,\n        \"w\": 12,\n        \"x\": 12,\n        \"y\": 132\n      },\n      \"id\": 121,\n      \"options\": {\n        \"legend\": {\n          \"calcs\": [\n            \"last\"\n          ],\n          \"displayMode\": \"table\",\n          \"placement\": \"bottom\",\n          \"showLegend\": true\n        },\n        \"tooltip\": {\n          \"mode\": \"single\",\n          \"sort\": \"none\"\n        }\n      },\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"editorMode\": \"code\",\n          \"exemplar\": true,\n          \"expr\": \"rate(gossipsub_topic_msg_sent_bytes_total{hash=~\\\"/eth2/$Fork/.*\\\", hash=~\\\".*$Topic.*\\\", instance=~\\\"$Instance\\\"}[$__rate_interval])\",\n          \"interval\": \"\",\n          \"legendFormat\": \"{{hash}}\",\n          \"range\": true,\n          \"refId\": \"A\"\n        }\n      ],\n      \"title\": \"Sent Bytes per Topic\",\n      \"transformations\": [\n        {\n          \"id\": \"renameByRegex\",\n          \"options\": {\n            \"regex\": \"/(/ssz_snappy)/\",\n            \"renamePattern\": \"\"\n          }\n        },\n        {\n          \"id\": \"renameByRegex\",\n          \"options\": {\n            \"regex\": \"/(.*/.*/)/\",\n            \"renamePattern\": \"\"\n          }\n        }\n      ],\n      \"transparent\": true,\n      \"type\": \"timeseries\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"description\": \"\",\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"palette-classic\"\n          },\n          \"custom\": {\n            \"axisBorderShow\": false,\n            \"axisCenteredZero\": false,\n            \"axisColorMode\": \"text\",\n            \"axisLabel\": \"\",\n            \"axisPlacement\": \"auto\",\n            \"barAlignment\": 0,\n            \"drawStyle\": \"line\",\n            \"fillOpacity\": 0,\n            \"gradientMode\": \"none\",\n            \"hideFrom\": {\n              \"legend\": false,\n              \"tooltip\": false,\n              \"viz\": false\n            },\n            \"insertNulls\": false,\n            \"lineInterpolation\": \"smooth\",\n            \"lineWidth\": 1,\n            \"pointSize\": 5,\n            \"scaleDistribution\": {\n              \"type\": \"linear\"\n            },\n            \"showPoints\": \"auto\",\n            \"spanNulls\": false,\n            \"stacking\": {\n              \"group\": \"A\",\n              \"mode\": \"none\"\n            },\n            \"thresholdsStyle\": {\n              \"mode\": \"off\"\n            }\n          },\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\"\n              },\n              {\n                \"color\": \"red\",\n                \"value\": 80\n              }\n            ]\n          },\n          \"unitScale\": true\n        },\n        \"overrides\": [\n          {\n            \"__systemRef\": \"hideSeriesFrom\",\n            \"matcher\": {\n              \"id\": \"byNames\",\n              \"options\": {\n                \"mode\": \"exclude\",\n                \"names\": [\n                  \"beacon_aggregate_and_proof\"\n                ],\n                \"prefix\": \"All except:\",\n                \"readOnly\": true\n              }\n            },\n            \"properties\": [\n              {\n                \"id\": \"custom.hideFrom\",\n                \"value\": {\n                  \"legend\": false,\n                  \"tooltip\": false,\n                  \"viz\": true\n                }\n              }\n            ]\n          }\n        ]\n      },\n      \"gridPos\": {\n        \"h\": 8,\n        \"w\": 24,\n        \"x\": 0,\n        \"y\": 142\n      },\n      \"id\": 84,\n      \"options\": {\n        \"legend\": {\n          \"calcs\": [\n            \"last\"\n          ],\n          \"displayMode\": \"table\",\n          \"placement\": \"right\",\n          \"showLegend\": true\n        },\n        \"tooltip\": {\n          \"mode\": \"single\",\n          \"sort\": \"none\"\n        }\n      },\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"disableTextWrap\": false,\n          \"editorMode\": \"builder\",\n          \"exemplar\": true,\n          \"expr\": \"increase(gossipsub_accepted_messages_per_topic_total{hash=~\\\"/eth2/$Fork/.*\\\", hash=~\\\".*$Topic.*\\\", instance=~\\\"$Instance\\\"}[12s])\",\n          \"fullMetaSearch\": false,\n          \"includeNullMetadata\": true,\n          \"interval\": \"\",\n          \"legendFormat\": \"{{hash}}\",\n          \"range\": true,\n          \"refId\": \"A\",\n          \"useBackend\": false\n        }\n      ],\n      \"title\": \"Accepted Messages Per Slot\",\n      \"transformations\": [\n        {\n          \"id\": \"renameByRegex\",\n          \"options\": {\n            \"regex\": \"/(/eth2/.{8}/)/\",\n            \"renamePattern\": \"\"\n          }\n        },\n        {\n          \"id\": \"renameByRegex\",\n          \"options\": {\n            \"regex\": \"/(/ssz_snappy)/\",\n            \"renamePattern\": \"\"\n          }\n        }\n      ],\n      \"transparent\": true,\n      \"type\": \"timeseries\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"description\": \"\",\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"palette-classic\"\n          },\n          \"custom\": {\n            \"axisBorderShow\": false,\n            \"axisCenteredZero\": false,\n            \"axisColorMode\": \"text\",\n            \"axisLabel\": \"\",\n            \"axisPlacement\": \"auto\",\n            \"barAlignment\": 0,\n            \"drawStyle\": \"line\",\n            \"fillOpacity\": 0,\n            \"gradientMode\": \"none\",\n            \"hideFrom\": {\n              \"legend\": false,\n              \"tooltip\": false,\n              \"viz\": false\n            },\n            \"insertNulls\": false,\n            \"lineInterpolation\": \"smooth\",\n            \"lineWidth\": 1,\n            \"pointSize\": 5,\n            \"scaleDistribution\": {\n              \"type\": \"linear\"\n            },\n            \"showPoints\": \"auto\",\n            \"spanNulls\": false,\n            \"stacking\": {\n              \"group\": \"A\",\n              \"mode\": \"none\"\n            },\n            \"thresholdsStyle\": {\n              \"mode\": \"off\"\n            }\n          },\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\"\n              },\n              {\n                \"color\": \"red\",\n                \"value\": 80\n              }\n            ]\n          },\n          \"unitScale\": true\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 8,\n        \"w\": 24,\n        \"x\": 0,\n        \"y\": 150\n      },\n      \"id\": 135,\n      \"options\": {\n        \"legend\": {\n          \"calcs\": [\n            \"last\"\n          ],\n          \"displayMode\": \"table\",\n          \"placement\": \"right\",\n          \"showLegend\": true\n        },\n        \"tooltip\": {\n          \"mode\": \"single\",\n          \"sort\": \"none\"\n        }\n      },\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"disableTextWrap\": false,\n          \"editorMode\": \"code\",\n          \"exemplar\": true,\n          \"expr\": \"changes(gossipsub_rejected_messages_per_topic_total{hash=~\\\"/eth2/$Fork/.*\\\", hash=~\\\".*$Topic.*\\\", instance=~\\\"$Instance\\\"}[12s])\",\n          \"fullMetaSearch\": false,\n          \"includeNullMetadata\": true,\n          \"interval\": \"\",\n          \"legendFormat\": \"{{hash}}\",\n          \"range\": true,\n          \"refId\": \"A\",\n          \"useBackend\": false\n        }\n      ],\n      \"title\": \"Rejected Messages Per Slot\",\n      \"transformations\": [\n        {\n          \"id\": \"renameByRegex\",\n          \"options\": {\n            \"regex\": \"/(/eth2/.{8}/)/\",\n            \"renamePattern\": \"\"\n          }\n        },\n        {\n          \"id\": \"renameByRegex\",\n          \"options\": {\n            \"regex\": \"/(/ssz_snappy)/\",\n            \"renamePattern\": \"\"\n          }\n        }\n      ],\n      \"transparent\": true,\n      \"type\": \"timeseries\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"description\": \"\",\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"palette-classic\"\n          },\n          \"custom\": {\n            \"axisBorderShow\": false,\n            \"axisCenteredZero\": false,\n            \"axisColorMode\": \"text\",\n            \"axisLabel\": \"\",\n            \"axisPlacement\": \"auto\",\n            \"barAlignment\": 0,\n            \"drawStyle\": \"line\",\n            \"fillOpacity\": 0,\n            \"gradientMode\": \"none\",\n            \"hideFrom\": {\n              \"legend\": false,\n              \"tooltip\": false,\n              \"viz\": false\n            },\n            \"insertNulls\": false,\n            \"lineInterpolation\": \"smooth\",\n            \"lineWidth\": 1,\n            \"pointSize\": 5,\n            \"scaleDistribution\": {\n              \"type\": \"linear\"\n            },\n            \"showPoints\": \"auto\",\n            \"spanNulls\": false,\n            \"stacking\": {\n              \"group\": \"A\",\n              \"mode\": \"none\"\n            },\n            \"thresholdsStyle\": {\n              \"mode\": \"off\"\n            }\n          },\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\"\n              },\n              {\n                \"color\": \"red\",\n                \"value\": 80\n              }\n            ]\n          },\n          \"unitScale\": true\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 8,\n        \"w\": 24,\n        \"x\": 0,\n        \"y\": 158\n      },\n      \"id\": 136,\n      \"options\": {\n        \"legend\": {\n          \"calcs\": [\n            \"last\"\n          ],\n          \"displayMode\": \"table\",\n          \"placement\": \"right\",\n          \"showLegend\": true\n        },\n        \"tooltip\": {\n          \"mode\": \"single\",\n          \"sort\": \"none\"\n        }\n      },\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"disableTextWrap\": false,\n          \"editorMode\": \"code\",\n          \"exemplar\": true,\n          \"expr\": \"increase(gossipsub_ignored_messages_per_topic_total{hash=~\\\"/eth2/$Fork/.*\\\", hash=~\\\".*$Topic.*\\\", instance=~\\\"$Instance\\\"}[12s])\",\n          \"fullMetaSearch\": false,\n          \"includeNullMetadata\": true,\n          \"interval\": \"\",\n          \"legendFormat\": \"{{hash}}\",\n          \"range\": true,\n          \"refId\": \"A\",\n          \"useBackend\": false\n        }\n      ],\n      \"title\": \"Ignored Messages Per Slot\",\n      \"transformations\": [\n        {\n          \"id\": \"renameByRegex\",\n          \"options\": {\n            \"regex\": \"/(/eth2/.{8}/)/\",\n            \"renamePattern\": \"\"\n          }\n        },\n        {\n          \"id\": \"renameByRegex\",\n          \"options\": {\n            \"regex\": \"/(/ssz_snappy)/\",\n            \"renamePattern\": \"\"\n          }\n        }\n      ],\n      \"transparent\": true,\n      \"type\": \"timeseries\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"description\": \"\",\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"palette-classic\"\n          },\n          \"custom\": {\n            \"axisBorderShow\": false,\n            \"axisCenteredZero\": false,\n            \"axisColorMode\": \"text\",\n            \"axisLabel\": \"\",\n            \"axisPlacement\": \"auto\",\n            \"barAlignment\": 0,\n            \"drawStyle\": \"line\",\n            \"fillOpacity\": 0,\n            \"gradientMode\": \"none\",\n            \"hideFrom\": {\n              \"legend\": false,\n              \"tooltip\": false,\n              \"viz\": false\n            },\n            \"insertNulls\": false,\n            \"lineInterpolation\": \"linear\",\n            \"lineWidth\": 1,\n            \"pointSize\": 5,\n            \"scaleDistribution\": {\n              \"type\": \"linear\"\n            },\n            \"showPoints\": \"auto\",\n            \"spanNulls\": false,\n            \"stacking\": {\n              \"group\": \"A\",\n              \"mode\": \"none\"\n            },\n            \"thresholdsStyle\": {\n              \"mode\": \"off\"\n            }\n          },\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\"\n              },\n              {\n                \"color\": \"red\",\n                \"value\": 80\n              }\n            ]\n          },\n          \"unitScale\": true\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 7,\n        \"w\": 12,\n        \"x\": 0,\n        \"y\": 166\n      },\n      \"id\": 115,\n      \"options\": {\n        \"legend\": {\n          \"calcs\": [],\n          \"displayMode\": \"list\",\n          \"placement\": \"bottom\",\n          \"showLegend\": true\n        },\n        \"tooltip\": {\n          \"mode\": \"single\",\n          \"sort\": \"none\"\n        }\n      },\n      \"pluginVersion\": \"10.3.3\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"disableTextWrap\": false,\n          \"editorMode\": \"code\",\n          \"exemplar\": true,\n          \"expr\": \"increase(gossipsub_mesh_peer_inclusion_events_total{hash=~\\\"/eth2/$Fork/beacon_block.*\\\", instance=~\\\"$Instance\\\"}[$__interval])\",\n          \"fullMetaSearch\": false,\n          \"includeNullMetadata\": true,\n          \"instant\": true,\n          \"interval\": \"\",\n          \"legendFormat\": \"{{instance}}: {{reason}}\",\n          \"range\": true,\n          \"refId\": \"A\",\n          \"useBackend\": false\n        }\n      ],\n      \"title\": \"Mesh Inclusions - Beacon Block\",\n      \"transformations\": [\n        {\n          \"id\": \"renameByRegex\",\n          \"options\": {\n            \"regex\": \"/(/eth2/.{8}/)/\",\n            \"renamePattern\": \"\"\n          }\n        },\n        {\n          \"id\": \"renameByRegex\",\n          \"options\": {\n            \"regex\": \"/(/ssz_snappy)/\",\n            \"renamePattern\": \"\"\n          }\n        }\n      ],\n      \"transparent\": true,\n      \"type\": \"timeseries\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"description\": \"\",\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"palette-classic\"\n          },\n          \"custom\": {\n            \"axisBorderShow\": false,\n            \"axisCenteredZero\": false,\n            \"axisColorMode\": \"text\",\n            \"axisLabel\": \"\",\n            \"axisPlacement\": \"auto\",\n            \"barAlignment\": 0,\n            \"drawStyle\": \"line\",\n            \"fillOpacity\": 0,\n            \"gradientMode\": \"none\",\n            \"hideFrom\": {\n              \"legend\": false,\n              \"tooltip\": false,\n              \"viz\": false\n            },\n            \"insertNulls\": false,\n            \"lineInterpolation\": \"smooth\",\n            \"lineWidth\": 1,\n            \"pointSize\": 5,\n            \"scaleDistribution\": {\n              \"type\": \"linear\"\n            },\n            \"showPoints\": \"auto\",\n            \"spanNulls\": false,\n            \"stacking\": {\n              \"group\": \"A\",\n              \"mode\": \"none\"\n            },\n            \"thresholdsStyle\": {\n              \"mode\": \"off\"\n            }\n          },\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\"\n              },\n              {\n                \"color\": \"red\",\n                \"value\": 80\n              }\n            ]\n          },\n          \"unitScale\": true\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 7,\n        \"w\": 12,\n        \"x\": 12,\n        \"y\": 166\n      },\n      \"id\": 117,\n      \"options\": {\n        \"legend\": {\n          \"calcs\": [\n            \"last\"\n          ],\n          \"displayMode\": \"table\",\n          \"placement\": \"right\",\n          \"showLegend\": true\n        },\n        \"tooltip\": {\n          \"mode\": \"single\",\n          \"sort\": \"none\"\n        }\n      },\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"editorMode\": \"code\",\n          \"exemplar\": true,\n          \"expr\": \"increase(gossipsub_mesh_peer_inclusion_events_total{hash=~\\\"/eth2/$Fork/beacon_aggregate_and_proof.*\\\", instance=~\\\"$Instance\\\"}[$__interval])\",\n          \"interval\": \"\",\n          \"legendFormat\": \"{{reason}}\",\n          \"range\": true,\n          \"refId\": \"A\"\n        }\n      ],\n      \"title\": \"Mesh Inclusions - Aggregate and Proof\",\n      \"transformations\": [\n        {\n          \"id\": \"renameByRegex\",\n          \"options\": {\n            \"regex\": \"/(/eth2/.{8}/)/\",\n            \"renamePattern\": \"\"\n          }\n        },\n        {\n          \"id\": \"renameByRegex\",\n          \"options\": {\n            \"regex\": \"/(/ssz_snappy)/\",\n            \"renamePattern\": \"\"\n          }\n        }\n      ],\n      \"transparent\": true,\n      \"type\": \"timeseries\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"description\": \"\",\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"palette-classic\"\n          },\n          \"custom\": {\n            \"axisBorderShow\": false,\n            \"axisCenteredZero\": false,\n            \"axisColorMode\": \"text\",\n            \"axisLabel\": \"\",\n            \"axisPlacement\": \"auto\",\n            \"barAlignment\": 0,\n            \"drawStyle\": \"line\",\n            \"fillOpacity\": 0,\n            \"gradientMode\": \"none\",\n            \"hideFrom\": {\n              \"legend\": false,\n              \"tooltip\": false,\n              \"viz\": false\n            },\n            \"insertNulls\": false,\n            \"lineInterpolation\": \"smooth\",\n            \"lineWidth\": 1,\n            \"pointSize\": 5,\n            \"scaleDistribution\": {\n              \"type\": \"linear\"\n            },\n            \"showPoints\": \"auto\",\n            \"spanNulls\": false,\n            \"stacking\": {\n              \"group\": \"A\",\n              \"mode\": \"none\"\n            },\n            \"thresholdsStyle\": {\n              \"mode\": \"off\"\n            }\n          },\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\"\n              },\n              {\n                \"color\": \"red\",\n                \"value\": 80\n              }\n            ]\n          },\n          \"unitScale\": true\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 7,\n        \"w\": 12,\n        \"x\": 0,\n        \"y\": 173\n      },\n      \"id\": 118,\n      \"options\": {\n        \"legend\": {\n          \"calcs\": [\n            \"last\"\n          ],\n          \"displayMode\": \"table\",\n          \"placement\": \"right\",\n          \"showLegend\": true\n        },\n        \"tooltip\": {\n          \"mode\": \"single\",\n          \"sort\": \"none\"\n        }\n      },\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"editorMode\": \"code\",\n          \"exemplar\": true,\n          \"expr\": \"increase(gossipsub_mesh_peer_churn_events_total{hash=~\\\"/eth2/$Fork/beacon_block.*\\\", instance=~\\\"$Instance\\\"}[$__interval])\",\n          \"interval\": \"\",\n          \"legendFormat\": \"{{reason}}\",\n          \"range\": true,\n          \"refId\": \"A\"\n        }\n      ],\n      \"title\": \"Mesh Removals - Beacon Block\",\n      \"transformations\": [\n        {\n          \"id\": \"renameByRegex\",\n          \"options\": {\n            \"regex\": \"/(/eth2/.{8}/)/\",\n            \"renamePattern\": \"\"\n          }\n        },\n        {\n          \"id\": \"renameByRegex\",\n          \"options\": {\n            \"regex\": \"/(/ssz_snappy)/\",\n            \"renamePattern\": \"\"\n          }\n        }\n      ],\n      \"transparent\": true,\n      \"type\": \"timeseries\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"description\": \"\",\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"palette-classic\"\n          },\n          \"custom\": {\n            \"axisBorderShow\": false,\n            \"axisCenteredZero\": false,\n            \"axisColorMode\": \"text\",\n            \"axisLabel\": \"\",\n            \"axisPlacement\": \"auto\",\n            \"barAlignment\": 0,\n            \"drawStyle\": \"line\",\n            \"fillOpacity\": 0,\n            \"gradientMode\": \"none\",\n            \"hideFrom\": {\n              \"legend\": false,\n              \"tooltip\": false,\n              \"viz\": false\n            },\n            \"insertNulls\": false,\n            \"lineInterpolation\": \"smooth\",\n            \"lineWidth\": 1,\n            \"pointSize\": 5,\n            \"scaleDistribution\": {\n              \"type\": \"linear\"\n            },\n            \"showPoints\": \"auto\",\n            \"spanNulls\": false,\n            \"stacking\": {\n              \"group\": \"A\",\n              \"mode\": \"none\"\n            },\n            \"thresholdsStyle\": {\n              \"mode\": \"off\"\n            }\n          },\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\"\n              },\n              {\n                \"color\": \"red\",\n                \"value\": 80\n              }\n            ]\n          },\n          \"unitScale\": true\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 7,\n        \"w\": 12,\n        \"x\": 12,\n        \"y\": 173\n      },\n      \"id\": 116,\n      \"options\": {\n        \"legend\": {\n          \"calcs\": [\n            \"last\"\n          ],\n          \"displayMode\": \"table\",\n          \"placement\": \"right\",\n          \"showLegend\": true\n        },\n        \"tooltip\": {\n          \"mode\": \"single\",\n          \"sort\": \"none\"\n        }\n      },\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"editorMode\": \"code\",\n          \"exemplar\": true,\n          \"expr\": \"increase(gossipsub_mesh_peer_churn_events_total{hash=~\\\"/eth2/$Fork/beacon_aggregate_and_proof.*\\\", instance=~\\\"$Instance\\\"}[$__interval])\",\n          \"interval\": \"\",\n          \"legendFormat\": \"{{reason}}\",\n          \"range\": true,\n          \"refId\": \"A\"\n        }\n      ],\n      \"title\": \"Mesh Removals - Aggregate and Proof\",\n      \"transformations\": [\n        {\n          \"id\": \"renameByRegex\",\n          \"options\": {\n            \"regex\": \"/(/eth2/.{8}/)/\",\n            \"renamePattern\": \"\"\n          }\n        },\n        {\n          \"id\": \"renameByRegex\",\n          \"options\": {\n            \"regex\": \"/(/ssz_snappy)/\",\n            \"renamePattern\": \"\"\n          }\n        }\n      ],\n      \"transparent\": true,\n      \"type\": \"timeseries\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"palette-classic\"\n          },\n          \"custom\": {\n            \"hideFrom\": {\n              \"legend\": false,\n              \"tooltip\": false,\n              \"viz\": false\n            }\n          },\n          \"mappings\": [],\n          \"unitScale\": true\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 9,\n        \"w\": 6,\n        \"x\": 0,\n        \"y\": 180\n      },\n      \"id\": 47,\n      \"options\": {\n        \"displayLabels\": [\n          \"name\"\n        ],\n        \"legend\": {\n          \"displayMode\": \"table\",\n          \"placement\": \"right\",\n          \"showLegend\": true,\n          \"values\": [\n            \"value\"\n          ]\n        },\n        \"pieType\": \"pie\",\n        \"reduceOptions\": {\n          \"calcs\": [\n            \"lastNotNull\"\n          ],\n          \"fields\": \"\",\n          \"values\": false\n        },\n        \"tooltip\": {\n          \"mode\": \"single\",\n          \"sort\": \"none\"\n        }\n      },\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"editorMode\": \"code\",\n          \"exemplar\": true,\n          \"expr\": \"rate(gossipsub_ignored_messages_per_topic_total{hash=~\\\"/eth2/$Fork/.*\\\", hash=~\\\".*$Topic.*\\\",instance=~\\\"$Instance\\\"}[$__rate_interval])*12\",\n          \"instant\": false,\n          \"interval\": \"\",\n          \"legendFormat\": \"{{hash}}\",\n          \"refId\": \"A\"\n        }\n      ],\n      \"title\": \"Ignored Messages Per Slot\",\n      \"transformations\": [\n        {\n          \"id\": \"renameByRegex\",\n          \"options\": {\n            \"regex\": \"/(.*/beacon)/\",\n            \"renamePattern\": \"beacon\"\n          }\n        },\n        {\n          \"id\": \"renameByRegex\",\n          \"options\": {\n            \"regex\": \"/(/ssz_snappy)/\",\n            \"renamePattern\": \"\"\n          }\n        },\n        {\n          \"id\": \"renameByRegex\",\n          \"options\": {\n            \"regex\": \"/(.*/sync_committee)/\",\n            \"renamePattern\": \"sync_committee\"\n          }\n        }\n      ],\n      \"transparent\": true,\n      \"type\": \"piechart\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"palette-classic\"\n          },\n          \"custom\": {\n            \"hideFrom\": {\n              \"legend\": false,\n              \"tooltip\": false,\n              \"viz\": false\n            }\n          },\n          \"mappings\": [],\n          \"unitScale\": true\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 9,\n        \"w\": 6,\n        \"x\": 6,\n        \"y\": 180\n      },\n      \"id\": 29,\n      \"options\": {\n        \"displayLabels\": [\n          \"name\"\n        ],\n        \"legend\": {\n          \"displayMode\": \"table\",\n          \"placement\": \"right\",\n          \"showLegend\": true,\n          \"values\": [\n            \"value\"\n          ]\n        },\n        \"pieType\": \"pie\",\n        \"reduceOptions\": {\n          \"calcs\": [\n            \"lastNotNull\"\n          ],\n          \"fields\": \"\",\n          \"values\": false\n        },\n        \"tooltip\": {\n          \"mode\": \"single\",\n          \"sort\": \"none\"\n        }\n      },\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"exemplar\": true,\n          \"expr\": \"rate(gossipsub_unaccepted_messages_per_client{instance=~\\\"$Instance\\\"}[$__rate_interval])*12\",\n          \"interval\": \"\",\n          \"legendFormat\": \"{{client}}\",\n          \"refId\": \"A\"\n        }\n      ],\n      \"title\": \"Gossipsub Ignored Messages Per Client per Slot\",\n      \"transparent\": true,\n      \"type\": \"piechart\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"description\": \"\",\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"palette-classic\"\n          },\n          \"custom\": {\n            \"hideFrom\": {\n              \"legend\": false,\n              \"tooltip\": false,\n              \"viz\": false\n            }\n          },\n          \"mappings\": [],\n          \"unitScale\": true\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 8,\n        \"w\": 6,\n        \"x\": 12,\n        \"y\": 180\n      },\n      \"id\": 22,\n      \"options\": {\n        \"displayLabels\": [\n          \"name\"\n        ],\n        \"legend\": {\n          \"displayMode\": \"table\",\n          \"placement\": \"right\",\n          \"showLegend\": true,\n          \"values\": [\n            \"value\"\n          ]\n        },\n        \"pieType\": \"pie\",\n        \"reduceOptions\": {\n          \"calcs\": [\n            \"lastNotNull\"\n          ],\n          \"fields\": \"\",\n          \"values\": false\n        },\n        \"tooltip\": {\n          \"mode\": \"single\",\n          \"sort\": \"none\"\n        }\n      },\n      \"pluginVersion\": \"8.1.3\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"exemplar\": false,\n          \"expr\": \"block_mesh_peers_per_client{instance=~\\\"$Instance\\\"}\",\n          \"instant\": true,\n          \"interval\": \"\",\n          \"legendFormat\": \"{{Client}}\",\n          \"refId\": \"A\"\n        }\n      ],\n      \"title\": \"BeaconBlock Mesh Peers\",\n      \"transparent\": true,\n      \"type\": \"piechart\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"description\": \"\",\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"palette-classic\"\n          },\n          \"custom\": {\n            \"hideFrom\": {\n              \"legend\": false,\n              \"tooltip\": false,\n              \"viz\": false\n            }\n          },\n          \"mappings\": [],\n          \"unitScale\": true\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 8,\n        \"w\": 6,\n        \"x\": 18,\n        \"y\": 180\n      },\n      \"id\": 24,\n      \"options\": {\n        \"displayLabels\": [\n          \"name\"\n        ],\n        \"legend\": {\n          \"displayMode\": \"table\",\n          \"placement\": \"right\",\n          \"showLegend\": true,\n          \"values\": [\n            \"value\"\n          ]\n        },\n        \"pieType\": \"pie\",\n        \"reduceOptions\": {\n          \"calcs\": [\n            \"lastNotNull\"\n          ],\n          \"fields\": \"\",\n          \"values\": false\n        },\n        \"tooltip\": {\n          \"mode\": \"single\",\n          \"sort\": \"none\"\n        }\n      },\n      \"pluginVersion\": \"8.1.3\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"exemplar\": false,\n          \"expr\": \"beacon_aggregate_and_proof_mesh_peers_per_client{instance=~\\\"$Instance\\\"}\",\n          \"instant\": true,\n          \"interval\": \"\",\n          \"legendFormat\": \"{{Client}}\",\n          \"refId\": \"A\"\n        }\n      ],\n      \"title\": \"BeaconAggregateAndProof Mesh Peers\",\n      \"transparent\": true,\n      \"type\": \"piechart\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"description\": \"\",\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"palette-classic\"\n          },\n          \"custom\": {\n            \"axisBorderShow\": false,\n            \"axisCenteredZero\": false,\n            \"axisColorMode\": \"text\",\n            \"axisLabel\": \"\",\n            \"axisPlacement\": \"auto\",\n            \"barAlignment\": 0,\n            \"drawStyle\": \"line\",\n            \"fillOpacity\": 0,\n            \"gradientMode\": \"none\",\n            \"hideFrom\": {\n              \"legend\": false,\n              \"tooltip\": false,\n              \"viz\": false\n            },\n            \"insertNulls\": false,\n            \"lineInterpolation\": \"linear\",\n            \"lineWidth\": 1,\n            \"pointSize\": 5,\n            \"scaleDistribution\": {\n              \"type\": \"linear\"\n            },\n            \"showPoints\": \"auto\",\n            \"spanNulls\": false,\n            \"stacking\": {\n              \"group\": \"A\",\n              \"mode\": \"none\"\n            },\n            \"thresholdsStyle\": {\n              \"mode\": \"off\"\n            }\n          },\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\"\n              },\n              {\n                \"color\": \"red\",\n                \"value\": 80\n              }\n            ]\n          },\n          \"unitScale\": true\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 8,\n        \"w\": 24,\n        \"x\": 0,\n        \"y\": 189\n      },\n      \"id\": 16,\n      \"options\": {\n        \"legend\": {\n          \"calcs\": [],\n          \"displayMode\": \"list\",\n          \"placement\": \"bottom\",\n          \"showLegend\": true\n        },\n        \"tooltip\": {\n          \"mode\": \"single\",\n          \"sort\": \"none\"\n        }\n      },\n      \"pluginVersion\": \"8.1.3\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"editorMode\": \"code\",\n          \"exemplar\": false,\n          \"expr\": \"gossipsub_topic_peers_counts{hash!~\\\".*attester_slashing.*|.*beacon_aggregate_and_proof.*|.*beacon_block.*|.*proposer_slashing.*|.*voluntary_exit.*|.*sync_committee_contribution_and_proof.*|.*bls_to_execution.*|.*light_client.*|.*blob_sidecar.*|\\\", hash=~\\\"/eth2/$Fork/.*\\\", instance=~\\\"$Instance\\\"}\",\n          \"format\": \"time_series\",\n          \"instant\": false,\n          \"interval\": \"\",\n          \"intervalFactor\": 1,\n          \"legendFormat\": \"{{hash}}\",\n          \"range\": true,\n          \"refId\": \"A\"\n        }\n      ],\n      \"title\": \"Subscribed Peers Per Topic\",\n      \"transformations\": [\n        {\n          \"id\": \"renameByRegex\",\n          \"options\": {\n            \"regex\": \"/(.*beacon_attestation)/\",\n            \"renamePattern\": \"beacon_attestation\"\n          }\n        },\n        {\n          \"id\": \"renameByRegex\",\n          \"options\": {\n            \"regex\": \"/(/ssz_snappy.*)/\",\n            \"renamePattern\": \"\"\n          }\n        },\n        {\n          \"id\": \"renameByRegex\",\n          \"options\": {\n            \"regex\": \"/(.*sync_committee)/\",\n            \"renamePattern\": \"sync_committee\"\n          }\n        }\n      ],\n      \"transparent\": true,\n      \"type\": \"timeseries\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"palette-classic\"\n          },\n          \"custom\": {\n            \"axisBorderShow\": false,\n            \"axisCenteredZero\": false,\n            \"axisColorMode\": \"text\",\n            \"axisLabel\": \"\",\n            \"axisPlacement\": \"auto\",\n            \"barAlignment\": 0,\n            \"drawStyle\": \"line\",\n            \"fillOpacity\": 0,\n            \"gradientMode\": \"none\",\n            \"hideFrom\": {\n              \"legend\": false,\n              \"tooltip\": false,\n              \"viz\": false\n            },\n            \"insertNulls\": false,\n            \"lineInterpolation\": \"linear\",\n            \"lineWidth\": 1,\n            \"pointSize\": 5,\n            \"scaleDistribution\": {\n              \"type\": \"linear\"\n            },\n            \"showPoints\": \"auto\",\n            \"spanNulls\": false,\n            \"stacking\": {\n              \"group\": \"A\",\n              \"mode\": \"none\"\n            },\n            \"thresholdsStyle\": {\n              \"mode\": \"off\"\n            }\n          },\n          \"mappings\": [],\n          \"max\": 100,\n          \"min\": 0,\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\"\n              },\n              {\n                \"color\": \"red\",\n                \"value\": 80\n              }\n            ]\n          },\n          \"unitScale\": true\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 7,\n        \"w\": 24,\n        \"x\": 0,\n        \"y\": 197\n      },\n      \"id\": 134,\n      \"options\": {\n        \"legend\": {\n          \"calcs\": [],\n          \"displayMode\": \"list\",\n          \"placement\": \"bottom\",\n          \"showLegend\": true\n        },\n        \"tooltip\": {\n          \"mode\": \"single\",\n          \"sort\": \"none\"\n        }\n      },\n      \"pluginVersion\": \"10.2.3\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"editorMode\": \"code\",\n          \"exemplar\": false,\n          \"expr\": \"discovery_queue_size{instance=~\\\"$Instance\\\"}\",\n          \"instant\": false,\n          \"interval\": \"\",\n          \"legendFormat\": \"{{instance}}\",\n          \"range\": true,\n          \"refId\": \"A\"\n        }\n      ],\n      \"title\": \"Queued Discovery Queries\",\n      \"transparent\": true,\n      \"type\": \"timeseries\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"palette-classic\"\n          },\n          \"custom\": {\n            \"axisBorderShow\": false,\n            \"axisCenteredZero\": false,\n            \"axisColorMode\": \"text\",\n            \"axisLabel\": \"\",\n            \"axisPlacement\": \"auto\",\n            \"barAlignment\": 0,\n            \"drawStyle\": \"line\",\n            \"fillOpacity\": 0,\n            \"gradientMode\": \"none\",\n            \"hideFrom\": {\n              \"legend\": false,\n              \"tooltip\": false,\n              \"viz\": false\n            },\n            \"insertNulls\": false,\n            \"lineInterpolation\": \"linear\",\n            \"lineWidth\": 1,\n            \"pointSize\": 5,\n            \"scaleDistribution\": {\n              \"type\": \"linear\"\n            },\n            \"showPoints\": \"auto\",\n            \"spanNulls\": false,\n            \"stacking\": {\n              \"group\": \"A\",\n              \"mode\": \"none\"\n            },\n            \"thresholdsStyle\": {\n              \"mode\": \"off\"\n            }\n          },\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\"\n              },\n              {\n                \"color\": \"red\",\n                \"value\": 80\n              }\n            ]\n          },\n          \"unitScale\": true\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 8,\n        \"w\": 24,\n        \"x\": 0,\n        \"y\": 204\n      },\n      \"id\": 133,\n      \"options\": {\n        \"legend\": {\n          \"calcs\": [],\n          \"displayMode\": \"list\",\n          \"placement\": \"bottom\",\n          \"showLegend\": true\n        },\n        \"tooltip\": {\n          \"mode\": \"single\",\n          \"sort\": \"none\"\n        }\n      },\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"editorMode\": \"code\",\n          \"expr\": \"rate(gossipsub_failed_attestation_publishes_per_subnet{instance=~\\\"$Instance\\\"}[$__rate_interval])\",\n          \"instant\": false,\n          \"legendFormat\": \"{{instance}} Subnet: {{subnet}}\",\n          \"range\": true,\n          \"refId\": \"A\"\n        }\n      ],\n      \"title\": \"Failed Attestationss\",\n      \"transparent\": true,\n      \"type\": \"timeseries\"\n    }\n  ],\n  \"refresh\": \"5s\",\n  \"schemaVersion\": 39,\n  \"tags\": [\n    \"lighthouse\"\n  ],\n  \"templating\": {\n    \"list\": [\n      {\n        \"current\": {},\n        \"datasource\": {\n          \"type\": \"prometheus\",\n          \"uid\": \"PBFA97CFB590B2093\"\n        },\n        \"definition\": \"label_values(instance)\",\n        \"hide\": 0,\n        \"includeAll\": true,\n        \"multi\": true,\n        \"name\": \"Instance\",\n        \"options\": [],\n        \"query\": {\n          \"query\": \"label_values(instance)\",\n          \"refId\": \"StandardVariableQuery\"\n        },\n        \"refresh\": 1,\n        \"regex\": \".*5054$\",\n        \"skipUrlSync\": false,\n        \"sort\": 0,\n        \"type\": \"query\"\n      },\n      {\n        \"current\": {},\n        \"datasource\": {\n          \"type\": \"prometheus\",\n          \"uid\": \"PBFA97CFB590B2093\"\n        },\n        \"definition\": \"label_values(gossipsub_mesh_peer_counts,hash)\",\n        \"hide\": 0,\n        \"includeAll\": true,\n        \"multi\": true,\n        \"name\": \"Fork\",\n        \"options\": [],\n        \"query\": {\n          \"qryType\": 1,\n          \"query\": \"label_values(gossipsub_mesh_peer_counts,hash)\",\n          \"refId\": \"PrometheusVariableQueryEditor-VariableQuery\"\n        },\n        \"refresh\": 1,\n        \"regex\": \"/eth2/(.{8}).*/\",\n        \"skipUrlSync\": false,\n        \"sort\": 0,\n        \"type\": \"query\"\n      },\n      {\n        \"current\": {},\n        \"datasource\": {\n          \"type\": \"prometheus\",\n          \"uid\": \"PBFA97CFB590B2093\"\n        },\n        \"definition\": \"label_values(hash)\",\n        \"hide\": 0,\n        \"includeAll\": true,\n        \"multi\": true,\n        \"name\": \"Topic\",\n        \"options\": [],\n        \"query\": {\n          \"query\": \"label_values(hash)\",\n          \"refId\": \"StandardVariableQuery\"\n        },\n        \"refresh\": 1,\n        \"regex\": \"/eth2/.*/(.*).*/.*/\",\n        \"skipUrlSync\": false,\n        \"sort\": 0,\n        \"type\": \"query\"\n      }\n    ]\n  },\n  \"time\": {\n    \"from\": \"now-3h\",\n    \"to\": \"now\"\n  },\n  \"timepicker\": {},\n  \"timezone\": \"\",\n  \"title\": \"Network\",\n  \"uid\": \"QCrwGdI7ka\",\n  \"version\": 1,\n  \"weekStart\": \"\"\n}\n"
  },
  {
    "path": "static_files/grafana-config/dashboards/lighthouse/Summary.json",
    "content": "{\n  \"__inputs\": [\n    {\n      \"name\": \"DS_PROMETHEUS\",\n      \"label\": \"Prometheus\",\n      \"description\": \"\",\n      \"type\": \"datasource\",\n      \"pluginId\": \"prometheus\",\n      \"pluginName\": \"Prometheus\"\n    }\n  ],\n  \"__elements\": {},\n  \"__requires\": [\n    {\n      \"type\": \"panel\",\n      \"id\": \"bargauge\",\n      \"name\": \"Bar gauge\",\n      \"version\": \"\"\n    },\n    {\n      \"type\": \"panel\",\n      \"id\": \"gauge\",\n      \"name\": \"Gauge\",\n      \"version\": \"\"\n    },\n    {\n      \"type\": \"grafana\",\n      \"id\": \"grafana\",\n      \"name\": \"Grafana\",\n      \"version\": \"10.4.1\"\n    },\n    {\n      \"type\": \"datasource\",\n      \"id\": \"prometheus\",\n      \"name\": \"Prometheus\",\n      \"version\": \"1.0.0\"\n    },\n    {\n      \"type\": \"panel\",\n      \"id\": \"stat\",\n      \"name\": \"Stat\",\n      \"version\": \"\"\n    },\n    {\n      \"type\": \"panel\",\n      \"id\": \"text\",\n      \"name\": \"Text\",\n      \"version\": \"\"\n    },\n    {\n      \"type\": \"panel\",\n      \"id\": \"timeseries\",\n      \"name\": \"Time series\",\n      \"version\": \"\"\n    }\n  ],\n  \"annotations\": {\n    \"list\": [\n      {\n        \"builtIn\": 1,\n        \"datasource\": {\n          \"type\": \"datasource\",\n          \"uid\": \"grafana\"\n        },\n        \"enable\": true,\n        \"hide\": true,\n        \"iconColor\": \"rgba(0, 211, 255, 1)\",\n        \"name\": \"Annotations & Alerts\",\n        \"type\": \"dashboard\"\n      }\n    ]\n  },\n  \"editable\": true,\n  \"fiscalYearStartMonth\": 0,\n  \"graphTooltip\": 0,\n  \"id\": null,\n  \"links\": [],\n  \"panels\": [\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"gridPos\": {\n        \"h\": 6,\n        \"w\": 8,\n        \"x\": 0,\n        \"y\": 0\n      },\n      \"id\": 46,\n      \"options\": {\n        \"code\": {\n          \"language\": \"plaintext\",\n          \"showLineNumbers\": false,\n          \"showMiniMap\": false\n        },\n        \"content\": \"\\n# Lighthouse Metrics\\n\\nMetrics collected from a Lighthouse Beacon Node.\\n\\n\\n\\n\",\n        \"mode\": \"markdown\"\n      },\n      \"pluginVersion\": \"10.4.1\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"refId\": \"A\"\n        }\n      ],\n      \"transparent\": true,\n      \"type\": \"text\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"thresholds\"\n          },\n          \"mappings\": [\n            {\n              \"options\": {\n                \"match\": \"null\",\n                \"result\": {\n                  \"text\": \"N/A\"\n                }\n              },\n              \"type\": \"special\"\n            }\n          ],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\",\n                \"value\": null\n              },\n              {\n                \"color\": \"red\",\n                \"value\": 80\n              }\n            ]\n          },\n          \"unit\": \"none\"\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 3,\n        \"w\": 3,\n        \"x\": 8,\n        \"y\": 0\n      },\n      \"id\": 2,\n      \"maxDataPoints\": 100,\n      \"options\": {\n        \"colorMode\": \"none\",\n        \"graphMode\": \"none\",\n        \"justifyMode\": \"auto\",\n        \"orientation\": \"horizontal\",\n        \"reduceOptions\": {\n          \"calcs\": [\n            \"mean\"\n          ],\n          \"fields\": \"\",\n          \"values\": false\n        },\n        \"showPercentChange\": false,\n        \"textMode\": \"auto\",\n        \"wideLayout\": true\n      },\n      \"pluginVersion\": \"10.4.1\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"expr\": \"avg(beacon_head_state_total_validators_total)\",\n          \"format\": \"time_series\",\n          \"intervalFactor\": 1,\n          \"refId\": \"A\"\n        }\n      ],\n      \"title\": \"Avg. Validator Count\",\n      \"transparent\": true,\n      \"type\": \"stat\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"thresholds\"\n          },\n          \"mappings\": [\n            {\n              \"options\": {\n                \"match\": \"null\",\n                \"result\": {\n                  \"text\": \"N/A\"\n                }\n              },\n              \"type\": \"special\"\n            }\n          ],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\",\n                \"value\": null\n              },\n              {\n                \"color\": \"red\",\n                \"value\": 80\n              }\n            ]\n          },\n          \"unit\": \"none\"\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 3,\n        \"w\": 3,\n        \"x\": 11,\n        \"y\": 0\n      },\n      \"id\": 48,\n      \"maxDataPoints\": 100,\n      \"options\": {\n        \"colorMode\": \"none\",\n        \"graphMode\": \"none\",\n        \"justifyMode\": \"auto\",\n        \"orientation\": \"horizontal\",\n        \"reduceOptions\": {\n          \"calcs\": [\n            \"mean\"\n          ],\n          \"fields\": \"\",\n          \"values\": false\n        },\n        \"showPercentChange\": false,\n        \"textMode\": \"auto\",\n        \"wideLayout\": true\n      },\n      \"pluginVersion\": \"10.4.1\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"expr\": \"avg(beacon_head_state_withdrawn_validators_total)\",\n          \"format\": \"time_series\",\n          \"intervalFactor\": 1,\n          \"refId\": \"A\"\n        }\n      ],\n      \"title\": \"Avg. Withdrawable Validators\",\n      \"transparent\": true,\n      \"type\": \"stat\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"thresholds\"\n          },\n          \"mappings\": [\n            {\n              \"options\": {\n                \"match\": \"null\",\n                \"result\": {\n                  \"text\": \"N/A\"\n                }\n              },\n              \"type\": \"special\"\n            }\n          ],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\",\n                \"value\": null\n              },\n              {\n                \"color\": \"red\",\n                \"value\": 80\n              }\n            ]\n          },\n          \"unit\": \"locale\"\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 3,\n        \"w\": 3,\n        \"x\": 14,\n        \"y\": 0\n      },\n      \"id\": 13,\n      \"maxDataPoints\": 100,\n      \"options\": {\n        \"colorMode\": \"none\",\n        \"graphMode\": \"none\",\n        \"justifyMode\": \"auto\",\n        \"orientation\": \"horizontal\",\n        \"reduceOptions\": {\n          \"calcs\": [\n            \"mean\"\n          ],\n          \"fields\": \"\",\n          \"values\": false\n        },\n        \"showPercentChange\": false,\n        \"textMode\": \"auto\",\n        \"wideLayout\": true\n      },\n      \"pluginVersion\": \"10.4.1\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"expr\": \"max(slotclock_present_slot)\",\n          \"format\": \"time_series\",\n          \"intervalFactor\": 1,\n          \"refId\": \"A\"\n        }\n      ],\n      \"title\": \"Avg. Current Slot\",\n      \"transparent\": true,\n      \"type\": \"stat\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"thresholds\"\n          },\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"rgb(199, 208, 217)\",\n                \"value\": null\n              }\n            ]\n          }\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 2,\n        \"w\": 3,\n        \"x\": 19,\n        \"y\": 0\n      },\n      \"id\": 122,\n      \"options\": {\n        \"colorMode\": \"value\",\n        \"graphMode\": \"none\",\n        \"justifyMode\": \"auto\",\n        \"orientation\": \"auto\",\n        \"reduceOptions\": {\n          \"calcs\": [\n            \"lastNotNull\"\n          ],\n          \"fields\": \"\",\n          \"values\": false\n        },\n        \"showPercentChange\": false,\n        \"text\": {},\n        \"textMode\": \"name\",\n        \"wideLayout\": true\n      },\n      \"pluginVersion\": \"10.4.1\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"expr\": \"lighthouse_info\",\n          \"interval\": \"\",\n          \"legendFormat\": \"\",\n          \"queryType\": \"randomWalk\",\n          \"refId\": \"A\"\n        }\n      ],\n      \"title\": \"Build\",\n      \"transformations\": [\n        {\n          \"id\": \"labelsToFields\",\n          \"options\": {\n            \"valueLabel\": \"version\"\n          }\n        },\n        {\n          \"id\": \"merge\",\n          \"options\": {}\n        }\n      ],\n      \"transparent\": true,\n      \"type\": \"stat\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"thresholds\"\n          },\n          \"mappings\": [\n            {\n              \"options\": {\n                \"match\": \"null\",\n                \"result\": {\n                  \"text\": \"N/A\"\n                }\n              },\n              \"type\": \"special\"\n            }\n          ],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\",\n                \"value\": null\n              },\n              {\n                \"color\": \"red\",\n                \"value\": 80\n              }\n            ]\n          },\n          \"unit\": \"none\"\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 3,\n        \"w\": 3,\n        \"x\": 8,\n        \"y\": 3\n      },\n      \"id\": 47,\n      \"maxDataPoints\": 100,\n      \"options\": {\n        \"colorMode\": \"none\",\n        \"graphMode\": \"none\",\n        \"justifyMode\": \"auto\",\n        \"orientation\": \"horizontal\",\n        \"reduceOptions\": {\n          \"calcs\": [\n            \"mean\"\n          ],\n          \"fields\": \"\",\n          \"values\": false\n        },\n        \"showPercentChange\": false,\n        \"textMode\": \"auto\",\n        \"wideLayout\": true\n      },\n      \"pluginVersion\": \"10.4.1\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"expr\": \"avg(beacon_head_state_slashed_validators_total)\",\n          \"format\": \"time_series\",\n          \"intervalFactor\": 1,\n          \"refId\": \"A\"\n        }\n      ],\n      \"title\": \"Avg. Slashed Validators\",\n      \"transparent\": true,\n      \"type\": \"stat\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"thresholds\"\n          },\n          \"mappings\": [\n            {\n              \"options\": {\n                \"match\": \"null\",\n                \"result\": {\n                  \"text\": \"N/A\"\n                }\n              },\n              \"type\": \"special\"\n            }\n          ],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\",\n                \"value\": null\n              },\n              {\n                \"color\": \"red\",\n                \"value\": 80\n              }\n            ]\n          },\n          \"unit\": \"none\"\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 3,\n        \"w\": 3,\n        \"x\": 11,\n        \"y\": 3\n      },\n      \"id\": 3,\n      \"maxDataPoints\": 100,\n      \"options\": {\n        \"colorMode\": \"none\",\n        \"graphMode\": \"none\",\n        \"justifyMode\": \"auto\",\n        \"orientation\": \"horizontal\",\n        \"reduceOptions\": {\n          \"calcs\": [\n            \"mean\"\n          ],\n          \"fields\": \"\",\n          \"values\": false\n        },\n        \"showPercentChange\": false,\n        \"textMode\": \"auto\",\n        \"wideLayout\": true\n      },\n      \"pluginVersion\": \"10.4.1\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"expr\": \"avg(beacon_head_state_active_validators_total)\",\n          \"format\": \"time_series\",\n          \"intervalFactor\": 1,\n          \"refId\": \"A\"\n        }\n      ],\n      \"title\": \"Avg. Active Validators\",\n      \"transparent\": true,\n      \"type\": \"stat\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"thresholds\"\n          },\n          \"mappings\": [\n            {\n              \"options\": {\n                \"match\": \"null\",\n                \"result\": {\n                  \"text\": \"N/A\"\n                }\n              },\n              \"type\": \"special\"\n            }\n          ],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\",\n                \"value\": null\n              },\n              {\n                \"color\": \"red\",\n                \"value\": 80\n              }\n            ]\n          },\n          \"unit\": \"locale\"\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 3,\n        \"w\": 3,\n        \"x\": 14,\n        \"y\": 3\n      },\n      \"id\": 25,\n      \"maxDataPoints\": 100,\n      \"options\": {\n        \"colorMode\": \"none\",\n        \"graphMode\": \"none\",\n        \"justifyMode\": \"auto\",\n        \"orientation\": \"horizontal\",\n        \"reduceOptions\": {\n          \"calcs\": [\n            \"mean\"\n          ],\n          \"fields\": \"\",\n          \"values\": false\n        },\n        \"showPercentChange\": false,\n        \"textMode\": \"auto\",\n        \"wideLayout\": true\n      },\n      \"pluginVersion\": \"10.4.1\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"expr\": \"max(slotclock_present_epoch)\",\n          \"format\": \"time_series\",\n          \"intervalFactor\": 1,\n          \"refId\": \"A\"\n        }\n      ],\n      \"title\": \"Avg. Current Epoch\",\n      \"transparent\": true,\n      \"type\": \"stat\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"palette-classic\"\n          },\n          \"custom\": {\n            \"axisBorderShow\": false,\n            \"axisCenteredZero\": false,\n            \"axisColorMode\": \"text\",\n            \"axisLabel\": \"\",\n            \"axisPlacement\": \"auto\",\n            \"barAlignment\": 0,\n            \"drawStyle\": \"line\",\n            \"fillOpacity\": 10,\n            \"gradientMode\": \"none\",\n            \"hideFrom\": {\n              \"legend\": false,\n              \"tooltip\": false,\n              \"viz\": false\n            },\n            \"insertNulls\": false,\n            \"lineInterpolation\": \"linear\",\n            \"lineWidth\": 1,\n            \"pointSize\": 5,\n            \"scaleDistribution\": {\n              \"type\": \"linear\"\n            },\n            \"showPoints\": \"never\",\n            \"spanNulls\": false,\n            \"stacking\": {\n              \"group\": \"A\",\n              \"mode\": \"none\"\n            },\n            \"thresholdsStyle\": {\n              \"mode\": \"off\"\n            }\n          },\n          \"links\": [],\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\",\n                \"value\": null\n              },\n              {\n                \"color\": \"red\",\n                \"value\": 80\n              }\n            ]\n          },\n          \"unit\": \"percentunit\"\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 7,\n        \"w\": 8,\n        \"x\": 0,\n        \"y\": 6\n      },\n      \"id\": 96,\n      \"options\": {\n        \"legend\": {\n          \"calcs\": [],\n          \"displayMode\": \"list\",\n          \"placement\": \"bottom\",\n          \"showLegend\": true\n        },\n        \"tooltip\": {\n          \"mode\": \"multi\",\n          \"sort\": \"none\"\n        }\n      },\n      \"pluginVersion\": \"7.4.3\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"expr\": \"system_loadavg_1\",\n          \"interval\": \"\",\n          \"legendFormat\": \"\",\n          \"refId\": \"A\"\n        }\n      ],\n      \"title\": \"Average Load (loadavg 1m)\",\n      \"type\": \"timeseries\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"palette-classic\"\n          },\n          \"custom\": {\n            \"axisBorderShow\": false,\n            \"axisCenteredZero\": false,\n            \"axisColorMode\": \"text\",\n            \"axisLabel\": \"\",\n            \"axisPlacement\": \"auto\",\n            \"barAlignment\": 0,\n            \"drawStyle\": \"line\",\n            \"fillOpacity\": 10,\n            \"gradientMode\": \"none\",\n            \"hideFrom\": {\n              \"legend\": false,\n              \"tooltip\": false,\n              \"viz\": false\n            },\n            \"insertNulls\": false,\n            \"lineInterpolation\": \"linear\",\n            \"lineWidth\": 1,\n            \"pointSize\": 5,\n            \"scaleDistribution\": {\n              \"type\": \"linear\"\n            },\n            \"showPoints\": \"never\",\n            \"spanNulls\": false,\n            \"stacking\": {\n              \"group\": \"A\",\n              \"mode\": \"none\"\n            },\n            \"thresholdsStyle\": {\n              \"mode\": \"off\"\n            }\n          },\n          \"links\": [],\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\",\n                \"value\": null\n              },\n              {\n                \"color\": \"red\",\n                \"value\": 80\n              }\n            ]\n          },\n          \"unit\": \"decbytes\"\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 7,\n        \"w\": 8,\n        \"x\": 8,\n        \"y\": 6\n      },\n      \"id\": 95,\n      \"options\": {\n        \"legend\": {\n          \"calcs\": [],\n          \"displayMode\": \"list\",\n          \"placement\": \"bottom\",\n          \"showLegend\": true\n        },\n        \"tooltip\": {\n          \"mode\": \"multi\",\n          \"sort\": \"none\"\n        }\n      },\n      \"pluginVersion\": \"7.4.3\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"expr\": \"system_virt_mem_free_bytes\",\n          \"interval\": \"\",\n          \"legendFormat\": \"\",\n          \"refId\": \"A\"\n        }\n      ],\n      \"title\": \"Available Memory\",\n      \"type\": \"timeseries\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"palette-classic\"\n          },\n          \"custom\": {\n            \"axisBorderShow\": false,\n            \"axisCenteredZero\": false,\n            \"axisColorMode\": \"text\",\n            \"axisLabel\": \"\",\n            \"axisPlacement\": \"auto\",\n            \"barAlignment\": 0,\n            \"drawStyle\": \"line\",\n            \"fillOpacity\": 10,\n            \"gradientMode\": \"none\",\n            \"hideFrom\": {\n              \"legend\": false,\n              \"tooltip\": false,\n              \"viz\": false\n            },\n            \"insertNulls\": false,\n            \"lineInterpolation\": \"linear\",\n            \"lineWidth\": 1,\n            \"pointSize\": 5,\n            \"scaleDistribution\": {\n              \"type\": \"linear\"\n            },\n            \"showPoints\": \"never\",\n            \"spanNulls\": false,\n            \"stacking\": {\n              \"group\": \"A\",\n              \"mode\": \"none\"\n            },\n            \"thresholdsStyle\": {\n              \"mode\": \"off\"\n            }\n          },\n          \"links\": [],\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\",\n                \"value\": null\n              },\n              {\n                \"color\": \"red\",\n                \"value\": 80\n              }\n            ]\n          },\n          \"unit\": \"decbytes\"\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 7,\n        \"w\": 8,\n        \"x\": 16,\n        \"y\": 6\n      },\n      \"id\": 100,\n      \"options\": {\n        \"legend\": {\n          \"calcs\": [],\n          \"displayMode\": \"list\",\n          \"placement\": \"bottom\",\n          \"showLegend\": true\n        },\n        \"tooltip\": {\n          \"mode\": \"multi\",\n          \"sort\": \"none\"\n        }\n      },\n      \"pluginVersion\": \"7.4.3\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"expr\": \"process_resident_memory_bytes\",\n          \"interval\": \"\",\n          \"legendFormat\": \"\",\n          \"refId\": \"A\"\n        }\n      ],\n      \"title\": \"Lighthouse Resident Memory Usage\",\n      \"type\": \"timeseries\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"gridPos\": {\n        \"h\": 2,\n        \"w\": 17,\n        \"x\": 0,\n        \"y\": 13\n      },\n      \"id\": 49,\n      \"options\": {\n        \"code\": {\n          \"language\": \"plaintext\",\n          \"showLineNumbers\": false,\n          \"showMiniMap\": false\n        },\n        \"content\": \"\\n### Consensus\\n\\nOverview of consensus between nodes.\\n\\n\\n\",\n        \"mode\": \"markdown\"\n      },\n      \"pluginVersion\": \"10.4.1\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"refId\": \"A\"\n        }\n      ],\n      \"transparent\": true,\n      \"type\": \"text\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"palette-classic\"\n          },\n          \"custom\": {\n            \"axisBorderShow\": false,\n            \"axisCenteredZero\": false,\n            \"axisColorMode\": \"text\",\n            \"axisLabel\": \"Slots\",\n            \"axisPlacement\": \"auto\",\n            \"barAlignment\": 0,\n            \"drawStyle\": \"line\",\n            \"fillOpacity\": 10,\n            \"gradientMode\": \"none\",\n            \"hideFrom\": {\n              \"legend\": false,\n              \"tooltip\": false,\n              \"viz\": false\n            },\n            \"insertNulls\": false,\n            \"lineInterpolation\": \"linear\",\n            \"lineWidth\": 1,\n            \"pointSize\": 5,\n            \"scaleDistribution\": {\n              \"type\": \"linear\"\n            },\n            \"showPoints\": \"never\",\n            \"spanNulls\": false,\n            \"stacking\": {\n              \"group\": \"A\",\n              \"mode\": \"none\"\n            },\n            \"thresholdsStyle\": {\n              \"mode\": \"off\"\n            }\n          },\n          \"decimals\": 0,\n          \"links\": [],\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\",\n                \"value\": null\n              },\n              {\n                \"color\": \"red\",\n                \"value\": 80\n              }\n            ]\n          },\n          \"unit\": \"short\"\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 6,\n        \"w\": 8,\n        \"x\": 0,\n        \"y\": 15\n      },\n      \"id\": 28,\n      \"options\": {\n        \"legend\": {\n          \"calcs\": [],\n          \"displayMode\": \"list\",\n          \"placement\": \"bottom\",\n          \"showLegend\": true\n        },\n        \"tooltip\": {\n          \"mode\": \"multi\",\n          \"sort\": \"none\"\n        }\n      },\n      \"pluginVersion\": \"7.4.3\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"expr\": \"slotclock_present_slot - beacon_head_state_slot\",\n          \"format\": \"time_series\",\n          \"intervalFactor\": 1,\n          \"refId\": \"A\"\n        }\n      ],\n      \"title\": \"Slots since Best Block\",\n      \"type\": \"timeseries\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"palette-classic\"\n          },\n          \"custom\": {\n            \"axisBorderShow\": false,\n            \"axisCenteredZero\": false,\n            \"axisColorMode\": \"text\",\n            \"axisLabel\": \"Epochs\",\n            \"axisPlacement\": \"auto\",\n            \"barAlignment\": 0,\n            \"drawStyle\": \"line\",\n            \"fillOpacity\": 10,\n            \"gradientMode\": \"none\",\n            \"hideFrom\": {\n              \"legend\": false,\n              \"tooltip\": false,\n              \"viz\": false\n            },\n            \"insertNulls\": false,\n            \"lineInterpolation\": \"linear\",\n            \"lineWidth\": 1,\n            \"pointSize\": 5,\n            \"scaleDistribution\": {\n              \"type\": \"linear\"\n            },\n            \"showPoints\": \"never\",\n            \"spanNulls\": false,\n            \"stacking\": {\n              \"group\": \"A\",\n              \"mode\": \"none\"\n            },\n            \"thresholdsStyle\": {\n              \"mode\": \"off\"\n            }\n          },\n          \"decimals\": 0,\n          \"links\": [],\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\",\n                \"value\": null\n              },\n              {\n                \"color\": \"red\",\n                \"value\": 80\n              }\n            ]\n          },\n          \"unit\": \"short\"\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 6,\n        \"w\": 8,\n        \"x\": 8,\n        \"y\": 15\n      },\n      \"id\": 81,\n      \"options\": {\n        \"legend\": {\n          \"calcs\": [],\n          \"displayMode\": \"list\",\n          \"placement\": \"bottom\",\n          \"showLegend\": false\n        },\n        \"tooltip\": {\n          \"mode\": \"multi\",\n          \"sort\": \"none\"\n        }\n      },\n      \"pluginVersion\": \"7.4.3\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"expr\": \"slotclock_present_epoch - beacon_head_state_current_justified_epoch\",\n          \"format\": \"time_series\",\n          \"interval\": \"\",\n          \"intervalFactor\": 1,\n          \"legendFormat\": \"\",\n          \"refId\": \"A\"\n        }\n      ],\n      \"title\": \"Epoch Boundaries since Justification (Min)\",\n      \"type\": \"timeseries\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"palette-classic\"\n          },\n          \"custom\": {\n            \"axisBorderShow\": false,\n            \"axisCenteredZero\": false,\n            \"axisColorMode\": \"text\",\n            \"axisLabel\": \"Epochs\",\n            \"axisPlacement\": \"auto\",\n            \"barAlignment\": 0,\n            \"drawStyle\": \"line\",\n            \"fillOpacity\": 10,\n            \"gradientMode\": \"none\",\n            \"hideFrom\": {\n              \"legend\": false,\n              \"tooltip\": false,\n              \"viz\": false\n            },\n            \"insertNulls\": false,\n            \"lineInterpolation\": \"linear\",\n            \"lineWidth\": 1,\n            \"pointSize\": 5,\n            \"scaleDistribution\": {\n              \"type\": \"linear\"\n            },\n            \"showPoints\": \"never\",\n            \"spanNulls\": false,\n            \"stacking\": {\n              \"group\": \"A\",\n              \"mode\": \"none\"\n            },\n            \"thresholdsStyle\": {\n              \"mode\": \"off\"\n            }\n          },\n          \"decimals\": 0,\n          \"links\": [],\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\",\n                \"value\": null\n              },\n              {\n                \"color\": \"red\",\n                \"value\": 80\n              }\n            ]\n          },\n          \"unit\": \"short\"\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 6,\n        \"w\": 8,\n        \"x\": 16,\n        \"y\": 15\n      },\n      \"id\": 15,\n      \"options\": {\n        \"legend\": {\n          \"calcs\": [],\n          \"displayMode\": \"list\",\n          \"placement\": \"bottom\",\n          \"showLegend\": false\n        },\n        \"tooltip\": {\n          \"mode\": \"multi\",\n          \"sort\": \"none\"\n        }\n      },\n      \"pluginVersion\": \"7.4.3\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"expr\": \"slotclock_present_epoch - beacon_head_state_finalized_epoch\",\n          \"format\": \"time_series\",\n          \"intervalFactor\": 1,\n          \"refId\": \"A\"\n        }\n      ],\n      \"title\": \"Epoch Boundaries since Finalization (Min)\",\n      \"type\": \"timeseries\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"palette-classic\"\n          },\n          \"custom\": {\n            \"axisBorderShow\": false,\n            \"axisCenteredZero\": false,\n            \"axisColorMode\": \"text\",\n            \"axisLabel\": \"Percentage of Balance\",\n            \"axisPlacement\": \"auto\",\n            \"barAlignment\": 0,\n            \"drawStyle\": \"line\",\n            \"fillOpacity\": 10,\n            \"gradientMode\": \"none\",\n            \"hideFrom\": {\n              \"legend\": false,\n              \"tooltip\": false,\n              \"viz\": false\n            },\n            \"insertNulls\": false,\n            \"lineInterpolation\": \"linear\",\n            \"lineWidth\": 1,\n            \"pointSize\": 5,\n            \"scaleDistribution\": {\n              \"type\": \"linear\"\n            },\n            \"showPoints\": \"never\",\n            \"spanNulls\": false,\n            \"stacking\": {\n              \"group\": \"A\",\n              \"mode\": \"none\"\n            },\n            \"thresholdsStyle\": {\n              \"mode\": \"off\"\n            }\n          },\n          \"decimals\": 0,\n          \"links\": [],\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\",\n                \"value\": null\n              },\n              {\n                \"color\": \"red\",\n                \"value\": 80\n              }\n            ]\n          },\n          \"unit\": \"percentunit\"\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 5,\n        \"w\": 13,\n        \"x\": 0,\n        \"y\": 21\n      },\n      \"id\": 26,\n      \"options\": {\n        \"legend\": {\n          \"calcs\": [],\n          \"displayMode\": \"list\",\n          \"placement\": \"bottom\",\n          \"showLegend\": false\n        },\n        \"tooltip\": {\n          \"mode\": \"multi\",\n          \"sort\": \"none\"\n        }\n      },\n      \"pluginVersion\": \"7.4.3\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"expr\": \"beacon_participation_prev_epoch_attester\",\n          \"format\": \"time_series\",\n          \"interval\": \"\",\n          \"intervalFactor\": 1,\n          \"legendFormat\": \"\",\n          \"refId\": \"A\"\n        }\n      ],\n      \"title\": \"Previous Epoch Attesting Balance\",\n      \"type\": \"timeseries\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"palette-classic\"\n          },\n          \"custom\": {\n            \"axisBorderShow\": false,\n            \"axisCenteredZero\": false,\n            \"axisColorMode\": \"text\",\n            \"axisLabel\": \"Percentage of Balance\",\n            \"axisPlacement\": \"auto\",\n            \"barAlignment\": 0,\n            \"drawStyle\": \"line\",\n            \"fillOpacity\": 10,\n            \"gradientMode\": \"none\",\n            \"hideFrom\": {\n              \"legend\": false,\n              \"tooltip\": false,\n              \"viz\": false\n            },\n            \"insertNulls\": false,\n            \"lineInterpolation\": \"linear\",\n            \"lineWidth\": 1,\n            \"pointSize\": 5,\n            \"scaleDistribution\": {\n              \"type\": \"linear\"\n            },\n            \"showPoints\": \"never\",\n            \"spanNulls\": false,\n            \"stacking\": {\n              \"group\": \"A\",\n              \"mode\": \"none\"\n            },\n            \"thresholdsStyle\": {\n              \"mode\": \"off\"\n            }\n          },\n          \"decimals\": 0,\n          \"links\": [],\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\",\n                \"value\": null\n              },\n              {\n                \"color\": \"red\",\n                \"value\": 80\n              }\n            ]\n          },\n          \"unit\": \"percentunit\"\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 5,\n        \"w\": 6,\n        \"x\": 13,\n        \"y\": 21\n      },\n      \"id\": 76,\n      \"options\": {\n        \"legend\": {\n          \"calcs\": [],\n          \"displayMode\": \"list\",\n          \"placement\": \"bottom\",\n          \"showLegend\": false\n        },\n        \"tooltip\": {\n          \"mode\": \"multi\",\n          \"sort\": \"none\"\n        }\n      },\n      \"pluginVersion\": \"7.4.3\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"expr\": \"beacon_participation_prev_epoch_target_attester\",\n          \"format\": \"time_series\",\n          \"interval\": \"\",\n          \"intervalFactor\": 1,\n          \"legendFormat\": \"\",\n          \"refId\": \"A\"\n        }\n      ],\n      \"title\": \"Previous Epoch Target Attesting Balance\",\n      \"type\": \"timeseries\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"palette-classic\"\n          },\n          \"custom\": {\n            \"axisBorderShow\": false,\n            \"axisCenteredZero\": false,\n            \"axisColorMode\": \"text\",\n            \"axisLabel\": \"Percentage of Balance\",\n            \"axisPlacement\": \"auto\",\n            \"barAlignment\": 0,\n            \"drawStyle\": \"line\",\n            \"fillOpacity\": 10,\n            \"gradientMode\": \"none\",\n            \"hideFrom\": {\n              \"legend\": false,\n              \"tooltip\": false,\n              \"viz\": false\n            },\n            \"insertNulls\": false,\n            \"lineInterpolation\": \"linear\",\n            \"lineWidth\": 1,\n            \"pointSize\": 5,\n            \"scaleDistribution\": {\n              \"type\": \"linear\"\n            },\n            \"showPoints\": \"never\",\n            \"spanNulls\": false,\n            \"stacking\": {\n              \"group\": \"A\",\n              \"mode\": \"none\"\n            },\n            \"thresholdsStyle\": {\n              \"mode\": \"off\"\n            }\n          },\n          \"decimals\": 0,\n          \"links\": [],\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\",\n                \"value\": null\n              },\n              {\n                \"color\": \"red\",\n                \"value\": 80\n              }\n            ]\n          },\n          \"unit\": \"percentunit\"\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 5,\n        \"w\": 5,\n        \"x\": 19,\n        \"y\": 21\n      },\n      \"id\": 77,\n      \"options\": {\n        \"legend\": {\n          \"calcs\": [],\n          \"displayMode\": \"list\",\n          \"placement\": \"bottom\",\n          \"showLegend\": false\n        },\n        \"tooltip\": {\n          \"mode\": \"multi\",\n          \"sort\": \"none\"\n        }\n      },\n      \"pluginVersion\": \"7.4.3\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"expr\": \"beacon_participation_prev_epoch_head_attester\",\n          \"format\": \"time_series\",\n          \"interval\": \"\",\n          \"intervalFactor\": 1,\n          \"legendFormat\": \"\",\n          \"refId\": \"A\"\n        }\n      ],\n      \"title\": \"Previous Epoch Head Attesting Balance\",\n      \"type\": \"timeseries\"\n    },\n    {\n      \"aliasColors\": {},\n      \"autoMigrateFrom\": \"graph\",\n      \"bars\": false,\n      \"dashLength\": 10,\n      \"dashes\": false,\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"description\": \"The number of attesters for which we have seen an attestation. That attestation is not necessarily included in the chain.\",\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"custom\": {},\n          \"links\": []\n        },\n        \"overrides\": []\n      },\n      \"fill\": 1,\n      \"fillGradient\": 0,\n      \"gridPos\": {\n        \"h\": 5,\n        \"w\": 12,\n        \"x\": 0,\n        \"y\": 26\n      },\n      \"hiddenSeries\": false,\n      \"id\": 78,\n      \"legend\": {\n        \"avg\": false,\n        \"current\": false,\n        \"max\": false,\n        \"min\": false,\n        \"show\": false,\n        \"total\": false,\n        \"values\": false\n      },\n      \"lines\": true,\n      \"linewidth\": 1,\n      \"nullPointMode\": \"null\",\n      \"options\": {\n        \"alertThreshold\": true\n      },\n      \"percentage\": false,\n      \"pluginVersion\": \"7.4.3\",\n      \"pointradius\": 2,\n      \"points\": false,\n      \"renderer\": \"flot\",\n      \"seriesOverrides\": [],\n      \"spaceLength\": 10,\n      \"stack\": false,\n      \"steppedLine\": false,\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"expr\": \"beacon_attn_observation_epoch_attesters\",\n          \"format\": \"time_series\",\n          \"interval\": \"\",\n          \"intervalFactor\": 1,\n          \"legendFormat\": \"\",\n          \"refId\": \"A\"\n        }\n      ],\n      \"thresholds\": [],\n      \"timeRegions\": [],\n      \"title\": \"Previous Epoch Observed Attesters\",\n      \"tooltip\": {\n        \"shared\": true,\n        \"sort\": 0,\n        \"value_type\": \"individual\"\n      },\n      \"type\": \"timeseries\",\n      \"xaxis\": {\n        \"mode\": \"time\",\n        \"show\": true,\n        \"values\": []\n      },\n      \"yaxes\": [\n        {\n          \"decimals\": 0,\n          \"format\": \"none\",\n          \"label\": \"# of Validators\",\n          \"logBase\": 1,\n          \"show\": true\n        },\n        {\n          \"format\": \"short\",\n          \"logBase\": 1,\n          \"show\": true\n        }\n      ],\n      \"yaxis\": {\n        \"align\": false\n      }\n    },\n    {\n      \"aliasColors\": {},\n      \"autoMigrateFrom\": \"graph\",\n      \"bars\": false,\n      \"dashLength\": 10,\n      \"dashes\": false,\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"description\": \"The number of aggregators for which we have seen an attestation. That attestation is not necessarily included in the chain.\",\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"custom\": {},\n          \"links\": []\n        },\n        \"overrides\": []\n      },\n      \"fill\": 1,\n      \"fillGradient\": 0,\n      \"gridPos\": {\n        \"h\": 5,\n        \"w\": 12,\n        \"x\": 12,\n        \"y\": 26\n      },\n      \"hiddenSeries\": false,\n      \"id\": 79,\n      \"legend\": {\n        \"avg\": false,\n        \"current\": false,\n        \"max\": false,\n        \"min\": false,\n        \"show\": false,\n        \"total\": false,\n        \"values\": false\n      },\n      \"lines\": true,\n      \"linewidth\": 1,\n      \"nullPointMode\": \"null\",\n      \"options\": {\n        \"alertThreshold\": true\n      },\n      \"percentage\": false,\n      \"pluginVersion\": \"7.4.3\",\n      \"pointradius\": 2,\n      \"points\": false,\n      \"renderer\": \"flot\",\n      \"seriesOverrides\": [],\n      \"spaceLength\": 10,\n      \"stack\": false,\n      \"steppedLine\": false,\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"expr\": \"beacon_attn_observation_epoch_aggregators\",\n          \"format\": \"time_series\",\n          \"interval\": \"\",\n          \"intervalFactor\": 1,\n          \"legendFormat\": \"\",\n          \"refId\": \"A\"\n        }\n      ],\n      \"thresholds\": [],\n      \"timeRegions\": [],\n      \"title\": \"Previous Epoch Observed Aggregators\",\n      \"tooltip\": {\n        \"shared\": true,\n        \"sort\": 0,\n        \"value_type\": \"individual\"\n      },\n      \"type\": \"timeseries\",\n      \"xaxis\": {\n        \"mode\": \"time\",\n        \"show\": true,\n        \"values\": []\n      },\n      \"yaxes\": [\n        {\n          \"decimals\": 0,\n          \"format\": \"none\",\n          \"label\": \"# of Validators\",\n          \"logBase\": 1,\n          \"show\": true\n        },\n        {\n          \"format\": \"short\",\n          \"logBase\": 1,\n          \"show\": true\n        }\n      ],\n      \"yaxis\": {\n        \"align\": false\n      }\n    },\n    {\n      \"aliasColors\": {},\n      \"autoMigrateFrom\": \"graph\",\n      \"bars\": false,\n      \"dashLength\": 10,\n      \"dashes\": false,\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"custom\": {},\n          \"links\": []\n        },\n        \"overrides\": []\n      },\n      \"fill\": 0,\n      \"fillGradient\": 0,\n      \"gridPos\": {\n        \"h\": 4,\n        \"w\": 4,\n        \"x\": 0,\n        \"y\": 31\n      },\n      \"hiddenSeries\": false,\n      \"id\": 17,\n      \"legend\": {\n        \"avg\": false,\n        \"current\": false,\n        \"max\": false,\n        \"min\": false,\n        \"show\": false,\n        \"total\": false,\n        \"values\": false\n      },\n      \"lines\": true,\n      \"linewidth\": 1,\n      \"nullPointMode\": \"null\",\n      \"options\": {\n        \"alertThreshold\": true\n      },\n      \"percentage\": false,\n      \"pluginVersion\": \"7.4.3\",\n      \"pointradius\": 2,\n      \"points\": false,\n      \"renderer\": \"flot\",\n      \"seriesOverrides\": [],\n      \"spaceLength\": 10,\n      \"stack\": false,\n      \"steppedLine\": false,\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"expr\": \"beacon_head_state_validator_balances_total / 1000000000\",\n          \"format\": \"time_series\",\n          \"intervalFactor\": 1,\n          \"refId\": \"A\"\n        }\n      ],\n      \"thresholds\": [],\n      \"timeRegions\": [],\n      \"title\": \"Validator Balances\",\n      \"tooltip\": {\n        \"shared\": true,\n        \"sort\": 0,\n        \"value_type\": \"individual\"\n      },\n      \"type\": \"timeseries\",\n      \"xaxis\": {\n        \"mode\": \"time\",\n        \"show\": true,\n        \"values\": []\n      },\n      \"yaxes\": [\n        {\n          \"format\": \"none\",\n          \"label\": \"Total Validator ETH\",\n          \"logBase\": 1,\n          \"show\": true\n        },\n        {\n          \"format\": \"short\",\n          \"logBase\": 1,\n          \"show\": true\n        }\n      ],\n      \"yaxis\": {\n        \"align\": false\n      }\n    },\n    {\n      \"aliasColors\": {},\n      \"autoMigrateFrom\": \"graph\",\n      \"bars\": false,\n      \"dashLength\": 10,\n      \"dashes\": false,\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"custom\": {},\n          \"links\": []\n        },\n        \"overrides\": []\n      },\n      \"fill\": 0,\n      \"fillGradient\": 0,\n      \"gridPos\": {\n        \"h\": 4,\n        \"w\": 5,\n        \"x\": 4,\n        \"y\": 31\n      },\n      \"hiddenSeries\": false,\n      \"id\": 58,\n      \"legend\": {\n        \"avg\": false,\n        \"current\": false,\n        \"max\": false,\n        \"min\": false,\n        \"show\": false,\n        \"total\": false,\n        \"values\": false\n      },\n      \"lines\": true,\n      \"linewidth\": 1,\n      \"nullPointMode\": \"null\",\n      \"options\": {\n        \"alertThreshold\": true\n      },\n      \"percentage\": false,\n      \"pluginVersion\": \"7.4.3\",\n      \"pointradius\": 2,\n      \"points\": false,\n      \"renderer\": \"flot\",\n      \"seriesOverrides\": [],\n      \"spaceLength\": 10,\n      \"stack\": false,\n      \"steppedLine\": false,\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"expr\": \"beacon_head_state_active_validators_total\",\n          \"format\": \"time_series\",\n          \"intervalFactor\": 1,\n          \"refId\": \"A\"\n        }\n      ],\n      \"thresholds\": [],\n      \"timeRegions\": [],\n      \"title\": \"Active Validators\",\n      \"tooltip\": {\n        \"shared\": true,\n        \"sort\": 0,\n        \"value_type\": \"individual\"\n      },\n      \"type\": \"timeseries\",\n      \"xaxis\": {\n        \"mode\": \"time\",\n        \"show\": true,\n        \"values\": []\n      },\n      \"yaxes\": [\n        {\n          \"format\": \"none\",\n          \"label\": \"Total Validator ETH\",\n          \"logBase\": 1,\n          \"show\": true\n        },\n        {\n          \"format\": \"short\",\n          \"logBase\": 1,\n          \"show\": true\n        }\n      ],\n      \"yaxis\": {\n        \"align\": false\n      }\n    },\n    {\n      \"aliasColors\": {},\n      \"autoMigrateFrom\": \"graph\",\n      \"bars\": false,\n      \"dashLength\": 10,\n      \"dashes\": false,\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"custom\": {},\n          \"links\": []\n        },\n        \"overrides\": []\n      },\n      \"fill\": 0,\n      \"fillGradient\": 0,\n      \"gridPos\": {\n        \"h\": 4,\n        \"w\": 5,\n        \"x\": 9,\n        \"y\": 31\n      },\n      \"hiddenSeries\": false,\n      \"id\": 60,\n      \"legend\": {\n        \"avg\": false,\n        \"current\": false,\n        \"max\": false,\n        \"min\": false,\n        \"show\": false,\n        \"total\": false,\n        \"values\": false\n      },\n      \"lines\": true,\n      \"linewidth\": 1,\n      \"nullPointMode\": \"null\",\n      \"options\": {\n        \"alertThreshold\": true\n      },\n      \"percentage\": false,\n      \"pluginVersion\": \"7.4.3\",\n      \"pointradius\": 2,\n      \"points\": false,\n      \"renderer\": \"flot\",\n      \"seriesOverrides\": [],\n      \"spaceLength\": 10,\n      \"stack\": false,\n      \"steppedLine\": false,\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"expr\": \"beacon_head_state_total_validators_total\",\n          \"format\": \"time_series\",\n          \"intervalFactor\": 1,\n          \"refId\": \"A\"\n        }\n      ],\n      \"thresholds\": [],\n      \"timeRegions\": [],\n      \"title\": \"Total Validators\",\n      \"tooltip\": {\n        \"shared\": true,\n        \"sort\": 0,\n        \"value_type\": \"individual\"\n      },\n      \"type\": \"timeseries\",\n      \"xaxis\": {\n        \"mode\": \"time\",\n        \"show\": true,\n        \"values\": []\n      },\n      \"yaxes\": [\n        {\n          \"format\": \"none\",\n          \"label\": \"Total Validator ETH\",\n          \"logBase\": 1,\n          \"show\": true\n        },\n        {\n          \"format\": \"short\",\n          \"logBase\": 1,\n          \"show\": true\n        }\n      ],\n      \"yaxis\": {\n        \"align\": false\n      }\n    },\n    {\n      \"aliasColors\": {},\n      \"autoMigrateFrom\": \"graph\",\n      \"bars\": false,\n      \"dashLength\": 10,\n      \"dashes\": false,\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"custom\": {},\n          \"links\": []\n        },\n        \"overrides\": []\n      },\n      \"fill\": 0,\n      \"fillGradient\": 0,\n      \"gridPos\": {\n        \"h\": 4,\n        \"w\": 5,\n        \"x\": 14,\n        \"y\": 31\n      },\n      \"hiddenSeries\": false,\n      \"id\": 16,\n      \"legend\": {\n        \"avg\": false,\n        \"current\": false,\n        \"max\": false,\n        \"min\": false,\n        \"show\": false,\n        \"total\": false,\n        \"values\": false\n      },\n      \"lines\": true,\n      \"linewidth\": 1,\n      \"nullPointMode\": \"null\",\n      \"options\": {\n        \"alertThreshold\": true\n      },\n      \"percentage\": false,\n      \"pluginVersion\": \"7.4.3\",\n      \"pointradius\": 2,\n      \"points\": true,\n      \"renderer\": \"flot\",\n      \"seriesOverrides\": [],\n      \"spaceLength\": 10,\n      \"stack\": false,\n      \"steppedLine\": false,\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"expr\": \"beacon_head_state_finalized_root\",\n          \"format\": \"time_series\",\n          \"intervalFactor\": 1,\n          \"refId\": \"A\"\n        }\n      ],\n      \"thresholds\": [],\n      \"timeRegions\": [],\n      \"title\": \"Finalized Root (hash shown as int)\",\n      \"tooltip\": {\n        \"shared\": true,\n        \"sort\": 0,\n        \"value_type\": \"individual\"\n      },\n      \"type\": \"timeseries\",\n      \"xaxis\": {\n        \"mode\": \"time\",\n        \"show\": true,\n        \"values\": []\n      },\n      \"yaxes\": [\n        {\n          \"format\": \"sci\",\n          \"label\": \"int(hash)\",\n          \"logBase\": 1,\n          \"show\": true\n        },\n        {\n          \"format\": \"short\",\n          \"logBase\": 1,\n          \"show\": true\n        }\n      ],\n      \"yaxis\": {\n        \"align\": false\n      }\n    },\n    {\n      \"aliasColors\": {},\n      \"autoMigrateFrom\": \"graph\",\n      \"bars\": false,\n      \"dashLength\": 10,\n      \"dashes\": false,\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"custom\": {},\n          \"links\": []\n        },\n        \"overrides\": []\n      },\n      \"fill\": 0,\n      \"fillGradient\": 0,\n      \"gridPos\": {\n        \"h\": 4,\n        \"w\": 5,\n        \"x\": 19,\n        \"y\": 31\n      },\n      \"hiddenSeries\": false,\n      \"id\": 18,\n      \"legend\": {\n        \"avg\": false,\n        \"current\": false,\n        \"max\": false,\n        \"min\": false,\n        \"show\": false,\n        \"total\": false,\n        \"values\": false\n      },\n      \"lines\": true,\n      \"linewidth\": 1,\n      \"nullPointMode\": \"null\",\n      \"options\": {\n        \"alertThreshold\": true\n      },\n      \"percentage\": false,\n      \"pluginVersion\": \"7.4.3\",\n      \"pointradius\": 2,\n      \"points\": false,\n      \"renderer\": \"flot\",\n      \"seriesOverrides\": [],\n      \"spaceLength\": 10,\n      \"stack\": false,\n      \"steppedLine\": false,\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"expr\": \"beacon_fork_choice_reorg_total\",\n          \"format\": \"time_series\",\n          \"interval\": \"\",\n          \"intervalFactor\": 1,\n          \"legendFormat\": \"\",\n          \"refId\": \"A\"\n        }\n      ],\n      \"thresholds\": [],\n      \"timeRegions\": [],\n      \"title\": \"Total Fork Choice Re-Orgs\",\n      \"tooltip\": {\n        \"shared\": true,\n        \"sort\": 0,\n        \"value_type\": \"individual\"\n      },\n      \"type\": \"timeseries\",\n      \"xaxis\": {\n        \"mode\": \"time\",\n        \"show\": true,\n        \"values\": []\n      },\n      \"yaxes\": [\n        {\n          \"decimals\": 0,\n          \"format\": \"none\",\n          \"label\": \"Re-Orgs\",\n          \"logBase\": 1,\n          \"show\": true\n        },\n        {\n          \"format\": \"short\",\n          \"logBase\": 1,\n          \"show\": true\n        }\n      ],\n      \"yaxis\": {\n        \"align\": false\n      }\n    },\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"custom\": {}\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 2,\n        \"w\": 24,\n        \"x\": 0,\n        \"y\": 35\n      },\n      \"id\": 87,\n      \"options\": {\n        \"content\": \"\\n### Networking\\n\\n\\n\\n\",\n        \"mode\": \"markdown\"\n      },\n      \"pluginVersion\": \"7.4.3\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"refId\": \"A\"\n        }\n      ],\n      \"transparent\": true,\n      \"type\": \"text\"\n    },\n    {\n      \"aliasColors\": {},\n      \"autoMigrateFrom\": \"graph\",\n      \"bars\": false,\n      \"dashLength\": 10,\n      \"dashes\": false,\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"custom\": {},\n          \"links\": []\n        },\n        \"overrides\": []\n      },\n      \"fill\": 1,\n      \"fillGradient\": 0,\n      \"gridPos\": {\n        \"h\": 6,\n        \"w\": 12,\n        \"x\": 0,\n        \"y\": 37\n      },\n      \"hiddenSeries\": false,\n      \"id\": 12,\n      \"legend\": {\n        \"avg\": false,\n        \"current\": false,\n        \"max\": false,\n        \"min\": false,\n        \"show\": false,\n        \"total\": false,\n        \"values\": false\n      },\n      \"lines\": true,\n      \"linewidth\": 1,\n      \"nullPointMode\": \"null\",\n      \"options\": {\n        \"alertThreshold\": true\n      },\n      \"percentage\": false,\n      \"pluginVersion\": \"7.4.3\",\n      \"pointradius\": 2,\n      \"points\": false,\n      \"renderer\": \"flot\",\n      \"seriesOverrides\": [],\n      \"spaceLength\": 10,\n      \"stack\": false,\n      \"steppedLine\": false,\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"expr\": \"libp2p_peers\",\n          \"format\": \"time_series\",\n          \"intervalFactor\": 1,\n          \"refId\": \"A\"\n        }\n      ],\n      \"thresholds\": [],\n      \"timeRegions\": [],\n      \"title\": \"libp2p Connected Peers\",\n      \"tooltip\": {\n        \"shared\": true,\n        \"sort\": 0,\n        \"value_type\": \"individual\"\n      },\n      \"type\": \"timeseries\",\n      \"xaxis\": {\n        \"mode\": \"time\",\n        \"show\": true,\n        \"values\": []\n      },\n      \"yaxes\": [\n        {\n          \"decimals\": 0,\n          \"format\": \"short\",\n          \"label\": \"Peers\",\n          \"logBase\": 1,\n          \"show\": true\n        },\n        {\n          \"format\": \"short\",\n          \"logBase\": 1,\n          \"show\": true\n        }\n      ],\n      \"yaxis\": {\n        \"align\": false\n      }\n    },\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"description\": \"Peers via client implementations\",\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"thresholds\"\n          },\n          \"custom\": {},\n          \"mappings\": [],\n          \"max\": 100,\n          \"min\": 0,\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\"\n              },\n              {\n                \"color\": \"red\",\n                \"value\": 80\n              }\n            ]\n          }\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 6,\n        \"w\": 12,\n        \"x\": 12,\n        \"y\": 37\n      },\n      \"id\": 104,\n      \"options\": {\n        \"displayMode\": \"gradient\",\n        \"orientation\": \"auto\",\n        \"reduceOptions\": {\n          \"calcs\": [\n            \"mean\"\n          ],\n          \"fields\": \"\",\n          \"values\": false\n        },\n        \"showUnfilled\": true,\n        \"text\": {}\n      },\n      \"pluginVersion\": \"7.4.3\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"expr\": \"libp2p_peers_per_client\",\n          \"instant\": true,\n          \"interval\": \"\",\n          \"legendFormat\": \"{{Client}}\",\n          \"refId\": \"A\"\n        }\n      ],\n      \"title\": \"Connected Clients\",\n      \"type\": \"bargauge\"\n    },\n    {\n      \"aliasColors\": {},\n      \"autoMigrateFrom\": \"graph\",\n      \"bars\": false,\n      \"dashLength\": 10,\n      \"dashes\": false,\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"description\": \"\",\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"custom\": {},\n          \"links\": []\n        },\n        \"overrides\": []\n      },\n      \"fill\": 1,\n      \"fillGradient\": 0,\n      \"gridPos\": {\n        \"h\": 7,\n        \"w\": 10,\n        \"x\": 0,\n        \"y\": 43\n      },\n      \"hiddenSeries\": false,\n      \"id\": 89,\n      \"legend\": {\n        \"avg\": false,\n        \"current\": false,\n        \"max\": false,\n        \"min\": false,\n        \"show\": true,\n        \"total\": false,\n        \"values\": false\n      },\n      \"lines\": true,\n      \"linewidth\": 1,\n      \"nullPointMode\": \"null\",\n      \"percentage\": false,\n      \"pluginVersion\": \"7.4.3\",\n      \"pointradius\": 2,\n      \"points\": false,\n      \"renderer\": \"flot\",\n      \"seriesOverrides\": [],\n      \"spaceLength\": 10,\n      \"stack\": false,\n      \"steppedLine\": false,\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"expr\": \"discovery_requests\",\n          \"interval\": \"\",\n          \"legendFormat\": \"Discovery Requests Per Second\",\n          \"refId\": \"A\"\n        }\n      ],\n      \"thresholds\": [],\n      \"timeRegions\": [],\n      \"title\": \"Unsolicited Discovery Requests/s\",\n      \"tooltip\": {\n        \"shared\": true,\n        \"sort\": 0,\n        \"value_type\": \"individual\"\n      },\n      \"type\": \"timeseries\",\n      \"xaxis\": {\n        \"mode\": \"time\",\n        \"show\": true,\n        \"values\": []\n      },\n      \"yaxes\": [\n        {\n          \"format\": \"short\",\n          \"logBase\": 1,\n          \"show\": true\n        },\n        {\n          \"format\": \"short\",\n          \"logBase\": 1,\n          \"show\": true\n        }\n      ],\n      \"yaxis\": {\n        \"align\": false\n      }\n    },\n    {\n      \"aliasColors\": {},\n      \"autoMigrateFrom\": \"graph\",\n      \"bars\": false,\n      \"dashLength\": 10,\n      \"dashes\": false,\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"description\": \"\",\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"custom\": {},\n          \"links\": []\n        },\n        \"overrides\": []\n      },\n      \"fill\": 1,\n      \"fillGradient\": 0,\n      \"gridPos\": {\n        \"h\": 7,\n        \"w\": 10,\n        \"x\": 10,\n        \"y\": 43\n      },\n      \"id\": 91,\n      \"legend\": {\n        \"avg\": false,\n        \"current\": false,\n        \"max\": false,\n        \"min\": false,\n        \"show\": true,\n        \"total\": false,\n        \"values\": false\n      },\n      \"lines\": true,\n      \"linewidth\": 1,\n      \"nullPointMode\": \"null\",\n      \"percentage\": false,\n      \"pluginVersion\": \"7.4.3\",\n      \"pointradius\": 2,\n      \"points\": false,\n      \"renderer\": \"flot\",\n      \"seriesOverrides\": [],\n      \"spaceLength\": 10,\n      \"stack\": false,\n      \"steppedLine\": false,\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"expr\": \"discovery_sessions\",\n          \"interval\": \"\",\n          \"legendFormat\": \"\",\n          \"refId\": \"A\"\n        }\n      ],\n      \"thresholds\": [],\n      \"timeRegions\": [],\n      \"title\": \"Active Discv5 Sessions\",\n      \"tooltip\": {\n        \"shared\": true,\n        \"sort\": 0,\n        \"value_type\": \"individual\"\n      },\n      \"type\": \"timeseries\",\n      \"xaxis\": {\n        \"mode\": \"time\",\n        \"show\": true,\n        \"values\": []\n      },\n      \"yaxes\": [\n        {\n          \"format\": \"short\",\n          \"logBase\": 1,\n          \"show\": true\n        },\n        {\n          \"format\": \"short\",\n          \"logBase\": 1,\n          \"show\": true\n        }\n      ],\n      \"yaxis\": {\n        \"align\": false\n      }\n    },\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"thresholds\"\n          },\n          \"custom\": {},\n          \"mappings\": [],\n          \"max\": 100,\n          \"min\": 0,\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\"\n              },\n              {\n                \"color\": \"red\",\n                \"value\": 80\n              }\n            ]\n          }\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 7,\n        \"w\": 4,\n        \"x\": 20,\n        \"y\": 43\n      },\n      \"id\": 85,\n      \"options\": {\n        \"orientation\": \"auto\",\n        \"reduceOptions\": {\n          \"calcs\": [\n            \"mean\"\n          ],\n          \"fields\": \"\",\n          \"values\": false\n        },\n        \"showThresholdLabels\": false,\n        \"showThresholdMarkers\": true,\n        \"text\": {}\n      },\n      \"pluginVersion\": \"7.4.3\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"expr\": \"discovery_queue_size\",\n          \"interval\": \"\",\n          \"legendFormat\": \"Queued Discoveries\",\n          \"refId\": \"A\"\n        }\n      ],\n      \"title\": \"Queued Discovery Queries\",\n      \"type\": \"gauge\"\n    },\n    {\n      \"aliasColors\": {},\n      \"autoMigrateFrom\": \"graph\",\n      \"bars\": false,\n      \"dashLength\": 10,\n      \"dashes\": false,\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"custom\": {},\n          \"links\": []\n        },\n        \"overrides\": []\n      },\n      \"fill\": 1,\n      \"fillGradient\": 0,\n      \"gridPos\": {\n        \"h\": 8,\n        \"w\": 8,\n        \"x\": 0,\n        \"y\": 50\n      },\n      \"id\": 116,\n      \"interval\": \"\",\n      \"legend\": {\n        \"avg\": false,\n        \"current\": false,\n        \"max\": false,\n        \"min\": false,\n        \"show\": true,\n        \"total\": false,\n        \"values\": false\n      },\n      \"lines\": true,\n      \"linewidth\": 1,\n      \"nullPointMode\": \"null\",\n      \"percentage\": false,\n      \"pluginVersion\": \"7.4.3\",\n      \"pointradius\": 2,\n      \"points\": false,\n      \"renderer\": \"flot\",\n      \"seriesOverrides\": [],\n      \"spaceLength\": 10,\n      \"stack\": false,\n      \"steppedLine\": false,\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"expr\": \"sum(rate(libp2p_bandwidth_bytes_total[1m]))\",\n          \"legendFormat\": \"bytes/s\",\n          \"refId\": \"A\"\n        }\n      ],\n      \"thresholds\": [],\n      \"timeRegions\": [],\n      \"title\": \"Total Libp2p Bandwidth\",\n      \"tooltip\": {\n        \"shared\": true,\n        \"sort\": 0,\n        \"value_type\": \"individual\"\n      },\n      \"type\": \"timeseries\",\n      \"xaxis\": {\n        \"mode\": \"time\",\n        \"show\": true,\n        \"values\": []\n      },\n      \"yaxes\": [\n        {\n          \"format\": \"short\",\n          \"logBase\": 1,\n          \"show\": true\n        },\n        {\n          \"format\": \"short\",\n          \"logBase\": 1,\n          \"show\": true\n        }\n      ],\n      \"yaxis\": {\n        \"align\": false\n      }\n    },\n    {\n      \"aliasColors\": {},\n      \"autoMigrateFrom\": \"graph\",\n      \"bars\": false,\n      \"dashLength\": 10,\n      \"dashes\": false,\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"custom\": {},\n          \"links\": []\n        },\n        \"overrides\": []\n      },\n      \"fill\": 1,\n      \"fillGradient\": 0,\n      \"gridPos\": {\n        \"h\": 8,\n        \"w\": 8,\n        \"x\": 8,\n        \"y\": 50\n      },\n      \"id\": 118,\n      \"interval\": \"\",\n      \"legend\": {\n        \"avg\": false,\n        \"current\": false,\n        \"max\": false,\n        \"min\": false,\n        \"show\": true,\n        \"total\": false,\n        \"values\": false\n      },\n      \"lines\": true,\n      \"linewidth\": 1,\n      \"nullPointMode\": \"null\",\n      \"percentage\": false,\n      \"pluginVersion\": \"7.4.3\",\n      \"pointradius\": 2,\n      \"points\": false,\n      \"renderer\": \"flot\",\n      \"seriesOverrides\": [],\n      \"spaceLength\": 10,\n      \"stack\": false,\n      \"steppedLine\": false,\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"expr\": \"sum(rate(libp2p_bandwidth_bytes_total{direction=\\\"Inbound\\\"}[1m]))\",\n          \"legendFormat\": \"bytes/s\",\n          \"refId\": \"A\"\n        }\n      ],\n      \"thresholds\": [],\n      \"timeRegions\": [],\n      \"title\": \"Libp2p Inbound Bandwidth\",\n      \"tooltip\": {\n        \"shared\": true,\n        \"sort\": 0,\n        \"value_type\": \"individual\"\n      },\n      \"type\": \"timeseries\",\n      \"xaxis\": {\n        \"mode\": \"time\",\n        \"show\": true,\n        \"values\": []\n      },\n      \"yaxes\": [\n        {\n          \"format\": \"short\",\n          \"logBase\": 1,\n          \"show\": true\n        },\n        {\n          \"format\": \"short\",\n          \"logBase\": 1,\n          \"show\": true\n        }\n      ],\n      \"yaxis\": {\n        \"align\": false\n      }\n    },\n    {\n      \"aliasColors\": {},\n      \"autoMigrateFrom\": \"graph\",\n      \"bars\": false,\n      \"dashLength\": 10,\n      \"dashes\": false,\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"custom\": {},\n          \"links\": []\n        },\n        \"overrides\": []\n      },\n      \"fill\": 1,\n      \"fillGradient\": 0,\n      \"gridPos\": {\n        \"h\": 8,\n        \"w\": 8,\n        \"x\": 16,\n        \"y\": 50\n      },\n      \"id\": 120,\n      \"interval\": \"\",\n      \"legend\": {\n        \"avg\": false,\n        \"current\": false,\n        \"max\": false,\n        \"min\": false,\n        \"show\": true,\n        \"total\": false,\n        \"values\": false\n      },\n      \"lines\": true,\n      \"linewidth\": 1,\n      \"nullPointMode\": \"null\",\n      \"percentage\": false,\n      \"pluginVersion\": \"7.4.3\",\n      \"pointradius\": 2,\n      \"points\": false,\n      \"renderer\": \"flot\",\n      \"seriesOverrides\": [],\n      \"spaceLength\": 10,\n      \"stack\": false,\n      \"steppedLine\": false,\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"expr\": \"sum(rate(libp2p_bandwidth_bytes_total{direction=\\\"Outbound\\\"}[1m]))\",\n          \"legendFormat\": \"bytes/s\",\n          \"refId\": \"A\"\n        }\n      ],\n      \"thresholds\": [],\n      \"timeRegions\": [],\n      \"title\": \"Libp2p Outbound Bandwidth\",\n      \"tooltip\": {\n        \"shared\": true,\n        \"sort\": 0,\n        \"value_type\": \"individual\"\n      },\n      \"type\": \"timeseries\",\n      \"xaxis\": {\n        \"mode\": \"time\",\n        \"show\": true,\n        \"values\": []\n      },\n      \"yaxes\": [\n        {\n          \"format\": \"short\",\n          \"logBase\": 1,\n          \"show\": true\n        },\n        {\n          \"format\": \"short\",\n          \"logBase\": 1,\n          \"show\": true\n        }\n      ],\n      \"yaxis\": {\n        \"align\": false\n      }\n    },\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"custom\": {}\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 2,\n        \"w\": 24,\n        \"x\": 0,\n        \"y\": 58\n      },\n      \"id\": 109,\n      \"options\": {\n        \"content\": \"### Gossipsub Metrics\",\n        \"mode\": \"markdown\"\n      },\n      \"pluginVersion\": \"7.4.3\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"refId\": \"A\"\n        }\n      ],\n      \"transparent\": true,\n      \"type\": \"text\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"thresholds\"\n          },\n          \"custom\": {},\n          \"mappings\": [],\n          \"max\": 100,\n          \"min\": 0,\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\"\n              },\n              {\n                \"color\": \"red\",\n                \"value\": 80\n              }\n            ]\n          }\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 8,\n        \"w\": 12,\n        \"x\": 0,\n        \"y\": 60\n      },\n      \"id\": 111,\n      \"options\": {\n        \"displayMode\": \"gradient\",\n        \"orientation\": \"auto\",\n        \"reduceOptions\": {\n          \"calcs\": [\n            \"mean\"\n          ],\n          \"fields\": \"\",\n          \"values\": false\n        },\n        \"showUnfilled\": true,\n        \"text\": {}\n      },\n      \"pluginVersion\": \"7.4.3\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"expr\": \"gossipsub_mesh_peers_per_main_topic\",\n          \"instant\": true,\n          \"interval\": \"\",\n          \"legendFormat\": \"{{topic_hash}}\",\n          \"refId\": \"A\"\n        }\n      ],\n      \"title\": \"Mesh peers per topic\",\n      \"type\": \"bargauge\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"thresholds\"\n          },\n          \"custom\": {},\n          \"mappings\": [],\n          \"max\": 100,\n          \"min\": 0,\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\"\n              },\n              {\n                \"color\": \"red\",\n                \"value\": 80\n              }\n            ]\n          }\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 8,\n        \"w\": 12,\n        \"x\": 12,\n        \"y\": 60\n      },\n      \"id\": 114,\n      \"options\": {\n        \"displayMode\": \"gradient\",\n        \"orientation\": \"auto\",\n        \"reduceOptions\": {\n          \"calcs\": [\n            \"mean\"\n          ],\n          \"fields\": \"\",\n          \"values\": false\n        },\n        \"showUnfilled\": true,\n        \"text\": {}\n      },\n      \"pluginVersion\": \"7.4.3\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"expr\": \"gossipsub_avg_peer_score_per_topic\",\n          \"interval\": \"\",\n          \"legendFormat\": \"{{topic_hash}}\",\n          \"refId\": \"A\"\n        }\n      ],\n      \"title\": \"Average Peer Score per Topic\",\n      \"type\": \"bargauge\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"description\": \"\",\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"thresholds\"\n          },\n          \"custom\": {},\n          \"mappings\": [],\n          \"max\": 100,\n          \"min\": 0,\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\"\n              },\n              {\n                \"color\": \"red\",\n                \"value\": 80\n              }\n            ]\n          }\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 7,\n        \"w\": 24,\n        \"x\": 0,\n        \"y\": 68\n      },\n      \"id\": 110,\n      \"options\": {\n        \"displayMode\": \"gradient\",\n        \"orientation\": \"vertical\",\n        \"reduceOptions\": {\n          \"calcs\": [\n            \"mean\"\n          ],\n          \"fields\": \"\",\n          \"values\": false\n        },\n        \"showUnfilled\": true,\n        \"text\": {}\n      },\n      \"pluginVersion\": \"7.4.3\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"expr\": \"gossipsub_mesh_peers_per_subnet_topic\",\n          \"instant\": true,\n          \"interval\": \"\",\n          \"legendFormat\": \"{{subnet}}\",\n          \"refId\": \"A\"\n        }\n      ],\n      \"title\": \"Mesh peers per subnet\",\n      \"type\": \"bargauge\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"custom\": {}\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 2,\n        \"w\": 24,\n        \"x\": 0,\n        \"y\": 75\n      },\n      \"id\": 67,\n      \"options\": {\n        \"content\": \"\\n### Logging\\n\\n\\n\\n\",\n        \"mode\": \"markdown\"\n      },\n      \"pluginVersion\": \"7.4.3\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"refId\": \"A\"\n        }\n      ],\n      \"transparent\": true,\n      \"type\": \"text\"\n    },\n    {\n      \"aliasColors\": {},\n      \"autoMigrateFrom\": \"graph\",\n      \"bars\": false,\n      \"dashLength\": 10,\n      \"dashes\": false,\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"description\": \"\",\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"custom\": {},\n          \"links\": []\n        },\n        \"overrides\": []\n      },\n      \"fill\": 1,\n      \"fillGradient\": 0,\n      \"gridPos\": {\n        \"h\": 6,\n        \"w\": 6,\n        \"x\": 0,\n        \"y\": 77\n      },\n      \"hiddenSeries\": false,\n      \"id\": 71,\n      \"legend\": {\n        \"avg\": false,\n        \"current\": false,\n        \"max\": false,\n        \"min\": false,\n        \"show\": false,\n        \"total\": false,\n        \"values\": false\n      },\n      \"lines\": true,\n      \"linewidth\": 1,\n      \"nullPointMode\": \"null\",\n      \"percentage\": false,\n      \"pluginVersion\": \"7.4.3\",\n      \"pointradius\": 2,\n      \"points\": false,\n      \"renderer\": \"flot\",\n      \"seriesOverrides\": [],\n      \"spaceLength\": 10,\n      \"stack\": false,\n      \"steppedLine\": false,\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"expr\": \"crit_total\",\n          \"format\": \"time_series\",\n          \"interval\": \"\",\n          \"intervalFactor\": 1,\n          \"legendFormat\": \"\",\n          \"refId\": \"A\"\n        }\n      ],\n      \"thresholds\": [],\n      \"timeRegions\": [],\n      \"title\": \"Crit Logs Total\",\n      \"tooltip\": {\n        \"shared\": true,\n        \"sort\": 0,\n        \"value_type\": \"individual\"\n      },\n      \"type\": \"timeseries\",\n      \"xaxis\": {\n        \"mode\": \"time\",\n        \"show\": true,\n        \"values\": []\n      },\n      \"yaxes\": [\n        {\n          \"format\": \"none\",\n          \"logBase\": 1,\n          \"show\": true\n        },\n        {\n          \"format\": \"short\",\n          \"logBase\": 1,\n          \"show\": true\n        }\n      ],\n      \"yaxis\": {\n        \"align\": false\n      }\n    },\n    {\n      \"aliasColors\": {},\n      \"autoMigrateFrom\": \"graph\",\n      \"bars\": false,\n      \"dashLength\": 10,\n      \"dashes\": false,\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"description\": \"\",\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"custom\": {},\n          \"links\": []\n        },\n        \"overrides\": []\n      },\n      \"fill\": 1,\n      \"fillGradient\": 0,\n      \"gridPos\": {\n        \"h\": 6,\n        \"w\": 6,\n        \"x\": 6,\n        \"y\": 77\n      },\n      \"hiddenSeries\": false,\n      \"id\": 70,\n      \"legend\": {\n        \"alignAsTable\": false,\n        \"avg\": false,\n        \"current\": false,\n        \"max\": false,\n        \"min\": false,\n        \"rightSide\": false,\n        \"show\": true,\n        \"total\": false,\n        \"values\": false\n      },\n      \"lines\": true,\n      \"linewidth\": 1,\n      \"nullPointMode\": \"null\",\n      \"percentage\": false,\n      \"pluginVersion\": \"7.4.3\",\n      \"pointradius\": 2,\n      \"points\": false,\n      \"renderer\": \"flot\",\n      \"seriesOverrides\": [],\n      \"spaceLength\": 10,\n      \"stack\": false,\n      \"steppedLine\": false,\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"expr\": \"rate(error_total[1m])\",\n          \"format\": \"time_series\",\n          \"intervalFactor\": 1,\n          \"refId\": \"A\"\n        }\n      ],\n      \"thresholds\": [],\n      \"timeRegions\": [],\n      \"title\": \"Error Logs per Minute\",\n      \"tooltip\": {\n        \"shared\": true,\n        \"sort\": 0,\n        \"value_type\": \"individual\"\n      },\n      \"type\": \"timeseries\",\n      \"xaxis\": {\n        \"mode\": \"time\",\n        \"show\": true,\n        \"values\": []\n      },\n      \"yaxes\": [\n        {\n          \"format\": \"none\",\n          \"logBase\": 1,\n          \"show\": true\n        },\n        {\n          \"format\": \"short\",\n          \"logBase\": 1,\n          \"show\": true\n        }\n      ],\n      \"yaxis\": {\n        \"align\": false\n      }\n    },\n    {\n      \"aliasColors\": {},\n      \"autoMigrateFrom\": \"graph\",\n      \"bars\": false,\n      \"dashLength\": 10,\n      \"dashes\": false,\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"description\": \"\",\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"custom\": {},\n          \"links\": []\n        },\n        \"overrides\": []\n      },\n      \"fill\": 1,\n      \"fillGradient\": 0,\n      \"gridPos\": {\n        \"h\": 6,\n        \"w\": 6,\n        \"x\": 12,\n        \"y\": 77\n      },\n      \"hiddenSeries\": false,\n      \"id\": 69,\n      \"legend\": {\n        \"avg\": false,\n        \"current\": false,\n        \"max\": false,\n        \"min\": false,\n        \"show\": false,\n        \"total\": false,\n        \"values\": false\n      },\n      \"lines\": true,\n      \"linewidth\": 1,\n      \"nullPointMode\": \"null\",\n      \"percentage\": false,\n      \"pluginVersion\": \"7.4.3\",\n      \"pointradius\": 2,\n      \"points\": false,\n      \"renderer\": \"flot\",\n      \"seriesOverrides\": [],\n      \"spaceLength\": 10,\n      \"stack\": false,\n      \"steppedLine\": false,\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"expr\": \"rate(warn_total[1m])\",\n          \"format\": \"time_series\",\n          \"intervalFactor\": 1,\n          \"refId\": \"A\"\n        }\n      ],\n      \"thresholds\": [],\n      \"timeRegions\": [],\n      \"title\": \"Warn Logs per Minute\",\n      \"tooltip\": {\n        \"shared\": true,\n        \"sort\": 0,\n        \"value_type\": \"individual\"\n      },\n      \"type\": \"timeseries\",\n      \"xaxis\": {\n        \"mode\": \"time\",\n        \"show\": true,\n        \"values\": []\n      },\n      \"yaxes\": [\n        {\n          \"format\": \"none\",\n          \"logBase\": 1,\n          \"show\": true\n        },\n        {\n          \"format\": \"short\",\n          \"logBase\": 1,\n          \"show\": true\n        }\n      ],\n      \"yaxis\": {\n        \"align\": false\n      }\n    },\n    {\n      \"aliasColors\": {},\n      \"autoMigrateFrom\": \"graph\",\n      \"bars\": false,\n      \"dashLength\": 10,\n      \"dashes\": false,\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"description\": \"\",\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"custom\": {},\n          \"links\": []\n        },\n        \"overrides\": []\n      },\n      \"fill\": 1,\n      \"fillGradient\": 0,\n      \"gridPos\": {\n        \"h\": 6,\n        \"w\": 6,\n        \"x\": 18,\n        \"y\": 77\n      },\n      \"hiddenSeries\": false,\n      \"id\": 68,\n      \"legend\": {\n        \"avg\": false,\n        \"current\": false,\n        \"max\": false,\n        \"min\": false,\n        \"show\": false,\n        \"total\": false,\n        \"values\": false\n      },\n      \"lines\": true,\n      \"linewidth\": 1,\n      \"nullPointMode\": \"null\",\n      \"percentage\": false,\n      \"pluginVersion\": \"7.4.3\",\n      \"pointradius\": 2,\n      \"points\": false,\n      \"renderer\": \"flot\",\n      \"seriesOverrides\": [],\n      \"spaceLength\": 10,\n      \"stack\": false,\n      \"steppedLine\": false,\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"expr\": \"rate(info_total[1m])\",\n          \"format\": \"time_series\",\n          \"intervalFactor\": 1,\n          \"refId\": \"A\"\n        }\n      ],\n      \"thresholds\": [],\n      \"timeRegions\": [],\n      \"title\": \"Info Logs per Minute\",\n      \"tooltip\": {\n        \"shared\": true,\n        \"sort\": 0,\n        \"value_type\": \"individual\"\n      },\n      \"type\": \"timeseries\",\n      \"xaxis\": {\n        \"mode\": \"time\",\n        \"show\": true,\n        \"values\": []\n      },\n      \"yaxes\": [\n        {\n          \"format\": \"none\",\n          \"logBase\": 1,\n          \"show\": true\n        },\n        {\n          \"format\": \"short\",\n          \"logBase\": 1,\n          \"show\": true\n        }\n      ],\n      \"yaxis\": {\n        \"align\": false\n      }\n    },\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"custom\": {}\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 2,\n        \"w\": 24,\n        \"x\": 0,\n        \"y\": 83\n      },\n      \"id\": 51,\n      \"options\": {\n        \"content\": \"\\n### Core BeaconChain Functions\\n\\nTiming of core `BeaconChain` functions and syncing.\\n\\n\\n\",\n        \"mode\": \"markdown\"\n      },\n      \"pluginVersion\": \"7.4.3\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"refId\": \"A\"\n        }\n      ],\n      \"transparent\": true,\n      \"type\": \"text\"\n    },\n    {\n      \"aliasColors\": {},\n      \"autoMigrateFrom\": \"graph\",\n      \"bars\": false,\n      \"dashLength\": 10,\n      \"dashes\": false,\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"custom\": {},\n          \"links\": []\n        },\n        \"overrides\": []\n      },\n      \"fill\": 1,\n      \"fillGradient\": 0,\n      \"gridPos\": {\n        \"h\": 5,\n        \"w\": 8,\n        \"x\": 0,\n        \"y\": 85\n      },\n      \"hiddenSeries\": false,\n      \"id\": 10,\n      \"legend\": {\n        \"avg\": false,\n        \"current\": false,\n        \"max\": false,\n        \"min\": false,\n        \"show\": false,\n        \"total\": false,\n        \"values\": false\n      },\n      \"lines\": true,\n      \"linewidth\": 1,\n      \"nullPointMode\": \"null\",\n      \"percentage\": false,\n      \"pluginVersion\": \"7.4.3\",\n      \"pointradius\": 2,\n      \"points\": false,\n      \"renderer\": \"flot\",\n      \"seriesOverrides\": [],\n      \"spaceLength\": 10,\n      \"stack\": false,\n      \"steppedLine\": false,\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"expr\": \"rate(beacon_block_processing_seconds_sum[30s])\\n/\\nrate(beacon_block_processing_seconds_count[30s])\",\n          \"format\": \"time_series\",\n          \"instant\": false,\n          \"interval\": \"\",\n          \"intervalFactor\": 1,\n          \"legendFormat\": \"\",\n          \"refId\": \"A\"\n        }\n      ],\n      \"thresholds\": [],\n      \"timeRegions\": [],\n      \"title\": \"Block Processing Times (24s moving avg)\",\n      \"tooltip\": {\n        \"shared\": true,\n        \"sort\": 0,\n        \"value_type\": \"individual\"\n      },\n      \"type\": \"timeseries\",\n      \"xaxis\": {\n        \"mode\": \"time\",\n        \"show\": true,\n        \"values\": []\n      },\n      \"yaxes\": [\n        {\n          \"format\": \"s\",\n          \"logBase\": 1,\n          \"show\": true\n        },\n        {\n          \"format\": \"short\",\n          \"logBase\": 1,\n          \"show\": true\n        }\n      ],\n      \"yaxis\": {\n        \"align\": false\n      }\n    },\n    {\n      \"aliasColors\": {},\n      \"autoMigrateFrom\": \"graph\",\n      \"bars\": false,\n      \"dashLength\": 10,\n      \"dashes\": false,\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"custom\": {},\n          \"links\": []\n        },\n        \"overrides\": []\n      },\n      \"fill\": 1,\n      \"fillGradient\": 0,\n      \"gridPos\": {\n        \"h\": 5,\n        \"w\": 8,\n        \"x\": 8,\n        \"y\": 85\n      },\n      \"hiddenSeries\": false,\n      \"id\": 11,\n      \"legend\": {\n        \"avg\": false,\n        \"current\": false,\n        \"max\": false,\n        \"min\": false,\n        \"show\": false,\n        \"total\": false,\n        \"values\": false\n      },\n      \"lines\": true,\n      \"linewidth\": 1,\n      \"nullPointMode\": \"null\",\n      \"percentage\": false,\n      \"pluginVersion\": \"7.4.3\",\n      \"pointradius\": 2,\n      \"points\": false,\n      \"renderer\": \"flot\",\n      \"seriesOverrides\": [],\n      \"spaceLength\": 10,\n      \"stack\": false,\n      \"steppedLine\": false,\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"expr\": \"rate(beacon_fork_choice_seconds_sum[1m])\\n/\\nrate(beacon_fork_choice_seconds_count[1m])\",\n          \"format\": \"time_series\",\n          \"intervalFactor\": 1,\n          \"refId\": \"A\"\n        }\n      ],\n      \"thresholds\": [],\n      \"timeRegions\": [],\n      \"title\": \"Find & Update Head Routine (1m avg)\",\n      \"tooltip\": {\n        \"shared\": true,\n        \"sort\": 0,\n        \"value_type\": \"individual\"\n      },\n      \"type\": \"timeseries\",\n      \"xaxis\": {\n        \"mode\": \"time\",\n        \"show\": true,\n        \"values\": []\n      },\n      \"yaxes\": [\n        {\n          \"format\": \"s\",\n          \"logBase\": 1,\n          \"show\": true\n        },\n        {\n          \"format\": \"short\",\n          \"logBase\": 1,\n          \"show\": true\n        }\n      ],\n      \"yaxis\": {\n        \"align\": false\n      }\n    },\n    {\n      \"aliasColors\": {},\n      \"autoMigrateFrom\": \"graph\",\n      \"bars\": false,\n      \"dashLength\": 10,\n      \"dashes\": false,\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"custom\": {},\n          \"links\": []\n        },\n        \"overrides\": []\n      },\n      \"fill\": 1,\n      \"fillGradient\": 0,\n      \"gridPos\": {\n        \"h\": 5,\n        \"w\": 8,\n        \"x\": 16,\n        \"y\": 85\n      },\n      \"hiddenSeries\": false,\n      \"id\": 54,\n      \"legend\": {\n        \"avg\": false,\n        \"current\": false,\n        \"max\": false,\n        \"min\": false,\n        \"show\": false,\n        \"total\": false,\n        \"values\": false\n      },\n      \"lines\": true,\n      \"linewidth\": 1,\n      \"nullPointMode\": \"null\",\n      \"percentage\": false,\n      \"pluginVersion\": \"7.4.3\",\n      \"pointradius\": 2,\n      \"points\": false,\n      \"renderer\": \"flot\",\n      \"seriesOverrides\": [],\n      \"spaceLength\": 10,\n      \"stack\": false,\n      \"steppedLine\": false,\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"expr\": \"sync_slots_per_second\",\n          \"format\": \"time_series\",\n          \"intervalFactor\": 1,\n          \"refId\": \"A\"\n        }\n      ],\n      \"thresholds\": [],\n      \"timeRegions\": [],\n      \"title\": \"Syncing Slots per Second\",\n      \"tooltip\": {\n        \"shared\": true,\n        \"sort\": 0,\n        \"value_type\": \"individual\"\n      },\n      \"type\": \"timeseries\",\n      \"xaxis\": {\n        \"mode\": \"time\",\n        \"show\": true,\n        \"values\": []\n      },\n      \"yaxes\": [\n        {\n          \"format\": \"none\",\n          \"label\": \"Slots\",\n          \"logBase\": 1,\n          \"show\": true\n        },\n        {\n          \"format\": \"short\",\n          \"logBase\": 1,\n          \"show\": true\n        }\n      ],\n      \"yaxis\": {\n        \"align\": false\n      }\n    },\n    {\n      \"aliasColors\": {},\n      \"autoMigrateFrom\": \"graph\",\n      \"bars\": false,\n      \"dashLength\": 10,\n      \"dashes\": false,\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"description\": \"Time taken to calculate the tree hash root of a BeaconState during block processing.\",\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"custom\": {},\n          \"links\": []\n        },\n        \"overrides\": []\n      },\n      \"fill\": 1,\n      \"fillGradient\": 0,\n      \"gridPos\": {\n        \"h\": 5,\n        \"w\": 12,\n        \"x\": 0,\n        \"y\": 90\n      },\n      \"hiddenSeries\": false,\n      \"id\": 37,\n      \"legend\": {\n        \"avg\": false,\n        \"current\": false,\n        \"max\": false,\n        \"min\": false,\n        \"show\": false,\n        \"total\": false,\n        \"values\": false\n      },\n      \"lines\": true,\n      \"linewidth\": 1,\n      \"nullPointMode\": \"null\",\n      \"percentage\": false,\n      \"pluginVersion\": \"7.4.3\",\n      \"pointradius\": 2,\n      \"points\": false,\n      \"renderer\": \"flot\",\n      \"seriesOverrides\": [],\n      \"spaceLength\": 10,\n      \"stack\": false,\n      \"steppedLine\": false,\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"expr\": \"rate(beacon_block_processing_block_root_seconds_sum[5m])\\n/\\nrate(beacon_block_processing_block_root_seconds_count[5m])\",\n          \"format\": \"time_series\",\n          \"intervalFactor\": 1,\n          \"refId\": \"A\"\n        }\n      ],\n      \"thresholds\": [],\n      \"timeRegions\": [],\n      \"title\": \"Block Tree Hash Times (5m avg)\",\n      \"tooltip\": {\n        \"shared\": true,\n        \"sort\": 0,\n        \"value_type\": \"individual\"\n      },\n      \"type\": \"timeseries\",\n      \"xaxis\": {\n        \"mode\": \"time\",\n        \"show\": true,\n        \"values\": []\n      },\n      \"yaxes\": [\n        {\n          \"format\": \"s\",\n          \"logBase\": 1,\n          \"show\": true\n        },\n        {\n          \"format\": \"short\",\n          \"logBase\": 1,\n          \"show\": true\n        }\n      ],\n      \"yaxis\": {\n        \"align\": false\n      }\n    },\n    {\n      \"aliasColors\": {},\n      \"autoMigrateFrom\": \"graph\",\n      \"bars\": false,\n      \"dashLength\": 10,\n      \"dashes\": false,\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"description\": \"Time taken to calculate the tree hash root of a BeaconState during block processing.\",\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"custom\": {},\n          \"links\": []\n        },\n        \"overrides\": []\n      },\n      \"fill\": 1,\n      \"fillGradient\": 0,\n      \"gridPos\": {\n        \"h\": 5,\n        \"w\": 12,\n        \"x\": 12,\n        \"y\": 90\n      },\n      \"hiddenSeries\": false,\n      \"id\": 20,\n      \"legend\": {\n        \"avg\": false,\n        \"current\": false,\n        \"max\": false,\n        \"min\": false,\n        \"show\": false,\n        \"total\": false,\n        \"values\": false\n      },\n      \"lines\": true,\n      \"linewidth\": 1,\n      \"nullPointMode\": \"null\",\n      \"percentage\": false,\n      \"pluginVersion\": \"7.4.3\",\n      \"pointradius\": 2,\n      \"points\": false,\n      \"renderer\": \"flot\",\n      \"seriesOverrides\": [],\n      \"spaceLength\": 10,\n      \"stack\": false,\n      \"steppedLine\": false,\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"expr\": \"rate(beacon_block_processing_state_root_seconds_sum[5m])\\n/\\nrate(beacon_block_processing_state_root_seconds_count[5m])\",\n          \"format\": \"time_series\",\n          \"intervalFactor\": 1,\n          \"refId\": \"A\"\n        }\n      ],\n      \"thresholds\": [],\n      \"timeRegions\": [],\n      \"title\": \"State Tree Hash Times (5m avg)\",\n      \"tooltip\": {\n        \"shared\": true,\n        \"sort\": 0,\n        \"value_type\": \"individual\"\n      },\n      \"type\": \"timeseries\",\n      \"xaxis\": {\n        \"mode\": \"time\",\n        \"show\": true,\n        \"values\": []\n      },\n      \"yaxes\": [\n        {\n          \"format\": \"s\",\n          \"logBase\": 1,\n          \"show\": true\n        },\n        {\n          \"format\": \"short\",\n          \"logBase\": 1,\n          \"show\": true\n        }\n      ],\n      \"yaxis\": {\n        \"align\": false\n      }\n    },\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"custom\": {}\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 2,\n        \"w\": 24,\n        \"x\": 0,\n        \"y\": 95\n      },\n      \"id\": 56,\n      \"options\": {\n        \"content\": \"\\n### Database\\n\\nStats about the on-disk database (LevelDB)\\n\\n\\n\\n\",\n        \"mode\": \"markdown\"\n      },\n      \"pluginVersion\": \"7.4.3\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"refId\": \"A\"\n        }\n      ],\n      \"transparent\": true,\n      \"type\": \"text\"\n    },\n    {\n      \"aliasColors\": {},\n      \"autoMigrateFrom\": \"graph\",\n      \"bars\": false,\n      \"dashLength\": 10,\n      \"dashes\": false,\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"custom\": {},\n          \"links\": []\n        },\n        \"overrides\": []\n      },\n      \"fill\": 1,\n      \"fillGradient\": 0,\n      \"gridPos\": {\n        \"h\": 5,\n        \"w\": 12,\n        \"x\": 0,\n        \"y\": 97\n      },\n      \"hiddenSeries\": false,\n      \"id\": 42,\n      \"legend\": {\n        \"avg\": false,\n        \"current\": false,\n        \"max\": false,\n        \"min\": false,\n        \"show\": false,\n        \"total\": false,\n        \"values\": false\n      },\n      \"lines\": true,\n      \"linewidth\": 1,\n      \"nullPointMode\": \"null\",\n      \"percentage\": false,\n      \"pluginVersion\": \"7.4.3\",\n      \"pointradius\": 2,\n      \"points\": false,\n      \"renderer\": \"flot\",\n      \"seriesOverrides\": [],\n      \"spaceLength\": 10,\n      \"stack\": false,\n      \"steppedLine\": false,\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"expr\": \"store_disk_db_size\",\n          \"format\": \"time_series\",\n          \"intervalFactor\": 1,\n          \"refId\": \"A\"\n        }\n      ],\n      \"thresholds\": [],\n      \"timeRegions\": [],\n      \"title\": \"On-Disk Database Size (Hot DB Only)\",\n      \"tooltip\": {\n        \"shared\": true,\n        \"sort\": 0,\n        \"value_type\": \"individual\"\n      },\n      \"type\": \"timeseries\",\n      \"xaxis\": {\n        \"mode\": \"time\",\n        \"show\": true,\n        \"values\": []\n      },\n      \"yaxes\": [\n        {\n          \"format\": \"decbytes\",\n          \"label\": \"\",\n          \"logBase\": 1,\n          \"show\": true\n        },\n        {\n          \"format\": \"short\",\n          \"logBase\": 1,\n          \"show\": true\n        }\n      ],\n      \"yaxis\": {\n        \"align\": false\n      }\n    },\n    {\n      \"aliasColors\": {},\n      \"autoMigrateFrom\": \"graph\",\n      \"bars\": false,\n      \"dashLength\": 10,\n      \"dashes\": false,\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"custom\": {},\n          \"links\": []\n        },\n        \"overrides\": []\n      },\n      \"fill\": 1,\n      \"fillGradient\": 0,\n      \"gridPos\": {\n        \"h\": 5,\n        \"w\": 6,\n        \"x\": 12,\n        \"y\": 97\n      },\n      \"hiddenSeries\": false,\n      \"id\": 19,\n      \"legend\": {\n        \"avg\": false,\n        \"current\": false,\n        \"max\": false,\n        \"min\": false,\n        \"show\": false,\n        \"total\": false,\n        \"values\": false\n      },\n      \"lines\": true,\n      \"linewidth\": 1,\n      \"nullPointMode\": \"null\",\n      \"percentage\": false,\n      \"pluginVersion\": \"7.4.3\",\n      \"pointradius\": 2,\n      \"points\": false,\n      \"renderer\": \"flot\",\n      \"seriesOverrides\": [],\n      \"spaceLength\": 10,\n      \"stack\": false,\n      \"steppedLine\": false,\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"expr\": \"increase(store_disk_db_read_bytes_total [1m])\",\n          \"format\": \"time_series\",\n          \"intervalFactor\": 1,\n          \"refId\": \"A\"\n        }\n      ],\n      \"thresholds\": [],\n      \"timeRegions\": [],\n      \"title\": \"DB Throughput (Read) per Minute\",\n      \"tooltip\": {\n        \"shared\": true,\n        \"sort\": 0,\n        \"value_type\": \"individual\"\n      },\n      \"type\": \"timeseries\",\n      \"xaxis\": {\n        \"mode\": \"time\",\n        \"show\": true,\n        \"values\": []\n      },\n      \"yaxes\": [\n        {\n          \"format\": \"decbytes\",\n          \"label\": \"Bytes per Minute\",\n          \"logBase\": 1,\n          \"show\": true\n        },\n        {\n          \"format\": \"short\",\n          \"logBase\": 1,\n          \"show\": true\n        }\n      ],\n      \"yaxis\": {\n        \"align\": false\n      }\n    },\n    {\n      \"aliasColors\": {},\n      \"autoMigrateFrom\": \"graph\",\n      \"bars\": false,\n      \"dashLength\": 10,\n      \"dashes\": false,\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"custom\": {},\n          \"links\": []\n        },\n        \"overrides\": []\n      },\n      \"fill\": 1,\n      \"fillGradient\": 0,\n      \"gridPos\": {\n        \"h\": 5,\n        \"w\": 6,\n        \"x\": 18,\n        \"y\": 97\n      },\n      \"hiddenSeries\": false,\n      \"id\": 22,\n      \"legend\": {\n        \"avg\": false,\n        \"current\": false,\n        \"max\": false,\n        \"min\": false,\n        \"show\": false,\n        \"total\": false,\n        \"values\": false\n      },\n      \"lines\": true,\n      \"linewidth\": 1,\n      \"nullPointMode\": \"null\",\n      \"percentage\": false,\n      \"pluginVersion\": \"7.4.3\",\n      \"pointradius\": 2,\n      \"points\": false,\n      \"renderer\": \"flot\",\n      \"seriesOverrides\": [],\n      \"spaceLength\": 10,\n      \"stack\": false,\n      \"steppedLine\": false,\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"expr\": \"increase(store_disk_db_write_bytes_total [1m])\",\n          \"format\": \"time_series\",\n          \"intervalFactor\": 1,\n          \"refId\": \"A\"\n        }\n      ],\n      \"thresholds\": [],\n      \"timeRegions\": [],\n      \"title\": \"DB Throughput (Write) (1m avg)\",\n      \"tooltip\": {\n        \"shared\": true,\n        \"sort\": 0,\n        \"value_type\": \"individual\"\n      },\n      \"type\": \"timeseries\",\n      \"xaxis\": {\n        \"mode\": \"time\",\n        \"show\": true,\n        \"values\": []\n      },\n      \"yaxes\": [\n        {\n          \"format\": \"decbytes\",\n          \"label\": \"Bytes per Minute\",\n          \"logBase\": 1,\n          \"show\": true\n        },\n        {\n          \"format\": \"short\",\n          \"logBase\": 1,\n          \"show\": true\n        }\n      ],\n      \"yaxis\": {\n        \"align\": false\n      }\n    },\n    {\n      \"aliasColors\": {},\n      \"autoMigrateFrom\": \"graph\",\n      \"bars\": false,\n      \"dashLength\": 10,\n      \"dashes\": false,\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"description\": \"Time taken to calculate the tree hash root of a BeaconState during block processing.\",\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"custom\": {},\n          \"links\": []\n        },\n        \"overrides\": []\n      },\n      \"fill\": 1,\n      \"fillGradient\": 0,\n      \"gridPos\": {\n        \"h\": 5,\n        \"w\": 6,\n        \"x\": 0,\n        \"y\": 102\n      },\n      \"hiddenSeries\": false,\n      \"id\": 74,\n      \"legend\": {\n        \"avg\": false,\n        \"current\": false,\n        \"max\": false,\n        \"min\": false,\n        \"show\": false,\n        \"total\": false,\n        \"values\": false\n      },\n      \"lines\": true,\n      \"linewidth\": 1,\n      \"nullPointMode\": \"null\",\n      \"percentage\": false,\n      \"pluginVersion\": \"7.4.3\",\n      \"pointradius\": 2,\n      \"points\": false,\n      \"renderer\": \"flot\",\n      \"seriesOverrides\": [],\n      \"spaceLength\": 10,\n      \"stack\": false,\n      \"steppedLine\": false,\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"expr\": \"rate(beacon_persist_chain_sum[1m])\\n/\\nrate(beacon_persist_chain_count[1m])\",\n          \"format\": \"time_series\",\n          \"intervalFactor\": 1,\n          \"refId\": \"A\"\n        }\n      ],\n      \"thresholds\": [],\n      \"timeRegions\": [],\n      \"title\": \"Persist Beacon Chain Times (1m avg)\",\n      \"tooltip\": {\n        \"shared\": true,\n        \"sort\": 0,\n        \"value_type\": \"individual\"\n      },\n      \"type\": \"timeseries\",\n      \"xaxis\": {\n        \"mode\": \"time\",\n        \"show\": true,\n        \"values\": []\n      },\n      \"yaxes\": [\n        {\n          \"format\": \"s\",\n          \"logBase\": 1,\n          \"show\": true\n        },\n        {\n          \"format\": \"short\",\n          \"logBase\": 1,\n          \"show\": true\n        }\n      ],\n      \"yaxis\": {\n        \"align\": false\n      }\n    }\n  ],\n  \"refresh\": \"10s\",\n  \"schemaVersion\": 39,\n  \"tags\": [\n    \"lighthouse\"\n  ],\n  \"templating\": {\n    \"list\": []\n  },\n  \"time\": {\n    \"from\": \"now-15m\",\n    \"to\": \"now\"\n  },\n  \"timepicker\": {\n    \"refresh_intervals\": [\n      \"10s\",\n      \"30s\",\n      \"1m\",\n      \"5m\",\n      \"15m\",\n      \"30m\",\n      \"1h\",\n      \"2h\",\n      \"1d\"\n    ],\n    \"time_options\": [\n      \"5m\",\n      \"15m\",\n      \"1h\",\n      \"6h\",\n      \"12h\",\n      \"24h\",\n      \"2d\",\n      \"7d\",\n      \"30d\"\n    ]\n  },\n  \"timezone\": \"\",\n  \"title\": \"Summary\",\n  \"uid\": \"yY7PIGdZd\",\n  \"version\": 1,\n  \"weekStart\": \"\"\n}\n"
  },
  {
    "path": "static_files/grafana-config/dashboards/lighthouse/SyncMetrics.json",
    "content": "{\n  \"__inputs\": [\n    {\n      \"name\": \"DS_PROMETHEUS\",\n      \"label\": \"Prometheus\",\n      \"description\": \"\",\n      \"type\": \"datasource\",\n      \"pluginId\": \"prometheus\",\n      \"pluginName\": \"Prometheus\"\n    }\n  ],\n  \"__elements\": {},\n  \"__requires\": [\n    {\n      \"type\": \"grafana\",\n      \"id\": \"grafana\",\n      \"name\": \"Grafana\",\n      \"version\": \"10.4.1\"\n    },\n    {\n      \"type\": \"datasource\",\n      \"id\": \"prometheus\",\n      \"name\": \"Prometheus\",\n      \"version\": \"1.0.0\"\n    },\n    {\n      \"type\": \"panel\",\n      \"id\": \"timeseries\",\n      \"name\": \"Time series\",\n      \"version\": \"\"\n    }\n  ],\n  \"annotations\": {\n    \"list\": [\n      {\n        \"builtIn\": 1,\n        \"datasource\": {\n          \"type\": \"datasource\",\n          \"uid\": \"grafana\"\n        },\n        \"enable\": true,\n        \"hide\": true,\n        \"iconColor\": \"rgba(0, 211, 255, 1)\",\n        \"name\": \"Annotations & Alerts\",\n        \"type\": \"dashboard\"\n      }\n    ]\n  },\n  \"editable\": true,\n  \"fiscalYearStartMonth\": 0,\n  \"graphTooltip\": 0,\n  \"id\": null,\n  \"links\": [],\n  \"panels\": [\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"palette-classic\"\n          },\n          \"custom\": {\n            \"axisBorderShow\": false,\n            \"axisCenteredZero\": false,\n            \"axisColorMode\": \"text\",\n            \"axisLabel\": \"Epochs\",\n            \"axisPlacement\": \"auto\",\n            \"barAlignment\": 0,\n            \"drawStyle\": \"line\",\n            \"fillOpacity\": 10,\n            \"gradientMode\": \"none\",\n            \"hideFrom\": {\n              \"legend\": false,\n              \"tooltip\": false,\n              \"viz\": false\n            },\n            \"insertNulls\": false,\n            \"lineInterpolation\": \"linear\",\n            \"lineWidth\": 2,\n            \"pointSize\": 5,\n            \"scaleDistribution\": {\n              \"type\": \"linear\"\n            },\n            \"showPoints\": \"never\",\n            \"spanNulls\": false,\n            \"stacking\": {\n              \"group\": \"A\",\n              \"mode\": \"none\"\n            },\n            \"thresholdsStyle\": {\n              \"mode\": \"off\"\n            }\n          },\n          \"decimals\": 0,\n          \"links\": [],\n          \"mappings\": [],\n          \"min\": 0,\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\",\n                \"value\": null\n              },\n              {\n                \"color\": \"red\",\n                \"value\": 80\n              }\n            ]\n          },\n          \"unit\": \"none\"\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 7,\n        \"w\": 7,\n        \"x\": 0,\n        \"y\": 0\n      },\n      \"id\": 6,\n      \"options\": {\n        \"legend\": {\n          \"calcs\": [\n            \"lastNotNull\"\n          ],\n          \"displayMode\": \"list\",\n          \"placement\": \"bottom\",\n          \"showLegend\": true,\n          \"width\": 340\n        },\n        \"tooltip\": {\n          \"mode\": \"multi\",\n          \"sort\": \"none\"\n        }\n      },\n      \"pluginVersion\": \"7.3.3\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"expr\": \"slotclock_present_epoch - beacon_head_state_finalized_epoch\",\n          \"format\": \"time_series\",\n          \"interval\": \"\",\n          \"intervalFactor\": 1,\n          \"legendFormat\": \" \",\n          \"refId\": \"A\"\n        }\n      ],\n      \"title\": \"Epoch Boundaries since Finalization (Min)\",\n      \"type\": \"timeseries\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"description\": \"\",\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"palette-classic\"\n          },\n          \"custom\": {\n            \"axisBorderShow\": false,\n            \"axisCenteredZero\": false,\n            \"axisColorMode\": \"text\",\n            \"axisLabel\": \"\",\n            \"axisPlacement\": \"auto\",\n            \"barAlignment\": 0,\n            \"drawStyle\": \"line\",\n            \"fillOpacity\": 10,\n            \"gradientMode\": \"none\",\n            \"hideFrom\": {\n              \"legend\": false,\n              \"tooltip\": false,\n              \"viz\": false\n            },\n            \"insertNulls\": false,\n            \"lineInterpolation\": \"linear\",\n            \"lineWidth\": 2,\n            \"pointSize\": 5,\n            \"scaleDistribution\": {\n              \"type\": \"linear\"\n            },\n            \"showPoints\": \"never\",\n            \"spanNulls\": false,\n            \"stacking\": {\n              \"group\": \"A\",\n              \"mode\": \"none\"\n            },\n            \"thresholdsStyle\": {\n              \"mode\": \"off\"\n            }\n          },\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\",\n                \"value\": null\n              },\n              {\n                \"color\": \"red\",\n                \"value\": 80\n              }\n            ]\n          },\n          \"unit\": \"short\"\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 7,\n        \"w\": 7,\n        \"x\": 7,\n        \"y\": 0\n      },\n      \"id\": 10,\n      \"options\": {\n        \"legend\": {\n          \"calcs\": [\n            \"lastNotNull\"\n          ],\n          \"displayMode\": \"list\",\n          \"placement\": \"bottom\",\n          \"showLegend\": true\n        },\n        \"tooltip\": {\n          \"mode\": \"multi\",\n          \"sort\": \"none\"\n        }\n      },\n      \"pluginVersion\": \"7.3.3\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"expr\": \"sync_peers_per_status\",\n          \"interval\": \"\",\n          \"legendFormat\": \"{{sync_status}}\",\n          \"refId\": \"A\"\n        }\n      ],\n      \"title\": \"Peers per sync status\",\n      \"type\": \"timeseries\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"palette-classic\"\n          },\n          \"custom\": {\n            \"axisBorderShow\": false,\n            \"axisCenteredZero\": false,\n            \"axisColorMode\": \"text\",\n            \"axisLabel\": \"\",\n            \"axisPlacement\": \"auto\",\n            \"barAlignment\": 0,\n            \"drawStyle\": \"line\",\n            \"fillOpacity\": 10,\n            \"gradientMode\": \"none\",\n            \"hideFrom\": {\n              \"legend\": false,\n              \"tooltip\": false,\n              \"viz\": false\n            },\n            \"insertNulls\": false,\n            \"lineInterpolation\": \"linear\",\n            \"lineWidth\": 2,\n            \"pointSize\": 5,\n            \"scaleDistribution\": {\n              \"type\": \"linear\"\n            },\n            \"showPoints\": \"never\",\n            \"spanNulls\": false,\n            \"stacking\": {\n              \"group\": \"A\",\n              \"mode\": \"none\"\n            },\n            \"thresholdsStyle\": {\n              \"mode\": \"off\"\n            }\n          },\n          \"decimals\": 0,\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\",\n                \"value\": null\n              },\n              {\n                \"color\": \"red\",\n                \"value\": 80\n              }\n            ]\n          },\n          \"unit\": \"short\"\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 7,\n        \"w\": 7,\n        \"x\": 14,\n        \"y\": 0\n      },\n      \"id\": 12,\n      \"options\": {\n        \"legend\": {\n          \"calcs\": [],\n          \"displayMode\": \"list\",\n          \"placement\": \"bottom\",\n          \"showLegend\": true\n        },\n        \"tooltip\": {\n          \"mode\": \"multi\",\n          \"sort\": \"none\"\n        }\n      },\n      \"pluginVersion\": \"7.3.3\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"expr\": \"sync_range_chains\",\n          \"interval\": \"\",\n          \"legendFormat\": \"{{range_type}}\",\n          \"refId\": \"A\"\n        }\n      ],\n      \"title\": \"Syncing chain counts\",\n      \"type\": \"timeseries\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"palette-classic\"\n          },\n          \"custom\": {\n            \"axisBorderShow\": false,\n            \"axisCenteredZero\": false,\n            \"axisColorMode\": \"text\",\n            \"axisLabel\": \"\",\n            \"axisPlacement\": \"auto\",\n            \"barAlignment\": 0,\n            \"drawStyle\": \"line\",\n            \"fillOpacity\": 10,\n            \"gradientMode\": \"none\",\n            \"hideFrom\": {\n              \"legend\": false,\n              \"tooltip\": false,\n              \"viz\": false\n            },\n            \"insertNulls\": false,\n            \"lineInterpolation\": \"linear\",\n            \"lineWidth\": 2,\n            \"pointSize\": 5,\n            \"scaleDistribution\": {\n              \"type\": \"linear\"\n            },\n            \"showPoints\": \"never\",\n            \"spanNulls\": false,\n            \"stacking\": {\n              \"group\": \"A\",\n              \"mode\": \"none\"\n            },\n            \"thresholdsStyle\": {\n              \"mode\": \"off\"\n            }\n          },\n          \"links\": [],\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\",\n                \"value\": null\n              },\n              {\n                \"color\": \"red\",\n                \"value\": 80\n              }\n            ]\n          },\n          \"unit\": \"decbytes\"\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 7,\n        \"w\": 7,\n        \"x\": 0,\n        \"y\": 7\n      },\n      \"id\": 4,\n      \"options\": {\n        \"legend\": {\n          \"calcs\": [\n            \"lastNotNull\"\n          ],\n          \"displayMode\": \"list\",\n          \"placement\": \"bottom\",\n          \"showLegend\": true\n        },\n        \"tooltip\": {\n          \"mode\": \"multi\",\n          \"sort\": \"none\"\n        }\n      },\n      \"pluginVersion\": \"7.3.3\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"expr\": \"process_resident_memory_bytes\",\n          \"interval\": \"\",\n          \"legendFormat\": \"{{job}}\",\n          \"refId\": \"A\"\n        }\n      ],\n      \"title\": \"Lighthouse Resident Memory Usage\",\n      \"type\": \"timeseries\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"palette-classic\"\n          },\n          \"custom\": {\n            \"axisBorderShow\": false,\n            \"axisCenteredZero\": false,\n            \"axisColorMode\": \"text\",\n            \"axisLabel\": \"\",\n            \"axisPlacement\": \"auto\",\n            \"barAlignment\": 0,\n            \"drawStyle\": \"line\",\n            \"fillOpacity\": 10,\n            \"gradientMode\": \"none\",\n            \"hideFrom\": {\n              \"legend\": false,\n              \"tooltip\": false,\n              \"viz\": false\n            },\n            \"insertNulls\": false,\n            \"lineInterpolation\": \"linear\",\n            \"lineWidth\": 2,\n            \"pointSize\": 5,\n            \"scaleDistribution\": {\n              \"type\": \"linear\"\n            },\n            \"showPoints\": \"never\",\n            \"spanNulls\": false,\n            \"stacking\": {\n              \"group\": \"A\",\n              \"mode\": \"none\"\n            },\n            \"thresholdsStyle\": {\n              \"mode\": \"off\"\n            }\n          },\n          \"decimals\": 0,\n          \"links\": [],\n          \"mappings\": [],\n          \"min\": 0,\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\",\n                \"value\": null\n              },\n              {\n                \"color\": \"red\",\n                \"value\": 80\n              }\n            ]\n          },\n          \"unit\": \"percentunit\"\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 7,\n        \"w\": 7,\n        \"x\": 7,\n        \"y\": 7\n      },\n      \"id\": 8,\n      \"options\": {\n        \"legend\": {\n          \"calcs\": [\n            \"lastNotNull\"\n          ],\n          \"displayMode\": \"list\",\n          \"placement\": \"bottom\",\n          \"showLegend\": true\n        },\n        \"tooltip\": {\n          \"mode\": \"multi\",\n          \"sort\": \"none\"\n        }\n      },\n      \"pluginVersion\": \"7.3.3\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"expr\": \"system_loadavg_1\",\n          \"instant\": false,\n          \"interval\": \"\",\n          \"intervalFactor\": 1,\n          \"legendFormat\": \"Load\",\n          \"refId\": \"A\"\n        }\n      ],\n      \"title\": \"Average Load (loadavg 1m)\",\n      \"type\": \"timeseries\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"palette-classic\"\n          },\n          \"custom\": {\n            \"axisBorderShow\": false,\n            \"axisCenteredZero\": false,\n            \"axisColorMode\": \"text\",\n            \"axisLabel\": \"\",\n            \"axisPlacement\": \"auto\",\n            \"barAlignment\": 0,\n            \"drawStyle\": \"line\",\n            \"fillOpacity\": 10,\n            \"gradientMode\": \"none\",\n            \"hideFrom\": {\n              \"legend\": false,\n              \"tooltip\": false,\n              \"viz\": false\n            },\n            \"insertNulls\": false,\n            \"lineInterpolation\": \"linear\",\n            \"lineWidth\": 2,\n            \"pointSize\": 5,\n            \"scaleDistribution\": {\n              \"type\": \"linear\"\n            },\n            \"showPoints\": \"never\",\n            \"spanNulls\": false,\n            \"stacking\": {\n              \"group\": \"A\",\n              \"mode\": \"none\"\n            },\n            \"thresholdsStyle\": {\n              \"mode\": \"off\"\n            }\n          },\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\",\n                \"value\": null\n              },\n              {\n                \"color\": \"red\",\n                \"value\": 80\n              }\n            ]\n          },\n          \"unit\": \"short\"\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 7,\n        \"w\": 7,\n        \"x\": 14,\n        \"y\": 7\n      },\n      \"id\": 14,\n      \"options\": {\n        \"legend\": {\n          \"calcs\": [\n            \"lastNotNull\"\n          ],\n          \"displayMode\": \"list\",\n          \"placement\": \"bottom\",\n          \"showLegend\": true\n        },\n        \"tooltip\": {\n          \"mode\": \"multi\",\n          \"sort\": \"none\"\n        }\n      },\n      \"pluginVersion\": \"7.3.3\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"expr\": \"sync_slots_per_second\",\n          \"interval\": \"\",\n          \"legendFormat\": \" \",\n          \"refId\": \"A\"\n        }\n      ],\n      \"title\": \"Sync slots per second\",\n      \"type\": \"timeseries\"\n    }\n  ],\n  \"refresh\": \"5s\",\n  \"schemaVersion\": 39,\n  \"tags\": [\n    \"lighthouse\"\n  ],\n  \"templating\": {\n    \"list\": []\n  },\n  \"time\": {\n    \"from\": \"now-30m\",\n    \"to\": \"now\"\n  },\n  \"timepicker\": {},\n  \"timezone\": \"\",\n  \"title\": \"Sync\",\n  \"uid\": \"Wte8ji0Gk\",\n  \"version\": 1,\n  \"weekStart\": \"\"\n}\n"
  },
  {
    "path": "static_files/grafana-config/dashboards/lighthouse/ValidatorClient.json",
    "content": "{\n  \"__inputs\": [\n    {\n      \"name\": \"DS_PROMETHEUS\",\n      \"label\": \"Prometheus\",\n      \"description\": \"\",\n      \"type\": \"datasource\",\n      \"pluginId\": \"prometheus\",\n      \"pluginName\": \"Prometheus\"\n    }\n  ],\n  \"__elements\": {},\n  \"__requires\": [\n    {\n      \"type\": \"grafana\",\n      \"id\": \"grafana\",\n      \"name\": \"Grafana\",\n      \"version\": \"10.4.1\"\n    },\n    {\n      \"type\": \"datasource\",\n      \"id\": \"prometheus\",\n      \"name\": \"Prometheus\",\n      \"version\": \"1.0.0\"\n    },\n    {\n      \"type\": \"panel\",\n      \"id\": \"stat\",\n      \"name\": \"Stat\",\n      \"version\": \"\"\n    },\n    {\n      \"type\": \"panel\",\n      \"id\": \"text\",\n      \"name\": \"Text\",\n      \"version\": \"\"\n    },\n    {\n      \"type\": \"panel\",\n      \"id\": \"timeseries\",\n      \"name\": \"Time series\",\n      \"version\": \"\"\n    }\n  ],\n  \"annotations\": {\n    \"list\": [\n      {\n        \"builtIn\": 1,\n        \"datasource\": {\n          \"type\": \"datasource\",\n          \"uid\": \"grafana\"\n        },\n        \"enable\": true,\n        \"hide\": true,\n        \"iconColor\": \"rgba(0, 211, 255, 1)\",\n        \"name\": \"Annotations & Alerts\",\n        \"type\": \"dashboard\"\n      }\n    ]\n  },\n  \"editable\": true,\n  \"fiscalYearStartMonth\": 0,\n  \"graphTooltip\": 0,\n  \"id\": null,\n  \"links\": [],\n  \"panels\": [\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"gridPos\": {\n        \"h\": 6,\n        \"w\": 5,\n        \"x\": 0,\n        \"y\": 0\n      },\n      \"id\": 46,\n      \"options\": {\n        \"code\": {\n          \"language\": \"plaintext\",\n          \"showLineNumbers\": false,\n          \"showMiniMap\": false\n        },\n        \"content\": \"\\n# Lighthouse Metrics\\n\\nMetrics collected from a Lighthouse Validator Client.\\n\\n\\n\\n\",\n        \"mode\": \"markdown\"\n      },\n      \"pluginVersion\": \"10.4.1\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"refId\": \"A\"\n        }\n      ],\n      \"transparent\": true,\n      \"type\": \"text\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"thresholds\"\n          },\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"rgb(199, 208, 217)\",\n                \"value\": null\n              }\n            ]\n          }\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 2,\n        \"w\": 3,\n        \"x\": 5,\n        \"y\": 0\n      },\n      \"id\": 139,\n      \"options\": {\n        \"colorMode\": \"value\",\n        \"graphMode\": \"none\",\n        \"justifyMode\": \"auto\",\n        \"orientation\": \"auto\",\n        \"reduceOptions\": {\n          \"calcs\": [\n            \"lastNotNull\"\n          ],\n          \"fields\": \"\",\n          \"values\": false\n        },\n        \"showPercentChange\": false,\n        \"text\": {},\n        \"textMode\": \"name\",\n        \"wideLayout\": true\n      },\n      \"pluginVersion\": \"10.4.1\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"expr\": \"lighthouse_info\",\n          \"interval\": \"\",\n          \"legendFormat\": \"\",\n          \"queryType\": \"randomWalk\",\n          \"refId\": \"A\"\n        }\n      ],\n      \"title\": \"Build\",\n      \"transformations\": [\n        {\n          \"id\": \"labelsToFields\",\n          \"options\": {\n            \"valueLabel\": \"version\"\n          }\n        },\n        {\n          \"id\": \"merge\",\n          \"options\": {}\n        }\n      ],\n      \"transparent\": true,\n      \"type\": \"stat\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"palette-classic\"\n          },\n          \"custom\": {\n            \"axisBorderShow\": false,\n            \"axisCenteredZero\": false,\n            \"axisColorMode\": \"text\",\n            \"axisLabel\": \"BeaconBlock\",\n            \"axisPlacement\": \"auto\",\n            \"barAlignment\": 0,\n            \"drawStyle\": \"line\",\n            \"fillOpacity\": 10,\n            \"gradientMode\": \"none\",\n            \"hideFrom\": {\n              \"legend\": false,\n              \"tooltip\": false,\n              \"viz\": false\n            },\n            \"insertNulls\": false,\n            \"lineInterpolation\": \"linear\",\n            \"lineWidth\": 1,\n            \"pointSize\": 5,\n            \"scaleDistribution\": {\n              \"type\": \"linear\"\n            },\n            \"showPoints\": \"never\",\n            \"spanNulls\": false,\n            \"stacking\": {\n              \"group\": \"A\",\n              \"mode\": \"none\"\n            },\n            \"thresholdsStyle\": {\n              \"mode\": \"off\"\n            }\n          },\n          \"decimals\": 0,\n          \"links\": [],\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\",\n                \"value\": null\n              },\n              {\n                \"color\": \"red\",\n                \"value\": 80\n              }\n            ]\n          },\n          \"unit\": \"none\"\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 6,\n        \"w\": 7,\n        \"x\": 10,\n        \"y\": 0\n      },\n      \"id\": 135,\n      \"options\": {\n        \"legend\": {\n          \"calcs\": [],\n          \"displayMode\": \"list\",\n          \"placement\": \"bottom\",\n          \"showLegend\": true\n        },\n        \"tooltip\": {\n          \"mode\": \"multi\",\n          \"sort\": \"none\"\n        }\n      },\n      \"pluginVersion\": \"7.4.3\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"expr\": \"vc_beacon_block_proposer_count\",\n          \"format\": \"time_series\",\n          \"interval\": \"\",\n          \"intervalFactor\": 1,\n          \"legendFormat\": \"\",\n          \"refId\": \"A\"\n        }\n      ],\n      \"title\": \"Local Beacon Block Proposers\",\n      \"type\": \"timeseries\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"palette-classic\"\n          },\n          \"custom\": {\n            \"axisBorderShow\": false,\n            \"axisCenteredZero\": false,\n            \"axisColorMode\": \"text\",\n            \"axisLabel\": \"Attestation\",\n            \"axisPlacement\": \"auto\",\n            \"barAlignment\": 0,\n            \"drawStyle\": \"line\",\n            \"fillOpacity\": 10,\n            \"gradientMode\": \"none\",\n            \"hideFrom\": {\n              \"legend\": false,\n              \"tooltip\": false,\n              \"viz\": false\n            },\n            \"insertNulls\": false,\n            \"lineInterpolation\": \"linear\",\n            \"lineWidth\": 1,\n            \"pointSize\": 5,\n            \"scaleDistribution\": {\n              \"type\": \"linear\"\n            },\n            \"showPoints\": \"never\",\n            \"spanNulls\": false,\n            \"stacking\": {\n              \"group\": \"A\",\n              \"mode\": \"none\"\n            },\n            \"thresholdsStyle\": {\n              \"mode\": \"off\"\n            }\n          },\n          \"decimals\": 0,\n          \"links\": [],\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\",\n                \"value\": null\n              },\n              {\n                \"color\": \"red\",\n                \"value\": 80\n              }\n            ]\n          },\n          \"unit\": \"none\"\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 6,\n        \"w\": 7,\n        \"x\": 17,\n        \"y\": 0\n      },\n      \"id\": 136,\n      \"options\": {\n        \"legend\": {\n          \"calcs\": [],\n          \"displayMode\": \"list\",\n          \"placement\": \"bottom\",\n          \"showLegend\": true\n        },\n        \"tooltip\": {\n          \"mode\": \"multi\",\n          \"sort\": \"none\"\n        }\n      },\n      \"pluginVersion\": \"7.4.3\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"expr\": \"vc_beacon_attester_count\",\n          \"format\": \"time_series\",\n          \"interval\": \"\",\n          \"intervalFactor\": 1,\n          \"legendFormat\": \"\",\n          \"refId\": \"A\"\n        }\n      ],\n      \"title\": \"Local Attesters\",\n      \"type\": \"timeseries\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"gridPos\": {\n        \"h\": 2,\n        \"w\": 24,\n        \"x\": 0,\n        \"y\": 6\n      },\n      \"id\": 121,\n      \"options\": {\n        \"code\": {\n          \"language\": \"plaintext\",\n          \"showLineNumbers\": false,\n          \"showMiniMap\": false\n        },\n        \"content\": \"\\n### Consensus\\n\\nOverview of consensus between nodes.\\n\\n\\n\",\n        \"mode\": \"markdown\"\n      },\n      \"pluginVersion\": \"10.4.1\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"refId\": \"A\"\n        }\n      ],\n      \"transparent\": true,\n      \"type\": \"text\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"palette-classic\"\n          },\n          \"custom\": {\n            \"axisBorderShow\": false,\n            \"axisCenteredZero\": false,\n            \"axisColorMode\": \"text\",\n            \"axisLabel\": \"\",\n            \"axisPlacement\": \"auto\",\n            \"barAlignment\": 0,\n            \"drawStyle\": \"line\",\n            \"fillOpacity\": 10,\n            \"gradientMode\": \"none\",\n            \"hideFrom\": {\n              \"legend\": false,\n              \"tooltip\": false,\n              \"viz\": false\n            },\n            \"insertNulls\": false,\n            \"lineInterpolation\": \"linear\",\n            \"lineWidth\": 1,\n            \"pointSize\": 5,\n            \"scaleDistribution\": {\n              \"type\": \"linear\"\n            },\n            \"showPoints\": \"never\",\n            \"spanNulls\": false,\n            \"stacking\": {\n              \"group\": \"A\",\n              \"mode\": \"none\"\n            },\n            \"thresholdsStyle\": {\n              \"mode\": \"off\"\n            }\n          },\n          \"links\": [],\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\",\n                \"value\": null\n              },\n              {\n                \"color\": \"red\",\n                \"value\": 80\n              }\n            ]\n          },\n          \"unit\": \"percentunit\"\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 7,\n        \"w\": 8,\n        \"x\": 0,\n        \"y\": 8\n      },\n      \"id\": 96,\n      \"options\": {\n        \"legend\": {\n          \"calcs\": [],\n          \"displayMode\": \"list\",\n          \"placement\": \"bottom\",\n          \"showLegend\": true\n        },\n        \"tooltip\": {\n          \"mode\": \"multi\",\n          \"sort\": \"none\"\n        }\n      },\n      \"pluginVersion\": \"7.4.3\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"expr\": \"system_loadavg_1\",\n          \"interval\": \"\",\n          \"legendFormat\": \"\",\n          \"refId\": \"A\"\n        }\n      ],\n      \"title\": \"Average Load (loadavg 1m)\",\n      \"type\": \"timeseries\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"palette-classic\"\n          },\n          \"custom\": {\n            \"axisBorderShow\": false,\n            \"axisCenteredZero\": false,\n            \"axisColorMode\": \"text\",\n            \"axisLabel\": \"\",\n            \"axisPlacement\": \"auto\",\n            \"barAlignment\": 0,\n            \"drawStyle\": \"line\",\n            \"fillOpacity\": 10,\n            \"gradientMode\": \"none\",\n            \"hideFrom\": {\n              \"legend\": false,\n              \"tooltip\": false,\n              \"viz\": false\n            },\n            \"insertNulls\": false,\n            \"lineInterpolation\": \"linear\",\n            \"lineWidth\": 1,\n            \"pointSize\": 5,\n            \"scaleDistribution\": {\n              \"type\": \"linear\"\n            },\n            \"showPoints\": \"never\",\n            \"spanNulls\": false,\n            \"stacking\": {\n              \"group\": \"A\",\n              \"mode\": \"none\"\n            },\n            \"thresholdsStyle\": {\n              \"mode\": \"off\"\n            }\n          },\n          \"links\": [],\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\",\n                \"value\": null\n              },\n              {\n                \"color\": \"red\",\n                \"value\": 80\n              }\n            ]\n          },\n          \"unit\": \"decbytes\"\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 7,\n        \"w\": 8,\n        \"x\": 8,\n        \"y\": 8\n      },\n      \"id\": 95,\n      \"options\": {\n        \"legend\": {\n          \"calcs\": [],\n          \"displayMode\": \"list\",\n          \"placement\": \"bottom\",\n          \"showLegend\": true\n        },\n        \"tooltip\": {\n          \"mode\": \"multi\",\n          \"sort\": \"none\"\n        }\n      },\n      \"pluginVersion\": \"7.4.3\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"expr\": \"system_virt_mem_free_bytes\",\n          \"interval\": \"\",\n          \"legendFormat\": \"\",\n          \"refId\": \"A\"\n        }\n      ],\n      \"title\": \"Available Memory\",\n      \"type\": \"timeseries\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"palette-classic\"\n          },\n          \"custom\": {\n            \"axisBorderShow\": false,\n            \"axisCenteredZero\": false,\n            \"axisColorMode\": \"text\",\n            \"axisLabel\": \"\",\n            \"axisPlacement\": \"auto\",\n            \"barAlignment\": 0,\n            \"drawStyle\": \"line\",\n            \"fillOpacity\": 10,\n            \"gradientMode\": \"none\",\n            \"hideFrom\": {\n              \"legend\": false,\n              \"tooltip\": false,\n              \"viz\": false\n            },\n            \"insertNulls\": false,\n            \"lineInterpolation\": \"linear\",\n            \"lineWidth\": 1,\n            \"pointSize\": 5,\n            \"scaleDistribution\": {\n              \"type\": \"linear\"\n            },\n            \"showPoints\": \"never\",\n            \"spanNulls\": false,\n            \"stacking\": {\n              \"group\": \"A\",\n              \"mode\": \"none\"\n            },\n            \"thresholdsStyle\": {\n              \"mode\": \"off\"\n            }\n          },\n          \"links\": [],\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\",\n                \"value\": null\n              },\n              {\n                \"color\": \"red\",\n                \"value\": 80\n              }\n            ]\n          },\n          \"unit\": \"decbytes\"\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 7,\n        \"w\": 8,\n        \"x\": 16,\n        \"y\": 8\n      },\n      \"id\": 100,\n      \"options\": {\n        \"legend\": {\n          \"calcs\": [],\n          \"displayMode\": \"list\",\n          \"placement\": \"bottom\",\n          \"showLegend\": true\n        },\n        \"tooltip\": {\n          \"mode\": \"multi\",\n          \"sort\": \"none\"\n        }\n      },\n      \"pluginVersion\": \"7.4.3\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"expr\": \"process_resident_memory_bytes\",\n          \"interval\": \"\",\n          \"legendFormat\": \"\",\n          \"refId\": \"A\"\n        }\n      ],\n      \"title\": \"Validator Client Resident Memory Usage\",\n      \"type\": \"timeseries\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"gridPos\": {\n        \"h\": 2,\n        \"w\": 24,\n        \"x\": 0,\n        \"y\": 15\n      },\n      \"id\": 49,\n      \"options\": {\n        \"code\": {\n          \"language\": \"plaintext\",\n          \"showLineNumbers\": false,\n          \"showMiniMap\": false\n        },\n        \"content\": \"\\n### Consensus\\n\\nOverview of consensus between nodes.\\n\\n\\n\",\n        \"mode\": \"markdown\"\n      },\n      \"pluginVersion\": \"10.4.1\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"refId\": \"A\"\n        }\n      ],\n      \"transparent\": true,\n      \"type\": \"text\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"palette-classic\"\n          },\n          \"custom\": {\n            \"axisBorderShow\": false,\n            \"axisCenteredZero\": false,\n            \"axisColorMode\": \"text\",\n            \"axisLabel\": \"Seconds\",\n            \"axisPlacement\": \"auto\",\n            \"barAlignment\": 0,\n            \"drawStyle\": \"line\",\n            \"fillOpacity\": 10,\n            \"gradientMode\": \"none\",\n            \"hideFrom\": {\n              \"legend\": false,\n              \"tooltip\": false,\n              \"viz\": false\n            },\n            \"insertNulls\": false,\n            \"lineInterpolation\": \"linear\",\n            \"lineWidth\": 1,\n            \"pointSize\": 5,\n            \"scaleDistribution\": {\n              \"type\": \"linear\"\n            },\n            \"showPoints\": \"never\",\n            \"spanNulls\": false,\n            \"stacking\": {\n              \"group\": \"A\",\n              \"mode\": \"none\"\n            },\n            \"thresholdsStyle\": {\n              \"mode\": \"off\"\n            }\n          },\n          \"decimals\": 0,\n          \"links\": [],\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\",\n                \"value\": null\n              },\n              {\n                \"color\": \"red\",\n                \"value\": 80\n              }\n            ]\n          },\n          \"unit\": \"dtdurations\"\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 6,\n        \"w\": 8,\n        \"x\": 0,\n        \"y\": 17\n      },\n      \"id\": 28,\n      \"options\": {\n        \"legend\": {\n          \"calcs\": [],\n          \"displayMode\": \"list\",\n          \"placement\": \"bottom\",\n          \"showLegend\": true\n        },\n        \"tooltip\": {\n          \"mode\": \"multi\",\n          \"sort\": \"none\"\n        }\n      },\n      \"pluginVersion\": \"7.4.3\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"expr\": \"vc_genesis_distance_seconds * -1\",\n          \"format\": \"time_series\",\n          \"intervalFactor\": 1,\n          \"refId\": \"A\"\n        }\n      ],\n      \"title\": \"Distance from Genesis Time\",\n      \"type\": \"timeseries\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"palette-classic\"\n          },\n          \"custom\": {\n            \"axisBorderShow\": false,\n            \"axisCenteredZero\": false,\n            \"axisColorMode\": \"text\",\n            \"axisLabel\": \"Validators\",\n            \"axisPlacement\": \"auto\",\n            \"barAlignment\": 0,\n            \"drawStyle\": \"line\",\n            \"fillOpacity\": 10,\n            \"gradientMode\": \"none\",\n            \"hideFrom\": {\n              \"legend\": false,\n              \"tooltip\": false,\n              \"viz\": false\n            },\n            \"insertNulls\": false,\n            \"lineInterpolation\": \"linear\",\n            \"lineWidth\": 1,\n            \"pointSize\": 5,\n            \"scaleDistribution\": {\n              \"type\": \"linear\"\n            },\n            \"showPoints\": \"never\",\n            \"spanNulls\": false,\n            \"stacking\": {\n              \"group\": \"A\",\n              \"mode\": \"none\"\n            },\n            \"thresholdsStyle\": {\n              \"mode\": \"off\"\n            }\n          },\n          \"decimals\": 0,\n          \"links\": [],\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\",\n                \"value\": null\n              },\n              {\n                \"color\": \"red\",\n                \"value\": 80\n              }\n            ]\n          },\n          \"unit\": \"short\"\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 6,\n        \"w\": 8,\n        \"x\": 8,\n        \"y\": 17\n      },\n      \"id\": 81,\n      \"options\": {\n        \"legend\": {\n          \"calcs\": [],\n          \"displayMode\": \"list\",\n          \"placement\": \"bottom\",\n          \"showLegend\": false\n        },\n        \"tooltip\": {\n          \"mode\": \"multi\",\n          \"sort\": \"none\"\n        }\n      },\n      \"pluginVersion\": \"7.4.3\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"expr\": \"vc_validators_enabled_count\",\n          \"format\": \"time_series\",\n          \"interval\": \"\",\n          \"intervalFactor\": 1,\n          \"legendFormat\": \"\",\n          \"refId\": \"A\"\n        }\n      ],\n      \"title\": \"Enabled Validators\",\n      \"type\": \"timeseries\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"palette-classic\"\n          },\n          \"custom\": {\n            \"axisBorderShow\": false,\n            \"axisCenteredZero\": false,\n            \"axisColorMode\": \"text\",\n            \"axisLabel\": \"Validators\",\n            \"axisPlacement\": \"auto\",\n            \"barAlignment\": 0,\n            \"drawStyle\": \"line\",\n            \"fillOpacity\": 10,\n            \"gradientMode\": \"none\",\n            \"hideFrom\": {\n              \"legend\": false,\n              \"tooltip\": false,\n              \"viz\": false\n            },\n            \"insertNulls\": false,\n            \"lineInterpolation\": \"linear\",\n            \"lineWidth\": 1,\n            \"pointSize\": 5,\n            \"scaleDistribution\": {\n              \"type\": \"linear\"\n            },\n            \"showPoints\": \"never\",\n            \"spanNulls\": false,\n            \"stacking\": {\n              \"group\": \"A\",\n              \"mode\": \"none\"\n            },\n            \"thresholdsStyle\": {\n              \"mode\": \"off\"\n            }\n          },\n          \"decimals\": 0,\n          \"links\": [],\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\",\n                \"value\": null\n              },\n              {\n                \"color\": \"red\",\n                \"value\": 80\n              }\n            ]\n          },\n          \"unit\": \"short\"\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 6,\n        \"w\": 8,\n        \"x\": 16,\n        \"y\": 17\n      },\n      \"id\": 117,\n      \"options\": {\n        \"legend\": {\n          \"calcs\": [],\n          \"displayMode\": \"list\",\n          \"placement\": \"bottom\",\n          \"showLegend\": false\n        },\n        \"tooltip\": {\n          \"mode\": \"multi\",\n          \"sort\": \"none\"\n        }\n      },\n      \"pluginVersion\": \"7.4.3\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"expr\": \"vc_validators_total_count\",\n          \"format\": \"time_series\",\n          \"interval\": \"\",\n          \"intervalFactor\": 1,\n          \"legendFormat\": \"\",\n          \"refId\": \"A\"\n        }\n      ],\n      \"title\": \"Total Validators\",\n      \"type\": \"timeseries\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"custom\": {}\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 2,\n        \"w\": 24,\n        \"x\": 0,\n        \"y\": 23\n      },\n      \"id\": 122,\n      \"options\": {\n        \"content\": \"\\n### Consensus\\n\\nOverview of consensus between nodes.\\n\\n\\n\",\n        \"mode\": \"markdown\"\n      },\n      \"pluginVersion\": \"7.4.3\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"refId\": \"A\"\n        }\n      ],\n      \"transparent\": true,\n      \"type\": \"text\"\n    },\n    {\n      \"aliasColors\": {},\n      \"autoMigrateFrom\": \"graph\",\n      \"bars\": false,\n      \"dashLength\": 10,\n      \"dashes\": false,\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"custom\": {},\n          \"links\": []\n        },\n        \"overrides\": []\n      },\n      \"fill\": 1,\n      \"fillGradient\": 0,\n      \"gridPos\": {\n        \"h\": 5,\n        \"w\": 6,\n        \"x\": 0,\n        \"y\": 25\n      },\n      \"hiddenSeries\": false,\n      \"id\": 26,\n      \"legend\": {\n        \"avg\": false,\n        \"current\": false,\n        \"max\": false,\n        \"min\": false,\n        \"show\": false,\n        \"total\": false,\n        \"values\": false\n      },\n      \"lines\": true,\n      \"linewidth\": 1,\n      \"nullPointMode\": \"null\",\n      \"options\": {\n        \"alertThreshold\": true\n      },\n      \"percentage\": false,\n      \"pluginVersion\": \"7.4.3\",\n      \"pointradius\": 2,\n      \"points\": false,\n      \"renderer\": \"flot\",\n      \"seriesOverrides\": [],\n      \"spaceLength\": 10,\n      \"stack\": false,\n      \"steppedLine\": false,\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"expr\": \"vc_signed_beacon_blocks_total\",\n          \"format\": \"time_series\",\n          \"interval\": \"\",\n          \"intervalFactor\": 1,\n          \"legendFormat\": \"\",\n          \"refId\": \"A\"\n        }\n      ],\n      \"thresholds\": [],\n      \"timeRegions\": [],\n      \"title\": \"Block Signing Events\",\n      \"tooltip\": {\n        \"shared\": true,\n        \"sort\": 0,\n        \"value_type\": \"individual\"\n      },\n      \"type\": \"timeseries\",\n      \"xaxis\": {\n        \"mode\": \"time\",\n        \"show\": true,\n        \"values\": []\n      },\n      \"yaxes\": [\n        {\n          \"decimals\": 0,\n          \"format\": \"none\",\n          \"label\": \"BeaconBlock\",\n          \"logBase\": 1,\n          \"show\": true\n        },\n        {\n          \"format\": \"short\",\n          \"logBase\": 1,\n          \"show\": true\n        }\n      ],\n      \"yaxis\": {\n        \"align\": false\n      }\n    },\n    {\n      \"aliasColors\": {},\n      \"autoMigrateFrom\": \"graph\",\n      \"bars\": false,\n      \"dashLength\": 10,\n      \"dashes\": false,\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"custom\": {},\n          \"links\": []\n        },\n        \"overrides\": []\n      },\n      \"fill\": 1,\n      \"fillGradient\": 0,\n      \"gridPos\": {\n        \"h\": 5,\n        \"w\": 6,\n        \"x\": 6,\n        \"y\": 25\n      },\n      \"hiddenSeries\": false,\n      \"id\": 118,\n      \"legend\": {\n        \"avg\": false,\n        \"current\": false,\n        \"max\": false,\n        \"min\": false,\n        \"show\": false,\n        \"total\": false,\n        \"values\": false\n      },\n      \"lines\": true,\n      \"linewidth\": 1,\n      \"nullPointMode\": \"null\",\n      \"options\": {\n        \"alertThreshold\": true\n      },\n      \"percentage\": false,\n      \"pluginVersion\": \"7.4.3\",\n      \"pointradius\": 2,\n      \"points\": false,\n      \"renderer\": \"flot\",\n      \"seriesOverrides\": [],\n      \"spaceLength\": 10,\n      \"stack\": false,\n      \"steppedLine\": false,\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"expr\": \"vc_signed_attestations_total\",\n          \"format\": \"time_series\",\n          \"interval\": \"\",\n          \"intervalFactor\": 1,\n          \"legendFormat\": \"\",\n          \"refId\": \"A\"\n        }\n      ],\n      \"thresholds\": [],\n      \"timeRegions\": [],\n      \"title\": \"Attestation Signing Events\",\n      \"tooltip\": {\n        \"shared\": true,\n        \"sort\": 0,\n        \"value_type\": \"individual\"\n      },\n      \"type\": \"timeseries\",\n      \"xaxis\": {\n        \"mode\": \"time\",\n        \"show\": true,\n        \"values\": []\n      },\n      \"yaxes\": [\n        {\n          \"decimals\": 0,\n          \"format\": \"none\",\n          \"label\": \"Attestation\",\n          \"logBase\": 1,\n          \"show\": true\n        },\n        {\n          \"format\": \"short\",\n          \"logBase\": 1,\n          \"show\": true\n        }\n      ],\n      \"yaxis\": {\n        \"align\": false\n      }\n    },\n    {\n      \"aliasColors\": {},\n      \"autoMigrateFrom\": \"graph\",\n      \"bars\": false,\n      \"dashLength\": 10,\n      \"dashes\": false,\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"custom\": {},\n          \"links\": []\n        },\n        \"overrides\": []\n      },\n      \"fill\": 1,\n      \"fillGradient\": 0,\n      \"gridPos\": {\n        \"h\": 5,\n        \"w\": 6,\n        \"x\": 12,\n        \"y\": 25\n      },\n      \"hiddenSeries\": false,\n      \"id\": 119,\n      \"legend\": {\n        \"avg\": false,\n        \"current\": false,\n        \"max\": false,\n        \"min\": false,\n        \"show\": false,\n        \"total\": false,\n        \"values\": false\n      },\n      \"lines\": true,\n      \"linewidth\": 1,\n      \"nullPointMode\": \"null\",\n      \"options\": {\n        \"alertThreshold\": true\n      },\n      \"percentage\": false,\n      \"pluginVersion\": \"7.4.3\",\n      \"pointradius\": 2,\n      \"points\": false,\n      \"renderer\": \"flot\",\n      \"seriesOverrides\": [],\n      \"spaceLength\": 10,\n      \"stack\": false,\n      \"steppedLine\": false,\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"expr\": \"vc_signed_aggregates_total\",\n          \"format\": \"time_series\",\n          \"interval\": \"\",\n          \"intervalFactor\": 1,\n          \"legendFormat\": \"\",\n          \"refId\": \"A\"\n        }\n      ],\n      \"thresholds\": [],\n      \"timeRegions\": [],\n      \"title\": \"Aggregate Signing Events\",\n      \"tooltip\": {\n        \"shared\": true,\n        \"sort\": 0,\n        \"value_type\": \"individual\"\n      },\n      \"type\": \"timeseries\",\n      \"xaxis\": {\n        \"mode\": \"time\",\n        \"show\": true,\n        \"values\": []\n      },\n      \"yaxes\": [\n        {\n          \"decimals\": 0,\n          \"format\": \"none\",\n          \"label\": \"SignedAggregateAndProof\",\n          \"logBase\": 1,\n          \"show\": true\n        },\n        {\n          \"format\": \"short\",\n          \"logBase\": 1,\n          \"show\": true\n        }\n      ],\n      \"yaxis\": {\n        \"align\": false\n      }\n    },\n    {\n      \"aliasColors\": {},\n      \"autoMigrateFrom\": \"graph\",\n      \"bars\": false,\n      \"dashLength\": 10,\n      \"dashes\": false,\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"custom\": {},\n          \"links\": []\n        },\n        \"overrides\": []\n      },\n      \"fill\": 1,\n      \"fillGradient\": 0,\n      \"gridPos\": {\n        \"h\": 5,\n        \"w\": 6,\n        \"x\": 18,\n        \"y\": 25\n      },\n      \"hiddenSeries\": false,\n      \"id\": 120,\n      \"legend\": {\n        \"avg\": false,\n        \"current\": false,\n        \"max\": false,\n        \"min\": false,\n        \"show\": false,\n        \"total\": false,\n        \"values\": false\n      },\n      \"lines\": true,\n      \"linewidth\": 1,\n      \"nullPointMode\": \"null\",\n      \"options\": {\n        \"alertThreshold\": true\n      },\n      \"percentage\": false,\n      \"pluginVersion\": \"7.4.3\",\n      \"pointradius\": 2,\n      \"points\": false,\n      \"renderer\": \"flot\",\n      \"seriesOverrides\": [],\n      \"spaceLength\": 10,\n      \"stack\": false,\n      \"steppedLine\": false,\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"expr\": \"vc_signed_selection_proofs_total\",\n          \"format\": \"time_series\",\n          \"interval\": \"\",\n          \"intervalFactor\": 1,\n          \"legendFormat\": \"\",\n          \"refId\": \"A\"\n        }\n      ],\n      \"thresholds\": [],\n      \"timeRegions\": [],\n      \"title\": \"Selection Proof Signing Events\",\n      \"tooltip\": {\n        \"shared\": true,\n        \"sort\": 0,\n        \"value_type\": \"individual\"\n      },\n      \"type\": \"timeseries\",\n      \"xaxis\": {\n        \"mode\": \"time\",\n        \"show\": true,\n        \"values\": []\n      },\n      \"yaxes\": [\n        {\n          \"decimals\": 0,\n          \"format\": \"none\",\n          \"label\": \"SelectionProof\",\n          \"logBase\": 1,\n          \"show\": true\n        },\n        {\n          \"format\": \"short\",\n          \"logBase\": 1,\n          \"show\": true\n        }\n      ],\n      \"yaxis\": {\n        \"align\": false\n      }\n    },\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"custom\": {}\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 2,\n        \"w\": 24,\n        \"x\": 0,\n        \"y\": 30\n      },\n      \"id\": 137,\n      \"options\": {\n        \"content\": \"\\n### Consensus\\n\\nOverview of consensus between nodes.\\n\\n\\n\",\n        \"mode\": \"markdown\"\n      },\n      \"pluginVersion\": \"7.4.3\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"refId\": \"A\"\n        }\n      ],\n      \"transparent\": true,\n      \"type\": \"text\"\n    },\n    {\n      \"aliasColors\": {},\n      \"autoMigrateFrom\": \"graph\",\n      \"bars\": false,\n      \"dashLength\": 10,\n      \"dashes\": false,\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"custom\": {},\n          \"links\": []\n        },\n        \"overrides\": []\n      },\n      \"fill\": 1,\n      \"fillGradient\": 0,\n      \"gridPos\": {\n        \"h\": 5,\n        \"w\": 6,\n        \"x\": 0,\n        \"y\": 32\n      },\n      \"hiddenSeries\": false,\n      \"id\": 10,\n      \"legend\": {\n        \"avg\": false,\n        \"current\": false,\n        \"max\": false,\n        \"min\": false,\n        \"show\": false,\n        \"total\": false,\n        \"values\": false\n      },\n      \"lines\": true,\n      \"linewidth\": 1,\n      \"nullPointMode\": \"null\",\n      \"options\": {\n        \"alertThreshold\": true\n      },\n      \"percentage\": false,\n      \"pluginVersion\": \"7.4.3\",\n      \"pointradius\": 2,\n      \"points\": false,\n      \"renderer\": \"flot\",\n      \"seriesOverrides\": [],\n      \"spaceLength\": 10,\n      \"stack\": false,\n      \"steppedLine\": false,\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"expr\": \"rate(vc_duties_service_task_times_seconds_sum[30s])\\n/\\nrate(vc_duties_service_task_times_seconds_count[30s])\",\n          \"format\": \"time_series\",\n          \"instant\": false,\n          \"interval\": \"\",\n          \"intervalFactor\": 1,\n          \"legendFormat\": \"\",\n          \"refId\": \"A\"\n        }\n      ],\n      \"thresholds\": [],\n      \"timeRegions\": [],\n      \"title\": \"Duties Service Times\",\n      \"tooltip\": {\n        \"shared\": true,\n        \"sort\": 0,\n        \"value_type\": \"individual\"\n      },\n      \"type\": \"timeseries\",\n      \"xaxis\": {\n        \"mode\": \"time\",\n        \"show\": true,\n        \"values\": []\n      },\n      \"yaxes\": [\n        {\n          \"format\": \"s\",\n          \"logBase\": 1,\n          \"show\": true\n        },\n        {\n          \"format\": \"short\",\n          \"logBase\": 1,\n          \"show\": true\n        }\n      ],\n      \"yaxis\": {\n        \"align\": false\n      }\n    },\n    {\n      \"aliasColors\": {},\n      \"autoMigrateFrom\": \"graph\",\n      \"bars\": false,\n      \"dashLength\": 10,\n      \"dashes\": false,\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"custom\": {},\n          \"links\": []\n        },\n        \"overrides\": []\n      },\n      \"fill\": 1,\n      \"fillGradient\": 0,\n      \"gridPos\": {\n        \"h\": 5,\n        \"w\": 6,\n        \"x\": 6,\n        \"y\": 32\n      },\n      \"hiddenSeries\": false,\n      \"id\": 123,\n      \"legend\": {\n        \"avg\": false,\n        \"current\": false,\n        \"max\": false,\n        \"min\": false,\n        \"show\": false,\n        \"total\": false,\n        \"values\": false\n      },\n      \"lines\": true,\n      \"linewidth\": 1,\n      \"nullPointMode\": \"null\",\n      \"options\": {\n        \"alertThreshold\": true\n      },\n      \"percentage\": false,\n      \"pluginVersion\": \"7.4.3\",\n      \"pointradius\": 2,\n      \"points\": false,\n      \"renderer\": \"flot\",\n      \"seriesOverrides\": [],\n      \"spaceLength\": 10,\n      \"stack\": false,\n      \"steppedLine\": false,\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"expr\": \"rate(vc_fork_service_task_times_seconds_sum[30s])\\n/\\nrate(vc_fork_service_task_times_seconds_count[30s])\",\n          \"format\": \"time_series\",\n          \"instant\": false,\n          \"interval\": \"\",\n          \"intervalFactor\": 1,\n          \"legendFormat\": \"\",\n          \"refId\": \"A\"\n        }\n      ],\n      \"thresholds\": [],\n      \"timeRegions\": [],\n      \"title\": \"Fork Service Times\",\n      \"tooltip\": {\n        \"shared\": true,\n        \"sort\": 0,\n        \"value_type\": \"individual\"\n      },\n      \"type\": \"timeseries\",\n      \"xaxis\": {\n        \"mode\": \"time\",\n        \"show\": true,\n        \"values\": []\n      },\n      \"yaxes\": [\n        {\n          \"format\": \"s\",\n          \"logBase\": 1,\n          \"show\": true\n        },\n        {\n          \"format\": \"short\",\n          \"logBase\": 1,\n          \"show\": true\n        }\n      ],\n      \"yaxis\": {\n        \"align\": false\n      }\n    },\n    {\n      \"aliasColors\": {},\n      \"autoMigrateFrom\": \"graph\",\n      \"bars\": false,\n      \"dashLength\": 10,\n      \"dashes\": false,\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"custom\": {},\n          \"links\": []\n        },\n        \"overrides\": []\n      },\n      \"fill\": 1,\n      \"fillGradient\": 0,\n      \"gridPos\": {\n        \"h\": 5,\n        \"w\": 6,\n        \"x\": 12,\n        \"y\": 32\n      },\n      \"hiddenSeries\": false,\n      \"id\": 124,\n      \"legend\": {\n        \"avg\": false,\n        \"current\": false,\n        \"max\": false,\n        \"min\": false,\n        \"show\": false,\n        \"total\": false,\n        \"values\": false\n      },\n      \"lines\": true,\n      \"linewidth\": 1,\n      \"nullPointMode\": \"null\",\n      \"options\": {\n        \"alertThreshold\": true\n      },\n      \"percentage\": false,\n      \"pluginVersion\": \"7.4.3\",\n      \"pointradius\": 2,\n      \"points\": false,\n      \"renderer\": \"flot\",\n      \"seriesOverrides\": [],\n      \"spaceLength\": 10,\n      \"stack\": false,\n      \"steppedLine\": false,\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"expr\": \"rate(vc_attestation_service_task_times_seconds_sum[30s])\\n/\\nrate(vc_attestation_service_task_times_seconds_count[30s])\",\n          \"format\": \"time_series\",\n          \"instant\": false,\n          \"interval\": \"\",\n          \"intervalFactor\": 1,\n          \"legendFormat\": \"\",\n          \"refId\": \"A\"\n        }\n      ],\n      \"thresholds\": [],\n      \"timeRegions\": [],\n      \"title\": \"Attestation Service Times\",\n      \"tooltip\": {\n        \"shared\": true,\n        \"sort\": 0,\n        \"value_type\": \"individual\"\n      },\n      \"type\": \"timeseries\",\n      \"xaxis\": {\n        \"mode\": \"time\",\n        \"show\": true,\n        \"values\": []\n      },\n      \"yaxes\": [\n        {\n          \"format\": \"s\",\n          \"logBase\": 1,\n          \"show\": true\n        },\n        {\n          \"format\": \"short\",\n          \"logBase\": 1,\n          \"show\": true\n        }\n      ],\n      \"yaxis\": {\n        \"align\": false\n      }\n    },\n    {\n      \"aliasColors\": {},\n      \"autoMigrateFrom\": \"graph\",\n      \"bars\": false,\n      \"dashLength\": 10,\n      \"dashes\": false,\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"custom\": {},\n          \"links\": []\n        },\n        \"overrides\": []\n      },\n      \"fill\": 1,\n      \"fillGradient\": 0,\n      \"gridPos\": {\n        \"h\": 5,\n        \"w\": 6,\n        \"x\": 18,\n        \"y\": 32\n      },\n      \"hiddenSeries\": false,\n      \"id\": 125,\n      \"legend\": {\n        \"avg\": false,\n        \"current\": false,\n        \"max\": false,\n        \"min\": false,\n        \"show\": false,\n        \"total\": false,\n        \"values\": false\n      },\n      \"lines\": true,\n      \"linewidth\": 1,\n      \"nullPointMode\": \"null\",\n      \"options\": {\n        \"alertThreshold\": true\n      },\n      \"percentage\": false,\n      \"pluginVersion\": \"7.4.3\",\n      \"pointradius\": 2,\n      \"points\": false,\n      \"renderer\": \"flot\",\n      \"seriesOverrides\": [],\n      \"spaceLength\": 10,\n      \"stack\": false,\n      \"steppedLine\": false,\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"expr\": \"rate(vc_beacon_block_service_task_times_seconds_sum[30s])\\n/\\nrate(vc_beacon_block_service_task_times_seconds_count[30s])\",\n          \"format\": \"time_series\",\n          \"instant\": false,\n          \"interval\": \"\",\n          \"intervalFactor\": 1,\n          \"legendFormat\": \"\",\n          \"refId\": \"A\"\n        }\n      ],\n      \"thresholds\": [],\n      \"timeRegions\": [],\n      \"title\": \"Block Service Times\",\n      \"tooltip\": {\n        \"shared\": true,\n        \"sort\": 0,\n        \"value_type\": \"individual\"\n      },\n      \"type\": \"timeseries\",\n      \"xaxis\": {\n        \"mode\": \"time\",\n        \"show\": true,\n        \"values\": []\n      },\n      \"yaxes\": [\n        {\n          \"format\": \"s\",\n          \"logBase\": 1,\n          \"show\": true\n        },\n        {\n          \"format\": \"short\",\n          \"logBase\": 1,\n          \"show\": true\n        }\n      ],\n      \"yaxis\": {\n        \"align\": false\n      }\n    },\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"custom\": {}\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 2,\n        \"w\": 24,\n        \"x\": 0,\n        \"y\": 37\n      },\n      \"id\": 126,\n      \"options\": {\n        \"content\": \"\\n### Logs\\n\\nOverview of logs (includes beacon nodes)\\n\\n\\n\",\n        \"mode\": \"markdown\"\n      },\n      \"pluginVersion\": \"7.4.3\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"refId\": \"A\"\n        }\n      ],\n      \"transparent\": true,\n      \"type\": \"text\"\n    },\n    {\n      \"aliasColors\": {},\n      \"autoMigrateFrom\": \"graph\",\n      \"bars\": false,\n      \"dashLength\": 10,\n      \"dashes\": false,\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"description\": \"\",\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"custom\": {},\n          \"links\": []\n        },\n        \"overrides\": []\n      },\n      \"fill\": 1,\n      \"fillGradient\": 0,\n      \"gridPos\": {\n        \"h\": 5,\n        \"w\": 6,\n        \"x\": 0,\n        \"y\": 39\n      },\n      \"hiddenSeries\": false,\n      \"id\": 134,\n      \"legend\": {\n        \"avg\": false,\n        \"current\": false,\n        \"max\": false,\n        \"min\": false,\n        \"show\": false,\n        \"total\": false,\n        \"values\": false\n      },\n      \"lines\": true,\n      \"linewidth\": 1,\n      \"nullPointMode\": \"null\",\n      \"options\": {\n        \"alertThreshold\": true\n      },\n      \"percentage\": false,\n      \"pluginVersion\": \"7.4.3\",\n      \"pointradius\": 2,\n      \"points\": false,\n      \"renderer\": \"flot\",\n      \"seriesOverrides\": [],\n      \"spaceLength\": 10,\n      \"stack\": false,\n      \"steppedLine\": false,\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"expr\": \"rate(info_total[1m])\",\n          \"format\": \"time_series\",\n          \"intervalFactor\": 1,\n          \"refId\": \"A\"\n        }\n      ],\n      \"thresholds\": [],\n      \"timeRegions\": [],\n      \"title\": \"Info Logs per Minute\",\n      \"tooltip\": {\n        \"shared\": true,\n        \"sort\": 0,\n        \"value_type\": \"individual\"\n      },\n      \"type\": \"timeseries\",\n      \"xaxis\": {\n        \"mode\": \"time\",\n        \"show\": true,\n        \"values\": []\n      },\n      \"yaxes\": [\n        {\n          \"format\": \"none\",\n          \"logBase\": 1,\n          \"show\": true\n        },\n        {\n          \"format\": \"short\",\n          \"logBase\": 1,\n          \"show\": true\n        }\n      ],\n      \"yaxis\": {\n        \"align\": false\n      }\n    },\n    {\n      \"aliasColors\": {},\n      \"autoMigrateFrom\": \"graph\",\n      \"bars\": false,\n      \"dashLength\": 10,\n      \"dashes\": false,\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"description\": \"\",\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"custom\": {},\n          \"links\": []\n        },\n        \"overrides\": []\n      },\n      \"fill\": 1,\n      \"fillGradient\": 0,\n      \"gridPos\": {\n        \"h\": 5,\n        \"w\": 6,\n        \"x\": 6,\n        \"y\": 39\n      },\n      \"hiddenSeries\": false,\n      \"id\": 132,\n      \"legend\": {\n        \"avg\": false,\n        \"current\": false,\n        \"max\": false,\n        \"min\": false,\n        \"show\": false,\n        \"total\": false,\n        \"values\": false\n      },\n      \"lines\": true,\n      \"linewidth\": 1,\n      \"nullPointMode\": \"null\",\n      \"options\": {\n        \"alertThreshold\": true\n      },\n      \"percentage\": false,\n      \"pluginVersion\": \"7.4.3\",\n      \"pointradius\": 2,\n      \"points\": false,\n      \"renderer\": \"flot\",\n      \"seriesOverrides\": [],\n      \"spaceLength\": 10,\n      \"stack\": false,\n      \"steppedLine\": false,\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"expr\": \"rate(warn_total[1m])\",\n          \"format\": \"time_series\",\n          \"intervalFactor\": 1,\n          \"refId\": \"A\"\n        }\n      ],\n      \"thresholds\": [],\n      \"timeRegions\": [],\n      \"title\": \"Warn Logs per Minute\",\n      \"tooltip\": {\n        \"shared\": true,\n        \"sort\": 0,\n        \"value_type\": \"individual\"\n      },\n      \"type\": \"timeseries\",\n      \"xaxis\": {\n        \"mode\": \"time\",\n        \"show\": true,\n        \"values\": []\n      },\n      \"yaxes\": [\n        {\n          \"format\": \"none\",\n          \"logBase\": 1,\n          \"show\": true\n        },\n        {\n          \"format\": \"short\",\n          \"logBase\": 1,\n          \"show\": true\n        }\n      ],\n      \"yaxis\": {\n        \"align\": false\n      }\n    },\n    {\n      \"aliasColors\": {},\n      \"autoMigrateFrom\": \"graph\",\n      \"bars\": false,\n      \"dashLength\": 10,\n      \"dashes\": false,\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"description\": \"\",\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"custom\": {},\n          \"links\": []\n        },\n        \"overrides\": []\n      },\n      \"fill\": 1,\n      \"fillGradient\": 0,\n      \"gridPos\": {\n        \"h\": 5,\n        \"w\": 6,\n        \"x\": 12,\n        \"y\": 39\n      },\n      \"hiddenSeries\": false,\n      \"id\": 130,\n      \"legend\": {\n        \"alignAsTable\": false,\n        \"avg\": false,\n        \"current\": false,\n        \"max\": false,\n        \"min\": false,\n        \"rightSide\": false,\n        \"show\": true,\n        \"total\": false,\n        \"values\": false\n      },\n      \"lines\": true,\n      \"linewidth\": 1,\n      \"nullPointMode\": \"null\",\n      \"options\": {\n        \"alertThreshold\": true\n      },\n      \"percentage\": false,\n      \"pluginVersion\": \"7.4.3\",\n      \"pointradius\": 2,\n      \"points\": false,\n      \"renderer\": \"flot\",\n      \"seriesOverrides\": [],\n      \"spaceLength\": 10,\n      \"stack\": false,\n      \"steppedLine\": false,\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"expr\": \"rate(error_total[1m])\",\n          \"format\": \"time_series\",\n          \"intervalFactor\": 1,\n          \"refId\": \"A\"\n        }\n      ],\n      \"thresholds\": [],\n      \"timeRegions\": [],\n      \"title\": \"Error Logs per Minute\",\n      \"tooltip\": {\n        \"shared\": true,\n        \"sort\": 0,\n        \"value_type\": \"individual\"\n      },\n      \"type\": \"timeseries\",\n      \"xaxis\": {\n        \"mode\": \"time\",\n        \"show\": true,\n        \"values\": []\n      },\n      \"yaxes\": [\n        {\n          \"format\": \"none\",\n          \"logBase\": 1,\n          \"show\": true\n        },\n        {\n          \"format\": \"short\",\n          \"logBase\": 1,\n          \"show\": true\n        }\n      ],\n      \"yaxis\": {\n        \"align\": false\n      }\n    },\n    {\n      \"aliasColors\": {},\n      \"autoMigrateFrom\": \"graph\",\n      \"bars\": false,\n      \"dashLength\": 10,\n      \"dashes\": false,\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"description\": \"\",\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"custom\": {},\n          \"links\": []\n        },\n        \"overrides\": []\n      },\n      \"fill\": 1,\n      \"fillGradient\": 0,\n      \"gridPos\": {\n        \"h\": 5,\n        \"w\": 6,\n        \"x\": 18,\n        \"y\": 39\n      },\n      \"hiddenSeries\": false,\n      \"id\": 128,\n      \"legend\": {\n        \"avg\": false,\n        \"current\": false,\n        \"max\": false,\n        \"min\": false,\n        \"show\": false,\n        \"total\": false,\n        \"values\": false\n      },\n      \"lines\": true,\n      \"linewidth\": 1,\n      \"nullPointMode\": \"null\",\n      \"options\": {\n        \"alertThreshold\": true\n      },\n      \"percentage\": false,\n      \"pluginVersion\": \"7.4.3\",\n      \"pointradius\": 2,\n      \"points\": false,\n      \"renderer\": \"flot\",\n      \"seriesOverrides\": [],\n      \"spaceLength\": 10,\n      \"stack\": false,\n      \"steppedLine\": false,\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"expr\": \"crit_total\",\n          \"format\": \"time_series\",\n          \"interval\": \"\",\n          \"intervalFactor\": 1,\n          \"legendFormat\": \"\",\n          \"refId\": \"A\"\n        }\n      ],\n      \"thresholds\": [],\n      \"timeRegions\": [],\n      \"title\": \"Crit Logs Total\",\n      \"tooltip\": {\n        \"shared\": true,\n        \"sort\": 0,\n        \"value_type\": \"individual\"\n      },\n      \"type\": \"timeseries\",\n      \"xaxis\": {\n        \"mode\": \"time\",\n        \"show\": true,\n        \"values\": []\n      },\n      \"yaxes\": [\n        {\n          \"format\": \"none\",\n          \"logBase\": 1,\n          \"show\": true\n        },\n        {\n          \"format\": \"short\",\n          \"logBase\": 1,\n          \"show\": true\n        }\n      ],\n      \"yaxis\": {\n        \"align\": false,\n        \"alignLevel\": null\n      }\n    },\n    {\n      \"datasource\": \"Prometheus\",\n      \"gridPos\": {\n        \"h\": 2,\n        \"w\": 24,\n        \"x\": 0,\n        \"y\": 44\n      },\n      \"id\": 141,\n      \"links\": [],\n      \"options\": {\n        \"code\": {\n          \"language\": \"plaintext\",\n          \"showLineNumbers\": false,\n          \"showMiniMap\": false\n        },\n        \"content\": \"\\n### BN <-> VC Latency\\n\\nStats about BN <-> VC Latency\\n\\n\\n\\n\",\n        \"mode\": \"markdown\"\n      },\n      \"pluginVersion\": \"9.3.2\",\n      \"targets\": [\n        {\n          \"datasource\": \"Prometheus\",\n          \"refId\": \"A\"\n        }\n      ],\n      \"transparent\": true,\n      \"type\": \"text\"\n    },\n    {\n      \"datasource\": \"Prometheus\",\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"palette-classic\"\n          },\n          \"custom\": {\n            \"axisCenteredZero\": false,\n            \"axisColorMode\": \"text\",\n            \"axisLabel\": \"\",\n            \"axisPlacement\": \"left\",\n            \"barAlignment\": 0,\n            \"drawStyle\": \"line\",\n            \"fillOpacity\": 6,\n            \"gradientMode\": \"none\",\n            \"hideFrom\": {\n              \"legend\": false,\n              \"tooltip\": false,\n              \"viz\": false\n            },\n            \"lineInterpolation\": \"linear\",\n            \"lineStyle\": {\n              \"fill\": \"solid\"\n            },\n            \"lineWidth\": 1,\n            \"pointSize\": 5,\n            \"scaleDistribution\": {\n              \"type\": \"linear\"\n            },\n            \"showPoints\": \"never\",\n            \"spanNulls\": false,\n            \"stacking\": {\n              \"group\": \"A\",\n              \"mode\": \"none\"\n            },\n            \"thresholdsStyle\": {\n              \"mode\": \"off\"\n            }\n          },\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\",\n                \"value\": null\n              }\n            ]\n          },\n          \"unit\": \"s\"\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 6,\n        \"w\": 12,\n        \"x\": 0,\n        \"y\": 46\n      },\n      \"id\": 143,\n      \"options\": {\n        \"legend\": {\n          \"calcs\": [],\n          \"displayMode\": \"table\",\n          \"placement\": \"right\",\n          \"showLegend\": true,\n          \"width\": 300\n        },\n        \"tooltip\": {\n          \"mode\": \"single\",\n          \"sort\": \"none\"\n        }\n      },\n      \"targets\": [\n        {\n          \"datasource\": \"Prometheus\",\n          \"editorMode\": \"code\",\n          \"exemplar\": false,\n          \"expr\": \"histogram_quantile(0.99, rate(vc_beacon_node_latency_primary_endpoint_bucket[$__rate_interval]))\",\n          \"format\": \"time_series\",\n          \"hide\": false,\n          \"instant\": false,\n          \"interval\": \"\",\n          \"legendFormat\": \"99th percentile\",\n          \"range\": true,\n          \"refId\": \"A\"\n        },\n        {\n          \"datasource\": \"Prometheus\",\n          \"editorMode\": \"code\",\n          \"expr\": \"histogram_quantile(0.95, rate(vc_beacon_node_latency_primary_endpoint_bucket[$__rate_interval]))\",\n          \"hide\": false,\n          \"interval\": \"\",\n          \"legendFormat\": \"95th percentile\",\n          \"range\": true,\n          \"refId\": \"B\"\n        },\n        {\n          \"datasource\": \"Prometheus\",\n          \"editorMode\": \"code\",\n          \"expr\": \"histogram_quantile(0.5, rate(vc_beacon_node_latency_primary_endpoint_bucket[$__rate_interval]))\",\n          \"hide\": false,\n          \"legendFormat\": \"median\",\n          \"range\": true,\n          \"refId\": \"C\"\n        },\n        {\n          \"datasource\": \"Prometheus\",\n          \"editorMode\": \"code\",\n          \"expr\": \"rate(vc_beacon_node_latency_primary_endpoint_sum[$__rate_interval])/rate(vc_beacon_node_latency_primary_endpoint_count[$__rate_interval])\",\n          \"hide\": false,\n          \"interval\": \"\",\n          \"legendFormat\": \"mean\",\n          \"range\": true,\n          \"refId\": \"D\"\n        }\n      ],\n      \"title\": \"Primary BN <-> VC Latency\",\n      \"type\": \"timeseries\"\n    },\n    {\n      \"datasource\": \"Prometheus\",\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"palette-classic\"\n          },\n          \"custom\": {\n            \"axisCenteredZero\": false,\n            \"axisColorMode\": \"text\",\n            \"axisLabel\": \"\",\n            \"axisPlacement\": \"left\",\n            \"barAlignment\": 0,\n            \"drawStyle\": \"line\",\n            \"fillOpacity\": 7,\n            \"gradientMode\": \"none\",\n            \"hideFrom\": {\n              \"legend\": false,\n              \"tooltip\": false,\n              \"viz\": false\n            },\n            \"lineInterpolation\": \"linear\",\n            \"lineWidth\": 1,\n            \"pointSize\": 5,\n            \"scaleDistribution\": {\n              \"type\": \"linear\"\n            },\n            \"showPoints\": \"never\",\n            \"spanNulls\": false,\n            \"stacking\": {\n              \"group\": \"A\",\n              \"mode\": \"none\"\n            },\n            \"thresholdsStyle\": {\n              \"mode\": \"off\"\n            }\n          },\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\",\n                \"value\": null\n              }\n            ]\n          },\n          \"unit\": \"s\"\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 6,\n        \"w\": 12,\n        \"x\": 12,\n        \"y\": 46\n      },\n      \"id\": 145,\n      \"options\": {\n        \"legend\": {\n          \"calcs\": [],\n          \"displayMode\": \"table\",\n          \"placement\": \"right\",\n          \"showLegend\": true,\n          \"width\": 300\n        },\n        \"tooltip\": {\n          \"mode\": \"single\",\n          \"sort\": \"none\"\n        }\n      },\n      \"targets\": [\n        {\n          \"datasource\": \"Prometheus\",\n          \"editorMode\": \"code\",\n          \"exemplar\": false,\n          \"expr\": \"histogram_quantile(0.99, rate(vc_beacon_node_latency_bucket[$__rate_interval]))\",\n          \"format\": \"time_series\",\n          \"hide\": false,\n          \"instant\": false,\n          \"interval\": \"\",\n          \"legendFormat\": \"99th percentile {{endpoint}}\",\n          \"range\": true,\n          \"refId\": \"A\"\n        },\n        {\n          \"datasource\": \"Prometheus\",\n          \"editorMode\": \"code\",\n          \"expr\": \"histogram_quantile(0.95, rate(vc_beacon_node_latency_bucket[$__rate_interval]))\",\n          \"hide\": false,\n          \"legendFormat\": \"95th percentile {{endpoint}}\",\n          \"range\": true,\n          \"refId\": \"B\"\n        },\n        {\n          \"datasource\": \"Prometheus\",\n          \"editorMode\": \"code\",\n          \"expr\": \"histogram_quantile(0.5, rate(vc_beacon_node_latency_bucket[$__rate_interval]))\",\n          \"hide\": false,\n          \"legendFormat\": \"median {{endpoint}}\",\n          \"range\": true,\n          \"refId\": \"C\"\n        },\n        {\n          \"datasource\": \"Prometheus\",\n          \"editorMode\": \"code\",\n          \"expr\": \"rate(vc_beacon_node_latency_sum[$__rate_interval])/rate(vc_beacon_node_latency_count[$__rate_interval])\",\n          \"hide\": false,\n          \"interval\": \"\",\n          \"legendFormat\": \"mean {{endpoint}}\",\n          \"range\": true,\n          \"refId\": \"D\"\n        }\n      ],\n      \"title\": \"All BN(s) <-> VC Latency\",\n      \"type\": \"timeseries\"\n    }\n  ],\n  \"refresh\": \"10s\",\n  \"schemaVersion\": 39,\n  \"tags\": [\n    \"lighthouse\"\n  ],\n  \"templating\": {\n    \"list\": []\n  },\n  \"time\": {\n    \"from\": \"now-1h\",\n    \"to\": \"now\"\n  },\n  \"timepicker\": {\n    \"refresh_intervals\": [\n      \"10s\",\n      \"30s\",\n      \"1m\",\n      \"5m\",\n      \"15m\",\n      \"30m\",\n      \"1h\",\n      \"2h\",\n      \"1d\"\n    ],\n    \"time_options\": [\n      \"5m\",\n      \"15m\",\n      \"1h\",\n      \"6h\",\n      \"12h\",\n      \"24h\",\n      \"2d\",\n      \"7d\",\n      \"30d\"\n    ]\n  },\n  \"timezone\": \"\",\n  \"title\": \"Validator Client\",\n  \"uid\": \"3Onh0kAGk\",\n  \"version\": 1,\n  \"weekStart\": \"\"\n}\n"
  },
  {
    "path": "static_files/grafana-config/dashboards/peerdas-dashboard.json",
    "content": "{\n  \"annotations\": {\n    \"list\": [\n      {\n        \"builtIn\": 1,\n        \"datasource\": {\n          \"type\": \"grafana\",\n          \"uid\": \"-- Grafana --\"\n        },\n        \"enable\": true,\n        \"hide\": true,\n        \"iconColor\": \"rgba(0, 211, 255, 1)\",\n        \"name\": \"Annotations & Alerts\",\n        \"type\": \"dashboard\"\n      }\n    ]\n  },\n  \"description\": \"Beacon PeerDAS metrics according to the beacon metrics specs\",\n  \"editable\": true,\n  \"fiscalYearStartMonth\": 0,\n  \"graphTooltip\": 0,\n  \"id\": 10,\n  \"links\": [],\n  \"panels\": [\n    {\n      \"collapsed\": false,\n      \"gridPos\": {\n        \"h\": 1,\n        \"w\": 24,\n        \"x\": 0,\n        \"y\": 0\n      },\n      \"id\": 16,\n      \"panels\": [],\n      \"title\": \"PeerDAS\",\n      \"type\": \"row\"\n    },\n    {\n      \"datasource\": {\n        \"default\": true,\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"palette-classic\"\n          },\n          \"custom\": {\n            \"axisBorderShow\": false,\n            \"axisCenteredZero\": false,\n            \"axisColorMode\": \"text\",\n            \"axisLabel\": \"\",\n            \"axisPlacement\": \"auto\",\n            \"barAlignment\": 0,\n            \"barWidthFactor\": 0.6,\n            \"drawStyle\": \"line\",\n            \"fillOpacity\": 20,\n            \"gradientMode\": \"opacity\",\n            \"hideFrom\": {\n              \"legend\": false,\n              \"tooltip\": false,\n              \"viz\": false\n            },\n            \"insertNulls\": false,\n            \"lineInterpolation\": \"linear\",\n            \"lineWidth\": 1,\n            \"pointSize\": 5,\n            \"scaleDistribution\": {\n              \"type\": \"linear\"\n            },\n            \"showPoints\": \"auto\",\n            \"showValues\": false,\n            \"spanNulls\": false,\n            \"stacking\": {\n              \"group\": \"A\",\n              \"mode\": \"none\"\n            },\n            \"thresholdsStyle\": {\n              \"mode\": \"off\"\n            }\n          },\n          \"decimals\": 0,\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\",\n                \"value\": 0\n              },\n              {\n                \"color\": \"red\",\n                \"value\": 80\n              }\n            ]\n          },\n          \"unit\": \"none\"\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 6,\n        \"w\": 6,\n        \"x\": 0,\n        \"y\": 1\n      },\n      \"id\": 13,\n      \"interval\": \"30s\",\n      \"options\": {\n        \"legend\": {\n          \"calcs\": [],\n          \"displayMode\": \"list\",\n          \"placement\": \"bottom\",\n          \"showLegend\": true\n        },\n        \"tooltip\": {\n          \"hideZeros\": false,\n          \"mode\": \"multi\",\n          \"sort\": \"desc\"\n        }\n      },\n      \"pluginVersion\": \"12.2.0\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"editorMode\": \"code\",\n          \"exemplar\": false,\n          \"expr\": \" avg_over_time(increase(beacon_data_column_sidecar_processing_requests_total{client_name=~\\\"$client\\\", job=~\\\"$job\\\", supernode=~\\\"$nodes\\\"}[$__interval])[1m:])\",\n          \"format\": \"time_series\",\n          \"interval\": \"\",\n          \"intervalFactor\": 1,\n          \"legendFormat\": \"{{job}}\",\n          \"range\": true,\n          \"refId\": \"A\"\n        }\n      ],\n      \"title\": \"Data column sidecars submitted for processing\",\n      \"type\": \"timeseries\"\n    },\n    {\n      \"datasource\": {\n        \"default\": true,\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"palette-classic\"\n          },\n          \"custom\": {\n            \"axisBorderShow\": false,\n            \"axisCenteredZero\": false,\n            \"axisColorMode\": \"text\",\n            \"axisLabel\": \"\",\n            \"axisPlacement\": \"auto\",\n            \"barAlignment\": 0,\n            \"barWidthFactor\": 0.6,\n            \"drawStyle\": \"line\",\n            \"fillOpacity\": 20,\n            \"gradientMode\": \"opacity\",\n            \"hideFrom\": {\n              \"legend\": false,\n              \"tooltip\": false,\n              \"viz\": false\n            },\n            \"insertNulls\": false,\n            \"lineInterpolation\": \"linear\",\n            \"lineWidth\": 1,\n            \"pointSize\": 5,\n            \"scaleDistribution\": {\n              \"type\": \"linear\"\n            },\n            \"showPoints\": \"auto\",\n            \"showValues\": false,\n            \"spanNulls\": false,\n            \"stacking\": {\n              \"group\": \"A\",\n              \"mode\": \"none\"\n            },\n            \"thresholdsStyle\": {\n              \"mode\": \"off\"\n            }\n          },\n          \"decimals\": 0,\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\",\n                \"value\": 0\n              },\n              {\n                \"color\": \"red\",\n                \"value\": 80\n              }\n            ]\n          },\n          \"unit\": \"none\"\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 6,\n        \"w\": 6,\n        \"x\": 6,\n        \"y\": 1\n      },\n      \"id\": 20,\n      \"interval\": \"30s\",\n      \"options\": {\n        \"legend\": {\n          \"calcs\": [],\n          \"displayMode\": \"list\",\n          \"placement\": \"bottom\",\n          \"showLegend\": true\n        },\n        \"tooltip\": {\n          \"hideZeros\": false,\n          \"mode\": \"multi\",\n          \"sort\": \"desc\"\n        }\n      },\n      \"pluginVersion\": \"12.2.0\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"editorMode\": \"code\",\n          \"expr\": \" avg_over_time(increase(beacon_data_column_sidecar_processing_successes_total{client_name=~\\\"$client\\\", job=~\\\"$job\\\", supernode=~\\\"$nodes\\\"}[$__interval])[1m:])\",\n          \"format\": \"time_series\",\n          \"interval\": \"\",\n          \"intervalFactor\": 1,\n          \"legendFormat\": \"{{job}}\",\n          \"range\": true,\n          \"refId\": \"A\"\n        }\n      ],\n      \"title\": \"Data column sidecars verified for gossip\",\n      \"type\": \"timeseries\"\n    },\n    {\n      \"datasource\": {\n        \"default\": true,\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"palette-classic\"\n          },\n          \"custom\": {\n            \"axisBorderShow\": false,\n            \"axisCenteredZero\": false,\n            \"axisColorMode\": \"text\",\n            \"axisLabel\": \"\",\n            \"axisPlacement\": \"auto\",\n            \"barAlignment\": 0,\n            \"barWidthFactor\": 0.6,\n            \"drawStyle\": \"line\",\n            \"fillOpacity\": 20,\n            \"gradientMode\": \"opacity\",\n            \"hideFrom\": {\n              \"legend\": false,\n              \"tooltip\": false,\n              \"viz\": false\n            },\n            \"insertNulls\": false,\n            \"lineInterpolation\": \"linear\",\n            \"lineWidth\": 1,\n            \"pointSize\": 5,\n            \"scaleDistribution\": {\n              \"type\": \"linear\"\n            },\n            \"showPoints\": \"auto\",\n            \"showValues\": false,\n            \"spanNulls\": false,\n            \"stacking\": {\n              \"group\": \"A\",\n              \"mode\": \"none\"\n            },\n            \"thresholdsStyle\": {\n              \"mode\": \"off\"\n            }\n          },\n          \"decimals\": 0,\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\",\n                \"value\": 0\n              },\n              {\n                \"color\": \"red\",\n                \"value\": 80\n              }\n            ]\n          },\n          \"unit\": \"none\"\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 6,\n        \"w\": 6,\n        \"x\": 12,\n        \"y\": 1\n      },\n      \"id\": 15,\n      \"interval\": \"30s\",\n      \"options\": {\n        \"legend\": {\n          \"calcs\": [],\n          \"displayMode\": \"list\",\n          \"placement\": \"bottom\",\n          \"showLegend\": true\n        },\n        \"tooltip\": {\n          \"hideZeros\": false,\n          \"mode\": \"multi\",\n          \"sort\": \"desc\"\n        }\n      },\n      \"pluginVersion\": \"12.2.0\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"editorMode\": \"code\",\n          \"expr\": \" avg_over_time(increase(beacon_data_column_sidecar_processing_requests_total{client_name=~\\\"$client\\\", job=~\\\"$job\\\", supernode=~\\\"$nodes\\\"}[$__interval])[1m:]) -  avg_over_time(increase(beacon_data_column_sidecar_processing_successes_total{client_name=~\\\"$client\\\", job=~\\\"$job\\\", supernode=~\\\"$nodes\\\"}[$__interval])[1m:])\",\n          \"format\": \"time_series\",\n          \"interval\": \"\",\n          \"intervalFactor\": 1,\n          \"legendFormat\": \"{{job}}\",\n          \"range\": true,\n          \"refId\": \"A\"\n        }\n      ],\n      \"title\": \"Column processing failures\",\n      \"type\": \"timeseries\"\n    },\n    {\n      \"datasource\": {\n        \"default\": true,\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"palette-classic\"\n          },\n          \"custom\": {\n            \"axisBorderShow\": false,\n            \"axisCenteredZero\": false,\n            \"axisColorMode\": \"text\",\n            \"axisLabel\": \"\",\n            \"axisPlacement\": \"auto\",\n            \"barAlignment\": 0,\n            \"barWidthFactor\": 0.6,\n            \"drawStyle\": \"line\",\n            \"fillOpacity\": 0,\n            \"gradientMode\": \"none\",\n            \"hideFrom\": {\n              \"legend\": false,\n              \"tooltip\": false,\n              \"viz\": false\n            },\n            \"insertNulls\": false,\n            \"lineInterpolation\": \"linear\",\n            \"lineWidth\": 1,\n            \"pointSize\": 5,\n            \"scaleDistribution\": {\n              \"type\": \"linear\"\n            },\n            \"showPoints\": \"auto\",\n            \"showValues\": false,\n            \"spanNulls\": false,\n            \"stacking\": {\n              \"group\": \"A\",\n              \"mode\": \"none\"\n            },\n            \"thresholdsStyle\": {\n              \"mode\": \"off\"\n            }\n          },\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\",\n                \"value\": 0\n              },\n              {\n                \"color\": \"red\",\n                \"value\": 80\n              }\n            ]\n          },\n          \"unit\": \"s\"\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 6,\n        \"w\": 6,\n        \"x\": 18,\n        \"y\": 1\n      },\n      \"id\": 35,\n      \"interval\": \"30s\",\n      \"options\": {\n        \"legend\": {\n          \"calcs\": [],\n          \"displayMode\": \"list\",\n          \"placement\": \"bottom\",\n          \"showLegend\": true\n        },\n        \"tooltip\": {\n          \"hideZeros\": false,\n          \"mode\": \"single\",\n          \"sort\": \"none\"\n        }\n      },\n      \"pluginVersion\": \"12.2.0\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"editorMode\": \"code\",\n          \"expr\": \"histogram_quantile(0.99, rate(beacon_data_column_sidecar_gossip_verification_seconds_bucket{client_name=~\\\"$client\\\", job=~\\\"$job\\\", supernode=~\\\"$nodes\\\"}[$__rate_interval]))\",\n          \"instant\": false,\n          \"legendFormat\": \"{{job}}\",\n          \"range\": true,\n          \"refId\": \"A\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"editorMode\": \"code\",\n          \"expr\": \"histogram_quantile(0.99, rate(beacon_data_column_sidecar_gossip_verification_milliseconds_bucket{\\n    client_name=~\\\"$client\\\",\\n    job=~\\\"$job\\\",\\n    supernode=~\\\"$nodes\\\"\\n  }[$__rate_interval])) / 1000\",\n          \"hide\": false,\n          \"instant\": false,\n          \"legendFormat\": \"{{job}}\",\n          \"range\": true,\n          \"refId\": \"B\"\n        }\n      ],\n      \"title\": \"Runtime of data column sidecars gossip verification\",\n      \"type\": \"timeseries\"\n    },\n    {\n      \"datasource\": {\n        \"default\": true,\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"description\": \"Total number of engine_getBlobsV2 requests to an execution layer\",\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"palette-classic\"\n          },\n          \"custom\": {\n            \"axisBorderShow\": false,\n            \"axisCenteredZero\": false,\n            \"axisColorMode\": \"text\",\n            \"axisLabel\": \"\",\n            \"axisPlacement\": \"auto\",\n            \"barAlignment\": 0,\n            \"barWidthFactor\": 0.6,\n            \"drawStyle\": \"line\",\n            \"fillOpacity\": 20,\n            \"gradientMode\": \"opacity\",\n            \"hideFrom\": {\n              \"legend\": false,\n              \"tooltip\": false,\n              \"viz\": false\n            },\n            \"insertNulls\": false,\n            \"lineInterpolation\": \"linear\",\n            \"lineWidth\": 1,\n            \"pointSize\": 5,\n            \"scaleDistribution\": {\n              \"type\": \"linear\"\n            },\n            \"showPoints\": \"auto\",\n            \"showValues\": false,\n            \"spanNulls\": false,\n            \"stacking\": {\n              \"group\": \"A\",\n              \"mode\": \"none\"\n            },\n            \"thresholdsStyle\": {\n              \"mode\": \"off\"\n            }\n          },\n          \"decimals\": 0,\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\",\n                \"value\": 0\n              },\n              {\n                \"color\": \"red\",\n                \"value\": 80\n              }\n            ]\n          },\n          \"unit\": \"none\"\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 6,\n        \"w\": 6,\n        \"x\": 0,\n        \"y\": 7\n      },\n      \"id\": 50,\n      \"interval\": \"30s\",\n      \"options\": {\n        \"legend\": {\n          \"calcs\": [],\n          \"displayMode\": \"list\",\n          \"placement\": \"bottom\",\n          \"showLegend\": true\n        },\n        \"tooltip\": {\n          \"hideZeros\": false,\n          \"mode\": \"multi\",\n          \"sort\": \"desc\"\n        }\n      },\n      \"pluginVersion\": \"12.2.0\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"editorMode\": \"code\",\n          \"exemplar\": false,\n          \"expr\": \"sum by (job) (increase(beacon_engine_getBlobsV2_requests_total{client_name=~\\\"$client\\\", job=~\\\"$job\\\", supernode=~\\\"$nodes\\\"}[$__interval]))\",\n          \"format\": \"time_series\",\n          \"interval\": \"\",\n          \"intervalFactor\": 1,\n          \"legendFormat\": \"__auto\",\n          \"range\": true,\n          \"refId\": \"A\"\n        }\n      ],\n      \"title\": \"engine_getBlobsV2 requests\",\n      \"type\": \"timeseries\"\n    },\n    {\n      \"datasource\": {\n        \"default\": true,\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"description\": \"Total number of engine_getBlobsV2 successful responses from an execution layer\",\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"palette-classic\"\n          },\n          \"custom\": {\n            \"axisBorderShow\": false,\n            \"axisCenteredZero\": false,\n            \"axisColorMode\": \"text\",\n            \"axisLabel\": \"\",\n            \"axisPlacement\": \"auto\",\n            \"barAlignment\": 0,\n            \"barWidthFactor\": 0.6,\n            \"drawStyle\": \"line\",\n            \"fillOpacity\": 20,\n            \"gradientMode\": \"opacity\",\n            \"hideFrom\": {\n              \"legend\": false,\n              \"tooltip\": false,\n              \"viz\": false\n            },\n            \"insertNulls\": false,\n            \"lineInterpolation\": \"linear\",\n            \"lineWidth\": 1,\n            \"pointSize\": 5,\n            \"scaleDistribution\": {\n              \"type\": \"linear\"\n            },\n            \"showPoints\": \"auto\",\n            \"showValues\": false,\n            \"spanNulls\": false,\n            \"stacking\": {\n              \"group\": \"A\",\n              \"mode\": \"none\"\n            },\n            \"thresholdsStyle\": {\n              \"mode\": \"off\"\n            }\n          },\n          \"decimals\": 0,\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\",\n                \"value\": 0\n              },\n              {\n                \"color\": \"red\",\n                \"value\": 80\n              }\n            ]\n          },\n          \"unit\": \"none\"\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 6,\n        \"w\": 6,\n        \"x\": 6,\n        \"y\": 7\n      },\n      \"id\": 56,\n      \"interval\": \"30s\",\n      \"options\": {\n        \"legend\": {\n          \"calcs\": [],\n          \"displayMode\": \"list\",\n          \"placement\": \"bottom\",\n          \"showLegend\": true\n        },\n        \"tooltip\": {\n          \"hideZeros\": false,\n          \"mode\": \"multi\",\n          \"sort\": \"desc\"\n        }\n      },\n      \"pluginVersion\": \"12.2.0\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"editorMode\": \"code\",\n          \"exemplar\": false,\n          \"expr\": \"sum by (job) (increase(beacon_engine_getBlobsV2_responses_total{client_name=~\\\"$client\\\", job=~\\\"$job\\\", supernode=~\\\"$nodes\\\"}[$__interval]))\",\n          \"format\": \"time_series\",\n          \"interval\": \"\",\n          \"intervalFactor\": 1,\n          \"legendFormat\": \"__auto\",\n          \"range\": true,\n          \"refId\": \"A\"\n        }\n      ],\n      \"title\": \"engine_getBlobsV2 responses\",\n      \"type\": \"timeseries\"\n    },\n    {\n      \"datasource\": {\n        \"default\": true,\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"description\": \"Percentage of engine_getBlobsV2 requests that did not receive a successful (not null) response\",\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"palette-classic\"\n          },\n          \"custom\": {\n            \"axisBorderShow\": false,\n            \"axisCenteredZero\": false,\n            \"axisColorMode\": \"text\",\n            \"axisLabel\": \"\",\n            \"axisPlacement\": \"auto\",\n            \"barAlignment\": 0,\n            \"barWidthFactor\": 0.6,\n            \"drawStyle\": \"line\",\n            \"fillOpacity\": 20,\n            \"gradientMode\": \"opacity\",\n            \"hideFrom\": {\n              \"legend\": false,\n              \"tooltip\": false,\n              \"viz\": false\n            },\n            \"insertNulls\": false,\n            \"lineInterpolation\": \"linear\",\n            \"lineWidth\": 1,\n            \"pointSize\": 5,\n            \"scaleDistribution\": {\n              \"type\": \"linear\"\n            },\n            \"showPoints\": \"auto\",\n            \"showValues\": false,\n            \"spanNulls\": false,\n            \"stacking\": {\n              \"group\": \"A\",\n              \"mode\": \"none\"\n            },\n            \"thresholdsStyle\": {\n              \"mode\": \"off\"\n            }\n          },\n          \"decimals\": 0,\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\",\n                \"value\": 0\n              },\n              {\n                \"color\": \"red\",\n                \"value\": 80\n              }\n            ]\n          },\n          \"unit\": \"none\"\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 6,\n        \"w\": 6,\n        \"x\": 12,\n        \"y\": 7\n      },\n      \"id\": 57,\n      \"interval\": \"30s\",\n      \"options\": {\n        \"legend\": {\n          \"calcs\": [],\n          \"displayMode\": \"list\",\n          \"placement\": \"bottom\",\n          \"showLegend\": true\n        },\n        \"tooltip\": {\n          \"hideZeros\": false,\n          \"mode\": \"multi\",\n          \"sort\": \"desc\"\n        }\n      },\n      \"pluginVersion\": \"12.2.0\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"editorMode\": \"code\",\n          \"exemplar\": false,\n          \"expr\": \"(sum by(job)(increase(beacon_engine_getBlobsV2_requests_total{client_name=~\\\"$client\\\", job=~\\\"$job\\\", supernode=~\\\"$nodes\\\"}[$__interval]))\\n-\\nsum by(job)(increase(beacon_engine_getBlobsV2_responses_total{client_name=~\\\"$client\\\", job=~\\\"$job\\\", supernode=~\\\"$nodes\\\"}[$__interval]))) / sum by(job)(increase(beacon_engine_getBlobsV2_requests_total{client_name=~\\\"$client\\\", job=~\\\"$job\\\", supernode=~\\\"$nodes\\\"}[$__interval])) * 100\",\n          \"format\": \"time_series\",\n          \"interval\": \"\",\n          \"intervalFactor\": 1,\n          \"legendFormat\": \"__auto\",\n          \"range\": true,\n          \"refId\": \"A\"\n        }\n      ],\n      \"title\": \"Unsuccessful engine_getBlobsV2 request rate (%)\",\n      \"type\": \"timeseries\"\n    },\n    {\n      \"datasource\": {\n        \"default\": true,\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"description\": \" Full runtime of engine_getBlobsV2\",\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"palette-classic\"\n          },\n          \"custom\": {\n            \"axisBorderShow\": false,\n            \"axisCenteredZero\": false,\n            \"axisColorMode\": \"text\",\n            \"axisLabel\": \"\",\n            \"axisPlacement\": \"auto\",\n            \"barAlignment\": 0,\n            \"barWidthFactor\": 0.6,\n            \"drawStyle\": \"line\",\n            \"fillOpacity\": 20,\n            \"gradientMode\": \"opacity\",\n            \"hideFrom\": {\n              \"legend\": false,\n              \"tooltip\": false,\n              \"viz\": false\n            },\n            \"insertNulls\": false,\n            \"lineInterpolation\": \"linear\",\n            \"lineWidth\": 1,\n            \"pointSize\": 5,\n            \"scaleDistribution\": {\n              \"type\": \"linear\"\n            },\n            \"showPoints\": \"auto\",\n            \"showValues\": false,\n            \"spanNulls\": false,\n            \"stacking\": {\n              \"group\": \"A\",\n              \"mode\": \"none\"\n            },\n            \"thresholdsStyle\": {\n              \"mode\": \"off\"\n            }\n          },\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\",\n                \"value\": 0\n              },\n              {\n                \"color\": \"red\",\n                \"value\": 80\n              }\n            ]\n          },\n          \"unit\": \"s\"\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 6,\n        \"w\": 6,\n        \"x\": 18,\n        \"y\": 7\n      },\n      \"id\": 49,\n      \"options\": {\n        \"legend\": {\n          \"calcs\": [],\n          \"displayMode\": \"list\",\n          \"placement\": \"bottom\",\n          \"showLegend\": true\n        },\n        \"tooltip\": {\n          \"hideZeros\": false,\n          \"mode\": \"multi\",\n          \"sort\": \"desc\"\n        }\n      },\n      \"pluginVersion\": \"12.2.0\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"editorMode\": \"code\",\n          \"expr\": \"histogram_quantile(0.99, rate(beacon_engine_getBlobsV2_request_duration_seconds_bucket{client_name=~\\\"$client\\\", job=~\\\"$job\\\", supernode=~\\\"$nodes\\\"}[$__rate_interval]))\",\n          \"legendFormat\": \"{{job}}\",\n          \"range\": true,\n          \"refId\": \"A\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"editorMode\": \"code\",\n          \"expr\": \"histogram_quantile(0.99, rate(beacon_engine_getBlobsV2_request_duration_milliseconds_bucket{\\n    client_name=~\\\"$client\\\",\\n    job=~\\\"$job\\\",\\n    supernode=~\\\"$nodes\\\"\\n  }[$__rate_interval])) / 1000\",\n          \"hide\": false,\n          \"instant\": false,\n          \"legendFormat\": \"__auto\",\n          \"range\": true,\n          \"refId\": \"B\"\n        }\n      ],\n      \"title\": \"Runtime of engine_getBlobsV2\",\n      \"type\": \"timeseries\"\n    },\n    {\n      \"datasource\": {\n        \"default\": true,\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"palette-classic\"\n          },\n          \"custom\": {\n            \"axisBorderShow\": false,\n            \"axisCenteredZero\": false,\n            \"axisColorMode\": \"text\",\n            \"axisLabel\": \"\",\n            \"axisPlacement\": \"auto\",\n            \"barAlignment\": 0,\n            \"barWidthFactor\": 0.6,\n            \"drawStyle\": \"line\",\n            \"fillOpacity\": 20,\n            \"gradientMode\": \"opacity\",\n            \"hideFrom\": {\n              \"legend\": false,\n              \"tooltip\": false,\n              \"viz\": false\n            },\n            \"insertNulls\": false,\n            \"lineInterpolation\": \"linear\",\n            \"lineWidth\": 1,\n            \"pointSize\": 5,\n            \"scaleDistribution\": {\n              \"type\": \"linear\"\n            },\n            \"showPoints\": \"auto\",\n            \"showValues\": false,\n            \"spanNulls\": false,\n            \"stacking\": {\n              \"group\": \"A\",\n              \"mode\": \"none\"\n            },\n            \"thresholdsStyle\": {\n              \"mode\": \"off\"\n            }\n          },\n          \"decimals\": 0,\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\",\n                \"value\": 0\n              },\n              {\n                \"color\": \"red\",\n                \"value\": 80\n              }\n            ]\n          }\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 6,\n        \"w\": 12,\n        \"x\": 0,\n        \"y\": 13\n      },\n      \"id\": 14,\n      \"interval\": \"30s\",\n      \"options\": {\n        \"legend\": {\n          \"calcs\": [],\n          \"displayMode\": \"list\",\n          \"placement\": \"bottom\",\n          \"showLegend\": true\n        },\n        \"tooltip\": {\n          \"hideZeros\": false,\n          \"mode\": \"multi\",\n          \"sort\": \"desc\"\n        }\n      },\n      \"pluginVersion\": \"12.2.0\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"editorMode\": \"code\",\n          \"expr\": \"sum by (job) (increase(beacon_data_availability_reconstructed_columns_total{client_name=~\\\"$client\\\", job=~\\\"$job\\\", supernode=~\\\"$nodes\\\"}[$__interval]))\",\n          \"format\": \"time_series\",\n          \"interval\": \"\",\n          \"intervalFactor\": 1,\n          \"legendFormat\": \"{{job}}\",\n          \"range\": true,\n          \"refId\": \"A\"\n        }\n      ],\n      \"title\": \"Total count of reconstructed columns\",\n      \"type\": \"timeseries\"\n    },\n    {\n      \"datasource\": {\n        \"default\": true,\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"palette-classic\"\n          },\n          \"custom\": {\n            \"axisBorderShow\": false,\n            \"axisCenteredZero\": false,\n            \"axisColorMode\": \"text\",\n            \"axisLabel\": \"\",\n            \"axisPlacement\": \"auto\",\n            \"barAlignment\": 0,\n            \"barWidthFactor\": 0.6,\n            \"drawStyle\": \"line\",\n            \"fillOpacity\": 20,\n            \"gradientMode\": \"opacity\",\n            \"hideFrom\": {\n              \"legend\": false,\n              \"tooltip\": false,\n              \"viz\": false\n            },\n            \"insertNulls\": false,\n            \"lineInterpolation\": \"linear\",\n            \"lineWidth\": 1,\n            \"pointSize\": 5,\n            \"scaleDistribution\": {\n              \"type\": \"linear\"\n            },\n            \"showPoints\": \"auto\",\n            \"showValues\": false,\n            \"spanNulls\": false,\n            \"stacking\": {\n              \"group\": \"A\",\n              \"mode\": \"none\"\n            },\n            \"thresholdsStyle\": {\n              \"mode\": \"off\"\n            }\n          },\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\",\n                \"value\": 0\n              },\n              {\n                \"color\": \"red\",\n                \"value\": 80\n              }\n            ]\n          },\n          \"unit\": \"s\"\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 6,\n        \"w\": 12,\n        \"x\": 12,\n        \"y\": 13\n      },\n      \"id\": 25,\n      \"interval\": \"30s\",\n      \"options\": {\n        \"legend\": {\n          \"calcs\": [],\n          \"displayMode\": \"list\",\n          \"placement\": \"bottom\",\n          \"showLegend\": true\n        },\n        \"tooltip\": {\n          \"hideZeros\": false,\n          \"mode\": \"multi\",\n          \"sort\": \"desc\"\n        }\n      },\n      \"pluginVersion\": \"12.2.0\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"editorMode\": \"code\",\n          \"expr\": \"histogram_quantile(0.99, rate(beacon_data_availability_reconstruction_time_seconds_bucket{client_name=~\\\"$client\\\", job=~\\\"$job\\\", supernode=~\\\"$nodes\\\"}[$__rate_interval]))\",\n          \"legendFormat\": \"{{job}}\",\n          \"range\": true,\n          \"refId\": \"A\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"editorMode\": \"code\",\n          \"expr\": \"histogram_quantile(0.99, rate(beacon_data_availability_reconstruction_time_milliseconds_bucket{\\n    client_name=~\\\"$client\\\",\\n    job=~\\\"$job\\\",\\n    supernode=~\\\"$nodes\\\"\\n  }[$__rate_interval])) / 1000\",\n          \"hide\": false,\n          \"instant\": false,\n          \"legendFormat\": \"{{job}}\",\n          \"range\": true,\n          \"refId\": \"B\"\n        }\n      ],\n      \"title\": \"Time taken to reconstruct columns\",\n      \"type\": \"timeseries\"\n    },\n    {\n      \"datasource\": {\n        \"default\": true,\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"description\": \"Time taken to compute data column sidecar, including cells and inclusion proof\",\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"palette-classic\"\n          },\n          \"custom\": {\n            \"axisBorderShow\": false,\n            \"axisCenteredZero\": false,\n            \"axisColorMode\": \"text\",\n            \"axisLabel\": \"\",\n            \"axisPlacement\": \"auto\",\n            \"barAlignment\": 0,\n            \"barWidthFactor\": 0.6,\n            \"drawStyle\": \"line\",\n            \"fillOpacity\": 20,\n            \"gradientMode\": \"opacity\",\n            \"hideFrom\": {\n              \"legend\": false,\n              \"tooltip\": false,\n              \"viz\": false\n            },\n            \"insertNulls\": false,\n            \"lineInterpolation\": \"linear\",\n            \"lineWidth\": 1,\n            \"pointSize\": 5,\n            \"scaleDistribution\": {\n              \"type\": \"linear\"\n            },\n            \"showPoints\": \"auto\",\n            \"showValues\": false,\n            \"spanNulls\": false,\n            \"stacking\": {\n              \"group\": \"A\",\n              \"mode\": \"none\"\n            },\n            \"thresholdsStyle\": {\n              \"mode\": \"off\"\n            }\n          },\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\",\n                \"value\": 0\n              },\n              {\n                \"color\": \"red\",\n                \"value\": 80\n              }\n            ]\n          },\n          \"unit\": \"s\"\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 6,\n        \"w\": 8,\n        \"x\": 0,\n        \"y\": 19\n      },\n      \"id\": 21,\n      \"options\": {\n        \"legend\": {\n          \"calcs\": [],\n          \"displayMode\": \"list\",\n          \"placement\": \"bottom\",\n          \"showLegend\": true\n        },\n        \"tooltip\": {\n          \"hideZeros\": false,\n          \"mode\": \"multi\",\n          \"sort\": \"desc\"\n        }\n      },\n      \"pluginVersion\": \"12.2.0\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"editorMode\": \"code\",\n          \"expr\": \"histogram_quantile(0.99, rate(beacon_data_column_sidecar_computation_seconds_bucket{client_name=~\\\"$client\\\", job=~\\\"$job\\\", supernode=~\\\"$nodes\\\"}[$__rate_interval]))\",\n          \"legendFormat\": \"{{job}}\",\n          \"range\": true,\n          \"refId\": \"A\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"editorMode\": \"code\",\n          \"expr\": \"histogram_quantile(0.99, rate(beacon_data_column_sidecar_computation_milliseconds_bucket{\\n    client_name=~\\\"$client\\\",\\n    job=~\\\"$job\\\",\\n    supernode=~\\\"$nodes\\\"\\n  }[$__rate_interval])) / 1000\",\n          \"hide\": false,\n          \"instant\": false,\n          \"legendFormat\": \"{{job}}\",\n          \"range\": true,\n          \"refId\": \"B\"\n        }\n      ],\n      \"title\": \"Time taken to compute data column sidecar\",\n      \"type\": \"timeseries\"\n    },\n    {\n      \"datasource\": {\n        \"default\": true,\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"palette-classic\"\n          },\n          \"custom\": {\n            \"axisBorderShow\": false,\n            \"axisCenteredZero\": false,\n            \"axisColorMode\": \"text\",\n            \"axisLabel\": \"\",\n            \"axisPlacement\": \"auto\",\n            \"barAlignment\": 0,\n            \"barWidthFactor\": 0.6,\n            \"drawStyle\": \"line\",\n            \"fillOpacity\": 20,\n            \"gradientMode\": \"opacity\",\n            \"hideFrom\": {\n              \"legend\": false,\n              \"tooltip\": false,\n              \"viz\": false\n            },\n            \"insertNulls\": false,\n            \"lineInterpolation\": \"linear\",\n            \"lineWidth\": 1,\n            \"pointSize\": 5,\n            \"scaleDistribution\": {\n              \"type\": \"linear\"\n            },\n            \"showPoints\": \"auto\",\n            \"showValues\": false,\n            \"spanNulls\": false,\n            \"stacking\": {\n              \"group\": \"A\",\n              \"mode\": \"none\"\n            },\n            \"thresholdsStyle\": {\n              \"mode\": \"off\"\n            }\n          },\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\",\n                \"value\": 0\n              },\n              {\n                \"color\": \"red\",\n                \"value\": 80\n              }\n            ]\n          },\n          \"unit\": \"s\"\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 6,\n        \"w\": 8,\n        \"x\": 8,\n        \"y\": 19\n      },\n      \"id\": 22,\n      \"options\": {\n        \"legend\": {\n          \"calcs\": [],\n          \"displayMode\": \"list\",\n          \"placement\": \"bottom\",\n          \"showLegend\": true\n        },\n        \"tooltip\": {\n          \"hideZeros\": false,\n          \"mode\": \"multi\",\n          \"sort\": \"desc\"\n        }\n      },\n      \"pluginVersion\": \"12.2.0\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"editorMode\": \"code\",\n          \"expr\": \"histogram_quantile(0.99, rate(beacon_data_column_sidecar_inclusion_proof_verification_seconds_bucket{client_name=~\\\"$client\\\", job=~\\\"$job\\\", supernode=~\\\"$nodes\\\"}[$__rate_interval]))\",\n          \"legendFormat\": \"{{job}}\",\n          \"range\": true,\n          \"refId\": \"A\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"editorMode\": \"code\",\n          \"expr\": \"histogram_quantile(0.99, rate(beacon_data_column_sidecar_inclusion_proof_verification_milliseconds_bucket{\\n    client_name=~\\\"$client\\\",\\n    job=~\\\"$job\\\",\\n    supernode=~\\\"$nodes\\\"\\n  }[$__rate_interval])) / 1000\",\n          \"hide\": false,\n          \"instant\": false,\n          \"interval\": \"\",\n          \"legendFormat\": \"{{job}}\",\n          \"range\": true,\n          \"refId\": \"B\"\n        }\n      ],\n      \"title\": \"Time taken to verify data column sidecar inclusion proof\",\n      \"type\": \"timeseries\"\n    },\n    {\n      \"datasource\": {\n        \"default\": true,\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"palette-classic\"\n          },\n          \"custom\": {\n            \"axisBorderShow\": false,\n            \"axisCenteredZero\": false,\n            \"axisColorMode\": \"text\",\n            \"axisLabel\": \"\",\n            \"axisPlacement\": \"auto\",\n            \"barAlignment\": 0,\n            \"barWidthFactor\": 0.6,\n            \"drawStyle\": \"line\",\n            \"fillOpacity\": 20,\n            \"gradientMode\": \"opacity\",\n            \"hideFrom\": {\n              \"legend\": false,\n              \"tooltip\": false,\n              \"viz\": false\n            },\n            \"insertNulls\": false,\n            \"lineInterpolation\": \"linear\",\n            \"lineWidth\": 1,\n            \"pointSize\": 5,\n            \"scaleDistribution\": {\n              \"type\": \"linear\"\n            },\n            \"showPoints\": \"auto\",\n            \"showValues\": false,\n            \"spanNulls\": false,\n            \"stacking\": {\n              \"group\": \"A\",\n              \"mode\": \"none\"\n            },\n            \"thresholdsStyle\": {\n              \"mode\": \"off\"\n            }\n          },\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\",\n                \"value\": 0\n              },\n              {\n                \"color\": \"red\",\n                \"value\": 80\n              }\n            ]\n          },\n          \"unit\": \"s\"\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 6,\n        \"w\": 8,\n        \"x\": 16,\n        \"y\": 19\n      },\n      \"id\": 24,\n      \"options\": {\n        \"legend\": {\n          \"calcs\": [],\n          \"displayMode\": \"list\",\n          \"placement\": \"bottom\",\n          \"showLegend\": true\n        },\n        \"tooltip\": {\n          \"hideZeros\": false,\n          \"mode\": \"multi\",\n          \"sort\": \"desc\"\n        }\n      },\n      \"pluginVersion\": \"12.2.0\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"editorMode\": \"code\",\n          \"expr\": \"histogram_quantile(0.99, rate(beacon_kzg_verification_data_column_batch_seconds_bucket{client_name=~\\\"$client\\\", job=~\\\"$job\\\", supernode=~\\\"$nodes\\\"}[$__rate_interval]))\",\n          \"legendFormat\": \"{{job}}\",\n          \"range\": true,\n          \"refId\": \"A\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"editorMode\": \"code\",\n          \"expr\": \" histogram_quantile(0.99, rate(beacon_kzg_verification_data_column_batch_milliseconds_bucket{\\n    client_name=~\\\"$client\\\",\\n    job=~\\\"$job\\\",\\n    supernode=~\\\"$nodes\\\"\\n  }[$__rate_interval])) / 1000\",\n          \"hide\": false,\n          \"instant\": false,\n          \"interval\": \"\",\n          \"legendFormat\": \"{{job}}\",\n          \"range\": true,\n          \"refId\": \"B\"\n        }\n      ],\n      \"title\": \"Runtime of batched data column kzg verification\",\n      \"type\": \"timeseries\"\n    },\n    {\n      \"datasource\": {\n        \"default\": true,\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"description\": \"Total number of custody groups for super nodes\",\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"fixedColor\": \"green\",\n            \"mode\": \"thresholds\"\n          },\n          \"custom\": {\n            \"axisBorderShow\": false,\n            \"axisCenteredZero\": false,\n            \"axisColorMode\": \"text\",\n            \"axisLabel\": \"\",\n            \"axisPlacement\": \"auto\",\n            \"barAlignment\": 0,\n            \"barWidthFactor\": 0.6,\n            \"drawStyle\": \"line\",\n            \"fillOpacity\": 0,\n            \"gradientMode\": \"none\",\n            \"hideFrom\": {\n              \"legend\": false,\n              \"tooltip\": false,\n              \"viz\": false\n            },\n            \"insertNulls\": false,\n            \"lineInterpolation\": \"linear\",\n            \"lineWidth\": 1,\n            \"pointSize\": 5,\n            \"scaleDistribution\": {\n              \"type\": \"linear\"\n            },\n            \"showPoints\": \"auto\",\n            \"showValues\": false,\n            \"spanNulls\": false,\n            \"stacking\": {\n              \"group\": \"A\",\n              \"mode\": \"none\"\n            },\n            \"thresholdsStyle\": {\n              \"mode\": \"off\"\n            }\n          },\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"red\",\n                \"value\": 0\n              },\n              {\n                \"color\": \"red\",\n                \"value\": 127\n              },\n              {\n                \"color\": \"green\",\n                \"value\": 128\n              }\n            ]\n          }\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 6,\n        \"w\": 6,\n        \"x\": 0,\n        \"y\": 25\n      },\n      \"id\": 36,\n      \"options\": {\n        \"legend\": {\n          \"calcs\": [],\n          \"displayMode\": \"list\",\n          \"placement\": \"bottom\",\n          \"showLegend\": true\n        },\n        \"tooltip\": {\n          \"hideZeros\": false,\n          \"mode\": \"multi\",\n          \"sort\": \"none\"\n        }\n      },\n      \"pluginVersion\": \"12.2.0\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"editorMode\": \"code\",\n          \"expr\": \"beacon_custody_groups{client_name=~\\\"$client\\\", job=~\\\"$job\\\", supernode=\\\"True\\\"}\",\n          \"interval\": \"\",\n          \"legendFormat\": \"{{job}}\",\n          \"range\": true,\n          \"refId\": \"A\"\n        }\n      ],\n      \"title\": \"Custody groups (super nodes)\",\n      \"type\": \"timeseries\"\n    },\n    {\n      \"datasource\": {\n        \"default\": true,\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"description\": \"Total number of custody groups for full nodes\",\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"fixedColor\": \"green\",\n            \"mode\": \"thresholds\"\n          },\n          \"custom\": {\n            \"axisBorderShow\": false,\n            \"axisCenteredZero\": false,\n            \"axisColorMode\": \"text\",\n            \"axisLabel\": \"\",\n            \"axisPlacement\": \"auto\",\n            \"barAlignment\": 0,\n            \"barWidthFactor\": 0.6,\n            \"drawStyle\": \"line\",\n            \"fillOpacity\": 0,\n            \"gradientMode\": \"none\",\n            \"hideFrom\": {\n              \"legend\": false,\n              \"tooltip\": false,\n              \"viz\": false\n            },\n            \"insertNulls\": false,\n            \"lineInterpolation\": \"linear\",\n            \"lineWidth\": 1,\n            \"pointSize\": 5,\n            \"scaleDistribution\": {\n              \"type\": \"linear\"\n            },\n            \"showPoints\": \"auto\",\n            \"showValues\": false,\n            \"spanNulls\": false,\n            \"stacking\": {\n              \"group\": \"A\",\n              \"mode\": \"none\"\n            },\n            \"thresholdsStyle\": {\n              \"mode\": \"off\"\n            }\n          },\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\",\n                \"value\": 0\n              },\n              {\n                \"color\": \"red\",\n                \"value\": 3\n              },\n              {\n                \"color\": \"green\",\n                \"value\": 4\n              }\n            ]\n          }\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 6,\n        \"w\": 6,\n        \"x\": 6,\n        \"y\": 25\n      },\n      \"id\": 53,\n      \"options\": {\n        \"legend\": {\n          \"calcs\": [],\n          \"displayMode\": \"list\",\n          \"placement\": \"bottom\",\n          \"showLegend\": true\n        },\n        \"tooltip\": {\n          \"hideZeros\": false,\n          \"mode\": \"multi\",\n          \"sort\": \"none\"\n        }\n      },\n      \"pluginVersion\": \"12.2.0\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"editorMode\": \"code\",\n          \"expr\": \"beacon_custody_groups{client_name=~\\\"$client\\\", job=~\\\"$job\\\", supernode=\\\"False\\\"}\",\n          \"interval\": \"\",\n          \"legendFormat\": \"{{job}}\",\n          \"range\": true,\n          \"refId\": \"A\"\n        }\n      ],\n      \"title\": \"Custody groups (full nodes)\",\n      \"type\": \"timeseries\"\n    },\n    {\n      \"datasource\": {\n        \"default\": true,\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"description\": \"Total number of backfilled custody groups for super nodes\",\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"fixedColor\": \"green\",\n            \"mode\": \"thresholds\"\n          },\n          \"custom\": {\n            \"axisBorderShow\": false,\n            \"axisCenteredZero\": false,\n            \"axisColorMode\": \"text\",\n            \"axisLabel\": \"\",\n            \"axisPlacement\": \"auto\",\n            \"barAlignment\": 0,\n            \"barWidthFactor\": 0.6,\n            \"drawStyle\": \"line\",\n            \"fillOpacity\": 0,\n            \"gradientMode\": \"none\",\n            \"hideFrom\": {\n              \"legend\": false,\n              \"tooltip\": false,\n              \"viz\": false\n            },\n            \"insertNulls\": false,\n            \"lineInterpolation\": \"linear\",\n            \"lineWidth\": 1,\n            \"pointSize\": 5,\n            \"scaleDistribution\": {\n              \"type\": \"linear\"\n            },\n            \"showPoints\": \"auto\",\n            \"showValues\": false,\n            \"spanNulls\": false,\n            \"stacking\": {\n              \"group\": \"A\",\n              \"mode\": \"none\"\n            },\n            \"thresholdsStyle\": {\n              \"mode\": \"off\"\n            }\n          },\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\",\n                \"value\": 0\n              },\n              {\n                \"color\": \"red\",\n                \"value\": 127\n              },\n              {\n                \"color\": \"green\",\n                \"value\": 128\n              }\n            ]\n          }\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 6,\n        \"w\": 6,\n        \"x\": 12,\n        \"y\": 25\n      },\n      \"id\": 54,\n      \"options\": {\n        \"legend\": {\n          \"calcs\": [],\n          \"displayMode\": \"list\",\n          \"placement\": \"bottom\",\n          \"showLegend\": true\n        },\n        \"tooltip\": {\n          \"hideZeros\": false,\n          \"mode\": \"multi\",\n          \"sort\": \"none\"\n        }\n      },\n      \"pluginVersion\": \"12.2.0\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"editorMode\": \"code\",\n          \"expr\": \"beacon_custody_groups_backfilled{client_name=~\\\"$client\\\", job=~\\\"$job\\\", supernode=\\\"True\\\"}\",\n          \"interval\": \"\",\n          \"legendFormat\": \"{{job}}\",\n          \"range\": true,\n          \"refId\": \"A\"\n        }\n      ],\n      \"title\": \"Backfilled custody groups (super nodes)\",\n      \"type\": \"timeseries\"\n    },\n    {\n      \"datasource\": {\n        \"default\": true,\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"description\": \"Total number of backfilled custody groups for full nodes\",\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"fixedColor\": \"green\",\n            \"mode\": \"thresholds\"\n          },\n          \"custom\": {\n            \"axisBorderShow\": false,\n            \"axisCenteredZero\": false,\n            \"axisColorMode\": \"text\",\n            \"axisLabel\": \"\",\n            \"axisPlacement\": \"auto\",\n            \"barAlignment\": 0,\n            \"barWidthFactor\": 0.6,\n            \"drawStyle\": \"line\",\n            \"fillOpacity\": 0,\n            \"gradientMode\": \"none\",\n            \"hideFrom\": {\n              \"legend\": false,\n              \"tooltip\": false,\n              \"viz\": false\n            },\n            \"insertNulls\": false,\n            \"lineInterpolation\": \"linear\",\n            \"lineWidth\": 1,\n            \"pointSize\": 5,\n            \"scaleDistribution\": {\n              \"type\": \"linear\"\n            },\n            \"showPoints\": \"auto\",\n            \"showValues\": false,\n            \"spanNulls\": false,\n            \"stacking\": {\n              \"group\": \"A\",\n              \"mode\": \"none\"\n            },\n            \"thresholdsStyle\": {\n              \"mode\": \"off\"\n            }\n          },\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\",\n                \"value\": 0\n              },\n              {\n                \"color\": \"red\",\n                \"value\": 3\n              },\n              {\n                \"color\": \"green\",\n                \"value\": 4\n              }\n            ]\n          }\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 6,\n        \"w\": 6,\n        \"x\": 18,\n        \"y\": 25\n      },\n      \"id\": 55,\n      \"options\": {\n        \"legend\": {\n          \"calcs\": [],\n          \"displayMode\": \"list\",\n          \"placement\": \"bottom\",\n          \"showLegend\": true\n        },\n        \"tooltip\": {\n          \"hideZeros\": false,\n          \"mode\": \"multi\",\n          \"sort\": \"none\"\n        }\n      },\n      \"pluginVersion\": \"12.2.0\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"editorMode\": \"code\",\n          \"expr\": \"beacon_custody_groups_backfilled{client_name=~\\\"$client\\\", job=~\\\"$job\\\", supernode=\\\"False\\\"}\",\n          \"interval\": \"\",\n          \"legendFormat\": \"{{job}}\",\n          \"range\": true,\n          \"refId\": \"A\"\n        }\n      ],\n      \"title\": \"Backfilled custody groups (full nodes)\",\n      \"type\": \"timeseries\"\n    },\n    {\n      \"collapsed\": false,\n      \"gridPos\": {\n        \"h\": 1,\n        \"w\": 24,\n        \"x\": 0,\n        \"y\": 31\n      },\n      \"id\": 26,\n      \"panels\": [],\n      \"title\": \"Gossipsub\",\n      \"type\": \"row\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"palette-classic\"\n          },\n          \"custom\": {\n            \"axisBorderShow\": false,\n            \"axisCenteredZero\": false,\n            \"axisColorMode\": \"text\",\n            \"axisLabel\": \"\",\n            \"axisPlacement\": \"auto\",\n            \"barAlignment\": 0,\n            \"barWidthFactor\": 0.6,\n            \"drawStyle\": \"line\",\n            \"fillOpacity\": 0,\n            \"gradientMode\": \"none\",\n            \"hideFrom\": {\n              \"legend\": false,\n              \"tooltip\": false,\n              \"viz\": false\n            },\n            \"insertNulls\": false,\n            \"lineInterpolation\": \"linear\",\n            \"lineWidth\": 1,\n            \"pointSize\": 5,\n            \"scaleDistribution\": {\n              \"type\": \"linear\"\n            },\n            \"showPoints\": \"auto\",\n            \"showValues\": false,\n            \"spanNulls\": false,\n            \"stacking\": {\n              \"group\": \"A\",\n              \"mode\": \"none\"\n            },\n            \"thresholdsStyle\": {\n              \"mode\": \"off\"\n            }\n          },\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\",\n                \"value\": 0\n              },\n              {\n                \"color\": \"red\",\n                \"value\": 80\n              }\n            ]\n          }\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 7,\n        \"w\": 8,\n        \"x\": 0,\n        \"y\": 32\n      },\n      \"id\": 27,\n      \"interval\": \"30s\",\n      \"options\": {\n        \"legend\": {\n          \"calcs\": [],\n          \"displayMode\": \"list\",\n          \"placement\": \"bottom\",\n          \"showLegend\": true\n        },\n        \"tooltip\": {\n          \"hideZeros\": false,\n          \"mode\": \"single\",\n          \"sort\": \"none\"\n        }\n      },\n      \"pluginVersion\": \"12.2.0\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"editorMode\": \"code\",\n          \"expr\": \"sum by(job) (increase(gossipsub_topic_msg_sent_counts_total{client_name=~\\\"$client\\\", job=~\\\"$job\\\", supernode=~\\\"$nodes\\\", hash=~\\\".*/data_column_sidecar.*\\\"}[$__interval]))\",\n          \"instant\": false,\n          \"legendFormat\": \"__auto\",\n          \"range\": true,\n          \"refId\": \"A\"\n        }\n      ],\n      \"title\": \"Number of gossip messages sent to each topic\",\n      \"type\": \"timeseries\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"description\": \"\",\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"palette-classic\"\n          },\n          \"custom\": {\n            \"axisBorderShow\": false,\n            \"axisCenteredZero\": false,\n            \"axisColorMode\": \"text\",\n            \"axisLabel\": \"\",\n            \"axisPlacement\": \"auto\",\n            \"barAlignment\": 0,\n            \"barWidthFactor\": 0.6,\n            \"drawStyle\": \"line\",\n            \"fillOpacity\": 0,\n            \"gradientMode\": \"none\",\n            \"hideFrom\": {\n              \"legend\": false,\n              \"tooltip\": false,\n              \"viz\": false\n            },\n            \"insertNulls\": false,\n            \"lineInterpolation\": \"linear\",\n            \"lineWidth\": 1,\n            \"pointSize\": 5,\n            \"scaleDistribution\": {\n              \"type\": \"linear\"\n            },\n            \"showPoints\": \"auto\",\n            \"showValues\": false,\n            \"spanNulls\": false,\n            \"stacking\": {\n              \"group\": \"A\",\n              \"mode\": \"none\"\n            },\n            \"thresholdsStyle\": {\n              \"mode\": \"off\"\n            }\n          },\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\",\n                \"value\": 0\n              },\n              {\n                \"color\": \"red\",\n                \"value\": 80\n              }\n            ]\n          }\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 7,\n        \"w\": 8,\n        \"x\": 8,\n        \"y\": 32\n      },\n      \"id\": 28,\n      \"interval\": \"30s\",\n      \"options\": {\n        \"legend\": {\n          \"calcs\": [],\n          \"displayMode\": \"list\",\n          \"placement\": \"bottom\",\n          \"showLegend\": true\n        },\n        \"tooltip\": {\n          \"hideZeros\": false,\n          \"mode\": \"single\",\n          \"sort\": \"none\"\n        }\n      },\n      \"pluginVersion\": \"12.2.0\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"editorMode\": \"code\",\n          \"expr\": \"sum by(job) (increase(gossipsub_topic_msg_recv_counts_unfiltered_total{client_name=~\\\"$client\\\", job=~\\\"$job\\\", supernode=~\\\"$nodes\\\", hash=~\\\".*/data_column_sidecar.*\\\"}[$__interval]))\",\n          \"instant\": false,\n          \"legendFormat\": \"__auto\",\n          \"range\": true,\n          \"refId\": \"A\"\n        }\n      ],\n      \"title\": \"Number of gossip messages received from each topic (including duplicates)\",\n      \"type\": \"timeseries\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"description\": \"\",\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"palette-classic\"\n          },\n          \"custom\": {\n            \"axisBorderShow\": false,\n            \"axisCenteredZero\": false,\n            \"axisColorMode\": \"text\",\n            \"axisLabel\": \"\",\n            \"axisPlacement\": \"auto\",\n            \"barAlignment\": 0,\n            \"barWidthFactor\": 0.6,\n            \"drawStyle\": \"line\",\n            \"fillOpacity\": 0,\n            \"gradientMode\": \"none\",\n            \"hideFrom\": {\n              \"legend\": false,\n              \"tooltip\": false,\n              \"viz\": false\n            },\n            \"insertNulls\": false,\n            \"lineInterpolation\": \"linear\",\n            \"lineWidth\": 1,\n            \"pointSize\": 5,\n            \"scaleDistribution\": {\n              \"type\": \"linear\"\n            },\n            \"showPoints\": \"auto\",\n            \"showValues\": false,\n            \"spanNulls\": false,\n            \"stacking\": {\n              \"group\": \"A\",\n              \"mode\": \"none\"\n            },\n            \"thresholdsStyle\": {\n              \"mode\": \"off\"\n            }\n          },\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\",\n                \"value\": 0\n              },\n              {\n                \"color\": \"red\",\n                \"value\": 80\n              }\n            ]\n          }\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 7,\n        \"w\": 8,\n        \"x\": 16,\n        \"y\": 32\n      },\n      \"id\": 32,\n      \"interval\": \"30s\",\n      \"options\": {\n        \"legend\": {\n          \"calcs\": [],\n          \"displayMode\": \"list\",\n          \"placement\": \"bottom\",\n          \"showLegend\": true\n        },\n        \"tooltip\": {\n          \"hideZeros\": false,\n          \"mode\": \"single\",\n          \"sort\": \"none\"\n        }\n      },\n      \"pluginVersion\": \"12.2.0\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"editorMode\": \"code\",\n          \"expr\": \"sum by(job) (increase(gossipsub_topic_msg_recv_counts_total{client_name=~\\\"$client\\\", job=~\\\"$job\\\", supernode=~\\\"$nodes\\\", hash=~\\\".*/data_column_sidecar.*\\\"}[$__interval]))\",\n          \"instant\": false,\n          \"legendFormat\": \"__auto\",\n          \"range\": true,\n          \"refId\": \"A\"\n        }\n      ],\n      \"title\": \"Number of gossip messages received from each topic (deduplicated)\",\n      \"type\": \"timeseries\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"palette-classic\"\n          },\n          \"custom\": {\n            \"axisBorderShow\": false,\n            \"axisCenteredZero\": false,\n            \"axisColorMode\": \"text\",\n            \"axisLabel\": \"\",\n            \"axisPlacement\": \"auto\",\n            \"barAlignment\": 0,\n            \"barWidthFactor\": 0.6,\n            \"drawStyle\": \"line\",\n            \"fillOpacity\": 0,\n            \"gradientMode\": \"none\",\n            \"hideFrom\": {\n              \"legend\": false,\n              \"tooltip\": false,\n              \"viz\": false\n            },\n            \"insertNulls\": false,\n            \"lineInterpolation\": \"linear\",\n            \"lineWidth\": 1,\n            \"pointSize\": 5,\n            \"scaleDistribution\": {\n              \"type\": \"linear\"\n            },\n            \"showPoints\": \"auto\",\n            \"showValues\": false,\n            \"spanNulls\": false,\n            \"stacking\": {\n              \"group\": \"A\",\n              \"mode\": \"none\"\n            },\n            \"thresholdsStyle\": {\n              \"mode\": \"off\"\n            }\n          },\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\",\n                \"value\": 0\n              },\n              {\n                \"color\": \"red\",\n                \"value\": 80\n              }\n            ]\n          },\n          \"unit\": \"decbytes\"\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 7,\n        \"w\": 8,\n        \"x\": 0,\n        \"y\": 39\n      },\n      \"id\": 30,\n      \"interval\": \"30s\",\n      \"options\": {\n        \"legend\": {\n          \"calcs\": [],\n          \"displayMode\": \"list\",\n          \"placement\": \"bottom\",\n          \"showLegend\": true\n        },\n        \"tooltip\": {\n          \"hideZeros\": false,\n          \"mode\": \"single\",\n          \"sort\": \"none\"\n        }\n      },\n      \"pluginVersion\": \"12.2.0\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"editorMode\": \"code\",\n          \"expr\": \"sum by(job) (increase(gossipsub_topic_msg_sent_bytes_total{client_name=~\\\"$client\\\", job=~\\\"$job\\\", supernode=~\\\"$nodes\\\", hash=~\\\".*/data_column_sidecar.*\\\"}[$__interval]))\",\n          \"instant\": false,\n          \"legendFormat\": \"__auto\",\n          \"range\": true,\n          \"refId\": \"A\"\n        }\n      ],\n      \"title\": \"Number of bytes sent to each topic\",\n      \"type\": \"timeseries\"\n    },\n    {\n      \"datasource\": {\n        \"default\": true,\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"palette-classic\"\n          },\n          \"custom\": {\n            \"axisBorderShow\": false,\n            \"axisCenteredZero\": false,\n            \"axisColorMode\": \"text\",\n            \"axisLabel\": \"\",\n            \"axisPlacement\": \"auto\",\n            \"barAlignment\": 0,\n            \"barWidthFactor\": 0.6,\n            \"drawStyle\": \"line\",\n            \"fillOpacity\": 0,\n            \"gradientMode\": \"none\",\n            \"hideFrom\": {\n              \"legend\": false,\n              \"tooltip\": false,\n              \"viz\": false\n            },\n            \"insertNulls\": false,\n            \"lineInterpolation\": \"linear\",\n            \"lineWidth\": 1,\n            \"pointSize\": 5,\n            \"scaleDistribution\": {\n              \"type\": \"linear\"\n            },\n            \"showPoints\": \"auto\",\n            \"showValues\": false,\n            \"spanNulls\": false,\n            \"stacking\": {\n              \"group\": \"A\",\n              \"mode\": \"none\"\n            },\n            \"thresholdsStyle\": {\n              \"mode\": \"off\"\n            }\n          },\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\",\n                \"value\": 0\n              },\n              {\n                \"color\": \"red\",\n                \"value\": 80\n              }\n            ]\n          },\n          \"unit\": \"decbytes\"\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 7,\n        \"w\": 8,\n        \"x\": 8,\n        \"y\": 39\n      },\n      \"id\": 39,\n      \"interval\": \"30s\",\n      \"options\": {\n        \"legend\": {\n          \"calcs\": [],\n          \"displayMode\": \"list\",\n          \"placement\": \"bottom\",\n          \"showLegend\": true\n        },\n        \"tooltip\": {\n          \"hideZeros\": false,\n          \"mode\": \"single\",\n          \"sort\": \"none\"\n        }\n      },\n      \"pluginVersion\": \"12.2.0\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"editorMode\": \"code\",\n          \"expr\": \"sum by(job) (increase(gossipsub_topic_msg_recv_bytes_unfiltered_total{client_name=~\\\"$client\\\", job=~\\\"$job\\\", supernode=~\\\"$nodes\\\", hash=~\\\".*/data_column_sidecar.*\\\"}[$__interval]))\",\n          \"instant\": false,\n          \"legendFormat\": \"__auto\",\n          \"range\": true,\n          \"refId\": \"A\"\n        }\n      ],\n      \"title\": \"Number of bytes received from each topic (including duplicates)\",\n      \"type\": \"timeseries\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"description\": \"\",\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"palette-classic\"\n          },\n          \"custom\": {\n            \"axisBorderShow\": false,\n            \"axisCenteredZero\": false,\n            \"axisColorMode\": \"text\",\n            \"axisLabel\": \"\",\n            \"axisPlacement\": \"auto\",\n            \"barAlignment\": 0,\n            \"barWidthFactor\": 0.6,\n            \"drawStyle\": \"line\",\n            \"fillOpacity\": 0,\n            \"gradientMode\": \"none\",\n            \"hideFrom\": {\n              \"legend\": false,\n              \"tooltip\": false,\n              \"viz\": false\n            },\n            \"insertNulls\": false,\n            \"lineInterpolation\": \"linear\",\n            \"lineWidth\": 1,\n            \"pointSize\": 5,\n            \"scaleDistribution\": {\n              \"type\": \"linear\"\n            },\n            \"showPoints\": \"auto\",\n            \"showValues\": false,\n            \"spanNulls\": false,\n            \"stacking\": {\n              \"group\": \"A\",\n              \"mode\": \"none\"\n            },\n            \"thresholdsStyle\": {\n              \"mode\": \"off\"\n            }\n          },\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\",\n                \"value\": 0\n              },\n              {\n                \"color\": \"red\",\n                \"value\": 80\n              }\n            ]\n          },\n          \"unit\": \"decbytes\"\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 7,\n        \"w\": 8,\n        \"x\": 16,\n        \"y\": 39\n      },\n      \"id\": 37,\n      \"interval\": \"30s\",\n      \"options\": {\n        \"legend\": {\n          \"calcs\": [],\n          \"displayMode\": \"list\",\n          \"placement\": \"bottom\",\n          \"showLegend\": true\n        },\n        \"tooltip\": {\n          \"hideZeros\": false,\n          \"mode\": \"single\",\n          \"sort\": \"none\"\n        }\n      },\n      \"pluginVersion\": \"12.2.0\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"editorMode\": \"code\",\n          \"expr\": \"sum by(job) (increase(gossipsub_topic_msg_recv_bytes_total{client_name=~\\\"$client\\\", job=~\\\"$job\\\", supernode=~\\\"$nodes\\\", hash=~\\\".*/data_column_sidecar.*\\\"}[$__interval]))\",\n          \"instant\": false,\n          \"legendFormat\": \"__auto\",\n          \"range\": true,\n          \"refId\": \"A\"\n        }\n      ],\n      \"title\": \"Number of bytes received from each topic (deduplicated) \",\n      \"type\": \"timeseries\"\n    },\n    {\n      \"collapsed\": false,\n      \"gridPos\": {\n        \"h\": 1,\n        \"w\": 24,\n        \"x\": 0,\n        \"y\": 46\n      },\n      \"id\": 38,\n      \"panels\": [],\n      \"title\": \"Req/Resp\",\n      \"type\": \"row\"\n    },\n    {\n      \"datasource\": {\n        \"default\": true,\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"palette-classic\"\n          },\n          \"custom\": {\n            \"axisBorderShow\": false,\n            \"axisCenteredZero\": false,\n            \"axisColorMode\": \"text\",\n            \"axisLabel\": \"\",\n            \"axisPlacement\": \"auto\",\n            \"barAlignment\": 0,\n            \"barWidthFactor\": 0.6,\n            \"drawStyle\": \"line\",\n            \"fillOpacity\": 20,\n            \"gradientMode\": \"opacity\",\n            \"hideFrom\": {\n              \"legend\": false,\n              \"tooltip\": false,\n              \"viz\": false\n            },\n            \"insertNulls\": false,\n            \"lineInterpolation\": \"linear\",\n            \"lineWidth\": 1,\n            \"pointSize\": 5,\n            \"scaleDistribution\": {\n              \"type\": \"linear\"\n            },\n            \"showPoints\": \"auto\",\n            \"showValues\": false,\n            \"spanNulls\": false,\n            \"stacking\": {\n              \"group\": \"A\",\n              \"mode\": \"none\"\n            },\n            \"thresholdsStyle\": {\n              \"mode\": \"off\"\n            }\n          },\n          \"decimals\": 0,\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\",\n                \"value\": 0\n              },\n              {\n                \"color\": \"red\",\n                \"value\": 80\n              }\n            ]\n          }\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 6,\n        \"w\": 6,\n        \"x\": 0,\n        \"y\": 47\n      },\n      \"id\": 40,\n      \"interval\": \"30s\",\n      \"options\": {\n        \"legend\": {\n          \"calcs\": [],\n          \"displayMode\": \"list\",\n          \"placement\": \"bottom\",\n          \"showLegend\": true\n        },\n        \"tooltip\": {\n          \"hideZeros\": false,\n          \"mode\": \"multi\",\n          \"sort\": \"desc\"\n        }\n      },\n      \"pluginVersion\": \"12.2.0\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"editorMode\": \"code\",\n          \"exemplar\": false,\n          \"expr\": \"sum by(job) (increase(libp2p_rpc_requests_sent_total{client_name=~\\\"$client\\\", job=~\\\"$job\\\", supernode=~\\\"$nodes\\\"}[$__interval]))\",\n          \"format\": \"time_series\",\n          \"interval\": \"\",\n          \"intervalFactor\": 1,\n          \"legendFormat\": \"__auto\",\n          \"range\": true,\n          \"refId\": \"A\"\n        }\n      ],\n      \"title\": \"Number of requests sent\",\n      \"type\": \"timeseries\"\n    },\n    {\n      \"datasource\": {\n        \"default\": true,\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"palette-classic\"\n          },\n          \"custom\": {\n            \"axisBorderShow\": false,\n            \"axisCenteredZero\": false,\n            \"axisColorMode\": \"text\",\n            \"axisLabel\": \"\",\n            \"axisPlacement\": \"auto\",\n            \"barAlignment\": 0,\n            \"barWidthFactor\": 0.6,\n            \"drawStyle\": \"line\",\n            \"fillOpacity\": 20,\n            \"gradientMode\": \"opacity\",\n            \"hideFrom\": {\n              \"legend\": false,\n              \"tooltip\": false,\n              \"viz\": false\n            },\n            \"insertNulls\": false,\n            \"lineInterpolation\": \"linear\",\n            \"lineWidth\": 1,\n            \"pointSize\": 5,\n            \"scaleDistribution\": {\n              \"type\": \"linear\"\n            },\n            \"showPoints\": \"auto\",\n            \"showValues\": false,\n            \"spanNulls\": false,\n            \"stacking\": {\n              \"group\": \"A\",\n              \"mode\": \"none\"\n            },\n            \"thresholdsStyle\": {\n              \"mode\": \"off\"\n            }\n          },\n          \"decimals\": 0,\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\",\n                \"value\": 0\n              },\n              {\n                \"color\": \"red\",\n                \"value\": 80\n              }\n            ]\n          }\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 6,\n        \"w\": 6,\n        \"x\": 6,\n        \"y\": 47\n      },\n      \"id\": 45,\n      \"interval\": \"30s\",\n      \"options\": {\n        \"legend\": {\n          \"calcs\": [],\n          \"displayMode\": \"list\",\n          \"placement\": \"bottom\",\n          \"showLegend\": true\n        },\n        \"tooltip\": {\n          \"hideZeros\": false,\n          \"mode\": \"multi\",\n          \"sort\": \"desc\"\n        }\n      },\n      \"pluginVersion\": \"12.2.0\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"editorMode\": \"code\",\n          \"exemplar\": false,\n          \"expr\": \"sum by(job) (increase(libp2p_rpc_requests_received_total{client_name=~\\\"$client\\\", job=~\\\"$job\\\", supernode=~\\\"$nodes\\\"}[$__interval]))\",\n          \"format\": \"time_series\",\n          \"interval\": \"\",\n          \"intervalFactor\": 1,\n          \"legendFormat\": \"__auto\",\n          \"range\": true,\n          \"refId\": \"A\"\n        }\n      ],\n      \"title\": \"Number of requests received\",\n      \"type\": \"timeseries\"\n    },\n    {\n      \"datasource\": {\n        \"default\": true,\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"palette-classic\"\n          },\n          \"custom\": {\n            \"axisBorderShow\": false,\n            \"axisCenteredZero\": false,\n            \"axisColorMode\": \"text\",\n            \"axisLabel\": \"\",\n            \"axisPlacement\": \"auto\",\n            \"barAlignment\": 0,\n            \"barWidthFactor\": 0.6,\n            \"drawStyle\": \"line\",\n            \"fillOpacity\": 20,\n            \"gradientMode\": \"opacity\",\n            \"hideFrom\": {\n              \"legend\": false,\n              \"tooltip\": false,\n              \"viz\": false\n            },\n            \"insertNulls\": false,\n            \"lineInterpolation\": \"linear\",\n            \"lineWidth\": 1,\n            \"pointSize\": 5,\n            \"scaleDistribution\": {\n              \"type\": \"linear\"\n            },\n            \"showPoints\": \"auto\",\n            \"showValues\": false,\n            \"spanNulls\": false,\n            \"stacking\": {\n              \"group\": \"A\",\n              \"mode\": \"none\"\n            },\n            \"thresholdsStyle\": {\n              \"mode\": \"off\"\n            }\n          },\n          \"decimals\": 0,\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\",\n                \"value\": 0\n              },\n              {\n                \"color\": \"red\",\n                \"value\": 80\n              }\n            ]\n          }\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 6,\n        \"w\": 6,\n        \"x\": 12,\n        \"y\": 47\n      },\n      \"id\": 42,\n      \"interval\": \"30s\",\n      \"options\": {\n        \"legend\": {\n          \"calcs\": [],\n          \"displayMode\": \"list\",\n          \"placement\": \"bottom\",\n          \"showLegend\": true\n        },\n        \"tooltip\": {\n          \"hideZeros\": false,\n          \"mode\": \"multi\",\n          \"sort\": \"desc\"\n        }\n      },\n      \"pluginVersion\": \"12.2.0\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"editorMode\": \"code\",\n          \"exemplar\": false,\n          \"expr\": \"sum by(job) (increase(libp2p_rpc_responses_sent_total{client_name=~\\\"$client\\\", job=~\\\"$job\\\", supernode=~\\\"$nodes\\\"}[$__interval]))\",\n          \"format\": \"time_series\",\n          \"interval\": \"\",\n          \"intervalFactor\": 1,\n          \"legendFormat\": \"__auto\",\n          \"range\": true,\n          \"refId\": \"A\"\n        }\n      ],\n      \"title\": \"Number of responses sent\",\n      \"type\": \"timeseries\"\n    },\n    {\n      \"datasource\": {\n        \"default\": true,\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"palette-classic\"\n          },\n          \"custom\": {\n            \"axisBorderShow\": false,\n            \"axisCenteredZero\": false,\n            \"axisColorMode\": \"text\",\n            \"axisLabel\": \"\",\n            \"axisPlacement\": \"auto\",\n            \"barAlignment\": 0,\n            \"barWidthFactor\": 0.6,\n            \"drawStyle\": \"line\",\n            \"fillOpacity\": 20,\n            \"gradientMode\": \"opacity\",\n            \"hideFrom\": {\n              \"legend\": false,\n              \"tooltip\": false,\n              \"viz\": false\n            },\n            \"insertNulls\": false,\n            \"lineInterpolation\": \"linear\",\n            \"lineWidth\": 1,\n            \"pointSize\": 5,\n            \"scaleDistribution\": {\n              \"type\": \"linear\"\n            },\n            \"showPoints\": \"auto\",\n            \"showValues\": false,\n            \"spanNulls\": false,\n            \"stacking\": {\n              \"group\": \"A\",\n              \"mode\": \"none\"\n            },\n            \"thresholdsStyle\": {\n              \"mode\": \"off\"\n            }\n          },\n          \"decimals\": 0,\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\",\n                \"value\": 0\n              },\n              {\n                \"color\": \"red\",\n                \"value\": 80\n              }\n            ]\n          }\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 6,\n        \"w\": 6,\n        \"x\": 18,\n        \"y\": 47\n      },\n      \"id\": 43,\n      \"interval\": \"30s\",\n      \"options\": {\n        \"legend\": {\n          \"calcs\": [],\n          \"displayMode\": \"list\",\n          \"placement\": \"bottom\",\n          \"showLegend\": true\n        },\n        \"tooltip\": {\n          \"hideZeros\": false,\n          \"mode\": \"multi\",\n          \"sort\": \"desc\"\n        }\n      },\n      \"pluginVersion\": \"12.2.0\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"editorMode\": \"code\",\n          \"exemplar\": false,\n          \"expr\": \"sum by(job) (increase(libp2p_rpc_responses_received_total{client_name=~\\\"$client\\\", job=~\\\"$job\\\", supernode=~\\\"$nodes\\\"}[$__interval]))\",\n          \"format\": \"time_series\",\n          \"interval\": \"\",\n          \"intervalFactor\": 1,\n          \"legendFormat\": \"__auto\",\n          \"range\": true,\n          \"refId\": \"A\"\n        }\n      ],\n      \"title\": \"Number of responses received\",\n      \"type\": \"timeseries\"\n    },\n    {\n      \"datasource\": {\n        \"default\": true,\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"palette-classic\"\n          },\n          \"custom\": {\n            \"axisBorderShow\": false,\n            \"axisCenteredZero\": false,\n            \"axisColorMode\": \"text\",\n            \"axisLabel\": \"\",\n            \"axisPlacement\": \"auto\",\n            \"barAlignment\": 0,\n            \"barWidthFactor\": 0.6,\n            \"drawStyle\": \"line\",\n            \"fillOpacity\": 20,\n            \"gradientMode\": \"opacity\",\n            \"hideFrom\": {\n              \"legend\": false,\n              \"tooltip\": false,\n              \"viz\": false\n            },\n            \"insertNulls\": false,\n            \"lineInterpolation\": \"linear\",\n            \"lineWidth\": 1,\n            \"pointSize\": 5,\n            \"scaleDistribution\": {\n              \"type\": \"linear\"\n            },\n            \"showPoints\": \"auto\",\n            \"showValues\": false,\n            \"spanNulls\": false,\n            \"stacking\": {\n              \"group\": \"A\",\n              \"mode\": \"none\"\n            },\n            \"thresholdsStyle\": {\n              \"mode\": \"off\"\n            }\n          },\n          \"decimals\": 0,\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\",\n                \"value\": 0\n              },\n              {\n                \"color\": \"red\",\n                \"value\": 80\n              }\n            ]\n          },\n          \"unit\": \"decbytes\"\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 6,\n        \"w\": 6,\n        \"x\": 0,\n        \"y\": 53\n      },\n      \"id\": 44,\n      \"interval\": \"30s\",\n      \"options\": {\n        \"legend\": {\n          \"calcs\": [],\n          \"displayMode\": \"list\",\n          \"placement\": \"bottom\",\n          \"showLegend\": true\n        },\n        \"tooltip\": {\n          \"hideZeros\": false,\n          \"mode\": \"multi\",\n          \"sort\": \"desc\"\n        }\n      },\n      \"pluginVersion\": \"12.2.0\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"editorMode\": \"code\",\n          \"exemplar\": false,\n          \"expr\": \"sum by(job) (increase(libp2p_rpc_requests_bytes_sent_total{client_name=~\\\"$client\\\", job=~\\\"$job\\\", supernode=~\\\"$nodes\\\"}[$__interval]))\",\n          \"format\": \"time_series\",\n          \"interval\": \"\",\n          \"intervalFactor\": 1,\n          \"legendFormat\": \"__auto\",\n          \"range\": true,\n          \"refId\": \"A\"\n        }\n      ],\n      \"title\": \"Number of requests bytes sent\",\n      \"type\": \"timeseries\"\n    },\n    {\n      \"datasource\": {\n        \"default\": true,\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"palette-classic\"\n          },\n          \"custom\": {\n            \"axisBorderShow\": false,\n            \"axisCenteredZero\": false,\n            \"axisColorMode\": \"text\",\n            \"axisLabel\": \"\",\n            \"axisPlacement\": \"auto\",\n            \"barAlignment\": 0,\n            \"barWidthFactor\": 0.6,\n            \"drawStyle\": \"line\",\n            \"fillOpacity\": 20,\n            \"gradientMode\": \"opacity\",\n            \"hideFrom\": {\n              \"legend\": false,\n              \"tooltip\": false,\n              \"viz\": false\n            },\n            \"insertNulls\": false,\n            \"lineInterpolation\": \"linear\",\n            \"lineWidth\": 1,\n            \"pointSize\": 5,\n            \"scaleDistribution\": {\n              \"type\": \"linear\"\n            },\n            \"showPoints\": \"auto\",\n            \"showValues\": false,\n            \"spanNulls\": false,\n            \"stacking\": {\n              \"group\": \"A\",\n              \"mode\": \"none\"\n            },\n            \"thresholdsStyle\": {\n              \"mode\": \"off\"\n            }\n          },\n          \"decimals\": 0,\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\",\n                \"value\": 0\n              },\n              {\n                \"color\": \"red\",\n                \"value\": 80\n              }\n            ]\n          },\n          \"unit\": \"decbytes\"\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 6,\n        \"w\": 6,\n        \"x\": 6,\n        \"y\": 53\n      },\n      \"id\": 41,\n      \"interval\": \"30s\",\n      \"options\": {\n        \"legend\": {\n          \"calcs\": [],\n          \"displayMode\": \"list\",\n          \"placement\": \"bottom\",\n          \"showLegend\": true\n        },\n        \"tooltip\": {\n          \"hideZeros\": false,\n          \"mode\": \"multi\",\n          \"sort\": \"desc\"\n        }\n      },\n      \"pluginVersion\": \"12.2.0\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"editorMode\": \"code\",\n          \"exemplar\": false,\n          \"expr\": \"sum by(job) (increase(libp2p_rpc_requests_bytes_received_total{client_name=~\\\"$client\\\", job=~\\\"$job\\\", supernode=~\\\"$nodes\\\"}[$__interval]))\",\n          \"format\": \"time_series\",\n          \"interval\": \"\",\n          \"intervalFactor\": 1,\n          \"legendFormat\": \"__auto\",\n          \"range\": true,\n          \"refId\": \"A\"\n        }\n      ],\n      \"title\": \"Number of requests bytes received\",\n      \"type\": \"timeseries\"\n    },\n    {\n      \"datasource\": {\n        \"default\": true,\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"palette-classic\"\n          },\n          \"custom\": {\n            \"axisBorderShow\": false,\n            \"axisCenteredZero\": false,\n            \"axisColorMode\": \"text\",\n            \"axisLabel\": \"\",\n            \"axisPlacement\": \"auto\",\n            \"barAlignment\": 0,\n            \"barWidthFactor\": 0.6,\n            \"drawStyle\": \"line\",\n            \"fillOpacity\": 20,\n            \"gradientMode\": \"opacity\",\n            \"hideFrom\": {\n              \"legend\": false,\n              \"tooltip\": false,\n              \"viz\": false\n            },\n            \"insertNulls\": false,\n            \"lineInterpolation\": \"linear\",\n            \"lineWidth\": 1,\n            \"pointSize\": 5,\n            \"scaleDistribution\": {\n              \"type\": \"linear\"\n            },\n            \"showPoints\": \"auto\",\n            \"showValues\": false,\n            \"spanNulls\": false,\n            \"stacking\": {\n              \"group\": \"A\",\n              \"mode\": \"none\"\n            },\n            \"thresholdsStyle\": {\n              \"mode\": \"off\"\n            }\n          },\n          \"decimals\": 0,\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\",\n                \"value\": 0\n              },\n              {\n                \"color\": \"red\",\n                \"value\": 80\n              }\n            ]\n          },\n          \"unit\": \"decbytes\"\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 6,\n        \"w\": 6,\n        \"x\": 12,\n        \"y\": 53\n      },\n      \"id\": 46,\n      \"interval\": \"30s\",\n      \"options\": {\n        \"legend\": {\n          \"calcs\": [],\n          \"displayMode\": \"list\",\n          \"placement\": \"bottom\",\n          \"showLegend\": true\n        },\n        \"tooltip\": {\n          \"hideZeros\": false,\n          \"mode\": \"multi\",\n          \"sort\": \"desc\"\n        }\n      },\n      \"pluginVersion\": \"12.2.0\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"editorMode\": \"code\",\n          \"exemplar\": false,\n          \"expr\": \"sum by(job) (increase(libp2p_rpc_responses_bytes_sent_total{client_name=~\\\"$client\\\", job=~\\\"$job\\\", supernode=~\\\"$nodes\\\"}[$__interval]))\",\n          \"format\": \"time_series\",\n          \"interval\": \"\",\n          \"intervalFactor\": 1,\n          \"legendFormat\": \"__auto\",\n          \"range\": true,\n          \"refId\": \"A\"\n        }\n      ],\n      \"title\": \"Number of responses bytes sent\",\n      \"type\": \"timeseries\"\n    },\n    {\n      \"datasource\": {\n        \"default\": true,\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"palette-classic\"\n          },\n          \"custom\": {\n            \"axisBorderShow\": false,\n            \"axisCenteredZero\": false,\n            \"axisColorMode\": \"text\",\n            \"axisLabel\": \"\",\n            \"axisPlacement\": \"auto\",\n            \"barAlignment\": 0,\n            \"barWidthFactor\": 0.6,\n            \"drawStyle\": \"line\",\n            \"fillOpacity\": 20,\n            \"gradientMode\": \"opacity\",\n            \"hideFrom\": {\n              \"legend\": false,\n              \"tooltip\": false,\n              \"viz\": false\n            },\n            \"insertNulls\": false,\n            \"lineInterpolation\": \"linear\",\n            \"lineWidth\": 1,\n            \"pointSize\": 5,\n            \"scaleDistribution\": {\n              \"type\": \"linear\"\n            },\n            \"showPoints\": \"auto\",\n            \"showValues\": false,\n            \"spanNulls\": false,\n            \"stacking\": {\n              \"group\": \"A\",\n              \"mode\": \"none\"\n            },\n            \"thresholdsStyle\": {\n              \"mode\": \"off\"\n            }\n          },\n          \"decimals\": 0,\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\",\n                \"value\": 0\n              },\n              {\n                \"color\": \"red\",\n                \"value\": 80\n              }\n            ]\n          },\n          \"unit\": \"decbytes\"\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 6,\n        \"w\": 6,\n        \"x\": 18,\n        \"y\": 53\n      },\n      \"id\": 47,\n      \"interval\": \"30s\",\n      \"options\": {\n        \"legend\": {\n          \"calcs\": [],\n          \"displayMode\": \"list\",\n          \"placement\": \"bottom\",\n          \"showLegend\": true\n        },\n        \"tooltip\": {\n          \"hideZeros\": false,\n          \"mode\": \"multi\",\n          \"sort\": \"desc\"\n        }\n      },\n      \"pluginVersion\": \"12.2.0\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"editorMode\": \"code\",\n          \"exemplar\": false,\n          \"expr\": \"sum by(job) (increase(libp2p_rpc_responses_bytes_received_total{client_name=~\\\"$client\\\", job=~\\\"$job\\\", supernode=~\\\"$nodes\\\"}[$__interval]))\",\n          \"format\": \"time_series\",\n          \"interval\": \"\",\n          \"intervalFactor\": 1,\n          \"legendFormat\": \"__auto\",\n          \"range\": true,\n          \"refId\": \"A\"\n        }\n      ],\n      \"title\": \"Number of responses bytes received\",\n      \"type\": \"timeseries\"\n    }\n  ],\n  \"preload\": false,\n  \"refresh\": \"15m\",\n  \"schemaVersion\": 42,\n  \"tags\": [],\n  \"templating\": {\n    \"list\": [\n      {\n        \"current\": {\n          \"text\": [\n            \"$__all\"\n          ],\n          \"value\": [\n            \"$__all\"\n          ]\n        },\n        \"description\": \"\",\n        \"includeAll\": true,\n        \"label\": \"Client\",\n        \"multi\": true,\n        \"name\": \"client\",\n        \"options\": [\n          {\n            \"selected\": false,\n            \"text\": \"lighthouse\",\n            \"value\": \"lighthouse\"\n          },\n          {\n            \"selected\": false,\n            \"text\": \"teku\",\n            \"value\": \"teku\"\n          },\n          {\n            \"selected\": false,\n            \"text\": \"prysm\",\n            \"value\": \"prysm\"\n          },\n          {\n            \"selected\": false,\n            \"text\": \"lodestar\",\n            \"value\": \"lodestar\"\n          },\n          {\n            \"selected\": false,\n            \"text\": \"grandine\",\n            \"value\": \"grandine\"\n          },\n          {\n            \"selected\": false,\n            \"text\": \"nimbus\",\n            \"value\": \"nimbus\"\n          }\n        ],\n        \"query\": \"lighthouse, teku, prysm, lodestar, grandine, nimbus\",\n        \"type\": \"custom\"\n      },\n      {\n        \"current\": {\n          \"text\": \"All\",\n          \"value\": [\n            \"$__all\"\n          ]\n        },\n        \"datasource\": {\n          \"type\": \"prometheus\",\n          \"uid\": \"PBFA97CFB590B2093\"\n        },\n        \"definition\": \"label_values(job)\",\n        \"includeAll\": true,\n        \"label\": \"Job\",\n        \"multi\": true,\n        \"name\": \"job\",\n        \"options\": [],\n        \"query\": {\n          \"qryType\": 1,\n          \"query\": \"label_values(job)\",\n          \"refId\": \"PrometheusVariableQueryEditor-VariableQuery\"\n        },\n        \"refresh\": 1,\n        \"regex\": \"^cl.*\",\n        \"type\": \"query\"\n      },\n      {\n        \"current\": {\n          \"text\": [\n            \"$__all\"\n          ],\n          \"value\": [\n            \"$__all\"\n          ]\n        },\n        \"includeAll\": true,\n        \"label\": \"Nodes\",\n        \"multi\": true,\n        \"name\": \"nodes\",\n        \"options\": [\n          {\n            \"selected\": false,\n            \"text\": \"supernodes\",\n            \"value\": \"True\"\n          },\n          {\n            \"selected\": false,\n            \"text\": \"full nodes\",\n            \"value\": \"False\"\n          }\n        ],\n        \"query\": \"supernodes : True, full nodes : False\",\n        \"type\": \"custom\"\n      }\n    ]\n  },\n  \"time\": {\n    \"from\": \"now-1h\",\n    \"to\": \"now\"\n  },\n  \"timepicker\": {},\n  \"timezone\": \"browser\",\n  \"title\": \"PeerDAS metrics\",\n  \"uid\": \"ddr7j9b1mlszps\",\n  \"version\": 1\n}"
  },
  {
    "path": "static_files/grafana-config/dashboards/prysm-latency-dashboard.json",
    "content": "{\n    \"annotations\": {\n      \"list\": [\n        {\n          \"builtIn\": 1,\n          \"datasource\": {\n            \"type\": \"grafana\",\n            \"uid\": \"-- Grafana --\"\n          },\n          \"enable\": true,\n          \"hide\": true,\n          \"iconColor\": \"rgba(0, 211, 255, 1)\",\n          \"name\": \"Annotations & Alerts\",\n          \"type\": \"dashboard\"\n        }\n      ]\n    },\n    \"editable\": true,\n    \"fiscalYearStartMonth\": 0,\n    \"graphTooltip\": 0,\n    \"id\": 6,\n    \"links\": [],\n    \"liveNow\": false,\n    \"panels\": [\n      {\n        \"collapsed\": false,\n        \"gridPos\": {\n          \"h\": 1,\n          \"w\": 24,\n          \"x\": 0,\n          \"y\": 0\n        },\n        \"id\": 19,\n        \"panels\": [],\n        \"title\": \"Blockchain\",\n        \"type\": \"row\"\n      },\n      {\n        \"datasource\": {\n          \"type\": \"prometheus\",\n          \"uid\": \"PBFA97CFB590B2093\"\n        },\n        \"fieldConfig\": {\n          \"defaults\": {\n            \"color\": {\n              \"mode\": \"palette-classic\"\n            },\n            \"custom\": {\n              \"axisCenteredZero\": false,\n              \"axisColorMode\": \"text\",\n              \"axisLabel\": \"\",\n              \"axisPlacement\": \"auto\",\n              \"barAlignment\": 0,\n              \"drawStyle\": \"line\",\n              \"fillOpacity\": 0,\n              \"gradientMode\": \"none\",\n              \"hideFrom\": {\n                \"legend\": false,\n                \"tooltip\": false,\n                \"viz\": false\n              },\n              \"lineInterpolation\": \"linear\",\n              \"lineWidth\": 1,\n              \"pointSize\": 5,\n              \"scaleDistribution\": {\n                \"type\": \"linear\"\n              },\n              \"showPoints\": \"auto\",\n              \"spanNulls\": false,\n              \"stacking\": {\n                \"group\": \"A\",\n                \"mode\": \"none\"\n              },\n              \"thresholdsStyle\": {\n                \"mode\": \"off\"\n              }\n            },\n            \"mappings\": [],\n            \"thresholds\": {\n              \"mode\": \"absolute\",\n              \"steps\": [\n                {\n                  \"color\": \"green\",\n                  \"value\": null\n                },\n                {\n                  \"color\": \"red\",\n                  \"value\": 80\n                }\n              ]\n            }\n          },\n          \"overrides\": []\n        },\n        \"gridPos\": {\n          \"h\": 8,\n          \"w\": 6,\n          \"x\": 0,\n          \"y\": 1\n        },\n        \"id\": 22,\n        \"options\": {\n          \"legend\": {\n            \"calcs\": [],\n            \"displayMode\": \"list\",\n            \"placement\": \"bottom\",\n            \"showLegend\": true\n          },\n          \"tooltip\": {\n            \"mode\": \"single\",\n            \"sort\": \"none\"\n          }\n        },\n        \"targets\": [\n          {\n            \"datasource\": {\n              \"type\": \"prometheus\",\n              \"uid\": \"PBFA97CFB590B2093\"\n            },\n            \"editorMode\": \"code\",\n            \"expr\": \"rate(chain_service_processing_milliseconds_sum{client_type=\\\"beacon\\\"}[$__rate_interval])\",\n            \"legendFormat\": \"{{service}}\",\n            \"range\": true,\n            \"refId\": \"A\"\n          }\n        ],\n        \"title\": \"Time to call ReceiveBlock\",\n        \"type\": \"timeseries\"\n      },\n      {\n        \"datasource\": {\n          \"type\": \"prometheus\",\n          \"uid\": \"PBFA97CFB590B2093\"\n        },\n        \"fieldConfig\": {\n          \"defaults\": {\n            \"color\": {\n              \"mode\": \"palette-classic\"\n            },\n            \"custom\": {\n              \"axisCenteredZero\": false,\n              \"axisColorMode\": \"text\",\n              \"axisLabel\": \"\",\n              \"axisPlacement\": \"auto\",\n              \"barAlignment\": 0,\n              \"drawStyle\": \"line\",\n              \"fillOpacity\": 0,\n              \"gradientMode\": \"none\",\n              \"hideFrom\": {\n                \"legend\": false,\n                \"tooltip\": false,\n                \"viz\": false\n              },\n              \"lineInterpolation\": \"linear\",\n              \"lineWidth\": 1,\n              \"pointSize\": 5,\n              \"scaleDistribution\": {\n                \"type\": \"linear\"\n              },\n              \"showPoints\": \"auto\",\n              \"spanNulls\": false,\n              \"stacking\": {\n                \"group\": \"A\",\n                \"mode\": \"none\"\n              },\n              \"thresholdsStyle\": {\n                \"mode\": \"off\"\n              }\n            },\n            \"mappings\": [],\n            \"thresholds\": {\n              \"mode\": \"absolute\",\n              \"steps\": [\n                {\n                  \"color\": \"green\",\n                  \"value\": null\n                },\n                {\n                  \"color\": \"red\",\n                  \"value\": 80\n                }\n              ]\n            }\n          },\n          \"overrides\": []\n        },\n        \"gridPos\": {\n          \"h\": 8,\n          \"w\": 6,\n          \"x\": 6,\n          \"y\": 1\n        },\n        \"id\": 20,\n        \"options\": {\n          \"legend\": {\n            \"calcs\": [],\n            \"displayMode\": \"list\",\n            \"placement\": \"bottom\",\n            \"showLegend\": true\n          },\n          \"tooltip\": {\n            \"mode\": \"single\",\n            \"sort\": \"none\"\n          }\n        },\n        \"targets\": [\n          {\n            \"datasource\": {\n              \"type\": \"prometheus\",\n              \"uid\": \"PBFA97CFB590B2093\"\n            },\n            \"editorMode\": \"code\",\n            \"expr\": \"rate(on_block_processing_milliseconds_sum{client_type=\\\"beacon\\\"}[$__rate_interval])\",\n            \"legendFormat\": \"{{service}}\",\n            \"range\": true,\n            \"refId\": \"A\"\n          }\n        ],\n        \"title\": \"Time to call postBlockProcess\",\n        \"type\": \"timeseries\"\n      },\n      {\n        \"datasource\": {\n          \"type\": \"prometheus\",\n          \"uid\": \"PBFA97CFB590B2093\"\n        },\n        \"fieldConfig\": {\n          \"defaults\": {\n            \"color\": {\n              \"mode\": \"palette-classic\"\n            },\n            \"custom\": {\n              \"axisCenteredZero\": false,\n              \"axisColorMode\": \"text\",\n              \"axisLabel\": \"\",\n              \"axisPlacement\": \"auto\",\n              \"barAlignment\": 0,\n              \"drawStyle\": \"line\",\n              \"fillOpacity\": 0,\n              \"gradientMode\": \"none\",\n              \"hideFrom\": {\n                \"legend\": false,\n                \"tooltip\": false,\n                \"viz\": false\n              },\n              \"lineInterpolation\": \"linear\",\n              \"lineWidth\": 1,\n              \"pointSize\": 5,\n              \"scaleDistribution\": {\n                \"type\": \"linear\"\n              },\n              \"showPoints\": \"auto\",\n              \"spanNulls\": false,\n              \"stacking\": {\n                \"group\": \"A\",\n                \"mode\": \"none\"\n              },\n              \"thresholdsStyle\": {\n                \"mode\": \"off\"\n              }\n            },\n            \"mappings\": [],\n            \"thresholds\": {\n              \"mode\": \"absolute\",\n              \"steps\": [\n                {\n                  \"color\": \"green\",\n                  \"value\": null\n                },\n                {\n                  \"color\": \"red\",\n                  \"value\": 80\n                }\n              ]\n            }\n          },\n          \"overrides\": []\n        },\n        \"gridPos\": {\n          \"h\": 6,\n          \"w\": 6,\n          \"x\": 12,\n          \"y\": 1\n        },\n        \"id\": 24,\n        \"options\": {\n          \"legend\": {\n            \"calcs\": [],\n            \"displayMode\": \"list\",\n            \"placement\": \"bottom\",\n            \"showLegend\": true\n          },\n          \"tooltip\": {\n            \"mode\": \"single\",\n            \"sort\": \"none\"\n          }\n        },\n        \"targets\": [\n          {\n            \"datasource\": {\n              \"type\": \"prometheus\",\n              \"uid\": \"PBFA97CFB590B2093\"\n            },\n            \"editorMode\": \"code\",\n            \"expr\": \"rate(new_block_head_milliseconds_sum[$__rate_interval])\",\n            \"legendFormat\": \"{{service}}\",\n            \"range\": true,\n            \"refId\": \"A\"\n          }\n        ],\n        \"title\": \"New block head ms\",\n        \"type\": \"timeseries\"\n      },\n      {\n        \"datasource\": {\n          \"type\": \"prometheus\",\n          \"uid\": \"PBFA97CFB590B2093\"\n        },\n        \"fieldConfig\": {\n          \"defaults\": {\n            \"color\": {\n              \"mode\": \"palette-classic\"\n            },\n            \"custom\": {\n              \"axisCenteredZero\": false,\n              \"axisColorMode\": \"text\",\n              \"axisLabel\": \"\",\n              \"axisPlacement\": \"auto\",\n              \"barAlignment\": 0,\n              \"drawStyle\": \"line\",\n              \"fillOpacity\": 0,\n              \"gradientMode\": \"none\",\n              \"hideFrom\": {\n                \"legend\": false,\n                \"tooltip\": false,\n                \"viz\": false\n              },\n              \"lineInterpolation\": \"linear\",\n              \"lineWidth\": 1,\n              \"pointSize\": 5,\n              \"scaleDistribution\": {\n                \"type\": \"linear\"\n              },\n              \"showPoints\": \"auto\",\n              \"spanNulls\": false,\n              \"stacking\": {\n                \"group\": \"A\",\n                \"mode\": \"none\"\n              },\n              \"thresholdsStyle\": {\n                \"mode\": \"off\"\n              }\n            },\n            \"mappings\": [],\n            \"thresholds\": {\n              \"mode\": \"absolute\",\n              \"steps\": [\n                {\n                  \"color\": \"green\",\n                  \"value\": null\n                },\n                {\n                  \"color\": \"red\",\n                  \"value\": 80\n                }\n              ]\n            }\n          },\n          \"overrides\": []\n        },\n        \"gridPos\": {\n          \"h\": 6,\n          \"w\": 6,\n          \"x\": 18,\n          \"y\": 1\n        },\n        \"id\": 23,\n        \"options\": {\n          \"legend\": {\n            \"calcs\": [],\n            \"displayMode\": \"list\",\n            \"placement\": \"bottom\",\n            \"showLegend\": true\n          },\n          \"tooltip\": {\n            \"mode\": \"single\",\n            \"sort\": \"none\"\n          }\n        },\n        \"targets\": [\n          {\n            \"datasource\": {\n              \"type\": \"prometheus\",\n              \"uid\": \"PBFA97CFB590B2093\"\n            },\n            \"editorMode\": \"code\",\n            \"expr\": \"rate(new_att_head_milliseconds_sum[$__rate_interval])\",\n            \"legendFormat\": \"{{service}}\",\n            \"range\": true,\n            \"refId\": \"A\"\n          }\n        ],\n        \"title\": \"New Attestation Head Ms\",\n        \"type\": \"timeseries\"\n      },\n      {\n        \"datasource\": {\n          \"type\": \"prometheus\",\n          \"uid\": \"PBFA97CFB590B2093\"\n        },\n        \"fieldConfig\": {\n          \"defaults\": {\n            \"color\": {\n              \"mode\": \"palette-classic\"\n            },\n            \"custom\": {\n              \"axisCenteredZero\": false,\n              \"axisColorMode\": \"text\",\n              \"axisLabel\": \"\",\n              \"axisPlacement\": \"auto\",\n              \"barAlignment\": 0,\n              \"drawStyle\": \"line\",\n              \"fillOpacity\": 0,\n              \"gradientMode\": \"none\",\n              \"hideFrom\": {\n                \"legend\": false,\n                \"tooltip\": false,\n                \"viz\": false\n              },\n              \"lineInterpolation\": \"linear\",\n              \"lineWidth\": 1,\n              \"pointSize\": 5,\n              \"scaleDistribution\": {\n                \"type\": \"linear\"\n              },\n              \"showPoints\": \"auto\",\n              \"spanNulls\": false,\n              \"stacking\": {\n                \"group\": \"A\",\n                \"mode\": \"none\"\n              },\n              \"thresholdsStyle\": {\n                \"mode\": \"off\"\n              }\n            },\n            \"mappings\": [],\n            \"thresholds\": {\n              \"mode\": \"absolute\",\n              \"steps\": [\n                {\n                  \"color\": \"green\",\n                  \"value\": null\n                },\n                {\n                  \"color\": \"red\",\n                  \"value\": 80\n                }\n              ]\n            }\n          },\n          \"overrides\": []\n        },\n        \"gridPos\": {\n          \"h\": 6,\n          \"w\": 6,\n          \"x\": 12,\n          \"y\": 7\n        },\n        \"id\": 26,\n        \"options\": {\n          \"legend\": {\n            \"calcs\": [],\n            \"displayMode\": \"list\",\n            \"placement\": \"bottom\",\n            \"showLegend\": true\n          },\n          \"tooltip\": {\n            \"mode\": \"single\",\n            \"sort\": \"none\"\n          }\n        },\n        \"targets\": [\n          {\n            \"datasource\": {\n              \"type\": \"prometheus\",\n              \"uid\": \"PBFA97CFB590B2093\"\n            },\n            \"editorMode\": \"code\",\n            \"expr\": \"rate(replay_to_slot_milliseconds_sum{client_type=\\\"beacon\\\"}[$__rate_interval])\",\n            \"legendFormat\": \"{{service}}\",\n            \"range\": true,\n            \"refId\": \"A\"\n          }\n        ],\n        \"title\": \"Replay to Slot Ms\",\n        \"type\": \"timeseries\"\n      },\n      {\n        \"datasource\": {\n          \"type\": \"prometheus\",\n          \"uid\": \"PBFA97CFB590B2093\"\n        },\n        \"fieldConfig\": {\n          \"defaults\": {\n            \"color\": {\n              \"mode\": \"palette-classic\"\n            },\n            \"custom\": {\n              \"axisCenteredZero\": false,\n              \"axisColorMode\": \"text\",\n              \"axisLabel\": \"\",\n              \"axisPlacement\": \"auto\",\n              \"barAlignment\": 0,\n              \"drawStyle\": \"line\",\n              \"fillOpacity\": 0,\n              \"gradientMode\": \"none\",\n              \"hideFrom\": {\n                \"legend\": false,\n                \"tooltip\": false,\n                \"viz\": false\n              },\n              \"lineInterpolation\": \"linear\",\n              \"lineWidth\": 1,\n              \"pointSize\": 5,\n              \"scaleDistribution\": {\n                \"type\": \"linear\"\n              },\n              \"showPoints\": \"auto\",\n              \"spanNulls\": false,\n              \"stacking\": {\n                \"group\": \"A\",\n                \"mode\": \"none\"\n              },\n              \"thresholdsStyle\": {\n                \"mode\": \"off\"\n              }\n            },\n            \"mappings\": [],\n            \"thresholds\": {\n              \"mode\": \"absolute\",\n              \"steps\": [\n                {\n                  \"color\": \"green\",\n                  \"value\": null\n                },\n                {\n                  \"color\": \"red\",\n                  \"value\": 80\n                }\n              ]\n            }\n          },\n          \"overrides\": []\n        },\n        \"gridPos\": {\n          \"h\": 6,\n          \"w\": 6,\n          \"x\": 18,\n          \"y\": 7\n        },\n        \"id\": 25,\n        \"options\": {\n          \"legend\": {\n            \"calcs\": [],\n            \"displayMode\": \"list\",\n            \"placement\": \"bottom\",\n            \"showLegend\": true\n          },\n          \"tooltip\": {\n            \"mode\": \"single\",\n            \"sort\": \"none\"\n          }\n        },\n        \"targets\": [\n          {\n            \"datasource\": {\n              \"type\": \"prometheus\",\n              \"uid\": \"PBFA97CFB590B2093\"\n            },\n            \"editorMode\": \"code\",\n            \"expr\": \"rate(replay_blocks_milliseconds_sum{client_type=\\\"beacon\\\"}[$__rate_interval])\",\n            \"legendFormat\": \"{{service}}\",\n            \"range\": true,\n            \"refId\": \"A\"\n          }\n        ],\n        \"title\": \"Replay Blocks Ms\",\n        \"type\": \"timeseries\"\n      },\n      {\n        \"datasource\": {\n          \"type\": \"prometheus\",\n          \"uid\": \"PBFA97CFB590B2093\"\n        },\n        \"fieldConfig\": {\n          \"defaults\": {\n            \"color\": {\n              \"mode\": \"palette-classic\"\n            },\n            \"custom\": {\n              \"axisCenteredZero\": false,\n              \"axisColorMode\": \"text\",\n              \"axisLabel\": \"\",\n              \"axisPlacement\": \"auto\",\n              \"barAlignment\": 0,\n              \"drawStyle\": \"line\",\n              \"fillOpacity\": 0,\n              \"gradientMode\": \"none\",\n              \"hideFrom\": {\n                \"legend\": false,\n                \"tooltip\": false,\n                \"viz\": false\n              },\n              \"lineInterpolation\": \"linear\",\n              \"lineWidth\": 1,\n              \"pointSize\": 5,\n              \"scaleDistribution\": {\n                \"type\": \"linear\"\n              },\n              \"showPoints\": \"auto\",\n              \"spanNulls\": false,\n              \"stacking\": {\n                \"group\": \"A\",\n                \"mode\": \"none\"\n              },\n              \"thresholdsStyle\": {\n                \"mode\": \"off\"\n              }\n            },\n            \"mappings\": [],\n            \"thresholds\": {\n              \"mode\": \"absolute\",\n              \"steps\": [\n                {\n                  \"color\": \"green\",\n                  \"value\": null\n                },\n                {\n                  \"color\": \"red\",\n                  \"value\": 80\n                }\n              ]\n            }\n          },\n          \"overrides\": []\n        },\n        \"gridPos\": {\n          \"h\": 8,\n          \"w\": 6,\n          \"x\": 0,\n          \"y\": 9\n        },\n        \"id\": 21,\n        \"options\": {\n          \"legend\": {\n            \"calcs\": [],\n            \"displayMode\": \"list\",\n            \"placement\": \"bottom\",\n            \"showLegend\": true\n          },\n          \"tooltip\": {\n            \"mode\": \"single\",\n            \"sort\": \"none\"\n          }\n        },\n        \"targets\": [\n          {\n            \"datasource\": {\n              \"type\": \"prometheus\",\n              \"uid\": \"PBFA97CFB590B2093\"\n            },\n            \"editorMode\": \"code\",\n            \"expr\": \"rate(state_transition_processing_milliseconds_sum{client_type=\\\"beacon\\\"}[$__rate_interval])\",\n            \"legendFormat\": \"{{service}}\",\n            \"range\": true,\n            \"refId\": \"A\"\n          }\n        ],\n        \"title\": \"Time to call validateStateTransition\",\n        \"type\": \"timeseries\"\n      },\n      {\n        \"collapsed\": false,\n        \"gridPos\": {\n          \"h\": 1,\n          \"w\": 24,\n          \"x\": 0,\n          \"y\": 17\n        },\n        \"id\": 15,\n        \"panels\": [],\n        \"title\": \"Execution\",\n        \"type\": \"row\"\n      },\n      {\n        \"datasource\": {\n          \"type\": \"prometheus\",\n          \"uid\": \"PBFA97CFB590B2093\"\n        },\n        \"fieldConfig\": {\n          \"defaults\": {\n            \"color\": {\n              \"mode\": \"palette-classic\"\n            },\n            \"custom\": {\n              \"axisCenteredZero\": false,\n              \"axisColorMode\": \"text\",\n              \"axisLabel\": \"\",\n              \"axisPlacement\": \"auto\",\n              \"barAlignment\": 0,\n              \"drawStyle\": \"line\",\n              \"fillOpacity\": 0,\n              \"gradientMode\": \"none\",\n              \"hideFrom\": {\n                \"legend\": false,\n                \"tooltip\": false,\n                \"viz\": false\n              },\n              \"lineInterpolation\": \"linear\",\n              \"lineWidth\": 1,\n              \"pointSize\": 5,\n              \"scaleDistribution\": {\n                \"type\": \"linear\"\n              },\n              \"showPoints\": \"auto\",\n              \"spanNulls\": false,\n              \"stacking\": {\n                \"group\": \"A\",\n                \"mode\": \"none\"\n              },\n              \"thresholdsStyle\": {\n                \"mode\": \"off\"\n              }\n            },\n            \"mappings\": [],\n            \"thresholds\": {\n              \"mode\": \"absolute\",\n              \"steps\": [\n                {\n                  \"color\": \"green\",\n                  \"value\": null\n                },\n                {\n                  \"color\": \"red\",\n                  \"value\": 80\n                }\n              ]\n            }\n          },\n          \"overrides\": []\n        },\n        \"gridPos\": {\n          \"h\": 6,\n          \"w\": 6,\n          \"x\": 0,\n          \"y\": 18\n        },\n        \"id\": 18,\n        \"options\": {\n          \"legend\": {\n            \"calcs\": [],\n            \"displayMode\": \"list\",\n            \"placement\": \"bottom\",\n            \"showLegend\": true\n          },\n          \"tooltip\": {\n            \"mode\": \"single\",\n            \"sort\": \"none\"\n          }\n        },\n        \"targets\": [\n          {\n            \"datasource\": {\n              \"type\": \"prometheus\",\n              \"uid\": \"PBFA97CFB590B2093\"\n            },\n            \"editorMode\": \"code\",\n            \"expr\": \"rate(forkchoice_updated_v1_latency_milliseconds_sum{client_type=\\\"beacon\\\"}[$__rate_interval])\",\n            \"legendFormat\": \"{{service}}\",\n            \"range\": true,\n            \"refId\": \"A\"\n          }\n        ],\n        \"title\": \"Fork Choice Updated Latency\",\n        \"type\": \"timeseries\"\n      },\n      {\n        \"datasource\": {\n          \"type\": \"prometheus\",\n          \"uid\": \"PBFA97CFB590B2093\"\n        },\n        \"fieldConfig\": {\n          \"defaults\": {\n            \"color\": {\n              \"mode\": \"palette-classic\"\n            },\n            \"custom\": {\n              \"axisCenteredZero\": false,\n              \"axisColorMode\": \"text\",\n              \"axisLabel\": \"\",\n              \"axisPlacement\": \"auto\",\n              \"barAlignment\": 0,\n              \"drawStyle\": \"line\",\n              \"fillOpacity\": 0,\n              \"gradientMode\": \"none\",\n              \"hideFrom\": {\n                \"legend\": false,\n                \"tooltip\": false,\n                \"viz\": false\n              },\n              \"lineInterpolation\": \"linear\",\n              \"lineWidth\": 1,\n              \"pointSize\": 5,\n              \"scaleDistribution\": {\n                \"type\": \"linear\"\n              },\n              \"showPoints\": \"auto\",\n              \"spanNulls\": false,\n              \"stacking\": {\n                \"group\": \"A\",\n                \"mode\": \"none\"\n              },\n              \"thresholdsStyle\": {\n                \"mode\": \"off\"\n              }\n            },\n            \"mappings\": [],\n            \"thresholds\": {\n              \"mode\": \"absolute\",\n              \"steps\": [\n                {\n                  \"color\": \"green\",\n                  \"value\": null\n                },\n                {\n                  \"color\": \"red\",\n                  \"value\": 80\n                }\n              ]\n            }\n          },\n          \"overrides\": []\n        },\n        \"gridPos\": {\n          \"h\": 6,\n          \"w\": 6,\n          \"x\": 12,\n          \"y\": 18\n        },\n        \"id\": 17,\n        \"options\": {\n          \"legend\": {\n            \"calcs\": [],\n            \"displayMode\": \"list\",\n            \"placement\": \"bottom\",\n            \"showLegend\": true\n          },\n          \"tooltip\": {\n            \"mode\": \"single\",\n            \"sort\": \"none\"\n          }\n        },\n        \"targets\": [\n          {\n            \"datasource\": {\n              \"type\": \"prometheus\",\n              \"uid\": \"PBFA97CFB590B2093\"\n            },\n            \"editorMode\": \"code\",\n            \"expr\": \"rate(get_payload_v1_latency_milliseconds_sum{client_type=\\\"beacon\\\"}[$__rate_interval])\",\n            \"legendFormat\": \"{{service}}\",\n            \"range\": true,\n            \"refId\": \"A\"\n          }\n        ],\n        \"title\": \"Get Payload Latency\",\n        \"type\": \"timeseries\"\n      },\n      {\n        \"datasource\": {\n          \"type\": \"prometheus\",\n          \"uid\": \"PBFA97CFB590B2093\"\n        },\n        \"fieldConfig\": {\n          \"defaults\": {\n            \"color\": {\n              \"mode\": \"palette-classic\"\n            },\n            \"custom\": {\n              \"axisCenteredZero\": false,\n              \"axisColorMode\": \"text\",\n              \"axisLabel\": \"\",\n              \"axisPlacement\": \"auto\",\n              \"barAlignment\": 0,\n              \"drawStyle\": \"line\",\n              \"fillOpacity\": 0,\n              \"gradientMode\": \"none\",\n              \"hideFrom\": {\n                \"legend\": false,\n                \"tooltip\": false,\n                \"viz\": false\n              },\n              \"lineInterpolation\": \"linear\",\n              \"lineWidth\": 1,\n              \"pointSize\": 5,\n              \"scaleDistribution\": {\n                \"type\": \"linear\"\n              },\n              \"showPoints\": \"auto\",\n              \"spanNulls\": false,\n              \"stacking\": {\n                \"group\": \"A\",\n                \"mode\": \"none\"\n              },\n              \"thresholdsStyle\": {\n                \"mode\": \"off\"\n              }\n            },\n            \"mappings\": [],\n            \"thresholds\": {\n              \"mode\": \"absolute\",\n              \"steps\": [\n                {\n                  \"color\": \"green\",\n                  \"value\": null\n                },\n                {\n                  \"color\": \"red\",\n                  \"value\": 80\n                }\n              ]\n            }\n          },\n          \"overrides\": []\n        },\n        \"gridPos\": {\n          \"h\": 6,\n          \"w\": 6,\n          \"x\": 18,\n          \"y\": 18\n        },\n        \"id\": 16,\n        \"options\": {\n          \"legend\": {\n            \"calcs\": [],\n            \"displayMode\": \"list\",\n            \"placement\": \"bottom\",\n            \"showLegend\": true\n          },\n          \"tooltip\": {\n            \"mode\": \"single\",\n            \"sort\": \"none\"\n          }\n        },\n        \"targets\": [\n          {\n            \"datasource\": {\n              \"type\": \"prometheus\",\n              \"uid\": \"PBFA97CFB590B2093\"\n            },\n            \"editorMode\": \"code\",\n            \"expr\": \"rate(new_payload_v1_latency_milliseconds_sum{client_type=\\\"beacon\\\"}[$__rate_interval])\",\n            \"legendFormat\": \"{{service}}\",\n            \"range\": true,\n            \"refId\": \"A\"\n          }\n        ],\n        \"title\": \"New Payload Latency\",\n        \"type\": \"timeseries\"\n      },\n      {\n        \"collapsed\": false,\n        \"gridPos\": {\n          \"h\": 1,\n          \"w\": 24,\n          \"x\": 0,\n          \"y\": 24\n        },\n        \"id\": 9,\n        \"panels\": [],\n        \"title\": \"Gossip\",\n        \"type\": \"row\"\n      },\n      {\n        \"datasource\": {\n          \"type\": \"prometheus\",\n          \"uid\": \"PBFA97CFB590B2093\"\n        },\n        \"fieldConfig\": {\n          \"defaults\": {\n            \"color\": {\n              \"mode\": \"palette-classic\"\n            },\n            \"custom\": {\n              \"axisCenteredZero\": false,\n              \"axisColorMode\": \"text\",\n              \"axisLabel\": \"\",\n              \"axisPlacement\": \"auto\",\n              \"barAlignment\": 0,\n              \"drawStyle\": \"line\",\n              \"fillOpacity\": 0,\n              \"gradientMode\": \"none\",\n              \"hideFrom\": {\n                \"legend\": false,\n                \"tooltip\": false,\n                \"viz\": false\n              },\n              \"lineInterpolation\": \"linear\",\n              \"lineWidth\": 1,\n              \"pointSize\": 5,\n              \"scaleDistribution\": {\n                \"type\": \"linear\"\n              },\n              \"showPoints\": \"auto\",\n              \"spanNulls\": false,\n              \"stacking\": {\n                \"group\": \"A\",\n                \"mode\": \"none\"\n              },\n              \"thresholdsStyle\": {\n                \"mode\": \"off\"\n              }\n            },\n            \"mappings\": [],\n            \"thresholds\": {\n              \"mode\": \"absolute\",\n              \"steps\": [\n                {\n                  \"color\": \"green\",\n                  \"value\": null\n                },\n                {\n                  \"color\": \"red\",\n                  \"value\": 80\n                }\n              ]\n            }\n          },\n          \"overrides\": []\n        },\n        \"gridPos\": {\n          \"h\": 7,\n          \"w\": 6,\n          \"x\": 0,\n          \"y\": 25\n        },\n        \"id\": 11,\n        \"options\": {\n          \"legend\": {\n            \"calcs\": [],\n            \"displayMode\": \"list\",\n            \"placement\": \"bottom\",\n            \"showLegend\": true\n          },\n          \"tooltip\": {\n            \"mode\": \"single\",\n            \"sort\": \"none\"\n          }\n        },\n        \"targets\": [\n          {\n            \"datasource\": {\n              \"type\": \"prometheus\",\n              \"uid\": \"PBFA97CFB590B2093\"\n            },\n            \"editorMode\": \"code\",\n            \"expr\": \"rate(gossip_block_verification_milliseconds_sum{client_type=\\\"beacon\\\"}[$__rate_interval])\",\n            \"legendFormat\": \"{{service}}\",\n            \"range\": true,\n            \"refId\": \"A\"\n          }\n        ],\n        \"title\": \"Block Verification Time\",\n        \"type\": \"timeseries\"\n      },\n      {\n        \"datasource\": {\n          \"type\": \"prometheus\",\n          \"uid\": \"PBFA97CFB590B2093\"\n        },\n        \"fieldConfig\": {\n          \"defaults\": {\n            \"color\": {\n              \"mode\": \"palette-classic\"\n            },\n            \"custom\": {\n              \"axisCenteredZero\": false,\n              \"axisColorMode\": \"text\",\n              \"axisLabel\": \"\",\n              \"axisPlacement\": \"auto\",\n              \"barAlignment\": 0,\n              \"drawStyle\": \"line\",\n              \"fillOpacity\": 0,\n              \"gradientMode\": \"none\",\n              \"hideFrom\": {\n                \"legend\": false,\n                \"tooltip\": false,\n                \"viz\": false\n              },\n              \"lineInterpolation\": \"linear\",\n              \"lineWidth\": 1,\n              \"pointSize\": 5,\n              \"scaleDistribution\": {\n                \"type\": \"linear\"\n              },\n              \"showPoints\": \"auto\",\n              \"spanNulls\": false,\n              \"stacking\": {\n                \"group\": \"A\",\n                \"mode\": \"none\"\n              },\n              \"thresholdsStyle\": {\n                \"mode\": \"off\"\n              }\n            },\n            \"mappings\": [],\n            \"thresholds\": {\n              \"mode\": \"absolute\",\n              \"steps\": [\n                {\n                  \"color\": \"green\",\n                  \"value\": null\n                },\n                {\n                  \"color\": \"red\",\n                  \"value\": 80\n                }\n              ]\n            }\n          },\n          \"overrides\": []\n        },\n        \"gridPos\": {\n          \"h\": 7,\n          \"w\": 6,\n          \"x\": 6,\n          \"y\": 25\n        },\n        \"id\": 10,\n        \"options\": {\n          \"legend\": {\n            \"calcs\": [],\n            \"displayMode\": \"list\",\n            \"placement\": \"bottom\",\n            \"showLegend\": true\n          },\n          \"tooltip\": {\n            \"mode\": \"single\",\n            \"sort\": \"none\"\n          }\n        },\n        \"targets\": [\n          {\n            \"datasource\": {\n              \"type\": \"prometheus\",\n              \"uid\": \"PBFA97CFB590B2093\"\n            },\n            \"editorMode\": \"code\",\n            \"expr\": \"rate(gossip_aggregate_attestation_verification_milliseconds_sum{client_type=\\\"beacon\\\"}[$__rate_interval])\",\n            \"legendFormat\": \"{{service}}\",\n            \"range\": true,\n            \"refId\": \"A\"\n          }\n        ],\n        \"title\": \"Agg Attestion Verification Time\",\n        \"type\": \"timeseries\"\n      },\n      {\n        \"datasource\": {\n          \"type\": \"prometheus\",\n          \"uid\": \"PBFA97CFB590B2093\"\n        },\n        \"fieldConfig\": {\n          \"defaults\": {\n            \"color\": {\n              \"mode\": \"palette-classic\"\n            },\n            \"custom\": {\n              \"axisCenteredZero\": false,\n              \"axisColorMode\": \"text\",\n              \"axisLabel\": \"\",\n              \"axisPlacement\": \"auto\",\n              \"barAlignment\": 0,\n              \"drawStyle\": \"line\",\n              \"fillOpacity\": 0,\n              \"gradientMode\": \"none\",\n              \"hideFrom\": {\n                \"legend\": false,\n                \"tooltip\": false,\n                \"viz\": false\n              },\n              \"lineInterpolation\": \"linear\",\n              \"lineWidth\": 1,\n              \"pointSize\": 5,\n              \"scaleDistribution\": {\n                \"type\": \"linear\"\n              },\n              \"showPoints\": \"auto\",\n              \"spanNulls\": false,\n              \"stacking\": {\n                \"group\": \"A\",\n                \"mode\": \"none\"\n              },\n              \"thresholdsStyle\": {\n                \"mode\": \"off\"\n              }\n            },\n            \"mappings\": [],\n            \"thresholds\": {\n              \"mode\": \"absolute\",\n              \"steps\": [\n                {\n                  \"color\": \"green\",\n                  \"value\": null\n                },\n                {\n                  \"color\": \"red\",\n                  \"value\": 80\n                }\n              ]\n            }\n          },\n          \"overrides\": []\n        },\n        \"gridPos\": {\n          \"h\": 7,\n          \"w\": 6,\n          \"x\": 12,\n          \"y\": 25\n        },\n        \"id\": 13,\n        \"options\": {\n          \"legend\": {\n            \"calcs\": [],\n            \"displayMode\": \"list\",\n            \"placement\": \"bottom\",\n            \"showLegend\": true\n          },\n          \"tooltip\": {\n            \"mode\": \"single\",\n            \"sort\": \"none\"\n          }\n        },\n        \"targets\": [\n          {\n            \"datasource\": {\n              \"type\": \"prometheus\",\n              \"uid\": \"PBFA97CFB590B2093\"\n            },\n            \"editorMode\": \"code\",\n            \"expr\": \"rate(gossip_blob_sidecar_arrival_milliseconds_sum{client_type=\\\"beacon\\\"}[$__rate_interval])\",\n            \"legendFormat\": \"{{service}}\",\n            \"range\": true,\n            \"refId\": \"A\"\n          }\n        ],\n        \"title\": \"Blob Sidecar Arrival Delay\",\n        \"type\": \"timeseries\"\n      },\n      {\n        \"datasource\": {\n          \"type\": \"prometheus\",\n          \"uid\": \"PBFA97CFB590B2093\"\n        },\n        \"fieldConfig\": {\n          \"defaults\": {\n            \"color\": {\n              \"mode\": \"palette-classic\"\n            },\n            \"custom\": {\n              \"axisCenteredZero\": false,\n              \"axisColorMode\": \"text\",\n              \"axisLabel\": \"\",\n              \"axisPlacement\": \"auto\",\n              \"barAlignment\": 0,\n              \"drawStyle\": \"line\",\n              \"fillOpacity\": 0,\n              \"gradientMode\": \"none\",\n              \"hideFrom\": {\n                \"legend\": false,\n                \"tooltip\": false,\n                \"viz\": false\n              },\n              \"lineInterpolation\": \"linear\",\n              \"lineWidth\": 1,\n              \"pointSize\": 5,\n              \"scaleDistribution\": {\n                \"type\": \"linear\"\n              },\n              \"showPoints\": \"auto\",\n              \"spanNulls\": false,\n              \"stacking\": {\n                \"group\": \"A\",\n                \"mode\": \"none\"\n              },\n              \"thresholdsStyle\": {\n                \"mode\": \"off\"\n              }\n            },\n            \"mappings\": [],\n            \"thresholds\": {\n              \"mode\": \"absolute\",\n              \"steps\": [\n                {\n                  \"color\": \"green\",\n                  \"value\": null\n                },\n                {\n                  \"color\": \"red\",\n                  \"value\": 80\n                }\n              ]\n            }\n          },\n          \"overrides\": []\n        },\n        \"gridPos\": {\n          \"h\": 7,\n          \"w\": 6,\n          \"x\": 18,\n          \"y\": 25\n        },\n        \"id\": 12,\n        \"options\": {\n          \"legend\": {\n            \"calcs\": [],\n            \"displayMode\": \"list\",\n            \"placement\": \"bottom\",\n            \"showLegend\": true\n          },\n          \"tooltip\": {\n            \"mode\": \"single\",\n            \"sort\": \"none\"\n          }\n        },\n        \"targets\": [\n          {\n            \"datasource\": {\n              \"type\": \"prometheus\",\n              \"uid\": \"PBFA97CFB590B2093\"\n            },\n            \"editorMode\": \"code\",\n            \"expr\": \"rate(gossip_block_arrival_milliseconds_sum{client_type=\\\"beacon\\\"}[$__rate_interval])\",\n            \"legendFormat\": \"{{service}}\",\n            \"range\": true,\n            \"refId\": \"A\"\n          }\n        ],\n        \"title\": \"Block Arrival Delay\",\n        \"type\": \"timeseries\"\n      },\n      {\n        \"datasource\": {\n          \"type\": \"prometheus\",\n          \"uid\": \"PBFA97CFB590B2093\"\n        },\n        \"fieldConfig\": {\n          \"defaults\": {\n            \"color\": {\n              \"mode\": \"palette-classic\"\n            },\n            \"custom\": {\n              \"axisCenteredZero\": false,\n              \"axisColorMode\": \"text\",\n              \"axisLabel\": \"\",\n              \"axisPlacement\": \"auto\",\n              \"barAlignment\": 0,\n              \"drawStyle\": \"line\",\n              \"fillOpacity\": 0,\n              \"gradientMode\": \"none\",\n              \"hideFrom\": {\n                \"legend\": false,\n                \"tooltip\": false,\n                \"viz\": false\n              },\n              \"lineInterpolation\": \"linear\",\n              \"lineWidth\": 1,\n              \"pointSize\": 5,\n              \"scaleDistribution\": {\n                \"type\": \"linear\"\n              },\n              \"showPoints\": \"auto\",\n              \"spanNulls\": false,\n              \"stacking\": {\n                \"group\": \"A\",\n                \"mode\": \"none\"\n              },\n              \"thresholdsStyle\": {\n                \"mode\": \"off\"\n              }\n            },\n            \"mappings\": [],\n            \"thresholds\": {\n              \"mode\": \"absolute\",\n              \"steps\": [\n                {\n                  \"color\": \"green\",\n                  \"value\": null\n                },\n                {\n                  \"color\": \"red\",\n                  \"value\": 80\n                }\n              ]\n            }\n          },\n          \"overrides\": []\n        },\n        \"gridPos\": {\n          \"h\": 7,\n          \"w\": 6,\n          \"x\": 0,\n          \"y\": 32\n        },\n        \"id\": 14,\n        \"options\": {\n          \"legend\": {\n            \"calcs\": [],\n            \"displayMode\": \"list\",\n            \"placement\": \"bottom\",\n            \"showLegend\": true\n          },\n          \"tooltip\": {\n            \"mode\": \"single\",\n            \"sort\": \"none\"\n          }\n        },\n        \"targets\": [\n          {\n            \"datasource\": {\n              \"type\": \"prometheus\",\n              \"uid\": \"PBFA97CFB590B2093\"\n            },\n            \"editorMode\": \"code\",\n            \"expr\": \"rate(libp2p_swarm_handshake_latency_seconds_sum{client_type=\\\"beacon\\\"}[$__rate_interval])\",\n            \"legendFormat\": \"{{service}} early_muxer: {{early_muxer}}\",\n            \"range\": true,\n            \"refId\": \"A\"\n          }\n        ],\n        \"title\": \"Swarm Handshake Latency\",\n        \"type\": \"timeseries\"\n      },\n      {\n        \"collapsed\": false,\n        \"gridPos\": {\n          \"h\": 1,\n          \"w\": 24,\n          \"x\": 0,\n          \"y\": 39\n        },\n        \"id\": 2,\n        \"panels\": [],\n        \"title\": \"I/O Latency\",\n        \"type\": \"row\"\n      },\n      {\n        \"datasource\": {\n          \"type\": \"prometheus\",\n          \"uid\": \"PBFA97CFB590B2093\"\n        },\n        \"fieldConfig\": {\n          \"defaults\": {\n            \"color\": {\n              \"mode\": \"palette-classic\"\n            },\n            \"custom\": {\n              \"axisCenteredZero\": false,\n              \"axisColorMode\": \"text\",\n              \"axisLabel\": \"\",\n              \"axisPlacement\": \"auto\",\n              \"barAlignment\": 0,\n              \"drawStyle\": \"line\",\n              \"fillOpacity\": 0,\n              \"gradientMode\": \"none\",\n              \"hideFrom\": {\n                \"legend\": false,\n                \"tooltip\": false,\n                \"viz\": false\n              },\n              \"lineInterpolation\": \"linear\",\n              \"lineWidth\": 1,\n              \"pointSize\": 5,\n              \"scaleDistribution\": {\n                \"type\": \"linear\"\n              },\n              \"showPoints\": \"auto\",\n              \"spanNulls\": false,\n              \"stacking\": {\n                \"group\": \"A\",\n                \"mode\": \"none\"\n              },\n              \"thresholdsStyle\": {\n                \"mode\": \"off\"\n              }\n            },\n            \"mappings\": [],\n            \"thresholds\": {\n              \"mode\": \"absolute\",\n              \"steps\": [\n                {\n                  \"color\": \"green\",\n                  \"value\": null\n                },\n                {\n                  \"color\": \"red\",\n                  \"value\": 80\n                }\n              ]\n            }\n          },\n          \"overrides\": []\n        },\n        \"gridPos\": {\n          \"h\": 7,\n          \"w\": 6,\n          \"x\": 0,\n          \"y\": 40\n        },\n        \"id\": 4,\n        \"options\": {\n          \"legend\": {\n            \"calcs\": [],\n            \"displayMode\": \"list\",\n            \"placement\": \"bottom\",\n            \"showLegend\": true\n          },\n          \"tooltip\": {\n            \"mode\": \"single\",\n            \"sort\": \"none\"\n          }\n        },\n        \"targets\": [\n          {\n            \"datasource\": {\n              \"type\": \"prometheus\",\n              \"uid\": \"PBFA97CFB590B2093\"\n            },\n            \"editorMode\": \"code\",\n            \"expr\": \"rate(bolt_db_read_tx_total[$__rate_interval])\",\n            \"legendFormat\": \"{{service}}\",\n            \"range\": true,\n            \"refId\": \"A\"\n          }\n        ],\n        \"title\": \"Boltdb Read Tx Rate\",\n        \"type\": \"timeseries\"\n      },\n      {\n        \"datasource\": {\n          \"type\": \"prometheus\",\n          \"uid\": \"PBFA97CFB590B2093\"\n        },\n        \"fieldConfig\": {\n          \"defaults\": {\n            \"color\": {\n              \"mode\": \"palette-classic\"\n            },\n            \"custom\": {\n              \"axisCenteredZero\": false,\n              \"axisColorMode\": \"text\",\n              \"axisLabel\": \"\",\n              \"axisPlacement\": \"auto\",\n              \"barAlignment\": 0,\n              \"drawStyle\": \"line\",\n              \"fillOpacity\": 0,\n              \"gradientMode\": \"none\",\n              \"hideFrom\": {\n                \"legend\": false,\n                \"tooltip\": false,\n                \"viz\": false\n              },\n              \"lineInterpolation\": \"linear\",\n              \"lineWidth\": 1,\n              \"pointSize\": 5,\n              \"scaleDistribution\": {\n                \"type\": \"linear\"\n              },\n              \"showPoints\": \"auto\",\n              \"spanNulls\": false,\n              \"stacking\": {\n                \"group\": \"A\",\n                \"mode\": \"none\"\n              },\n              \"thresholdsStyle\": {\n                \"mode\": \"off\"\n              }\n            },\n            \"mappings\": [],\n            \"thresholds\": {\n              \"mode\": \"absolute\",\n              \"steps\": [\n                {\n                  \"color\": \"green\",\n                  \"value\": null\n                },\n                {\n                  \"color\": \"red\",\n                  \"value\": 80\n                }\n              ]\n            }\n          },\n          \"overrides\": []\n        },\n        \"gridPos\": {\n          \"h\": 7,\n          \"w\": 6,\n          \"x\": 6,\n          \"y\": 40\n        },\n        \"id\": 3,\n        \"options\": {\n          \"legend\": {\n            \"calcs\": [],\n            \"displayMode\": \"list\",\n            \"placement\": \"bottom\",\n            \"showLegend\": true\n          },\n          \"tooltip\": {\n            \"mode\": \"single\",\n            \"sort\": \"none\"\n          }\n        },\n        \"targets\": [\n          {\n            \"datasource\": {\n              \"type\": \"prometheus\",\n              \"uid\": \"PBFA97CFB590B2093\"\n            },\n            \"editorMode\": \"code\",\n            \"expr\": \"rate(bolt_tx_write_seconds_total[$__rate_interval])\",\n            \"legendFormat\": \"{{service}}\",\n            \"range\": true,\n            \"refId\": \"A\"\n          }\n        ],\n        \"title\": \"BoltDb Write Seconds Total\",\n        \"type\": \"timeseries\"\n      },\n      {\n        \"datasource\": {\n          \"type\": \"prometheus\",\n          \"uid\": \"PBFA97CFB590B2093\"\n        },\n        \"fieldConfig\": {\n          \"defaults\": {\n            \"color\": {\n              \"mode\": \"palette-classic\"\n            },\n            \"custom\": {\n              \"axisCenteredZero\": false,\n              \"axisColorMode\": \"text\",\n              \"axisLabel\": \"\",\n              \"axisPlacement\": \"auto\",\n              \"barAlignment\": 0,\n              \"drawStyle\": \"line\",\n              \"fillOpacity\": 0,\n              \"gradientMode\": \"none\",\n              \"hideFrom\": {\n                \"legend\": false,\n                \"tooltip\": false,\n                \"viz\": false\n              },\n              \"lineInterpolation\": \"linear\",\n              \"lineWidth\": 1,\n              \"pointSize\": 5,\n              \"scaleDistribution\": {\n                \"type\": \"linear\"\n              },\n              \"showPoints\": \"auto\",\n              \"spanNulls\": false,\n              \"stacking\": {\n                \"group\": \"A\",\n                \"mode\": \"none\"\n              },\n              \"thresholdsStyle\": {\n                \"mode\": \"off\"\n              }\n            },\n            \"mappings\": [],\n            \"thresholds\": {\n              \"mode\": \"absolute\",\n              \"steps\": [\n                {\n                  \"color\": \"green\",\n                  \"value\": null\n                },\n                {\n                  \"color\": \"red\",\n                  \"value\": 80\n                }\n              ]\n            }\n          },\n          \"overrides\": []\n        },\n        \"gridPos\": {\n          \"h\": 7,\n          \"w\": 6,\n          \"x\": 12,\n          \"y\": 40\n        },\n        \"id\": 8,\n        \"options\": {\n          \"legend\": {\n            \"calcs\": [],\n            \"displayMode\": \"list\",\n            \"placement\": \"bottom\",\n            \"showLegend\": true\n          },\n          \"tooltip\": {\n            \"mode\": \"single\",\n            \"sort\": \"none\"\n          }\n        },\n        \"targets\": [\n          {\n            \"datasource\": {\n              \"type\": \"prometheus\",\n              \"uid\": \"PBFA97CFB590B2093\"\n            },\n            \"editorMode\": \"code\",\n            \"expr\": \"rate(db_beacon_state_reading_milliseconds_sum{client_type=\\\"beacon\\\"}[$__rate_interval])\",\n            \"legendFormat\": \"{{service}}\",\n            \"range\": true,\n            \"refId\": \"A\"\n          }\n        ],\n        \"title\": \"Beacon DB Reading Milliseconds\",\n        \"type\": \"timeseries\"\n      },\n      {\n        \"datasource\": {\n          \"type\": \"prometheus\",\n          \"uid\": \"PBFA97CFB590B2093\"\n        },\n        \"fieldConfig\": {\n          \"defaults\": {\n            \"color\": {\n              \"mode\": \"palette-classic\"\n            },\n            \"custom\": {\n              \"axisCenteredZero\": false,\n              \"axisColorMode\": \"text\",\n              \"axisLabel\": \"\",\n              \"axisPlacement\": \"auto\",\n              \"barAlignment\": 0,\n              \"drawStyle\": \"line\",\n              \"fillOpacity\": 0,\n              \"gradientMode\": \"none\",\n              \"hideFrom\": {\n                \"legend\": false,\n                \"tooltip\": false,\n                \"viz\": false\n              },\n              \"lineInterpolation\": \"linear\",\n              \"lineWidth\": 1,\n              \"pointSize\": 5,\n              \"scaleDistribution\": {\n                \"type\": \"linear\"\n              },\n              \"showPoints\": \"auto\",\n              \"spanNulls\": false,\n              \"stacking\": {\n                \"group\": \"A\",\n                \"mode\": \"none\"\n              },\n              \"thresholdsStyle\": {\n                \"mode\": \"off\"\n              }\n            },\n            \"mappings\": [],\n            \"thresholds\": {\n              \"mode\": \"absolute\",\n              \"steps\": [\n                {\n                  \"color\": \"green\",\n                  \"value\": null\n                },\n                {\n                  \"color\": \"red\",\n                  \"value\": 80\n                }\n              ]\n            }\n          },\n          \"overrides\": []\n        },\n        \"gridPos\": {\n          \"h\": 7,\n          \"w\": 6,\n          \"x\": 18,\n          \"y\": 40\n        },\n        \"id\": 7,\n        \"options\": {\n          \"legend\": {\n            \"calcs\": [],\n            \"displayMode\": \"list\",\n            \"placement\": \"bottom\",\n            \"showLegend\": true\n          },\n          \"tooltip\": {\n            \"mode\": \"single\",\n            \"sort\": \"none\"\n          }\n        },\n        \"targets\": [\n          {\n            \"datasource\": {\n              \"type\": \"prometheus\",\n              \"uid\": \"PBFA97CFB590B2093\"\n            },\n            \"editorMode\": \"code\",\n            \"expr\": \"rate(db_beacon_state_saving_milliseconds_sum{client_type=\\\"beacon\\\"}[$__rate_interval])\",\n            \"interval\": \"\",\n            \"legendFormat\": \"{{service}}\",\n            \"range\": true,\n            \"refId\": \"A\"\n          }\n        ],\n        \"title\": \"Beacon DB Saving Milliseconds\",\n        \"type\": \"timeseries\"\n      },\n      {\n        \"datasource\": {\n          \"type\": \"prometheus\",\n          \"uid\": \"PBFA97CFB590B2093\"\n        },\n        \"fieldConfig\": {\n          \"defaults\": {\n            \"color\": {\n              \"mode\": \"palette-classic\"\n            },\n            \"custom\": {\n              \"axisCenteredZero\": false,\n              \"axisColorMode\": \"text\",\n              \"axisLabel\": \"\",\n              \"axisPlacement\": \"auto\",\n              \"barAlignment\": 0,\n              \"drawStyle\": \"line\",\n              \"fillOpacity\": 0,\n              \"gradientMode\": \"none\",\n              \"hideFrom\": {\n                \"legend\": false,\n                \"tooltip\": false,\n                \"viz\": false\n              },\n              \"lineInterpolation\": \"linear\",\n              \"lineWidth\": 1,\n              \"pointSize\": 5,\n              \"scaleDistribution\": {\n                \"type\": \"linear\"\n              },\n              \"showPoints\": \"auto\",\n              \"spanNulls\": false,\n              \"stacking\": {\n                \"group\": \"A\",\n                \"mode\": \"none\"\n              },\n              \"thresholdsStyle\": {\n                \"mode\": \"off\"\n              }\n            },\n            \"mappings\": [],\n            \"thresholds\": {\n              \"mode\": \"absolute\",\n              \"steps\": [\n                {\n                  \"color\": \"green\",\n                  \"value\": null\n                },\n                {\n                  \"color\": \"red\",\n                  \"value\": 80\n                }\n              ]\n            }\n          },\n          \"overrides\": []\n        },\n        \"gridPos\": {\n          \"h\": 7,\n          \"w\": 6,\n          \"x\": 0,\n          \"y\": 47\n        },\n        \"id\": 6,\n        \"options\": {\n          \"legend\": {\n            \"calcs\": [],\n            \"displayMode\": \"list\",\n            \"placement\": \"bottom\",\n            \"showLegend\": true\n          },\n          \"tooltip\": {\n            \"mode\": \"single\",\n            \"sort\": \"none\"\n          }\n        },\n        \"targets\": [\n          {\n            \"datasource\": {\n              \"type\": \"prometheus\",\n              \"uid\": \"PBFA97CFB590B2093\"\n            },\n            \"editorMode\": \"code\",\n            \"expr\": \"bolt_db_freelist_pending_pages\",\n            \"legendFormat\": \"{{service}}\",\n            \"range\": true,\n            \"refId\": \"A\"\n          }\n        ],\n        \"title\": \"Bolt Pending Pages\",\n        \"type\": \"timeseries\"\n      },\n      {\n        \"datasource\": {\n          \"type\": \"prometheus\",\n          \"uid\": \"PBFA97CFB590B2093\"\n        },\n        \"fieldConfig\": {\n          \"defaults\": {\n            \"color\": {\n              \"mode\": \"palette-classic\"\n            },\n            \"custom\": {\n              \"axisCenteredZero\": false,\n              \"axisColorMode\": \"text\",\n              \"axisLabel\": \"\",\n              \"axisPlacement\": \"auto\",\n              \"barAlignment\": 0,\n              \"drawStyle\": \"line\",\n              \"fillOpacity\": 0,\n              \"gradientMode\": \"none\",\n              \"hideFrom\": {\n                \"legend\": false,\n                \"tooltip\": false,\n                \"viz\": false\n              },\n              \"lineInterpolation\": \"linear\",\n              \"lineWidth\": 1,\n              \"pointSize\": 5,\n              \"scaleDistribution\": {\n                \"type\": \"linear\"\n              },\n              \"showPoints\": \"auto\",\n              \"spanNulls\": false,\n              \"stacking\": {\n                \"group\": \"A\",\n                \"mode\": \"none\"\n              },\n              \"thresholdsStyle\": {\n                \"mode\": \"off\"\n              }\n            },\n            \"mappings\": [],\n            \"thresholds\": {\n              \"mode\": \"absolute\",\n              \"steps\": [\n                {\n                  \"color\": \"green\",\n                  \"value\": null\n                },\n                {\n                  \"color\": \"red\",\n                  \"value\": 80\n                }\n              ]\n            }\n          },\n          \"overrides\": []\n        },\n        \"gridPos\": {\n          \"h\": 7,\n          \"w\": 6,\n          \"x\": 6,\n          \"y\": 47\n        },\n        \"id\": 5,\n        \"options\": {\n          \"legend\": {\n            \"calcs\": [],\n            \"displayMode\": \"list\",\n            \"placement\": \"bottom\",\n            \"showLegend\": true\n          },\n          \"tooltip\": {\n            \"mode\": \"single\",\n            \"sort\": \"none\"\n          }\n        },\n        \"targets\": [\n          {\n            \"datasource\": {\n              \"type\": \"prometheus\",\n              \"uid\": \"PBFA97CFB590B2093\"\n            },\n            \"editorMode\": \"code\",\n            \"expr\": \"rate(bolt_tx_writes_total[$__rate_interval])\",\n            \"legendFormat\": \"{{service}}\",\n            \"range\": true,\n            \"refId\": \"A\"\n          }\n        ],\n        \"title\": \"Bolt Tx Write Rate\",\n        \"type\": \"timeseries\"\n      }\n    ],\n    \"refresh\": false,\n    \"schemaVersion\": 38,\n    \"style\": \"dark\",\n    \"tags\": [],\n    \"templating\": {\n      \"list\": []\n    },\n    \"time\": {\n      \"from\": \"now-3h\",\n      \"to\": \"now\"\n    },\n    \"timepicker\": {},\n    \"timezone\": \"\",\n    \"title\": \"Prysm Latency Metrics\",\n    \"uid\": \"b7c878a3-ff5c-46e1-8961-7d4b417110bd\",\n    \"version\": 28,\n    \"weekStart\": \"\"\n  }"
  },
  {
    "path": "static_files/grafana-config/dashboards/teku-dashboard.json",
    "content": "{\n  \"__inputs\": [\n    {\n      \"name\": \"DS_PROMETHEUS\",\n      \"label\": \"Prometheus\",\n      \"description\": \"\",\n      \"type\": \"datasource\",\n      \"pluginId\": \"prometheus\",\n      \"pluginName\": \"Prometheus\"\n    },\n    {\n      \"name\": \"DS_EXPRESSION\",\n      \"label\": \"Expression\",\n      \"description\": \"\",\n      \"type\": \"datasource\",\n      \"pluginId\": \"__expr__\"\n    }\n  ],\n  \"__elements\": {},\n  \"__requires\": [\n    {\n      \"type\": \"datasource\",\n      \"id\": \"__expr__\",\n      \"version\": \"1.0.0\"\n    },\n    {\n      \"type\": \"grafana\",\n      \"id\": \"grafana\",\n      \"name\": \"Grafana\",\n      \"version\": \"12.0.2\"\n    },\n    {\n      \"type\": \"panel\",\n      \"id\": \"piechart\",\n      \"name\": \"Pie chart\",\n      \"version\": \"\"\n    },\n    {\n      \"type\": \"datasource\",\n      \"id\": \"prometheus\",\n      \"name\": \"Prometheus\",\n      \"version\": \"1.0.0\"\n    },\n    {\n      \"type\": \"panel\",\n      \"id\": \"stat\",\n      \"name\": \"Stat\",\n      \"version\": \"\"\n    },\n    {\n      \"type\": \"panel\",\n      \"id\": \"table\",\n      \"name\": \"Table\",\n      \"version\": \"\"\n    },\n    {\n      \"type\": \"panel\",\n      \"id\": \"text\",\n      \"name\": \"Text\",\n      \"version\": \"\"\n    },\n    {\n      \"type\": \"panel\",\n      \"id\": \"timeseries\",\n      \"name\": \"Time series\",\n      \"version\": \"\"\n    }\n  ],\n  \"annotations\": {\n    \"list\": [\n      {\n        \"$$hashKey\": \"object:56\",\n        \"builtIn\": 1,\n        \"datasource\": {\n          \"type\": \"datasource\",\n          \"uid\": \"grafana\"\n        },\n        \"enable\": true,\n        \"hide\": true,\n        \"iconColor\": \"rgba(0, 211, 255, 1)\",\n        \"limit\": 100,\n        \"name\": \"Annotations & Alerts\",\n        \"showIn\": 0,\n        \"target\": {\n          \"limit\": 100,\n          \"matchAny\": false,\n          \"tags\": [],\n          \"type\": \"dashboard\"\n        },\n        \"type\": \"dashboard\"\n      }\n    ]\n  },\n  \"description\": \"Dashboard to monitor multiple Teku instances.\",\n  \"editable\": true,\n  \"fiscalYearStartMonth\": 0,\n  \"graphTooltip\": 1,\n  \"id\": null,\n  \"links\": [\n    {\n      \"asDropdown\": false,\n      \"icon\": \"external link\",\n      \"includeVars\": false,\n      \"keepTime\": false,\n      \"tags\": [],\n      \"targetBlank\": true,\n      \"title\": \"Teku Website\",\n      \"tooltip\": \"\",\n      \"type\": \"link\",\n      \"url\": \"https://consensys.net/knowledge-base/ethereum-2/teku\"\n    },\n    {\n      \"asDropdown\": false,\n      \"icon\": \"doc\",\n      \"includeVars\": false,\n      \"keepTime\": false,\n      \"tags\": [],\n      \"targetBlank\": true,\n      \"title\": \"Teku Documentation\",\n      \"tooltip\": \"\",\n      \"type\": \"link\",\n      \"url\": \"https://docs.teku.consensys.net/\"\n    },\n    {\n      \"asDropdown\": false,\n      \"icon\": \"external link\",\n      \"includeVars\": false,\n      \"keepTime\": false,\n      \"tags\": [],\n      \"targetBlank\": true,\n      \"title\": \"Teku GitHub\",\n      \"tooltip\": \"\",\n      \"type\": \"link\",\n      \"url\": \"https://github.com/ConsenSys/teku\"\n    }\n  ],\n  \"panels\": [\n    {\n      \"collapsed\": false,\n      \"gridPos\": {\n        \"h\": 1,\n        \"w\": 24,\n        \"x\": 0,\n        \"y\": 0\n      },\n      \"id\": 79,\n      \"panels\": [],\n      \"title\": \"Validator\",\n      \"type\": \"row\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"description\": \"Number of blocks published\",\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"thresholds\"\n          },\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"yellow\"\n              },\n              {\n                \"color\": \"green\",\n                \"value\": 1\n              }\n            ]\n          },\n          \"unit\": \"none\"\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 5,\n        \"w\": 4,\n        \"x\": 0,\n        \"y\": 1\n      },\n      \"id\": 37,\n      \"options\": {\n        \"colorMode\": \"background\",\n        \"graphMode\": \"none\",\n        \"justifyMode\": \"auto\",\n        \"orientation\": \"auto\",\n        \"percentChangeColorMode\": \"standard\",\n        \"reduceOptions\": {\n          \"calcs\": [\n            \"mean\"\n          ],\n          \"fields\": \"\",\n          \"values\": false\n        },\n        \"showPercentChange\": false,\n        \"text\": {},\n        \"textMode\": \"value\",\n        \"wideLayout\": true\n      },\n      \"pluginVersion\": \"12.0.2\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"expr\": \"sum(validator_beacon_node_requests_total{instance=~\\\"$system\\\",method=\\\"publish_block\\\",outcome=\\\"success\\\"})\",\n          \"instant\": true,\n          \"interval\": \"\",\n          \"legendFormat\": \"\",\n          \"refId\": \"A\"\n        }\n      ],\n      \"title\": \"Published Blocks\",\n      \"type\": \"stat\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"description\": \"Number of attestations published\",\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"thresholds\"\n          },\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"yellow\"\n              },\n              {\n                \"color\": \"green\",\n                \"value\": 1\n              }\n            ]\n          },\n          \"unit\": \"none\"\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 5,\n        \"w\": 4,\n        \"x\": 4,\n        \"y\": 1\n      },\n      \"id\": 38,\n      \"options\": {\n        \"colorMode\": \"background\",\n        \"graphMode\": \"none\",\n        \"justifyMode\": \"auto\",\n        \"orientation\": \"auto\",\n        \"percentChangeColorMode\": \"standard\",\n        \"reduceOptions\": {\n          \"calcs\": [\n            \"mean\"\n          ],\n          \"fields\": \"\",\n          \"values\": false\n        },\n        \"showPercentChange\": false,\n        \"text\": {},\n        \"textMode\": \"value\",\n        \"wideLayout\": true\n      },\n      \"pluginVersion\": \"12.0.2\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"expr\": \"sum(validator_beacon_node_requests_total{instance=~\\\"$system\\\",method=\\\"publish_attestation\\\",outcome=\\\"success\\\"})\",\n          \"instant\": true,\n          \"interval\": \"\",\n          \"legendFormat\": \"\",\n          \"refId\": \"A\"\n        }\n      ],\n      \"title\": \"Published Attestations\",\n      \"type\": \"stat\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"description\": \"Number of local validators\",\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"thresholds\"\n          },\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"text\"\n              },\n              {\n                \"color\": \"green\",\n                \"value\": 1\n              }\n            ]\n          },\n          \"unit\": \"none\"\n        },\n        \"overrides\": [\n          {\n            \"matcher\": {\n              \"id\": \"byName\",\n              \"options\": \"exited_slashed\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"thresholds\",\n                \"value\": {\n                  \"mode\": \"absolute\",\n                  \"steps\": [\n                    {\n                      \"color\": \"text\"\n                    },\n                    {\n                      \"color\": \"red\",\n                      \"value\": 1\n                    }\n                  ]\n                }\n              }\n            ]\n          },\n          {\n            \"matcher\": {\n              \"id\": \"byName\",\n              \"options\": \"active_slashed\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"thresholds\",\n                \"value\": {\n                  \"mode\": \"absolute\",\n                  \"steps\": [\n                    {\n                      \"color\": \"text\"\n                    },\n                    {\n                      \"color\": \"red\",\n                      \"value\": 1\n                    }\n                  ]\n                }\n              }\n            ]\n          },\n          {\n            \"matcher\": {\n              \"id\": \"byName\",\n              \"options\": \"unknown\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"thresholds\",\n                \"value\": {\n                  \"mode\": \"absolute\",\n                  \"steps\": [\n                    {\n                      \"color\": \"text\"\n                    },\n                    {\n                      \"color\": \"yellow\",\n                      \"value\": 1\n                    }\n                  ]\n                }\n              }\n            ]\n          }\n        ]\n      },\n      \"gridPos\": {\n        \"h\": 10,\n        \"w\": 8,\n        \"x\": 8,\n        \"y\": 1\n      },\n      \"id\": 36,\n      \"options\": {\n        \"colorMode\": \"background\",\n        \"graphMode\": \"none\",\n        \"justifyMode\": \"center\",\n        \"orientation\": \"auto\",\n        \"percentChangeColorMode\": \"standard\",\n        \"reduceOptions\": {\n          \"calcs\": [\n            \"lastNotNull\"\n          ],\n          \"fields\": \"\",\n          \"values\": false\n        },\n        \"showPercentChange\": false,\n        \"text\": {},\n        \"textMode\": \"value_and_name\",\n        \"wideLayout\": true\n      },\n      \"pluginVersion\": \"12.0.2\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"exemplar\": false,\n          \"expr\": \"sort_desc(sum by (status) (validator_local_validator_counts{instance=~\\\"$system\\\"}))\",\n          \"instant\": true,\n          \"interval\": \"\",\n          \"legendFormat\": \"{{status}}\",\n          \"refId\": \"A\"\n        }\n      ],\n      \"title\": \"Local Validators\",\n      \"type\": \"stat\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"description\": \"The total amount of staked Eth by all validators running on this validator node.\",\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"palette-classic\"\n          },\n          \"custom\": {\n            \"hideFrom\": {\n              \"legend\": false,\n              \"tooltip\": false,\n              \"viz\": false\n            }\n          },\n          \"decimals\": 0,\n          \"displayName\": \"\",\n          \"mappings\": [],\n          \"unit\": \"none\"\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 10,\n        \"w\": 3,\n        \"x\": 16,\n        \"y\": 1\n      },\n      \"id\": 44,\n      \"options\": {\n        \"displayLabels\": [\n          \"value\"\n        ],\n        \"legend\": {\n          \"displayMode\": \"list\",\n          \"placement\": \"bottom\",\n          \"showLegend\": true\n        },\n        \"pieType\": \"pie\",\n        \"reduceOptions\": {\n          \"calcs\": [\n            \"lastNotNull\"\n          ],\n          \"fields\": \"\",\n          \"values\": false\n        },\n        \"tooltip\": {\n          \"hideZeros\": false,\n          \"mode\": \"single\",\n          \"sort\": \"none\"\n        }\n      },\n      \"pluginVersion\": \"12.0.2\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"editorMode\": \"code\",\n          \"expr\": \"sum by (withdrawal_credentials_type) (validator_local_validator_balances{instance=~\\\"$system\\\"} / 10^9)\",\n          \"instant\": true,\n          \"interval\": \"\",\n          \"legendFormat\": \"\",\n          \"refId\": \"A\"\n        }\n      ],\n      \"title\": \"Local Staked ETH Credentials Distribution\",\n      \"type\": \"piechart\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"description\": \"Total amount of Eth staked by local validators.\",\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"thresholds\"\n          },\n          \"decimals\": 0,\n          \"displayName\": \"\",\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\"\n              }\n            ]\n          },\n          \"unit\": \"none\"\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 5,\n        \"w\": 3,\n        \"x\": 19,\n        \"y\": 1\n      },\n      \"id\": 157,\n      \"options\": {\n        \"colorMode\": \"background\",\n        \"graphMode\": \"none\",\n        \"justifyMode\": \"auto\",\n        \"orientation\": \"auto\",\n        \"percentChangeColorMode\": \"standard\",\n        \"reduceOptions\": {\n          \"calcs\": [\n            \"mean\"\n          ],\n          \"fields\": \"\",\n          \"values\": false\n        },\n        \"showPercentChange\": false,\n        \"text\": {},\n        \"textMode\": \"value\",\n        \"wideLayout\": true\n      },\n      \"pluginVersion\": \"12.0.2\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"editorMode\": \"code\",\n          \"expr\": \"sum(validator_local_validator_balances{instance=~\\\"$system\\\"}) / 10^9\",\n          \"instant\": true,\n          \"interval\": \"\",\n          \"legendFormat\": \"\",\n          \"refId\": \"A\"\n        }\n      ],\n      \"title\": \"Local Staked Eth Total\",\n      \"type\": \"stat\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"thresholds\"\n          },\n          \"custom\": {\n            \"align\": \"auto\",\n            \"cellOptions\": {\n              \"type\": \"auto\"\n            },\n            \"filterable\": false,\n            \"inspect\": false,\n            \"minWidth\": 0\n          },\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\"\n              },\n              {\n                \"color\": \"red\",\n                \"value\": 80\n              }\n            ]\n          }\n        },\n        \"overrides\": [\n          {\n            \"matcher\": {\n              \"id\": \"byName\",\n              \"options\": \"Time\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"custom.hidden\",\n                \"value\": true\n              }\n            ]\n          },\n          {\n            \"matcher\": {\n              \"id\": \"byName\",\n              \"options\": \"version\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"displayName\",\n                \"value\": \"Version\"\n              }\n            ]\n          },\n          {\n            \"matcher\": {\n              \"id\": \"byName\",\n              \"options\": \"Value\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"displayName\",\n                \"value\": \"Count\"\n              },\n              {\n                \"id\": \"custom.width\",\n                \"value\": 50\n              }\n            ]\n          }\n        ]\n      },\n      \"gridPos\": {\n        \"h\": 10,\n        \"w\": 2,\n        \"x\": 22,\n        \"y\": 1\n      },\n      \"id\": 126,\n      \"options\": {\n        \"cellHeight\": \"sm\",\n        \"footer\": {\n          \"countRows\": false,\n          \"fields\": \"\",\n          \"reducer\": [\n            \"sum\"\n          ],\n          \"show\": false\n        },\n        \"showHeader\": false\n      },\n      \"pluginVersion\": \"12.0.2\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"exemplar\": false,\n          \"expr\": \"sum by (version) (beacon_teku_version_total{instance=~\\\"$system\\\"} or validator_teku_version_total{instance=~\\\"$system\\\"})\",\n          \"format\": \"table\",\n          \"instant\": true,\n          \"interval\": \"\",\n          \"legendFormat\": \"{{version}}\",\n          \"refId\": \"A\"\n        }\n      ],\n      \"title\": \"Teku Versions\",\n      \"type\": \"table\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"description\": \"Number of sync committee messages published.\",\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"thresholds\"\n          },\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"yellow\"\n              },\n              {\n                \"color\": \"green\",\n                \"value\": 1\n              }\n            ]\n          },\n          \"unit\": \"none\"\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 5,\n        \"w\": 4,\n        \"x\": 0,\n        \"y\": 6\n      },\n      \"id\": 67,\n      \"options\": {\n        \"colorMode\": \"background\",\n        \"graphMode\": \"none\",\n        \"justifyMode\": \"auto\",\n        \"orientation\": \"auto\",\n        \"percentChangeColorMode\": \"standard\",\n        \"reduceOptions\": {\n          \"calcs\": [\n            \"mean\"\n          ],\n          \"fields\": \"\",\n          \"values\": false\n        },\n        \"showPercentChange\": false,\n        \"text\": {},\n        \"textMode\": \"value\",\n        \"wideLayout\": true\n      },\n      \"pluginVersion\": \"12.0.2\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"exemplar\": true,\n          \"expr\": \"sum(validator_beacon_node_requests_total{instance=~\\\"$system\\\",method=\\\"send_sync_committee_messages\\\",outcome=\\\"success\\\"})\",\n          \"instant\": true,\n          \"interval\": \"\",\n          \"legendFormat\": \"\",\n          \"refId\": \"A\"\n        }\n      ],\n      \"title\": \"Published Sync Committee Messages\",\n      \"type\": \"stat\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"description\": \"Number of aggregates published\",\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"thresholds\"\n          },\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"yellow\"\n              },\n              {\n                \"color\": \"green\",\n                \"value\": 1\n              }\n            ]\n          },\n          \"unit\": \"none\"\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 5,\n        \"w\": 4,\n        \"x\": 4,\n        \"y\": 6\n      },\n      \"id\": 39,\n      \"options\": {\n        \"colorMode\": \"background\",\n        \"graphMode\": \"none\",\n        \"justifyMode\": \"auto\",\n        \"orientation\": \"auto\",\n        \"percentChangeColorMode\": \"standard\",\n        \"reduceOptions\": {\n          \"calcs\": [\n            \"mean\"\n          ],\n          \"fields\": \"\",\n          \"values\": false\n        },\n        \"showPercentChange\": false,\n        \"text\": {},\n        \"textMode\": \"value\",\n        \"wideLayout\": true\n      },\n      \"pluginVersion\": \"12.0.2\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"expr\": \"sum(validator_beacon_node_requests_total{instance=~\\\"$system\\\",method=\\\"publish_aggregate_and_proofs\\\",outcome=\\\"success\\\"})\",\n          \"instant\": true,\n          \"interval\": \"\",\n          \"legendFormat\": \"\",\n          \"refId\": \"A\"\n        }\n      ],\n      \"title\": \"Published Aggregates\",\n      \"type\": \"stat\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"description\": \"Total number of active validators in the network.\",\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"thresholds\"\n          },\n          \"decimals\": 0,\n          \"displayName\": \"\",\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\"\n              }\n            ]\n          },\n          \"unit\": \"none\"\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 5,\n        \"w\": 3,\n        \"x\": 19,\n        \"y\": 6\n      },\n      \"id\": 156,\n      \"options\": {\n        \"colorMode\": \"background\",\n        \"graphMode\": \"none\",\n        \"justifyMode\": \"auto\",\n        \"orientation\": \"auto\",\n        \"percentChangeColorMode\": \"standard\",\n        \"reduceOptions\": {\n          \"calcs\": [\n            \"mean\"\n          ],\n          \"fields\": \"\",\n          \"values\": false\n        },\n        \"showPercentChange\": false,\n        \"text\": {},\n        \"textMode\": \"value\",\n        \"wideLayout\": true\n      },\n      \"pluginVersion\": \"12.0.2\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"expr\": \"max(beacon_current_active_validators{instance=~\\\"$system\\\"})\",\n          \"instant\": true,\n          \"interval\": \"\",\n          \"legendFormat\": \"\",\n          \"refId\": \"A\"\n        }\n      ],\n      \"title\": \"Total Validators\",\n      \"type\": \"stat\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"description\": \"Percentage of attestations in each epoch with the correct head root, correct target root and that were successfully included in blocks.\",\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"palette-classic\"\n          },\n          \"custom\": {\n            \"axisBorderShow\": false,\n            \"axisCenteredZero\": false,\n            \"axisColorMode\": \"text\",\n            \"axisLabel\": \"\",\n            \"axisPlacement\": \"auto\",\n            \"barAlignment\": 0,\n            \"barWidthFactor\": 0.6,\n            \"drawStyle\": \"line\",\n            \"fillOpacity\": 0,\n            \"gradientMode\": \"opacity\",\n            \"hideFrom\": {\n              \"legend\": false,\n              \"tooltip\": false,\n              \"viz\": false\n            },\n            \"insertNulls\": false,\n            \"lineInterpolation\": \"linear\",\n            \"lineWidth\": 1,\n            \"pointSize\": 5,\n            \"scaleDistribution\": {\n              \"type\": \"linear\"\n            },\n            \"showPoints\": \"never\",\n            \"spanNulls\": false,\n            \"stacking\": {\n              \"group\": \"A\",\n              \"mode\": \"none\"\n            },\n            \"thresholdsStyle\": {\n              \"mode\": \"off\"\n            }\n          },\n          \"links\": [],\n          \"mappings\": [],\n          \"max\": 1,\n          \"min\": 0,\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\"\n              },\n              {\n                \"color\": \"red\",\n                \"value\": 80\n              }\n            ]\n          },\n          \"unit\": \"percentunit\"\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 10,\n        \"w\": 8,\n        \"x\": 0,\n        \"y\": 11\n      },\n      \"id\": 41,\n      \"options\": {\n        \"legend\": {\n          \"calcs\": [\n            \"mean\",\n            \"lastNotNull\"\n          ],\n          \"displayMode\": \"table\",\n          \"placement\": \"bottom\",\n          \"showLegend\": true\n        },\n        \"tooltip\": {\n          \"hideZeros\": false,\n          \"mode\": \"multi\",\n          \"sort\": \"none\"\n        }\n      },\n      \"pluginVersion\": \"12.0.2\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"exemplar\": true,\n          \"expr\": \"clamp_max(avg((validator_performance_included_attestations{instance=~\\\"$system\\\"} / validator_performance_expected_attestations{instance=~\\\"$system\\\"}) >= 0), 1)\",\n          \"interval\": \"\",\n          \"legendFormat\": \"{{instance}} Included\",\n          \"refId\": \"C\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"exemplar\": true,\n          \"expr\": \"clamp_max(avg((validator_performance_correct_head_block_count{instance=~\\\"$system\\\"} / validator_performance_included_attestations{instance=~\\\"$system\\\"}) >= 0), 1)\",\n          \"interval\": \"\",\n          \"legendFormat\": \"{{instance}} Correct Head\",\n          \"refId\": \"A\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"exemplar\": true,\n          \"expr\": \"avg((validator_performance_correct_target_count{instance=~\\\"$system\\\"} / validator_performance_included_attestations{instance=~\\\"$system\\\"}) >= 0)\",\n          \"interval\": \"\",\n          \"legendFormat\": \"{{instance}} Correct Target\",\n          \"refId\": \"B\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"exemplar\": true,\n          \"expr\": \"clamp_max(avg(\\n((\\nvalidator_performance_correct_head_block_count{instance=~\\\"$system\\\"} - (validator_performance_expected_attestations{instance=~\\\"$system\\\"} - validator_performance_correct_head_block_count{instance=~\\\"$system\\\"}) +\\nvalidator_performance_correct_target_count{instance=~\\\"$system\\\"} - (validator_performance_expected_attestations{instance=~\\\"$system\\\"} - validator_performance_correct_target_count{instance=~\\\"$system\\\"}) +\\nvalidator_performance_included_attestations{instance=~\\\"$system\\\"} - (validator_performance_expected_attestations{instance=~\\\"$system\\\"} - validator_performance_included_attestations{instance=~\\\"$system\\\"}) +\\n(0.875  * validator_performance_included_attestations{instance=~\\\"$system\\\"} / validator_performance_inclusion_distance_average{instance=~\\\"$system\\\"})\\n) / validator_performance_expected_attestations{instance=~\\\"$system\\\"} / 3.875)>=0), 1)\",\n          \"interval\": \"\",\n          \"legendFormat\": \"{{instance}} Attestation Rewards Earned\",\n          \"refId\": \"D\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"exemplar\": true,\n          \"expr\": \"clamp_max(avg((validator_performance_included_sync_committee_messages{instance=~\\\"$system\\\"} / validator_performance_expected_sync_committee_messages{instance=~\\\"$system\\\"}) >= 0), 1)\",\n          \"hide\": false,\n          \"interval\": \"\",\n          \"legendFormat\": \"{{instance}} Included Signatures\",\n          \"refId\": \"E\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"exemplar\": true,\n          \"expr\": \"clamp_max(avg((validator_performance_produced_sync_committee_messages{instance=~\\\"$system\\\"} / validator_performance_expected_sync_committee_messages{instance=~\\\"$system\\\"}) >= 0), 1)\",\n          \"hide\": false,\n          \"interval\": \"\",\n          \"legendFormat\": \"{{instance}} Produced Signatures\",\n          \"refId\": \"F\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"exemplar\": true,\n          \"expr\": \"clamp_max(avg((validator_performance_correct_sync_committee_messages{instance=~\\\"$system\\\"} / validator_performance_produced_sync_committee_messages{instance=~\\\"$system\\\"}) >= 0), 1)\",\n          \"hide\": false,\n          \"interval\": \"\",\n          \"legendFormat\": \"{{instance}} Correct Signatures\",\n          \"refId\": \"G\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"editorMode\": \"code\",\n          \"exemplar\": true,\n          \"expr\": \"clamp_max(avg((validator_performance_produced_attestations{instance=~\\\"$system\\\"} / validator_performance_expected_attestations{instance=~\\\"$system\\\"}) >= 0), 1)\",\n          \"hide\": false,\n          \"interval\": \"\",\n          \"legendFormat\": \"{{instance}} Produced\",\n          \"range\": true,\n          \"refId\": \"H\"\n        }\n      ],\n      \"title\": \"Attestation Performance\",\n      \"type\": \"timeseries\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"description\": \"Number of slots between when an attestation is created to when it is included in a block. The minimum possible inclusion distance is 1.\",\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"palette-classic\"\n          },\n          \"custom\": {\n            \"axisBorderShow\": false,\n            \"axisCenteredZero\": false,\n            \"axisColorMode\": \"text\",\n            \"axisLabel\": \"\",\n            \"axisPlacement\": \"auto\",\n            \"barAlignment\": 0,\n            \"barWidthFactor\": 0.6,\n            \"drawStyle\": \"line\",\n            \"fillOpacity\": 0,\n            \"gradientMode\": \"opacity\",\n            \"hideFrom\": {\n              \"legend\": false,\n              \"tooltip\": false,\n              \"viz\": false\n            },\n            \"insertNulls\": false,\n            \"lineInterpolation\": \"linear\",\n            \"lineWidth\": 1,\n            \"pointSize\": 5,\n            \"scaleDistribution\": {\n              \"type\": \"linear\"\n            },\n            \"showPoints\": \"never\",\n            \"spanNulls\": false,\n            \"stacking\": {\n              \"group\": \"A\",\n              \"mode\": \"none\"\n            },\n            \"thresholdsStyle\": {\n              \"mode\": \"off\"\n            }\n          },\n          \"links\": [],\n          \"mappings\": [],\n          \"min\": 1,\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\"\n              },\n              {\n                \"color\": \"red\",\n                \"value\": 80\n              }\n            ]\n          },\n          \"unit\": \"none\"\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 10,\n        \"w\": 8,\n        \"x\": 8,\n        \"y\": 11\n      },\n      \"id\": 43,\n      \"options\": {\n        \"legend\": {\n          \"calcs\": [\n            \"mean\",\n            \"lastNotNull\"\n          ],\n          \"displayMode\": \"table\",\n          \"placement\": \"bottom\",\n          \"showLegend\": true\n        },\n        \"tooltip\": {\n          \"hideZeros\": false,\n          \"mode\": \"multi\",\n          \"sort\": \"none\"\n        }\n      },\n      \"pluginVersion\": \"12.0.2\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"expr\": \"validator_performance_inclusion_distance_min{instance=~\\\"$system\\\"}\",\n          \"interval\": \"\",\n          \"legendFormat\": \"{{instance}} Minimum\",\n          \"refId\": \"A\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"expr\": \"validator_performance_inclusion_distance_average{instance=~\\\"$system\\\"}\",\n          \"interval\": \"\",\n          \"legendFormat\": \"{{instance}} Average\",\n          \"refId\": \"B\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"expr\": \"validator_performance_inclusion_distance_max{instance=~\\\"$system\\\"}\",\n          \"interval\": \"\",\n          \"legendFormat\": \"{{instance}} Maximum\",\n          \"refId\": \"C\"\n        }\n      ],\n      \"title\": \"Attestation Inclusion Distance (slots)\",\n      \"type\": \"timeseries\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"description\": \"Percentage of blocks produced in each epoch that were successfully included in the canonical chain.\",\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"palette-classic\"\n          },\n          \"custom\": {\n            \"axisBorderShow\": false,\n            \"axisCenteredZero\": false,\n            \"axisColorMode\": \"text\",\n            \"axisLabel\": \"\",\n            \"axisPlacement\": \"auto\",\n            \"barAlignment\": 0,\n            \"barWidthFactor\": 0.6,\n            \"drawStyle\": \"line\",\n            \"fillOpacity\": 0,\n            \"gradientMode\": \"opacity\",\n            \"hideFrom\": {\n              \"legend\": false,\n              \"tooltip\": false,\n              \"viz\": false\n            },\n            \"insertNulls\": false,\n            \"lineInterpolation\": \"linear\",\n            \"lineWidth\": 1,\n            \"pointSize\": 5,\n            \"scaleDistribution\": {\n              \"type\": \"linear\"\n            },\n            \"showPoints\": \"never\",\n            \"spanNulls\": false,\n            \"stacking\": {\n              \"group\": \"A\",\n              \"mode\": \"none\"\n            },\n            \"thresholdsStyle\": {\n              \"mode\": \"off\"\n            }\n          },\n          \"links\": [],\n          \"mappings\": [],\n          \"max\": 1,\n          \"min\": 0,\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\"\n              },\n              {\n                \"color\": \"red\",\n                \"value\": 80\n              }\n            ]\n          },\n          \"unit\": \"percentunit\"\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 10,\n        \"w\": 8,\n        \"x\": 16,\n        \"y\": 11\n      },\n      \"id\": 42,\n      \"options\": {\n        \"legend\": {\n          \"calcs\": [\n            \"mean\",\n            \"lastNotNull\"\n          ],\n          \"displayMode\": \"table\",\n          \"placement\": \"bottom\",\n          \"showLegend\": true\n        },\n        \"tooltip\": {\n          \"hideZeros\": false,\n          \"mode\": \"multi\",\n          \"sort\": \"none\"\n        }\n      },\n      \"pluginVersion\": \"12.0.2\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"exemplar\": true,\n          \"expr\": \"validator_performance_included_blocks{instance=~\\\"$system\\\"} / validator_performance_expected_blocks{instance=~\\\"$system\\\"}\",\n          \"interval\": \"\",\n          \"legendFormat\": \"{{instance}} Included Blocks\",\n          \"refId\": \"A\"\n        }\n      ],\n      \"title\": \"Included Blocks\",\n      \"type\": \"timeseries\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"description\": \"Percentage of attestations in each epoch with the correct head root, correct target root and that were successfully included in blocks.\",\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"palette-classic\"\n          },\n          \"custom\": {\n            \"axisBorderShow\": false,\n            \"axisCenteredZero\": false,\n            \"axisColorMode\": \"text\",\n            \"axisLabel\": \"\",\n            \"axisPlacement\": \"auto\",\n            \"barAlignment\": 0,\n            \"barWidthFactor\": 0.6,\n            \"drawStyle\": \"line\",\n            \"fillOpacity\": 0,\n            \"gradientMode\": \"opacity\",\n            \"hideFrom\": {\n              \"legend\": false,\n              \"tooltip\": false,\n              \"viz\": false\n            },\n            \"insertNulls\": false,\n            \"lineInterpolation\": \"linear\",\n            \"lineWidth\": 1,\n            \"pointSize\": 5,\n            \"scaleDistribution\": {\n              \"type\": \"linear\"\n            },\n            \"showPoints\": \"never\",\n            \"spanNulls\": false,\n            \"stacking\": {\n              \"group\": \"A\",\n              \"mode\": \"none\"\n            },\n            \"thresholdsStyle\": {\n              \"mode\": \"off\"\n            }\n          },\n          \"links\": [],\n          \"mappings\": [],\n          \"max\": 1,\n          \"min\": 0,\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\"\n              },\n              {\n                \"color\": \"red\",\n                \"value\": 80\n              }\n            ]\n          },\n          \"unit\": \"percentunit\"\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 10,\n        \"w\": 8,\n        \"x\": 0,\n        \"y\": 21\n      },\n      \"id\": 142,\n      \"options\": {\n        \"legend\": {\n          \"calcs\": [\n            \"mean\",\n            \"lastNotNull\"\n          ],\n          \"displayMode\": \"table\",\n          \"placement\": \"bottom\",\n          \"showLegend\": true\n        },\n        \"tooltip\": {\n          \"hideZeros\": false,\n          \"mode\": \"multi\",\n          \"sort\": \"none\"\n        }\n      },\n      \"pluginVersion\": \"12.0.2\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"exemplar\": true,\n          \"expr\": \"clamp_max((validator_performance_included_attestations{instance=~\\\"$system\\\"} / validator_performance_expected_attestations{instance=~\\\"$system\\\"} >= 0), 1)\",\n          \"interval\": \"\",\n          \"legendFormat\": \"{{instance}} Included\",\n          \"refId\": \"C\"\n        }\n      ],\n      \"title\": \"Attestation Inclusion Detail\",\n      \"type\": \"timeseries\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"description\": \"Percentage of attestations in each epoch with the correct head root, correct target root and that were successfully included in blocks.\",\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"palette-classic\"\n          },\n          \"custom\": {\n            \"axisBorderShow\": false,\n            \"axisCenteredZero\": false,\n            \"axisColorMode\": \"text\",\n            \"axisLabel\": \"\",\n            \"axisPlacement\": \"auto\",\n            \"barAlignment\": 0,\n            \"barWidthFactor\": 0.6,\n            \"drawStyle\": \"line\",\n            \"fillOpacity\": 0,\n            \"gradientMode\": \"none\",\n            \"hideFrom\": {\n              \"legend\": false,\n              \"tooltip\": false,\n              \"viz\": false\n            },\n            \"insertNulls\": false,\n            \"lineInterpolation\": \"linear\",\n            \"lineWidth\": 1,\n            \"pointSize\": 5,\n            \"scaleDistribution\": {\n              \"type\": \"linear\"\n            },\n            \"showPoints\": \"never\",\n            \"spanNulls\": false,\n            \"stacking\": {\n              \"group\": \"A\",\n              \"mode\": \"none\"\n            },\n            \"thresholdsStyle\": {\n              \"mode\": \"off\"\n            }\n          },\n          \"links\": [],\n          \"mappings\": [],\n          \"max\": 1,\n          \"min\": 0,\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\"\n              },\n              {\n                \"color\": \"red\",\n                \"value\": 80\n              }\n            ]\n          },\n          \"unit\": \"percentunit\"\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 10,\n        \"w\": 8,\n        \"x\": 8,\n        \"y\": 21\n      },\n      \"id\": 143,\n      \"options\": {\n        \"legend\": {\n          \"calcs\": [\n            \"min\",\n            \"mean\",\n            \"lastNotNull\"\n          ],\n          \"displayMode\": \"table\",\n          \"placement\": \"bottom\",\n          \"showLegend\": true,\n          \"sortBy\": \"Mean\",\n          \"sortDesc\": true\n        },\n        \"tooltip\": {\n          \"hideZeros\": false,\n          \"mode\": \"multi\",\n          \"sort\": \"none\"\n        }\n      },\n      \"pluginVersion\": \"12.0.2\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"editorMode\": \"code\",\n          \"exemplar\": true,\n          \"expr\": \"clamp_max((validator_performance_correct_head_block_count{instance=~\\\"$system\\\"} / validator_performance_included_attestations{instance=~\\\"$system\\\"} >= 0), 1)\",\n          \"interval\": \"\",\n          \"legendFormat\": \"{{instance}} Correct Head\",\n          \"range\": true,\n          \"refId\": \"C\"\n        }\n      ],\n      \"title\": \"Correct Head Detail\",\n      \"type\": \"timeseries\"\n    },\n    {\n      \"collapsed\": true,\n      \"gridPos\": {\n        \"h\": 1,\n        \"w\": 24,\n        \"x\": 0,\n        \"y\": 31\n      },\n      \"id\": 87,\n      \"panels\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"fieldConfig\": {\n            \"defaults\": {\n              \"color\": {\n                \"mode\": \"palette-classic\"\n              },\n              \"custom\": {\n                \"axisLabel\": \"\",\n                \"axisPlacement\": \"auto\",\n                \"barAlignment\": 0,\n                \"drawStyle\": \"line\",\n                \"fillOpacity\": 0,\n                \"gradientMode\": \"none\",\n                \"hideFrom\": {\n                  \"legend\": false,\n                  \"tooltip\": false,\n                  \"viz\": false\n                },\n                \"lineInterpolation\": \"linear\",\n                \"lineWidth\": 1,\n                \"pointSize\": 5,\n                \"scaleDistribution\": {\n                  \"type\": \"linear\"\n                },\n                \"showPoints\": \"auto\",\n                \"spanNulls\": false,\n                \"stacking\": {\n                  \"group\": \"A\",\n                  \"mode\": \"none\"\n                },\n                \"thresholdsStyle\": {\n                  \"mode\": \"off\"\n                }\n              },\n              \"mappings\": [],\n              \"thresholds\": {\n                \"mode\": \"absolute\",\n                \"steps\": [\n                  {\n                    \"color\": \"green\"\n                  },\n                  {\n                    \"color\": \"red\",\n                    \"value\": 80\n                  }\n                ]\n              },\n              \"unit\": \"none\"\n            },\n            \"overrides\": [\n              {\n                \"matcher\": {\n                  \"id\": \"byRegexp\",\n                  \"options\": \".*\\\\[0,1\\\\)\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"dark-green\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byRegexp\",\n                  \"options\": \".*\\\\[1,500\\\\)\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"green\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byRegexp\",\n                  \"options\": \".*\\\\[1000,2000\\\\)\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"yellow\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byRegexp\",\n                  \"options\": \".*\\\\[2000,3000\\\\)\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"orange\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byRegexp\",\n                  \"options\": \".*\\\\[500,1000\\\\)\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"super-light-green\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byRegexp\",\n                  \"options\": \".*\\\\[3000,4000\\\\)\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"dark-orange\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byRegexp\",\n                  \"options\": \".*\\\\[4000,5000\\\\)\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"red\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byRegexp\",\n                  \"options\": \".*\\\\[5000,8000\\\\)\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"semi-dark-red\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byRegexp\",\n                  \"options\": \".*\\\\[8000,∞\\\\)\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"dark-red\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              }\n            ]\n          },\n          \"gridPos\": {\n            \"h\": 14,\n            \"w\": 12,\n            \"x\": 0,\n            \"y\": 40\n          },\n          \"id\": 89,\n          \"options\": {\n            \"legend\": {\n              \"calcs\": [\n                \"min\",\n                \"max\",\n                \"mean\"\n              ],\n              \"displayMode\": \"table\",\n              \"placement\": \"bottom\",\n              \"showLegend\": true,\n              \"sortBy\": \"Mean\",\n              \"sortDesc\": true\n            },\n            \"tooltip\": {\n              \"mode\": \"single\",\n              \"sort\": \"none\"\n            }\n          },\n          \"targets\": [\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"PBFA97CFB590B2093\"\n              },\n              \"exemplar\": true,\n              \"expr\": \"sum by (interval) (rate(validator_attestation_publication_delay{instance=~\\\"$system\\\"}[5m])) or sum by (interval) (rate(validator_attestation_publication_delay_total{instance=~\\\"$system\\\"}[5m]))\",\n              \"hide\": false,\n              \"interval\": \"\",\n              \"legendFormat\": \"{{interval}}\",\n              \"refId\": \"B\"\n            }\n          ],\n          \"title\": \"Attestation Production Delay\",\n          \"type\": \"timeseries\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"fieldConfig\": {\n            \"defaults\": {\n              \"color\": {\n                \"mode\": \"palette-classic\"\n              },\n              \"custom\": {\n                \"axisLabel\": \"\",\n                \"axisPlacement\": \"auto\",\n                \"barAlignment\": 0,\n                \"drawStyle\": \"line\",\n                \"fillOpacity\": 0,\n                \"gradientMode\": \"none\",\n                \"hideFrom\": {\n                  \"legend\": false,\n                  \"tooltip\": false,\n                  \"viz\": false\n                },\n                \"lineInterpolation\": \"linear\",\n                \"lineWidth\": 1,\n                \"pointSize\": 5,\n                \"scaleDistribution\": {\n                  \"type\": \"linear\"\n                },\n                \"showPoints\": \"auto\",\n                \"spanNulls\": false,\n                \"stacking\": {\n                  \"group\": \"A\",\n                  \"mode\": \"none\"\n                },\n                \"thresholdsStyle\": {\n                  \"mode\": \"off\"\n                }\n              },\n              \"mappings\": [],\n              \"thresholds\": {\n                \"mode\": \"absolute\",\n                \"steps\": [\n                  {\n                    \"color\": \"green\"\n                  },\n                  {\n                    \"color\": \"red\",\n                    \"value\": 80\n                  }\n                ]\n              },\n              \"unit\": \"none\"\n            },\n            \"overrides\": [\n              {\n                \"matcher\": {\n                  \"id\": \"byRegexp\",\n                  \"options\": \".*\\\\[0,1\\\\)\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"dark-green\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byRegexp\",\n                  \"options\": \".*\\\\[1,500\\\\)\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"green\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byRegexp\",\n                  \"options\": \".*\\\\[1000,2000\\\\)\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"yellow\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byRegexp\",\n                  \"options\": \".*\\\\[2000,3000\\\\)\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"orange\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byRegexp\",\n                  \"options\": \".*\\\\[500,1000\\\\)\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"super-light-green\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byRegexp\",\n                  \"options\": \".*\\\\[3000,4000\\\\)\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"dark-orange\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byRegexp\",\n                  \"options\": \".*\\\\[4000,5000\\\\)\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"red\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byRegexp\",\n                  \"options\": \".*\\\\[5000,8000\\\\)\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"semi-dark-red\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byRegexp\",\n                  \"options\": \".*\\\\[12000,∞\\\\)\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"dark-red\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byRegexp\",\n                  \"options\": \".*\\\\[8000,12000\\\\)\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"dark-red\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              }\n            ]\n          },\n          \"gridPos\": {\n            \"h\": 14,\n            \"w\": 12,\n            \"x\": 12,\n            \"y\": 40\n          },\n          \"id\": 90,\n          \"options\": {\n            \"legend\": {\n              \"calcs\": [\n                \"min\",\n                \"max\",\n                \"mean\"\n              ],\n              \"displayMode\": \"table\",\n              \"placement\": \"bottom\",\n              \"showLegend\": true\n            },\n            \"tooltip\": {\n              \"mode\": \"single\",\n              \"sort\": \"none\"\n            }\n          },\n          \"targets\": [\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"PBFA97CFB590B2093\"\n              },\n              \"exemplar\": true,\n              \"expr\": \"sum by (interval) (rate(validator_block_publication_delay{instance=~\\\"$system\\\"}[$__range])) or sum by (interval) (rate(validator_block_publication_delay_total{instance=~\\\"$system\\\"}[$__range]))\",\n              \"hide\": false,\n              \"interval\": \"\",\n              \"legendFormat\": \"{{interval}}\",\n              \"refId\": \"B\"\n            }\n          ],\n          \"title\": \"Block Production Delay\",\n          \"type\": \"timeseries\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"description\": \"\",\n          \"fieldConfig\": {\n            \"defaults\": {\n              \"color\": {\n                \"mode\": \"palette-classic\"\n              },\n              \"custom\": {\n                \"hideFrom\": {\n                  \"legend\": false,\n                  \"tooltip\": false,\n                  \"viz\": false\n                }\n              },\n              \"mappings\": []\n            },\n            \"overrides\": [\n              {\n                \"matcher\": {\n                  \"id\": \"byRegexp\",\n                  \"options\": \".*\\\\[0,1\\\\)\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"dark-green\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byRegexp\",\n                  \"options\": \".*\\\\[1,500\\\\)\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"green\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byRegexp\",\n                  \"options\": \".*\\\\[1000,2000\\\\)\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"yellow\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byRegexp\",\n                  \"options\": \".*\\\\[2000,3000\\\\)\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"orange\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byRegexp\",\n                  \"options\": \".*\\\\[500,1000\\\\)\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"super-light-green\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byRegexp\",\n                  \"options\": \".*\\\\[3000,4000\\\\)\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"dark-orange\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byRegexp\",\n                  \"options\": \".*\\\\[4000,5000\\\\)\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"red\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byRegexp\",\n                  \"options\": \".*\\\\[5000,8000\\\\)\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"semi-dark-red\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byRegexp\",\n                  \"options\": \".*\\\\[8000,∞\\\\)\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"dark-red\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"[0,1)\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#37872D\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              }\n            ]\n          },\n          \"gridPos\": {\n            \"h\": 11,\n            \"w\": 12,\n            \"x\": 0,\n            \"y\": 54\n          },\n          \"id\": 92,\n          \"options\": {\n            \"displayLabels\": [\n              \"name\",\n              \"value\"\n            ],\n            \"legend\": {\n              \"displayMode\": \"table\",\n              \"placement\": \"right\",\n              \"showLegend\": true,\n              \"values\": [\n                \"percent\",\n                \"value\"\n              ]\n            },\n            \"pieType\": \"pie\",\n            \"reduceOptions\": {\n              \"calcs\": [\n                \"lastNotNull\"\n              ],\n              \"fields\": \"\",\n              \"values\": false\n            },\n            \"tooltip\": {\n              \"mode\": \"multi\",\n              \"sort\": \"none\"\n            }\n          },\n          \"targets\": [\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"PBFA97CFB590B2093\"\n              },\n              \"exemplar\": true,\n              \"expr\": \"sum by (interval) (increase(validator_attestation_publication_delay{instance=~\\\"$system\\\"}[$__range])) or sum by (interval) (increase(validator_attestation_publication_delay_total{instance=~\\\"$system\\\"}[$__range]))\",\n              \"interval\": \"\",\n              \"legendFormat\": \"{{interval}}\",\n              \"refId\": \"A\"\n            }\n          ],\n          \"title\": \"Attestation Delays\",\n          \"type\": \"piechart\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"description\": \"\",\n          \"fieldConfig\": {\n            \"defaults\": {\n              \"color\": {\n                \"mode\": \"palette-classic\"\n              },\n              \"custom\": {\n                \"hideFrom\": {\n                  \"legend\": false,\n                  \"tooltip\": false,\n                  \"viz\": false\n                }\n              },\n              \"mappings\": []\n            },\n            \"overrides\": [\n              {\n                \"matcher\": {\n                  \"id\": \"byRegexp\",\n                  \"options\": \".*\\\\[0,1\\\\)\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"dark-green\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byRegexp\",\n                  \"options\": \".*\\\\[1,500\\\\)\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"green\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byRegexp\",\n                  \"options\": \".*\\\\[1000,2000\\\\)\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"yellow\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byRegexp\",\n                  \"options\": \".*\\\\[2000,3000\\\\)\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"orange\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byRegexp\",\n                  \"options\": \".*\\\\[500,1000\\\\)\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"super-light-green\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byRegexp\",\n                  \"options\": \".*\\\\[3000,4000\\\\)\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"dark-orange\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byRegexp\",\n                  \"options\": \".*\\\\[4000,5000\\\\)\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"red\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byRegexp\",\n                  \"options\": \".*\\\\[5000,8000\\\\)\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"semi-dark-red\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byRegexp\",\n                  \"options\": \".*\\\\[12000,∞\\\\)\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"dark-red\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byRegexp\",\n                  \"options\": \".*\\\\[8000,12000\\\\)\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"dark-red\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              }\n            ]\n          },\n          \"gridPos\": {\n            \"h\": 11,\n            \"w\": 12,\n            \"x\": 12,\n            \"y\": 54\n          },\n          \"id\": 93,\n          \"options\": {\n            \"displayLabels\": [\n              \"name\",\n              \"value\"\n            ],\n            \"legend\": {\n              \"displayMode\": \"table\",\n              \"placement\": \"right\",\n              \"showLegend\": true,\n              \"values\": [\n                \"percent\",\n                \"value\"\n              ]\n            },\n            \"pieType\": \"pie\",\n            \"reduceOptions\": {\n              \"calcs\": [\n                \"lastNotNull\"\n              ],\n              \"fields\": \"\",\n              \"values\": false\n            },\n            \"tooltip\": {\n              \"mode\": \"multi\",\n              \"sort\": \"none\"\n            }\n          },\n          \"targets\": [\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"PBFA97CFB590B2093\"\n              },\n              \"exemplar\": true,\n              \"expr\": \"sum by (interval) (increase(validator_block_publication_delay{instance=~\\\"$system\\\"}[$__range])) or sum by (interval) (increase(validator_block_publication_delay_total{instance=~\\\"$system\\\"}[$__range]))\",\n              \"interval\": \"\",\n              \"legendFormat\": \"{{interval}}\",\n              \"refId\": \"A\"\n            }\n          ],\n          \"title\": \"Block Delays\",\n          \"type\": \"piechart\"\n        }\n      ],\n      \"title\": \"Validator Timings\",\n      \"type\": \"row\"\n    },\n    {\n      \"collapsed\": false,\n      \"gridPos\": {\n        \"h\": 1,\n        \"w\": 24,\n        \"x\": 0,\n        \"y\": 32\n      },\n      \"id\": 81,\n      \"panels\": [],\n      \"title\": \"Beacon Chain\",\n      \"type\": \"row\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"description\": \"Current slot according to system time\",\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"thresholds\"\n          },\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\"\n              }\n            ]\n          },\n          \"unit\": \"none\"\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 3,\n        \"w\": 5,\n        \"x\": 0,\n        \"y\": 33\n      },\n      \"id\": 45,\n      \"options\": {\n        \"colorMode\": \"background\",\n        \"graphMode\": \"none\",\n        \"justifyMode\": \"auto\",\n        \"orientation\": \"auto\",\n        \"percentChangeColorMode\": \"standard\",\n        \"reduceOptions\": {\n          \"calcs\": [\n            \"mean\"\n          ],\n          \"fields\": \"\",\n          \"values\": false\n        },\n        \"showPercentChange\": false,\n        \"text\": {},\n        \"textMode\": \"auto\",\n        \"wideLayout\": true\n      },\n      \"pluginVersion\": \"12.0.2\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"exemplar\": false,\n          \"expr\": \"max by (network) (beacon_slot{instance=~\\\"$system\\\"})\",\n          \"instant\": true,\n          \"interval\": \"\",\n          \"legendFormat\": \"{{network}}\",\n          \"refId\": \"A\"\n        }\n      ],\n      \"title\": \"Current slot\",\n      \"type\": \"stat\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"description\": \"Slot of the latest imported block\",\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"thresholds\"\n          },\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\"\n              }\n            ]\n          },\n          \"unit\": \"none\"\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 3,\n        \"w\": 5,\n        \"x\": 5,\n        \"y\": 33\n      },\n      \"id\": 48,\n      \"options\": {\n        \"colorMode\": \"background\",\n        \"graphMode\": \"none\",\n        \"justifyMode\": \"auto\",\n        \"orientation\": \"auto\",\n        \"percentChangeColorMode\": \"standard\",\n        \"reduceOptions\": {\n          \"calcs\": [\n            \"lastNotNull\"\n          ],\n          \"fields\": \"\",\n          \"values\": false\n        },\n        \"showPercentChange\": false,\n        \"text\": {},\n        \"textMode\": \"auto\",\n        \"wideLayout\": true\n      },\n      \"pluginVersion\": \"12.0.2\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"editorMode\": \"code\",\n          \"exemplar\": false,\n          \"expr\": \"max by (network) (beacon_head_slot{instance=~\\\"$system\\\"})\",\n          \"instant\": true,\n          \"interval\": \"\",\n          \"legendFormat\": \"{{network}}\",\n          \"refId\": \"A\"\n        }\n      ],\n      \"title\": \"Head slot\",\n      \"type\": \"stat\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"description\": \"Current justified epoch\",\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"thresholds\"\n          },\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\"\n              }\n            ]\n          },\n          \"unit\": \"none\"\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 3,\n        \"w\": 5,\n        \"x\": 10,\n        \"y\": 33\n      },\n      \"id\": 49,\n      \"options\": {\n        \"colorMode\": \"background\",\n        \"graphMode\": \"none\",\n        \"justifyMode\": \"auto\",\n        \"orientation\": \"auto\",\n        \"percentChangeColorMode\": \"standard\",\n        \"reduceOptions\": {\n          \"calcs\": [\n            \"lastNotNull\"\n          ],\n          \"fields\": \"\",\n          \"values\": false\n        },\n        \"showPercentChange\": false,\n        \"text\": {},\n        \"textMode\": \"auto\",\n        \"wideLayout\": true\n      },\n      \"pluginVersion\": \"12.0.2\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"exemplar\": false,\n          \"expr\": \"max by (network) (beacon_current_justified_epoch{instance=~\\\"$system\\\"})\",\n          \"instant\": true,\n          \"interval\": \"\",\n          \"legendFormat\": \"{{network}}\",\n          \"refId\": \"A\"\n        }\n      ],\n      \"title\": \"Justified Epoch\",\n      \"type\": \"stat\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"description\": \"Current finalized epoch\",\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"thresholds\"\n          },\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\"\n              }\n            ]\n          },\n          \"unit\": \"none\"\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 3,\n        \"w\": 5,\n        \"x\": 15,\n        \"y\": 33\n      },\n      \"id\": 51,\n      \"options\": {\n        \"colorMode\": \"background\",\n        \"graphMode\": \"none\",\n        \"justifyMode\": \"auto\",\n        \"orientation\": \"auto\",\n        \"percentChangeColorMode\": \"standard\",\n        \"reduceOptions\": {\n          \"calcs\": [\n            \"lastNotNull\"\n          ],\n          \"fields\": \"\",\n          \"values\": false\n        },\n        \"showPercentChange\": false,\n        \"text\": {},\n        \"textMode\": \"auto\",\n        \"wideLayout\": true\n      },\n      \"pluginVersion\": \"12.0.2\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"exemplar\": false,\n          \"expr\": \"max by (network) (beacon_finalized_epoch{instance=~\\\"$system\\\"})\",\n          \"instant\": true,\n          \"interval\": \"\",\n          \"legendFormat\": \"{{network}}\",\n          \"refId\": \"A\"\n        }\n      ],\n      \"title\": \"Finalized Epoch\",\n      \"type\": \"stat\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"description\": \"Total number of peers connected to the selected nodes.\\n\\nInbound shows the number of connections initiated by remote peers.\\n\\nOutbound shows the number of connections initiated by the local node.\\n\\nA low number of inbound connections could indicate an issue with the network configuration (e.g. ports not open).\",\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\"\n              }\n            ]\n          },\n          \"unit\": \"none\"\n        },\n        \"overrides\": [\n          {\n            \"matcher\": {\n              \"id\": \"byName\",\n              \"options\": \"total\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"thresholds\",\n                \"value\": {\n                  \"mode\": \"absolute\",\n                  \"steps\": [\n                    {\n                      \"color\": \"red\"\n                    },\n                    {\n                      \"color\": \"yellow\",\n                      \"value\": 25\n                    },\n                    {\n                      \"color\": \"green\",\n                      \"value\": 60\n                    }\n                  ]\n                }\n              }\n            ]\n          },\n          {\n            \"matcher\": {\n              \"id\": \"byName\",\n              \"options\": \"inbound\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"thresholds\",\n                \"value\": {\n                  \"mode\": \"absolute\",\n                  \"steps\": [\n                    {\n                      \"color\": \"red\"\n                    },\n                    {\n                      \"color\": \"green\",\n                      \"value\": 1\n                    }\n                  ]\n                }\n              }\n            ]\n          },\n          {\n            \"matcher\": {\n              \"id\": \"byName\",\n              \"options\": \"outbound\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"thresholds\",\n                \"value\": {\n                  \"mode\": \"absolute\",\n                  \"steps\": [\n                    {\n                      \"color\": \"red\"\n                    },\n                    {\n                      \"color\": \"green\",\n                      \"value\": 1\n                    }\n                  ]\n                }\n              }\n            ]\n          }\n        ]\n      },\n      \"gridPos\": {\n        \"h\": 3,\n        \"w\": 4,\n        \"x\": 20,\n        \"y\": 33\n      },\n      \"id\": 64,\n      \"options\": {\n        \"colorMode\": \"background\",\n        \"graphMode\": \"area\",\n        \"justifyMode\": \"auto\",\n        \"orientation\": \"auto\",\n        \"percentChangeColorMode\": \"standard\",\n        \"reduceOptions\": {\n          \"calcs\": [\n            \"lastNotNull\"\n          ],\n          \"fields\": \"\",\n          \"values\": false\n        },\n        \"showPercentChange\": false,\n        \"text\": {},\n        \"textMode\": \"auto\",\n        \"wideLayout\": true\n      },\n      \"pluginVersion\": \"12.0.2\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"editorMode\": \"code\",\n          \"exemplar\": true,\n          \"expr\": \"sum by (network) (beacon_peer_count{instance=~\\\"$system\\\"})\",\n          \"hide\": false,\n          \"interval\": \"\",\n          \"legendFormat\": \"total\",\n          \"range\": true,\n          \"refId\": \"A\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"editorMode\": \"code\",\n          \"expr\": \"beacon_peer_count{instance=~\\\"$system\\\",direction=\\\"inbound\\\"} != 0\",\n          \"hide\": false,\n          \"instant\": false,\n          \"legendFormat\": \"inbound\",\n          \"range\": true,\n          \"refId\": \"C\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"editorMode\": \"code\",\n          \"expr\": \"beacon_peer_count{instance=~\\\"$system\\\",direction=\\\"outbound\\\"} != 0\",\n          \"hide\": false,\n          \"instant\": false,\n          \"legendFormat\": \"outbound\",\n          \"range\": true,\n          \"refId\": \"D\"\n        }\n      ],\n      \"title\": \"Peer Count\",\n      \"type\": \"stat\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"description\": \"The current epoch according to system time\",\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"thresholds\"\n          },\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\"\n              }\n            ]\n          },\n          \"unit\": \"none\"\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 3,\n        \"w\": 5,\n        \"x\": 0,\n        \"y\": 36\n      },\n      \"id\": 46,\n      \"options\": {\n        \"colorMode\": \"background\",\n        \"graphMode\": \"none\",\n        \"justifyMode\": \"auto\",\n        \"orientation\": \"auto\",\n        \"percentChangeColorMode\": \"standard\",\n        \"reduceOptions\": {\n          \"calcs\": [\n            \"lastNotNull\"\n          ],\n          \"fields\": \"\",\n          \"values\": false\n        },\n        \"showPercentChange\": false,\n        \"text\": {},\n        \"textMode\": \"auto\",\n        \"wideLayout\": true\n      },\n      \"pluginVersion\": \"12.0.2\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"exemplar\": false,\n          \"expr\": \"max by (network) (beacon_epoch{instance=~\\\"$system\\\"})\",\n          \"instant\": true,\n          \"interval\": \"\",\n          \"legendFormat\": \"{{network}}\",\n          \"refId\": \"A\"\n        }\n      ],\n      \"title\": \"Current Epoch\",\n      \"type\": \"stat\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"description\": \"Number of slots the head block is behind.\",\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"thresholds\"\n          },\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\"\n              },\n              {\n                \"color\": \"yellow\",\n                \"value\": 3\n              },\n              {\n                \"color\": \"red\",\n                \"value\": 5\n              }\n            ]\n          },\n          \"unit\": \"none\"\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 3,\n        \"w\": 5,\n        \"x\": 5,\n        \"y\": 36\n      },\n      \"id\": 47,\n      \"options\": {\n        \"colorMode\": \"background\",\n        \"graphMode\": \"none\",\n        \"justifyMode\": \"auto\",\n        \"orientation\": \"auto\",\n        \"percentChangeColorMode\": \"standard\",\n        \"reduceOptions\": {\n          \"calcs\": [\n            \"uniqueValues\"\n          ],\n          \"fields\": \"\",\n          \"values\": false\n        },\n        \"showPercentChange\": false,\n        \"text\": {},\n        \"textMode\": \"auto\",\n        \"wideLayout\": true\n      },\n      \"pluginVersion\": \"12.0.2\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"editorMode\": \"code\",\n          \"exemplar\": false,\n          \"expr\": \"max without (alerting, job, instance, client) (beacon_slot{instance=~\\\"$system\\\"} - beacon_head_slot{instance=~\\\"$system\\\"})\",\n          \"instant\": true,\n          \"interval\": \"\",\n          \"legendFormat\": \"__auto\",\n          \"refId\": \"A\"\n        }\n      ],\n      \"title\": \"Slots Behind\",\n      \"type\": \"stat\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"description\": \"Number of epochs that justification has been delayed.\",\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"thresholds\"\n          },\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\"\n              },\n              {\n                \"color\": \"yellow\",\n                \"value\": 2\n              },\n              {\n                \"color\": \"red\",\n                \"value\": 5\n              }\n            ]\n          },\n          \"unit\": \"none\"\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 3,\n        \"w\": 5,\n        \"x\": 10,\n        \"y\": 36\n      },\n      \"id\": 50,\n      \"options\": {\n        \"colorMode\": \"background\",\n        \"graphMode\": \"area\",\n        \"justifyMode\": \"auto\",\n        \"orientation\": \"auto\",\n        \"percentChangeColorMode\": \"standard\",\n        \"reduceOptions\": {\n          \"calcs\": [\n            \"lastNotNull\"\n          ],\n          \"fields\": \"\",\n          \"values\": false\n        },\n        \"showPercentChange\": false,\n        \"text\": {},\n        \"textMode\": \"auto\",\n        \"wideLayout\": true\n      },\n      \"pluginVersion\": \"12.0.2\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"editorMode\": \"code\",\n          \"exemplar\": false,\n          \"expr\": \"clamp_min(min without (instance, job, alerting, client) (beacon_epoch{instance=~\\\"$system\\\"} - beacon_current_justified_epoch{instance=~\\\"$system\\\"} - 1), 0)\",\n          \"instant\": false,\n          \"interval\": \"\",\n          \"legendFormat\": \"{{network}}\",\n          \"range\": true,\n          \"refId\": \"A\"\n        }\n      ],\n      \"title\": \"Justification Delay (epochs)\",\n      \"type\": \"stat\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"description\": \"Number of epochs that finalisation has been delayed.\",\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"thresholds\"\n          },\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\"\n              },\n              {\n                \"color\": \"yellow\",\n                \"value\": 2\n              },\n              {\n                \"color\": \"red\",\n                \"value\": 5\n              }\n            ]\n          },\n          \"unit\": \"none\"\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 3,\n        \"w\": 5,\n        \"x\": 15,\n        \"y\": 36\n      },\n      \"id\": 52,\n      \"options\": {\n        \"colorMode\": \"background\",\n        \"graphMode\": \"area\",\n        \"justifyMode\": \"auto\",\n        \"orientation\": \"auto\",\n        \"percentChangeColorMode\": \"standard\",\n        \"reduceOptions\": {\n          \"calcs\": [\n            \"lastNotNull\"\n          ],\n          \"fields\": \"\",\n          \"values\": false\n        },\n        \"showPercentChange\": false,\n        \"text\": {},\n        \"textMode\": \"auto\",\n        \"wideLayout\": true\n      },\n      \"pluginVersion\": \"12.0.2\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"editorMode\": \"code\",\n          \"exemplar\": false,\n          \"expr\": \"clamp_min(min without (instance, job, alerting, client) (beacon_epoch{instance=~\\\"$system\\\"} - beacon_finalized_epoch{instance=~\\\"$system\\\"} - 2), 0)\",\n          \"instant\": false,\n          \"interval\": \"\",\n          \"legendFormat\": \"{{network}}\",\n          \"range\": true,\n          \"refId\": \"A\"\n        }\n      ],\n      \"title\": \"Finalisation Delay (epochs)\",\n      \"type\": \"stat\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"description\": \"Percentage of validators which voted for the correct target in the previous epoch.\",\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"decimals\": 1,\n          \"mappings\": [\n            {\n              \"$$hashKey\": \"object:167\",\n              \"id\": 0,\n              \"op\": \"=\",\n              \"text\": \"N/A\",\n              \"type\": 1,\n              \"value\": \"null\"\n            }\n          ],\n          \"max\": 1,\n          \"min\": 0,\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"red\"\n              },\n              {\n                \"color\": \"#EAB839\",\n                \"value\": 0.67\n              },\n              {\n                \"color\": \"green\",\n                \"value\": 0.9\n              }\n            ]\n          },\n          \"unit\": \"percentunit\"\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 3,\n        \"w\": 4,\n        \"x\": 20,\n        \"y\": 36\n      },\n      \"id\": 55,\n      \"options\": {\n        \"colorMode\": \"background\",\n        \"graphMode\": \"area\",\n        \"justifyMode\": \"auto\",\n        \"orientation\": \"auto\",\n        \"percentChangeColorMode\": \"standard\",\n        \"reduceOptions\": {\n          \"calcs\": [\n            \"lastNotNull\"\n          ],\n          \"fields\": \"\",\n          \"values\": false\n        },\n        \"showPercentChange\": false,\n        \"text\": {},\n        \"textMode\": \"auto\",\n        \"wideLayout\": true\n      },\n      \"pluginVersion\": \"12.0.2\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"exemplar\": true,\n          \"expr\": \"max by (network) (beacon_previous_correct_validators{instance=~\\\"$system\\\"} / beacon_previous_active_validators{instance=~\\\"$system\\\"})\",\n          \"interval\": \"\",\n          \"legendFormat\": \"{{network}}\",\n          \"refId\": \"A\"\n        }\n      ],\n      \"title\": \"Network Participation Rate\",\n      \"type\": \"stat\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"description\": \"Number of slots the head block is behind the current slot. Empty slots may mean the head block trails by a few slots.\",\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"palette-classic\"\n          },\n          \"custom\": {\n            \"axisBorderShow\": false,\n            \"axisCenteredZero\": false,\n            \"axisColorMode\": \"text\",\n            \"axisLabel\": \"\",\n            \"axisPlacement\": \"auto\",\n            \"barAlignment\": 0,\n            \"barWidthFactor\": 0.6,\n            \"drawStyle\": \"line\",\n            \"fillOpacity\": 0,\n            \"gradientMode\": \"opacity\",\n            \"hideFrom\": {\n              \"legend\": false,\n              \"tooltip\": false,\n              \"viz\": false\n            },\n            \"insertNulls\": false,\n            \"lineInterpolation\": \"linear\",\n            \"lineWidth\": 1,\n            \"pointSize\": 5,\n            \"scaleDistribution\": {\n              \"type\": \"linear\"\n            },\n            \"showPoints\": \"never\",\n            \"spanNulls\": false,\n            \"stacking\": {\n              \"group\": \"A\",\n              \"mode\": \"none\"\n            },\n            \"thresholdsStyle\": {\n              \"mode\": \"off\"\n            }\n          },\n          \"links\": [],\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\"\n              },\n              {\n                \"color\": \"red\",\n                \"value\": 80\n              }\n            ]\n          },\n          \"unit\": \"none\"\n        },\n        \"overrides\": [\n          {\n            \"matcher\": {\n              \"id\": \"byRegexp\",\n              \"options\": \"/.* Blocks\\\\/second/\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"unit\",\n                \"value\": \"ops\"\n              },\n              {\n                \"id\": \"decimals\",\n                \"value\": 4\n              },\n              {\n                \"id\": \"custom.axisLabel\",\n                \"value\": \"blocks/second\"\n              }\n            ]\n          }\n        ]\n      },\n      \"gridPos\": {\n        \"h\": 10,\n        \"w\": 8,\n        \"x\": 0,\n        \"y\": 39\n      },\n      \"id\": 66,\n      \"options\": {\n        \"legend\": {\n          \"calcs\": [\n            \"mean\",\n            \"lastNotNull\",\n            \"min\"\n          ],\n          \"displayMode\": \"table\",\n          \"placement\": \"bottom\",\n          \"showLegend\": true\n        },\n        \"tooltip\": {\n          \"hideZeros\": false,\n          \"mode\": \"multi\",\n          \"sort\": \"desc\"\n        }\n      },\n      \"pluginVersion\": \"12.0.2\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"exemplar\": true,\n          \"expr\": \"clamp_min(beacon_slot{instance=~\\\"$system\\\"} - beacon_head_slot{instance=~\\\"$system\\\"}, 0)\",\n          \"interval\": \"\",\n          \"legendFormat\": \"{{instance}} Head Slot\",\n          \"refId\": \"A\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"expr\": \"clamp_min(min(beacon_epoch{instance=~\\\"$system\\\"} - beacon_current_justified_epoch{instance=~\\\"$system\\\"} - 1) without (instance), 0)\",\n          \"interval\": \"\",\n          \"legendFormat\": \"Justification Delay\",\n          \"refId\": \"B\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"expr\": \"clamp_min(min(beacon_epoch{instance=~\\\"$system\\\"} - beacon_finalized_epoch{instance=~\\\"$system\\\"} - 2) without (instance), 0)\",\n          \"interval\": \"\",\n          \"legendFormat\": \"Finalisation Delay\",\n          \"refId\": \"C\"\n        }\n      ],\n      \"title\": \"Trailing Distance\",\n      \"type\": \"timeseries\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"description\": \"Overall participation rate in the chain. The Correct Validators must be above 2/3rd for the chain to finalize.\",\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"palette-classic\"\n          },\n          \"custom\": {\n            \"axisBorderShow\": false,\n            \"axisCenteredZero\": false,\n            \"axisColorMode\": \"text\",\n            \"axisLabel\": \"\",\n            \"axisPlacement\": \"auto\",\n            \"barAlignment\": 0,\n            \"barWidthFactor\": 0.6,\n            \"drawStyle\": \"line\",\n            \"fillOpacity\": 0,\n            \"gradientMode\": \"opacity\",\n            \"hideFrom\": {\n              \"legend\": false,\n              \"tooltip\": false,\n              \"viz\": false\n            },\n            \"insertNulls\": false,\n            \"lineInterpolation\": \"linear\",\n            \"lineWidth\": 1,\n            \"pointSize\": 5,\n            \"scaleDistribution\": {\n              \"type\": \"linear\"\n            },\n            \"showPoints\": \"never\",\n            \"spanNulls\": false,\n            \"stacking\": {\n              \"group\": \"A\",\n              \"mode\": \"none\"\n            },\n            \"thresholdsStyle\": {\n              \"mode\": \"line+area\"\n            }\n          },\n          \"links\": [],\n          \"mappings\": [],\n          \"max\": 1,\n          \"min\": 0,\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"red\"\n              },\n              {\n                \"color\": \"transparent\",\n                \"value\": 0.66666666667\n              }\n            ]\n          },\n          \"unit\": \"percentunit\"\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 10,\n        \"w\": 8,\n        \"x\": 8,\n        \"y\": 39\n      },\n      \"id\": 63,\n      \"options\": {\n        \"legend\": {\n          \"calcs\": [\n            \"mean\",\n            \"lastNotNull\"\n          ],\n          \"displayMode\": \"table\",\n          \"placement\": \"bottom\",\n          \"showLegend\": true\n        },\n        \"tooltip\": {\n          \"hideZeros\": false,\n          \"mode\": \"multi\",\n          \"sort\": \"none\"\n        }\n      },\n      \"pluginVersion\": \"12.0.2\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"exemplar\": true,\n          \"expr\": \"max by (network) (beacon_previous_live_validators{instance=~\\\"$system\\\"} / beacon_previous_active_validators{instance=~\\\"$system\\\"})\",\n          \"interval\": \"\",\n          \"legendFormat\": \"{{network}} Live Validators\",\n          \"refId\": \"A\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"exemplar\": true,\n          \"expr\": \"max by (network) (beacon_previous_correct_validators{instance=~\\\"$system\\\"} / beacon_previous_active_validators{instance=~\\\"$system\\\"})\",\n          \"interval\": \"\",\n          \"legendFormat\": \"{{network}} Correct Validators\",\n          \"refId\": \"B\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"exemplar\": true,\n          \"expr\": \"max by (network) (beacon_previous_live_sync_committee{instance=~\\\"$system\\\"} / (512 * 32))\",\n          \"hide\": false,\n          \"interval\": \"\",\n          \"legendFormat\": \"{{network}} Sync Committee Participation\",\n          \"refId\": \"D\"\n        }\n      ],\n      \"title\": \"Participation Rate\",\n      \"type\": \"timeseries\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"description\": \"Breakdown of client software run by peers. Note that software cannot always be determined for peers and percentage of peers isn't indicative of number of validators using that software.\",\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"palette-classic\"\n          },\n          \"custom\": {\n            \"axisBorderShow\": false,\n            \"axisCenteredZero\": false,\n            \"axisColorMode\": \"text\",\n            \"axisLabel\": \"\",\n            \"axisPlacement\": \"auto\",\n            \"barAlignment\": 0,\n            \"barWidthFactor\": 0.6,\n            \"drawStyle\": \"line\",\n            \"fillOpacity\": 75,\n            \"gradientMode\": \"none\",\n            \"hideFrom\": {\n              \"legend\": false,\n              \"tooltip\": false,\n              \"viz\": false\n            },\n            \"insertNulls\": false,\n            \"lineInterpolation\": \"linear\",\n            \"lineWidth\": 1,\n            \"pointSize\": 5,\n            \"scaleDistribution\": {\n              \"type\": \"linear\"\n            },\n            \"showPoints\": \"auto\",\n            \"spanNulls\": false,\n            \"stacking\": {\n              \"group\": \"A\",\n              \"mode\": \"percent\"\n            },\n            \"thresholdsStyle\": {\n              \"mode\": \"off\"\n            }\n          },\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\"\n              },\n              {\n                \"color\": \"red\",\n                \"value\": 80\n              }\n            ]\n          }\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 10,\n        \"w\": 8,\n        \"x\": 16,\n        \"y\": 39\n      },\n      \"id\": 65,\n      \"options\": {\n        \"legend\": {\n          \"calcs\": [],\n          \"displayMode\": \"list\",\n          \"placement\": \"bottom\",\n          \"showLegend\": true\n        },\n        \"tooltip\": {\n          \"hideZeros\": false,\n          \"mode\": \"multi\",\n          \"sort\": \"desc\"\n        }\n      },\n      \"pluginVersion\": \"12.0.2\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"editorMode\": \"code\",\n          \"exemplar\": true,\n          \"expr\": \"sum by (exported_client, client) (libp2p_connected_peers_current{instance=~\\\"$system\\\"})\",\n          \"format\": \"time_series\",\n          \"interval\": \"\",\n          \"legendFormat\": \"{{exported_client}}\",\n          \"range\": true,\n          \"refId\": \"A\"\n        }\n      ],\n      \"title\": \"Peer Client Software\",\n      \"type\": \"timeseries\"\n    },\n    {\n      \"collapsed\": true,\n      \"gridPos\": {\n        \"h\": 1,\n        \"w\": 24,\n        \"x\": 0,\n        \"y\": 49\n      },\n      \"id\": 99,\n      \"panels\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"description\": \"Total number of prepared proposers\",\n          \"fieldConfig\": {\n            \"defaults\": {\n              \"mappings\": [],\n              \"thresholds\": {\n                \"mode\": \"absolute\",\n                \"steps\": [\n                  {\n                    \"color\": \"dark-blue\"\n                  }\n                ]\n              },\n              \"unit\": \"none\"\n            },\n            \"overrides\": []\n          },\n          \"gridPos\": {\n            \"h\": 3,\n            \"w\": 12,\n            \"x\": 0,\n            \"y\": 58\n          },\n          \"id\": 123,\n          \"options\": {\n            \"colorMode\": \"background\",\n            \"graphMode\": \"area\",\n            \"justifyMode\": \"auto\",\n            \"orientation\": \"horizontal\",\n            \"reduceOptions\": {\n              \"calcs\": [\n                \"last\"\n              ],\n              \"fields\": \"\",\n              \"values\": false\n            },\n            \"text\": {},\n            \"textMode\": \"auto\"\n          },\n          \"pluginVersion\": \"9.3.1\",\n          \"targets\": [\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"PBFA97CFB590B2093\"\n              },\n              \"exemplar\": true,\n              \"expr\": \"sum(beacon_proposers_data_total{instance=~\\\"$system\\\", type=\\\"prepared_proposers\\\"}) or sum(beacon_proposers_data{instance=~\\\"$system\\\", type=\\\"prepared_proposers\\\"})\",\n              \"interval\": \"\",\n              \"legendFormat\": \"\",\n              \"refId\": \"A\"\n            }\n          ],\n          \"title\": \"Prepared Proposers\",\n          \"type\": \"stat\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"description\": \"Total number of registered validators willing to produce blocks using builder infrastructure\",\n          \"fieldConfig\": {\n            \"defaults\": {\n              \"mappings\": [],\n              \"thresholds\": {\n                \"mode\": \"absolute\",\n                \"steps\": [\n                  {\n                    \"color\": \"semi-dark-purple\"\n                  }\n                ]\n              },\n              \"unit\": \"none\"\n            },\n            \"overrides\": []\n          },\n          \"gridPos\": {\n            \"h\": 3,\n            \"w\": 12,\n            \"x\": 12,\n            \"y\": 58\n          },\n          \"id\": 124,\n          \"options\": {\n            \"colorMode\": \"background\",\n            \"graphMode\": \"area\",\n            \"justifyMode\": \"auto\",\n            \"orientation\": \"horizontal\",\n            \"reduceOptions\": {\n              \"calcs\": [\n                \"last\"\n              ],\n              \"fields\": \"\",\n              \"values\": false\n            },\n            \"text\": {},\n            \"textMode\": \"auto\"\n          },\n          \"pluginVersion\": \"9.3.1\",\n          \"targets\": [\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"PBFA97CFB590B2093\"\n              },\n              \"exemplar\": true,\n              \"expr\": \"sum(beacon_proposers_data_total{instance=~\\\"$system\\\", type=\\\"registered_validators\\\"}) or sum(beacon_proposers_data{instance=~\\\"$system\\\", type=\\\"registered_validators\\\"})\",\n              \"interval\": \"\",\n              \"legendFormat\": \"\",\n              \"refId\": \"A\"\n            }\n          ],\n          \"title\": \"Registered Validators\",\n          \"type\": \"stat\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"description\": \"\",\n          \"fieldConfig\": {\n            \"defaults\": {\n              \"color\": {\n                \"mode\": \"palette-classic\"\n              },\n              \"custom\": {\n                \"hideFrom\": {\n                  \"legend\": false,\n                  \"tooltip\": false,\n                  \"viz\": false\n                }\n              },\n              \"mappings\": []\n            },\n            \"overrides\": [\n              {\n                \"matcher\": {\n                  \"id\": \"byRegexp\",\n                  \"options\": \"local_el\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"blue\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byRegexp\",\n                  \"options\": \"builder\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"purple\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byRegexp\",\n                  \"options\": \".*fallback.*\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"yellow\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              }\n            ]\n          },\n          \"gridPos\": {\n            \"h\": 11,\n            \"w\": 12,\n            \"x\": 0,\n            \"y\": 61\n          },\n          \"id\": 100,\n          \"options\": {\n            \"displayLabels\": [\n              \"name\",\n              \"value\"\n            ],\n            \"legend\": {\n              \"displayMode\": \"table\",\n              \"placement\": \"right\",\n              \"showLegend\": true,\n              \"values\": [\n                \"percent\",\n                \"value\"\n              ]\n            },\n            \"pieType\": \"pie\",\n            \"reduceOptions\": {\n              \"calcs\": [\n                \"lastNotNull\"\n              ],\n              \"fields\": \"\",\n              \"values\": false\n            },\n            \"tooltip\": {\n              \"mode\": \"multi\",\n              \"sort\": \"none\"\n            }\n          },\n          \"targets\": [\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"PBFA97CFB590B2093\"\n              },\n              \"exemplar\": true,\n              \"expr\": \"sum by (source) (increase(beacon_execution_payload_source{instance=~\\\"$system\\\"}[$__range])) or sum by (source) (increase(beacon_execution_payload_source_total{instance=~\\\"$system\\\"}[$__range]))\",\n              \"interval\": \"\",\n              \"legendFormat\": \"{{source}}\",\n              \"refId\": \"A\"\n            }\n          ],\n          \"title\": \"Execution Payload Source\",\n          \"type\": \"piechart\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"description\": \"\",\n          \"fieldConfig\": {\n            \"defaults\": {\n              \"color\": {\n                \"mode\": \"palette-classic\"\n              },\n              \"custom\": {\n                \"hideFrom\": {\n                  \"legend\": false,\n                  \"tooltip\": false,\n                  \"viz\": false\n                }\n              },\n              \"mappings\": []\n            },\n            \"overrides\": []\n          },\n          \"gridPos\": {\n            \"h\": 11,\n            \"w\": 12,\n            \"x\": 12,\n            \"y\": 61\n          },\n          \"id\": 101,\n          \"options\": {\n            \"displayLabels\": [\n              \"name\",\n              \"value\"\n            ],\n            \"legend\": {\n              \"displayMode\": \"table\",\n              \"placement\": \"right\",\n              \"showLegend\": true,\n              \"values\": [\n                \"percent\",\n                \"value\"\n              ]\n            },\n            \"pieType\": \"pie\",\n            \"reduceOptions\": {\n              \"calcs\": [\n                \"lastNotNull\"\n              ],\n              \"fields\": \"\",\n              \"values\": false\n            },\n            \"tooltip\": {\n              \"mode\": \"multi\",\n              \"sort\": \"none\"\n            }\n          },\n          \"targets\": [\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"PBFA97CFB590B2093\"\n              },\n              \"exemplar\": true,\n              \"expr\": \"sum by (fallback_reason) (increase(beacon_execution_payload_source{instance=~\\\"$system\\\", source=\\\"builder_local_el_fallback\\\", fallback_reason!~\\\"\\\"}[$__range])) or sum by (fallback_reason) (increase(beacon_execution_payload_source_total{instance=~\\\"$system\\\", source=\\\"builder_local_el_fallback\\\", fallback_reason!~\\\"\\\"}[$__range]))\",\n              \"interval\": \"\",\n              \"legendFormat\": \"{{fallback_reason}}\",\n              \"refId\": \"A\"\n            }\n          ],\n          \"title\": \"Execution Payload Fallback Reason\",\n          \"type\": \"piechart\"\n        }\n      ],\n      \"title\": \"Beacon Node Block Production\",\n      \"type\": \"row\"\n    },\n    {\n      \"collapsed\": true,\n      \"gridPos\": {\n        \"h\": 1,\n        \"w\": 24,\n        \"x\": 0,\n        \"y\": 50\n      },\n      \"id\": 105,\n      \"panels\": [\n        {\n          \"fieldConfig\": {\n            \"defaults\": {},\n            \"overrides\": []\n          },\n          \"gridPos\": {\n            \"h\": 2,\n            \"w\": 12,\n            \"x\": 0,\n            \"y\": 59\n          },\n          \"id\": 111,\n          \"options\": {\n            \"content\": \"<h2 style=\\\"color: #eb7b18; font-size: 17px;\\\">\\n<center>Builder Status API</center>\\n</h2>\",\n            \"mode\": \"html\"\n          },\n          \"pluginVersion\": \"9.3.1\",\n          \"title\": \"\",\n          \"transparent\": true,\n          \"type\": \"text\"\n        },\n        {\n          \"fieldConfig\": {\n            \"defaults\": {},\n            \"overrides\": []\n          },\n          \"gridPos\": {\n            \"h\": 2,\n            \"w\": 12,\n            \"x\": 12,\n            \"y\": 59\n          },\n          \"id\": 109,\n          \"options\": {\n            \"content\": \"<h2 style=\\\"color: #eb7b18; font-size: 17px;\\\">\\n<center>Builder Validator Registration API</center>\\n</h2>\",\n            \"mode\": \"html\"\n          },\n          \"pluginVersion\": \"9.3.1\",\n          \"title\": \"\",\n          \"transparent\": true,\n          \"type\": \"text\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"description\": \"Builder Status API\",\n          \"fieldConfig\": {\n            \"defaults\": {\n              \"color\": {\n                \"mode\": \"palette-classic\"\n              },\n              \"custom\": {\n                \"axisLabel\": \"\",\n                \"axisPlacement\": \"auto\",\n                \"barAlignment\": 0,\n                \"drawStyle\": \"line\",\n                \"fillOpacity\": 0,\n                \"gradientMode\": \"none\",\n                \"hideFrom\": {\n                  \"legend\": false,\n                  \"tooltip\": false,\n                  \"viz\": false\n                },\n                \"lineInterpolation\": \"linear\",\n                \"lineWidth\": 1,\n                \"pointSize\": 5,\n                \"scaleDistribution\": {\n                  \"type\": \"linear\"\n                },\n                \"showPoints\": \"auto\",\n                \"spanNulls\": false,\n                \"stacking\": {\n                  \"group\": \"A\",\n                  \"mode\": \"none\"\n                },\n                \"thresholdsStyle\": {\n                  \"mode\": \"off\"\n                }\n              },\n              \"mappings\": [],\n              \"thresholds\": {\n                \"mode\": \"absolute\",\n                \"steps\": [\n                  {\n                    \"color\": \"green\"\n                  },\n                  {\n                    \"color\": \"red\",\n                    \"value\": 80\n                  }\n                ]\n              }\n            },\n            \"overrides\": [\n              {\n                \"matcher\": {\n                  \"id\": \"byRegexp\",\n                  \"options\": \".*\\\\[0,100\\\\)\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"dark-green\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byRegexp\",\n                  \"options\": \".*\\\\[100,300\\\\)\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"dark-green\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byRegexp\",\n                  \"options\": \".*\\\\[300,500\\\\)\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"semi-dark-green\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byRegexp\",\n                  \"options\": \".*\\\\[500,1000\\\\)\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"green\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byRegexp\",\n                  \"options\": \".*\\\\[1000,2000\\\\)\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"orange\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byRegexp\",\n                  \"options\": \".*\\\\[2000,3000\\\\)\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"dark-orange\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byRegexp\",\n                  \"options\": \".*\\\\[3000,5000\\\\)\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"red\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byRegexp\",\n                  \"options\": \".*\\\\[5000,8000\\\\)\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"semi-dark-red\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byRegexp\",\n                  \"options\": \".*\\\\[5000,∞\\\\)\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"dark-red\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byRegexp\",\n                  \"options\": \"FAILED\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#ff0000\",\n                      \"mode\": \"fixed\"\n                    }\n                  },\n                  {\n                    \"id\": \"custom.drawStyle\",\n                    \"value\": \"bars\"\n                  },\n                  {\n                    \"id\": \"custom.fillOpacity\",\n                    \"value\": 39\n                  }\n                ]\n              }\n            ]\n          },\n          \"gridPos\": {\n            \"h\": 11,\n            \"w\": 12,\n            \"x\": 0,\n            \"y\": 61\n          },\n          \"id\": 112,\n          \"options\": {\n            \"legend\": {\n              \"calcs\": [\n                \"min\",\n                \"max\",\n                \"mean\"\n              ],\n              \"displayMode\": \"table\",\n              \"placement\": \"bottom\",\n              \"showLegend\": true,\n              \"sortBy\": \"Mean\",\n              \"sortDesc\": true\n            },\n            \"tooltip\": {\n              \"mode\": \"single\",\n              \"sort\": \"none\"\n            }\n          },\n          \"targets\": [\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"PBFA97CFB590B2093\"\n              },\n              \"exemplar\": true,\n              \"expr\": \"sum by (interval) (rate(beacon_builder_requests_total{instance=~\\\"$system\\\", method=\\\"status\\\"}[5m]))\",\n              \"interval\": \"\",\n              \"legendFormat\": \"{{interval}}\",\n              \"refId\": \"A\"\n            },\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"PBFA97CFB590B2093\"\n              },\n              \"exemplar\": true,\n              \"expr\": \"sum by (outcome) (rate(beacon_builder_requests_total{instance=~\\\"$system\\\", method=\\\"status\\\", outcome=\\\"error\\\"}[5m]))\",\n              \"hide\": false,\n              \"interval\": \"\",\n              \"legendFormat\": \"FAILED\",\n              \"refId\": \"B\"\n            }\n          ],\n          \"title\": \"\",\n          \"type\": \"timeseries\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"description\": \"Builder Validator Registration API\",\n          \"fieldConfig\": {\n            \"defaults\": {\n              \"color\": {\n                \"mode\": \"palette-classic\"\n              },\n              \"custom\": {\n                \"axisLabel\": \"\",\n                \"axisPlacement\": \"auto\",\n                \"barAlignment\": 0,\n                \"drawStyle\": \"line\",\n                \"fillOpacity\": 0,\n                \"gradientMode\": \"none\",\n                \"hideFrom\": {\n                  \"legend\": false,\n                  \"tooltip\": false,\n                  \"viz\": false\n                },\n                \"lineInterpolation\": \"linear\",\n                \"lineWidth\": 1,\n                \"pointSize\": 5,\n                \"scaleDistribution\": {\n                  \"type\": \"linear\"\n                },\n                \"showPoints\": \"auto\",\n                \"spanNulls\": false,\n                \"stacking\": {\n                  \"group\": \"A\",\n                  \"mode\": \"none\"\n                },\n                \"thresholdsStyle\": {\n                  \"mode\": \"off\"\n                }\n              },\n              \"mappings\": [],\n              \"thresholds\": {\n                \"mode\": \"absolute\",\n                \"steps\": [\n                  {\n                    \"color\": \"green\"\n                  },\n                  {\n                    \"color\": \"red\",\n                    \"value\": 80\n                  }\n                ]\n              }\n            },\n            \"overrides\": [\n              {\n                \"matcher\": {\n                  \"id\": \"byRegexp\",\n                  \"options\": \".*\\\\[0,100\\\\)\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"dark-green\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byRegexp\",\n                  \"options\": \".*\\\\[100,300\\\\)\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"dark-green\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byRegexp\",\n                  \"options\": \".*\\\\[300,500\\\\)\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"semi-dark-green\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byRegexp\",\n                  \"options\": \".*\\\\[500,1000\\\\)\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"green\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byRegexp\",\n                  \"options\": \".*\\\\[1000,2000\\\\)\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"orange\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byRegexp\",\n                  \"options\": \".*\\\\[2000,3000\\\\)\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"dark-orange\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byRegexp\",\n                  \"options\": \".*\\\\[3000,5000\\\\)\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"red\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byRegexp\",\n                  \"options\": \".*\\\\[5000,8000\\\\)\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"semi-dark-red\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byRegexp\",\n                  \"options\": \".*\\\\[5000,∞\\\\)\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"dark-red\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byRegexp\",\n                  \"options\": \"FAILED\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#ff0000\",\n                      \"mode\": \"fixed\"\n                    }\n                  },\n                  {\n                    \"id\": \"custom.drawStyle\",\n                    \"value\": \"bars\"\n                  },\n                  {\n                    \"id\": \"custom.fillOpacity\",\n                    \"value\": 45\n                  }\n                ]\n              }\n            ]\n          },\n          \"gridPos\": {\n            \"h\": 11,\n            \"w\": 12,\n            \"x\": 12,\n            \"y\": 61\n          },\n          \"id\": 103,\n          \"options\": {\n            \"legend\": {\n              \"calcs\": [\n                \"min\",\n                \"max\",\n                \"mean\"\n              ],\n              \"displayMode\": \"table\",\n              \"placement\": \"bottom\",\n              \"showLegend\": true,\n              \"sortBy\": \"Mean\",\n              \"sortDesc\": true\n            },\n            \"tooltip\": {\n              \"mode\": \"single\",\n              \"sort\": \"none\"\n            }\n          },\n          \"targets\": [\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"PBFA97CFB590B2093\"\n              },\n              \"exemplar\": true,\n              \"expr\": \"sum by (interval) (rate(beacon_builder_requests_total{instance=~\\\"$system\\\", method=\\\"register_validators\\\"}[5m]))\",\n              \"interval\": \"\",\n              \"legendFormat\": \"{{interval}}\",\n              \"refId\": \"A\"\n            },\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"PBFA97CFB590B2093\"\n              },\n              \"exemplar\": true,\n              \"expr\": \"sum by (outcome) (rate(beacon_builder_requests_total{instance=~\\\"$system\\\", method=\\\"register_validators\\\", outcome=\\\"error\\\"}[5m]))\",\n              \"hide\": false,\n              \"interval\": \"\",\n              \"legendFormat\": \"FAILED\",\n              \"refId\": \"B\"\n            }\n          ],\n          \"title\": \"\",\n          \"type\": \"timeseries\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"description\": \"Builder Validator Registration API\",\n          \"fieldConfig\": {\n            \"defaults\": {\n              \"color\": {\n                \"mode\": \"palette-classic\"\n              },\n              \"custom\": {\n                \"hideFrom\": {\n                  \"legend\": false,\n                  \"tooltip\": false,\n                  \"viz\": false\n                }\n              },\n              \"mappings\": []\n            },\n            \"overrides\": [\n              {\n                \"matcher\": {\n                  \"id\": \"byRegexp\",\n                  \"options\": \"success\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"dark-green\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byRegexp\",\n                  \"options\": \"error\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"semi-dark-red\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              }\n            ]\n          },\n          \"gridPos\": {\n            \"h\": 9,\n            \"w\": 3,\n            \"x\": 0,\n            \"y\": 72\n          },\n          \"id\": 122,\n          \"options\": {\n            \"displayLabels\": [\n              \"name\",\n              \"value\"\n            ],\n            \"legend\": {\n              \"displayMode\": \"list\",\n              \"placement\": \"right\",\n              \"showLegend\": false,\n              \"values\": []\n            },\n            \"pieType\": \"pie\",\n            \"reduceOptions\": {\n              \"calcs\": [\n                \"lastNotNull\"\n              ],\n              \"fields\": \"\",\n              \"values\": false\n            },\n            \"tooltip\": {\n              \"mode\": \"multi\",\n              \"sort\": \"none\"\n            }\n          },\n          \"targets\": [\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"PBFA97CFB590B2093\"\n              },\n              \"exemplar\": true,\n              \"expr\": \"sum by (outcome) (increase(beacon_builder_requests_total{instance=~\\\"$system\\\", method=\\\"status\\\"}[$__range]))\",\n              \"interval\": \"\",\n              \"legendFormat\": \"{{outcome}}\",\n              \"refId\": \"A\"\n            }\n          ],\n          \"title\": \"\",\n          \"type\": \"piechart\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"description\": \"Builder Status API\",\n          \"fieldConfig\": {\n            \"defaults\": {\n              \"color\": {\n                \"mode\": \"palette-classic\"\n              },\n              \"custom\": {\n                \"hideFrom\": {\n                  \"legend\": false,\n                  \"tooltip\": false,\n                  \"viz\": false\n                }\n              },\n              \"mappings\": []\n            },\n            \"overrides\": [\n              {\n                \"matcher\": {\n                  \"id\": \"byRegexp\",\n                  \"options\": \".*\\\\[0,100\\\\)\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"dark-green\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byRegexp\",\n                  \"options\": \".*\\\\[100,300\\\\)\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"dark-green\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byRegexp\",\n                  \"options\": \".*\\\\[300,500\\\\)\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"semi-dark-green\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byRegexp\",\n                  \"options\": \".*\\\\[500,1000\\\\)\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"green\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byRegexp\",\n                  \"options\": \".*\\\\[1000,2000\\\\)\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"orange\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byRegexp\",\n                  \"options\": \".*\\\\[2000,3000\\\\)\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"dark-orange\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byRegexp\",\n                  \"options\": \".*\\\\[3000,5000\\\\)\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"red\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byRegexp\",\n                  \"options\": \".*\\\\[5000,8000\\\\)\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"semi-dark-red\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byRegexp\",\n                  \"options\": \".*\\\\[5000,∞\\\\)\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"dark-red\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byRegexp\",\n                  \"options\": \"FAILED\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#ff0000\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              }\n            ]\n          },\n          \"gridPos\": {\n            \"h\": 9,\n            \"w\": 9,\n            \"x\": 3,\n            \"y\": 72\n          },\n          \"id\": 113,\n          \"options\": {\n            \"displayLabels\": [\n              \"name\",\n              \"value\"\n            ],\n            \"legend\": {\n              \"displayMode\": \"table\",\n              \"placement\": \"right\",\n              \"showLegend\": true,\n              \"values\": [\n                \"percent\",\n                \"value\"\n              ]\n            },\n            \"pieType\": \"pie\",\n            \"reduceOptions\": {\n              \"calcs\": [\n                \"lastNotNull\"\n              ],\n              \"fields\": \"\",\n              \"values\": false\n            },\n            \"tooltip\": {\n              \"mode\": \"multi\",\n              \"sort\": \"none\"\n            }\n          },\n          \"targets\": [\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"PBFA97CFB590B2093\"\n              },\n              \"exemplar\": true,\n              \"expr\": \"sum by (interval) (increase(beacon_builder_requests_total{instance=~\\\"$system\\\", method=\\\"status\\\"}[$__range]))\",\n              \"interval\": \"\",\n              \"legendFormat\": \"{{interval}}\",\n              \"refId\": \"A\"\n            }\n          ],\n          \"title\": \"\",\n          \"type\": \"piechart\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"description\": \"Builder Validator Registration API\",\n          \"fieldConfig\": {\n            \"defaults\": {\n              \"color\": {\n                \"mode\": \"palette-classic\"\n              },\n              \"custom\": {\n                \"hideFrom\": {\n                  \"legend\": false,\n                  \"tooltip\": false,\n                  \"viz\": false\n                }\n              },\n              \"mappings\": []\n            },\n            \"overrides\": [\n              {\n                \"matcher\": {\n                  \"id\": \"byRegexp\",\n                  \"options\": \"success\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"dark-green\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byRegexp\",\n                  \"options\": \"error\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"semi-dark-red\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              }\n            ]\n          },\n          \"gridPos\": {\n            \"h\": 9,\n            \"w\": 3,\n            \"x\": 12,\n            \"y\": 72\n          },\n          \"id\": 121,\n          \"options\": {\n            \"displayLabels\": [\n              \"name\",\n              \"value\"\n            ],\n            \"legend\": {\n              \"displayMode\": \"list\",\n              \"placement\": \"right\",\n              \"showLegend\": false,\n              \"values\": []\n            },\n            \"pieType\": \"pie\",\n            \"reduceOptions\": {\n              \"calcs\": [\n                \"lastNotNull\"\n              ],\n              \"fields\": \"\",\n              \"values\": false\n            },\n            \"tooltip\": {\n              \"mode\": \"multi\",\n              \"sort\": \"none\"\n            }\n          },\n          \"targets\": [\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"PBFA97CFB590B2093\"\n              },\n              \"exemplar\": true,\n              \"expr\": \"sum by (outcome) (increase(beacon_builder_requests_total{instance=~\\\"$system\\\", method=\\\"register_validators\\\"}[$__range]))\",\n              \"interval\": \"\",\n              \"legendFormat\": \"{{outcome}}\",\n              \"refId\": \"A\"\n            }\n          ],\n          \"title\": \"\",\n          \"type\": \"piechart\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"description\": \"Builder Validator Registration API\",\n          \"fieldConfig\": {\n            \"defaults\": {\n              \"color\": {\n                \"mode\": \"palette-classic\"\n              },\n              \"custom\": {\n                \"hideFrom\": {\n                  \"legend\": false,\n                  \"tooltip\": false,\n                  \"viz\": false\n                }\n              },\n              \"mappings\": []\n            },\n            \"overrides\": [\n              {\n                \"matcher\": {\n                  \"id\": \"byRegexp\",\n                  \"options\": \".*\\\\[0,100\\\\)\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"dark-green\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byRegexp\",\n                  \"options\": \".*\\\\[100,300\\\\)\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"dark-green\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byRegexp\",\n                  \"options\": \".*\\\\[300,500\\\\)\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"semi-dark-green\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byRegexp\",\n                  \"options\": \".*\\\\[500,1000\\\\)\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"green\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byRegexp\",\n                  \"options\": \".*\\\\[1000,2000\\\\)\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"orange\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byRegexp\",\n                  \"options\": \".*\\\\[2000,3000\\\\)\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"dark-orange\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byRegexp\",\n                  \"options\": \".*\\\\[3000,5000\\\\)\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"red\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byRegexp\",\n                  \"options\": \".*\\\\[5000,8000\\\\)\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"semi-dark-red\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byRegexp\",\n                  \"options\": \".*\\\\[5000,∞\\\\)\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"dark-red\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              }\n            ]\n          },\n          \"gridPos\": {\n            \"h\": 9,\n            \"w\": 9,\n            \"x\": 15,\n            \"y\": 72\n          },\n          \"id\": 102,\n          \"options\": {\n            \"displayLabels\": [\n              \"name\",\n              \"value\"\n            ],\n            \"legend\": {\n              \"displayMode\": \"table\",\n              \"placement\": \"right\",\n              \"showLegend\": true,\n              \"values\": [\n                \"percent\",\n                \"value\"\n              ]\n            },\n            \"pieType\": \"pie\",\n            \"reduceOptions\": {\n              \"calcs\": [\n                \"lastNotNull\"\n              ],\n              \"fields\": \"\",\n              \"values\": false\n            },\n            \"tooltip\": {\n              \"mode\": \"multi\",\n              \"sort\": \"none\"\n            }\n          },\n          \"targets\": [\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"PBFA97CFB590B2093\"\n              },\n              \"exemplar\": true,\n              \"expr\": \"sum by (interval) (increase(beacon_builder_requests_total{instance=~\\\"$system\\\", method=\\\"register_validators\\\"}[$__range]))\",\n              \"interval\": \"\",\n              \"legendFormat\": \"{{interval}}\",\n              \"refId\": \"A\"\n            }\n          ],\n          \"title\": \"\",\n          \"type\": \"piechart\"\n        },\n        {\n          \"fieldConfig\": {\n            \"defaults\": {},\n            \"overrides\": []\n          },\n          \"gridPos\": {\n            \"h\": 2,\n            \"w\": 12,\n            \"x\": 0,\n            \"y\": 81\n          },\n          \"id\": 110,\n          \"options\": {\n            \"content\": \"<h2 style=\\\"color: #eb7b18; font-size: 17px;\\\">\\n<center>Builder Get Header API</center>\\n</h2>\",\n            \"mode\": \"html\"\n          },\n          \"pluginVersion\": \"9.3.1\",\n          \"title\": \"\",\n          \"transparent\": true,\n          \"type\": \"text\"\n        },\n        {\n          \"fieldConfig\": {\n            \"defaults\": {},\n            \"overrides\": []\n          },\n          \"gridPos\": {\n            \"h\": 2,\n            \"w\": 12,\n            \"x\": 12,\n            \"y\": 81\n          },\n          \"id\": 114,\n          \"options\": {\n            \"content\": \"<h2 style=\\\"color: #eb7b18; font-size: 17px;\\\">\\n<center>Builder Get Payload API</center>\\n</h2>\",\n            \"mode\": \"html\"\n          },\n          \"pluginVersion\": \"9.3.1\",\n          \"title\": \"\",\n          \"transparent\": true,\n          \"type\": \"text\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"description\": \"Builder Get Header API\",\n          \"fieldConfig\": {\n            \"defaults\": {\n              \"color\": {\n                \"mode\": \"palette-classic\"\n              },\n              \"custom\": {\n                \"axisLabel\": \"\",\n                \"axisPlacement\": \"auto\",\n                \"barAlignment\": 0,\n                \"drawStyle\": \"line\",\n                \"fillOpacity\": 0,\n                \"gradientMode\": \"none\",\n                \"hideFrom\": {\n                  \"legend\": false,\n                  \"tooltip\": false,\n                  \"viz\": false\n                },\n                \"lineInterpolation\": \"linear\",\n                \"lineWidth\": 1,\n                \"pointSize\": 5,\n                \"scaleDistribution\": {\n                  \"type\": \"linear\"\n                },\n                \"showPoints\": \"auto\",\n                \"spanNulls\": false,\n                \"stacking\": {\n                  \"group\": \"A\",\n                  \"mode\": \"none\"\n                },\n                \"thresholdsStyle\": {\n                  \"mode\": \"off\"\n                }\n              },\n              \"mappings\": [],\n              \"thresholds\": {\n                \"mode\": \"absolute\",\n                \"steps\": [\n                  {\n                    \"color\": \"green\"\n                  },\n                  {\n                    \"color\": \"red\",\n                    \"value\": 80\n                  }\n                ]\n              }\n            },\n            \"overrides\": [\n              {\n                \"matcher\": {\n                  \"id\": \"byRegexp\",\n                  \"options\": \".*\\\\[0,100\\\\)\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"dark-green\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byRegexp\",\n                  \"options\": \".*\\\\[100,300\\\\)\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"dark-green\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byRegexp\",\n                  \"options\": \".*\\\\[300,500\\\\)\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"semi-dark-green\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byRegexp\",\n                  \"options\": \".*\\\\[500,1000\\\\)\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"green\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byRegexp\",\n                  \"options\": \".*\\\\[1000,2000\\\\)\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"orange\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byRegexp\",\n                  \"options\": \".*\\\\[2000,3000\\\\)\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"dark-orange\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byRegexp\",\n                  \"options\": \".*\\\\[3000,5000\\\\)\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"red\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byRegexp\",\n                  \"options\": \".*\\\\[5000,8000\\\\)\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"semi-dark-red\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byRegexp\",\n                  \"options\": \".*\\\\[5000,∞\\\\)\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"dark-red\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byRegexp\",\n                  \"options\": \"FAILED\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"custom.drawStyle\",\n                    \"value\": \"bars\"\n                  },\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#ff0000\",\n                      \"mode\": \"fixed\"\n                    }\n                  },\n                  {\n                    \"id\": \"custom.fillOpacity\",\n                    \"value\": 46\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"[300,500)\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"light-yellow\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"[500,1000)\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"yellow\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"[0,100)\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"green\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              }\n            ]\n          },\n          \"gridPos\": {\n            \"h\": 11,\n            \"w\": 12,\n            \"x\": 0,\n            \"y\": 83\n          },\n          \"id\": 107,\n          \"options\": {\n            \"legend\": {\n              \"calcs\": [\n                \"min\",\n                \"max\",\n                \"mean\"\n              ],\n              \"displayMode\": \"table\",\n              \"placement\": \"bottom\",\n              \"showLegend\": true,\n              \"sortBy\": \"Mean\",\n              \"sortDesc\": true\n            },\n            \"tooltip\": {\n              \"mode\": \"single\",\n              \"sort\": \"none\"\n            }\n          },\n          \"targets\": [\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"PBFA97CFB590B2093\"\n              },\n              \"exemplar\": true,\n              \"expr\": \"sum by (interval) (rate(beacon_builder_requests_total{instance=~\\\"$system\\\", method=\\\"get_header\\\"}[5m]))\",\n              \"hide\": false,\n              \"interval\": \"\",\n              \"legendFormat\": \"{{interval}}\",\n              \"refId\": \"A\"\n            },\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"PBFA97CFB590B2093\"\n              },\n              \"exemplar\": true,\n              \"expr\": \"sum by (outcome) (rate(beacon_builder_requests_total{instance=~\\\"$system\\\", method=\\\"get_header\\\", outcome=\\\"error\\\"}[5m]))\",\n              \"hide\": false,\n              \"interval\": \"\",\n              \"legendFormat\": \"FAILED\",\n              \"refId\": \"B\"\n            }\n          ],\n          \"title\": \"\",\n          \"type\": \"timeseries\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"description\": \"Builder Get Payload API\",\n          \"fieldConfig\": {\n            \"defaults\": {\n              \"color\": {\n                \"mode\": \"palette-classic\"\n              },\n              \"custom\": {\n                \"axisLabel\": \"\",\n                \"axisPlacement\": \"auto\",\n                \"barAlignment\": 0,\n                \"drawStyle\": \"line\",\n                \"fillOpacity\": 0,\n                \"gradientMode\": \"none\",\n                \"hideFrom\": {\n                  \"legend\": false,\n                  \"tooltip\": false,\n                  \"viz\": false\n                },\n                \"lineInterpolation\": \"linear\",\n                \"lineWidth\": 1,\n                \"pointSize\": 5,\n                \"scaleDistribution\": {\n                  \"type\": \"linear\"\n                },\n                \"showPoints\": \"auto\",\n                \"spanNulls\": false,\n                \"stacking\": {\n                  \"group\": \"A\",\n                  \"mode\": \"none\"\n                },\n                \"thresholdsStyle\": {\n                  \"mode\": \"off\"\n                }\n              },\n              \"mappings\": [],\n              \"thresholds\": {\n                \"mode\": \"absolute\",\n                \"steps\": [\n                  {\n                    \"color\": \"green\"\n                  },\n                  {\n                    \"color\": \"red\",\n                    \"value\": 80\n                  }\n                ]\n              }\n            },\n            \"overrides\": [\n              {\n                \"matcher\": {\n                  \"id\": \"byRegexp\",\n                  \"options\": \".*\\\\[0,100\\\\)\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"dark-green\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byRegexp\",\n                  \"options\": \".*\\\\[100,300\\\\)\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"dark-green\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byRegexp\",\n                  \"options\": \".*\\\\[300,500\\\\)\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"semi-dark-green\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byRegexp\",\n                  \"options\": \".*\\\\[500,1000\\\\)\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"green\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byRegexp\",\n                  \"options\": \".*\\\\[1000,2000\\\\)\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"orange\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byRegexp\",\n                  \"options\": \".*\\\\[2000,3000\\\\)\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"dark-orange\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byRegexp\",\n                  \"options\": \".*\\\\[3000,5000\\\\)\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"red\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byRegexp\",\n                  \"options\": \".*\\\\[5000,8000\\\\)\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"semi-dark-red\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byRegexp\",\n                  \"options\": \".*\\\\[5000,∞\\\\)\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"dark-red\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byRegexp\",\n                  \"options\": \"FAILED\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"custom.drawStyle\",\n                    \"value\": \"bars\"\n                  },\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"#ff0000\",\n                      \"mode\": \"fixed\"\n                    }\n                  },\n                  {\n                    \"id\": \"custom.fillOpacity\",\n                    \"value\": 50\n                  }\n                ]\n              }\n            ]\n          },\n          \"gridPos\": {\n            \"h\": 11,\n            \"w\": 12,\n            \"x\": 12,\n            \"y\": 83\n          },\n          \"id\": 115,\n          \"options\": {\n            \"legend\": {\n              \"calcs\": [\n                \"min\",\n                \"max\",\n                \"mean\"\n              ],\n              \"displayMode\": \"table\",\n              \"placement\": \"bottom\",\n              \"showLegend\": true,\n              \"sortBy\": \"Mean\",\n              \"sortDesc\": true\n            },\n            \"tooltip\": {\n              \"mode\": \"single\",\n              \"sort\": \"none\"\n            }\n          },\n          \"targets\": [\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"PBFA97CFB590B2093\"\n              },\n              \"exemplar\": true,\n              \"expr\": \"sum by (interval) (rate(beacon_builder_requests_total{instance=~\\\"$system\\\", method=\\\"get_payload\\\"}[5m]))\",\n              \"interval\": \"\",\n              \"legendFormat\": \"{{interval}}\",\n              \"refId\": \"A\"\n            },\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"PBFA97CFB590B2093\"\n              },\n              \"exemplar\": true,\n              \"expr\": \"sum by (outcome) (rate(beacon_builder_requests_total{instance=~\\\"$system\\\", method=\\\"get_payload\\\", outcome=\\\"error\\\"}[5m]))\",\n              \"hide\": false,\n              \"interval\": \"\",\n              \"legendFormat\": \"FAILED\",\n              \"refId\": \"B\"\n            }\n          ],\n          \"title\": \"\",\n          \"type\": \"timeseries\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"description\": \"Builder Get Header API\",\n          \"fieldConfig\": {\n            \"defaults\": {\n              \"color\": {\n                \"mode\": \"palette-classic\"\n              },\n              \"custom\": {\n                \"hideFrom\": {\n                  \"legend\": false,\n                  \"tooltip\": false,\n                  \"viz\": false\n                }\n              },\n              \"mappings\": []\n            },\n            \"overrides\": [\n              {\n                \"matcher\": {\n                  \"id\": \"byRegexp\",\n                  \"options\": \"success\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"dark-green\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byRegexp\",\n                  \"options\": \"error\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"semi-dark-red\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              }\n            ]\n          },\n          \"gridPos\": {\n            \"h\": 9,\n            \"w\": 3,\n            \"x\": 0,\n            \"y\": 94\n          },\n          \"id\": 119,\n          \"options\": {\n            \"displayLabels\": [\n              \"name\",\n              \"value\"\n            ],\n            \"legend\": {\n              \"displayMode\": \"list\",\n              \"placement\": \"right\",\n              \"showLegend\": false,\n              \"values\": []\n            },\n            \"pieType\": \"pie\",\n            \"reduceOptions\": {\n              \"calcs\": [\n                \"lastNotNull\"\n              ],\n              \"fields\": \"\",\n              \"values\": false\n            },\n            \"tooltip\": {\n              \"mode\": \"multi\",\n              \"sort\": \"none\"\n            }\n          },\n          \"targets\": [\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"PBFA97CFB590B2093\"\n              },\n              \"exemplar\": true,\n              \"expr\": \"sum by (outcome) (increase(beacon_builder_requests_total{instance=~\\\"$system\\\", method=\\\"get_header\\\"}[$__range]))\",\n              \"interval\": \"\",\n              \"legendFormat\": \"{{outcome}}\",\n              \"refId\": \"A\"\n            }\n          ],\n          \"title\": \"\",\n          \"type\": \"piechart\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"description\": \"Builder Get Header API\",\n          \"fieldConfig\": {\n            \"defaults\": {\n              \"color\": {\n                \"mode\": \"palette-classic\"\n              },\n              \"custom\": {\n                \"hideFrom\": {\n                  \"legend\": false,\n                  \"tooltip\": false,\n                  \"viz\": false\n                }\n              },\n              \"mappings\": []\n            },\n            \"overrides\": [\n              {\n                \"matcher\": {\n                  \"id\": \"byRegexp\",\n                  \"options\": \".*\\\\[0,100\\\\)\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"dark-green\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byRegexp\",\n                  \"options\": \".*\\\\[100,300\\\\)\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"semi-dark-green\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byRegexp\",\n                  \"options\": \".*\\\\[300,500\\\\)\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"yellow\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byRegexp\",\n                  \"options\": \".*\\\\[500,1000\\\\)\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"dark-yellow\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byRegexp\",\n                  \"options\": \".*\\\\[1000,2000\\\\)\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"orange\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byRegexp\",\n                  \"options\": \".*\\\\[2000,3000\\\\)\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"dark-orange\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byRegexp\",\n                  \"options\": \".*\\\\[3000,5000\\\\)\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"red\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byRegexp\",\n                  \"options\": \".*\\\\[5000,8000\\\\)\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"semi-dark-red\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byRegexp\",\n                  \"options\": \".*\\\\[5000,∞\\\\)\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"dark-red\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              }\n            ]\n          },\n          \"gridPos\": {\n            \"h\": 9,\n            \"w\": 9,\n            \"x\": 3,\n            \"y\": 94\n          },\n          \"id\": 106,\n          \"options\": {\n            \"displayLabels\": [\n              \"name\",\n              \"value\"\n            ],\n            \"legend\": {\n              \"displayMode\": \"table\",\n              \"placement\": \"right\",\n              \"showLegend\": true,\n              \"values\": [\n                \"percent\",\n                \"value\"\n              ]\n            },\n            \"pieType\": \"pie\",\n            \"reduceOptions\": {\n              \"calcs\": [\n                \"lastNotNull\"\n              ],\n              \"fields\": \"\",\n              \"values\": false\n            },\n            \"tooltip\": {\n              \"mode\": \"multi\",\n              \"sort\": \"none\"\n            }\n          },\n          \"targets\": [\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"PBFA97CFB590B2093\"\n              },\n              \"exemplar\": true,\n              \"expr\": \"sum by (interval) (increase(beacon_builder_requests_total{instance=~\\\"$system\\\", method=\\\"get_header\\\"}[$__range]))\",\n              \"interval\": \"\",\n              \"legendFormat\": \"{{interval}}\",\n              \"refId\": \"A\"\n            }\n          ],\n          \"title\": \"\",\n          \"type\": \"piechart\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"description\": \"Builder Get Payload API\",\n          \"fieldConfig\": {\n            \"defaults\": {\n              \"color\": {\n                \"mode\": \"palette-classic\"\n              },\n              \"custom\": {\n                \"hideFrom\": {\n                  \"legend\": false,\n                  \"tooltip\": false,\n                  \"viz\": false\n                }\n              },\n              \"mappings\": []\n            },\n            \"overrides\": [\n              {\n                \"matcher\": {\n                  \"id\": \"byRegexp\",\n                  \"options\": \"success\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"dark-green\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byRegexp\",\n                  \"options\": \"error\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"semi-dark-red\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              }\n            ]\n          },\n          \"gridPos\": {\n            \"h\": 9,\n            \"w\": 3,\n            \"x\": 12,\n            \"y\": 94\n          },\n          \"id\": 120,\n          \"options\": {\n            \"displayLabels\": [\n              \"name\",\n              \"value\"\n            ],\n            \"legend\": {\n              \"displayMode\": \"list\",\n              \"placement\": \"right\",\n              \"showLegend\": false,\n              \"values\": []\n            },\n            \"pieType\": \"pie\",\n            \"reduceOptions\": {\n              \"calcs\": [\n                \"lastNotNull\"\n              ],\n              \"fields\": \"\",\n              \"values\": false\n            },\n            \"tooltip\": {\n              \"mode\": \"multi\",\n              \"sort\": \"none\"\n            }\n          },\n          \"targets\": [\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"PBFA97CFB590B2093\"\n              },\n              \"exemplar\": true,\n              \"expr\": \"sum by (outcome) (increase(beacon_builder_requests_total{instance=~\\\"$system\\\", method=\\\"get_payload\\\"}[$__range]))\",\n              \"interval\": \"\",\n              \"legendFormat\": \"{{outcome}}\",\n              \"refId\": \"A\"\n            }\n          ],\n          \"title\": \"\",\n          \"type\": \"piechart\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"description\": \"Builder Get Payload API\",\n          \"fieldConfig\": {\n            \"defaults\": {\n              \"color\": {\n                \"mode\": \"palette-classic\"\n              },\n              \"custom\": {\n                \"hideFrom\": {\n                  \"legend\": false,\n                  \"tooltip\": false,\n                  \"viz\": false\n                }\n              },\n              \"mappings\": []\n            },\n            \"overrides\": [\n              {\n                \"matcher\": {\n                  \"id\": \"byRegexp\",\n                  \"options\": \".*\\\\[0,100\\\\)\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"dark-green\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byRegexp\",\n                  \"options\": \".*\\\\[100,300\\\\)\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"semi-dark-green\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byRegexp\",\n                  \"options\": \".*\\\\[300,500\\\\)\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"yellow\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byRegexp\",\n                  \"options\": \".*\\\\[500,1000\\\\)\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"dark-yellow\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byRegexp\",\n                  \"options\": \".*\\\\[1000,2000\\\\)\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"orange\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byRegexp\",\n                  \"options\": \".*\\\\[2000,3000\\\\)\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"dark-orange\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byRegexp\",\n                  \"options\": \".*\\\\[3000,5000\\\\)\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"red\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byRegexp\",\n                  \"options\": \".*\\\\[5000,8000\\\\)\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"semi-dark-red\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byRegexp\",\n                  \"options\": \".*\\\\[5000,∞\\\\)\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"dark-red\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              }\n            ]\n          },\n          \"gridPos\": {\n            \"h\": 9,\n            \"w\": 9,\n            \"x\": 15,\n            \"y\": 94\n          },\n          \"id\": 116,\n          \"options\": {\n            \"displayLabels\": [\n              \"name\",\n              \"value\"\n            ],\n            \"legend\": {\n              \"displayMode\": \"table\",\n              \"placement\": \"right\",\n              \"showLegend\": true,\n              \"values\": [\n                \"percent\",\n                \"value\"\n              ]\n            },\n            \"pieType\": \"pie\",\n            \"reduceOptions\": {\n              \"calcs\": [\n                \"lastNotNull\"\n              ],\n              \"fields\": \"\",\n              \"values\": false\n            },\n            \"tooltip\": {\n              \"mode\": \"multi\",\n              \"sort\": \"none\"\n            }\n          },\n          \"targets\": [\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"PBFA97CFB590B2093\"\n              },\n              \"exemplar\": true,\n              \"expr\": \"sum by (interval) (increase(beacon_builder_requests_total{instance=~\\\"$system\\\", method=\\\"get_payload\\\"}[$__range]))\",\n              \"interval\": \"\",\n              \"legendFormat\": \"{{interval}}\",\n              \"refId\": \"A\"\n            }\n          ],\n          \"title\": \"\",\n          \"type\": \"piechart\"\n        }\n      ],\n      \"title\": \"Beacon Node Builder API Client\",\n      \"type\": \"row\"\n    },\n    {\n      \"collapsed\": false,\n      \"gridPos\": {\n        \"h\": 1,\n        \"w\": 24,\n        \"x\": 0,\n        \"y\": 51\n      },\n      \"id\": 95,\n      \"panels\": [],\n      \"title\": \"Block Timings\",\n      \"type\": \"row\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"description\": \"\",\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"palette-classic\"\n          },\n          \"custom\": {\n            \"hideFrom\": {\n              \"legend\": false,\n              \"tooltip\": false,\n              \"viz\": false\n            }\n          },\n          \"mappings\": []\n        },\n        \"overrides\": [\n          {\n            \"matcher\": {\n              \"id\": \"byRegexp\",\n              \"options\": \".*\\\\[0,500\\\\)\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"color\",\n                \"value\": {\n                  \"fixedColor\": \"dark-green\",\n                  \"mode\": \"fixed\"\n                }\n              }\n            ]\n          },\n          {\n            \"matcher\": {\n              \"id\": \"byRegexp\",\n              \"options\": \".*\\\\[1,500\\\\)\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"color\",\n                \"value\": {\n                  \"fixedColor\": \"green\",\n                  \"mode\": \"fixed\"\n                }\n              }\n            ]\n          },\n          {\n            \"matcher\": {\n              \"id\": \"byRegexp\",\n              \"options\": \".*\\\\[1000,2000\\\\)\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"color\",\n                \"value\": {\n                  \"fixedColor\": \"yellow\",\n                  \"mode\": \"fixed\"\n                }\n              }\n            ]\n          },\n          {\n            \"matcher\": {\n              \"id\": \"byRegexp\",\n              \"options\": \".*\\\\[2000,3000\\\\)\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"color\",\n                \"value\": {\n                  \"fixedColor\": \"orange\",\n                  \"mode\": \"fixed\"\n                }\n              }\n            ]\n          },\n          {\n            \"matcher\": {\n              \"id\": \"byRegexp\",\n              \"options\": \".*\\\\[500,1000\\\\)\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"color\",\n                \"value\": {\n                  \"fixedColor\": \"super-light-green\",\n                  \"mode\": \"fixed\"\n                }\n              }\n            ]\n          },\n          {\n            \"matcher\": {\n              \"id\": \"byRegexp\",\n              \"options\": \".*\\\\[3000,4000\\\\)\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"color\",\n                \"value\": {\n                  \"fixedColor\": \"dark-orange\",\n                  \"mode\": \"fixed\"\n                }\n              }\n            ]\n          },\n          {\n            \"matcher\": {\n              \"id\": \"byRegexp\",\n              \"options\": \".*\\\\[4000,5000\\\\)\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"color\",\n                \"value\": {\n                  \"fixedColor\": \"red\",\n                  \"mode\": \"fixed\"\n                }\n              }\n            ]\n          },\n          {\n            \"matcher\": {\n              \"id\": \"byRegexp\",\n              \"options\": \".*\\\\[5000,8000\\\\)\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"color\",\n                \"value\": {\n                  \"fixedColor\": \"semi-dark-red\",\n                  \"mode\": \"fixed\"\n                }\n              }\n            ]\n          },\n          {\n            \"matcher\": {\n              \"id\": \"byRegexp\",\n              \"options\": \".*\\\\[12000,∞\\\\)\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"color\",\n                \"value\": {\n                  \"fixedColor\": \"dark-red\",\n                  \"mode\": \"fixed\"\n                }\n              }\n            ]\n          },\n          {\n            \"matcher\": {\n              \"id\": \"byRegexp\",\n              \"options\": \".*\\\\[8000,12000\\\\)\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"color\",\n                \"value\": {\n                  \"fixedColor\": \"dark-red\",\n                  \"mode\": \"fixed\"\n                }\n              }\n            ]\n          }\n        ]\n      },\n      \"gridPos\": {\n        \"h\": 11,\n        \"w\": 12,\n        \"x\": 0,\n        \"y\": 52\n      },\n      \"id\": 96,\n      \"options\": {\n        \"legend\": {\n          \"displayMode\": \"table\",\n          \"placement\": \"right\",\n          \"showLegend\": true,\n          \"values\": [\n            \"value\",\n            \"percent\"\n          ]\n        },\n        \"pieType\": \"pie\",\n        \"reduceOptions\": {\n          \"calcs\": [\n            \"lastNotNull\"\n          ],\n          \"fields\": \"\",\n          \"values\": false\n        },\n        \"tooltip\": {\n          \"hideZeros\": false,\n          \"mode\": \"single\",\n          \"sort\": \"none\"\n        }\n      },\n      \"pluginVersion\": \"12.0.2\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"exemplar\": true,\n          \"expr\": \"sum by (interval) (increase(beacon_block_import_delay_counter{instance=~\\\"$system\\\", stage=\\\"arrival\\\"}[$__range])) or sum by (interval) (increase(beacon_block_import_delay_counter_total{instance=~\\\"$system\\\", stage=\\\"arrival\\\"}[$__range]))\",\n          \"interval\": \"\",\n          \"legendFormat\": \"{{interval}}\",\n          \"refId\": \"A\"\n        }\n      ],\n      \"title\": \"Block Arrival Delays\",\n      \"type\": \"piechart\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"description\": \"Block total processing time for successfully imported blocks\",\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"palette-classic\"\n          },\n          \"custom\": {\n            \"hideFrom\": {\n              \"legend\": false,\n              \"tooltip\": false,\n              \"viz\": false\n            }\n          },\n          \"mappings\": []\n        },\n        \"overrides\": [\n          {\n            \"matcher\": {\n              \"id\": \"byRegexp\",\n              \"options\": \".*\\\\[0,500\\\\)\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"color\",\n                \"value\": {\n                  \"fixedColor\": \"dark-green\",\n                  \"mode\": \"fixed\"\n                }\n              }\n            ]\n          },\n          {\n            \"matcher\": {\n              \"id\": \"byRegexp\",\n              \"options\": \".*\\\\[1,500\\\\)\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"color\",\n                \"value\": {\n                  \"fixedColor\": \"green\",\n                  \"mode\": \"fixed\"\n                }\n              }\n            ]\n          },\n          {\n            \"matcher\": {\n              \"id\": \"byRegexp\",\n              \"options\": \".*\\\\[1000,2000\\\\)\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"color\",\n                \"value\": {\n                  \"fixedColor\": \"yellow\",\n                  \"mode\": \"fixed\"\n                }\n              }\n            ]\n          },\n          {\n            \"matcher\": {\n              \"id\": \"byRegexp\",\n              \"options\": \".*\\\\[2000,3000\\\\)\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"color\",\n                \"value\": {\n                  \"fixedColor\": \"orange\",\n                  \"mode\": \"fixed\"\n                }\n              }\n            ]\n          },\n          {\n            \"matcher\": {\n              \"id\": \"byRegexp\",\n              \"options\": \".*\\\\[500,1000\\\\)\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"color\",\n                \"value\": {\n                  \"fixedColor\": \"super-light-green\",\n                  \"mode\": \"fixed\"\n                }\n              }\n            ]\n          },\n          {\n            \"matcher\": {\n              \"id\": \"byRegexp\",\n              \"options\": \".*\\\\[3000,4000\\\\)\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"color\",\n                \"value\": {\n                  \"fixedColor\": \"dark-orange\",\n                  \"mode\": \"fixed\"\n                }\n              }\n            ]\n          },\n          {\n            \"matcher\": {\n              \"id\": \"byRegexp\",\n              \"options\": \".*\\\\[4000,5000\\\\)\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"color\",\n                \"value\": {\n                  \"fixedColor\": \"red\",\n                  \"mode\": \"fixed\"\n                }\n              }\n            ]\n          },\n          {\n            \"matcher\": {\n              \"id\": \"byRegexp\",\n              \"options\": \".*\\\\[5000,8000\\\\)\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"color\",\n                \"value\": {\n                  \"fixedColor\": \"semi-dark-red\",\n                  \"mode\": \"fixed\"\n                }\n              }\n            ]\n          },\n          {\n            \"matcher\": {\n              \"id\": \"byRegexp\",\n              \"options\": \".*\\\\[12000,∞\\\\)\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"color\",\n                \"value\": {\n                  \"fixedColor\": \"dark-red\",\n                  \"mode\": \"fixed\"\n                }\n              }\n            ]\n          },\n          {\n            \"matcher\": {\n              \"id\": \"byRegexp\",\n              \"options\": \".*\\\\[8000,12000\\\\)\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"color\",\n                \"value\": {\n                  \"fixedColor\": \"dark-red\",\n                  \"mode\": \"fixed\"\n                }\n              }\n            ]\n          }\n        ]\n      },\n      \"gridPos\": {\n        \"h\": 11,\n        \"w\": 12,\n        \"x\": 12,\n        \"y\": 52\n      },\n      \"id\": 97,\n      \"options\": {\n        \"legend\": {\n          \"displayMode\": \"table\",\n          \"placement\": \"right\",\n          \"showLegend\": true,\n          \"values\": [\n            \"value\",\n            \"percent\"\n          ]\n        },\n        \"pieType\": \"pie\",\n        \"reduceOptions\": {\n          \"calcs\": [\n            \"lastNotNull\"\n          ],\n          \"fields\": \"\",\n          \"values\": false\n        },\n        \"tooltip\": {\n          \"hideZeros\": false,\n          \"mode\": \"single\",\n          \"sort\": \"none\"\n        }\n      },\n      \"pluginVersion\": \"12.0.2\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"editorMode\": \"code\",\n          \"exemplar\": true,\n          \"expr\": \"sum by (interval) (increase(beacon_block_import_delay_counter{instance=~\\\"$system\\\", stage=\\\"total_processing_time\\\", result=\\\"success\\\"}[$__range])) or sum by (interval) (increase(beacon_block_import_delay_counter_total{instance=~\\\"$system\\\", stage=\\\"total_processing_time\\\", result=\\\"success\\\"}[$__range]))\",\n          \"interval\": \"\",\n          \"legendFormat\": \"{{interval}}\",\n          \"range\": true,\n          \"refId\": \"A\"\n        }\n      ],\n      \"title\": \"Block Total Processing Time\",\n      \"type\": \"piechart\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"description\": \"How long Teku waited for the execution layer to finish block processing\",\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"palette-classic\"\n          },\n          \"custom\": {\n            \"hideFrom\": {\n              \"legend\": false,\n              \"tooltip\": false,\n              \"viz\": false\n            }\n          },\n          \"mappings\": []\n        },\n        \"overrides\": [\n          {\n            \"matcher\": {\n              \"id\": \"byRegexp\",\n              \"options\": \".*\\\\[0,50\\\\)\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"color\",\n                \"value\": {\n                  \"fixedColor\": \"dark-green\",\n                  \"mode\": \"fixed\"\n                }\n              }\n            ]\n          },\n          {\n            \"matcher\": {\n              \"id\": \"byRegexp\",\n              \"options\": \".*\\\\[50,100\\\\)\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"color\",\n                \"value\": {\n                  \"fixedColor\": \"green\",\n                  \"mode\": \"fixed\"\n                }\n              }\n            ]\n          },\n          {\n            \"matcher\": {\n              \"id\": \"byRegexp\",\n              \"options\": \".*\\\\[1000,2000\\\\)\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"color\",\n                \"value\": {\n                  \"fixedColor\": \"red\",\n                  \"mode\": \"fixed\"\n                }\n              }\n            ]\n          },\n          {\n            \"matcher\": {\n              \"id\": \"byRegexp\",\n              \"options\": \".*\\\\[100,250\\\\)\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"color\",\n                \"value\": {\n                  \"fixedColor\": \"green\",\n                  \"mode\": \"fixed\"\n                }\n              }\n            ]\n          },\n          {\n            \"matcher\": {\n              \"id\": \"byRegexp\",\n              \"options\": \".*\\\\[500,1000\\\\)\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"color\",\n                \"value\": {\n                  \"fixedColor\": \"orange\",\n                  \"mode\": \"fixed\"\n                }\n              }\n            ]\n          },\n          {\n            \"matcher\": {\n              \"id\": \"byRegexp\",\n              \"options\": \".*\\\\[250,500\\\\)\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"color\",\n                \"value\": {\n                  \"fixedColor\": \"dark-orange\",\n                  \"mode\": \"fixed\"\n                }\n              }\n            ]\n          },\n          {\n            \"matcher\": {\n              \"id\": \"byRegexp\",\n              \"options\": \".*\\\\[2000,∞\\\\)\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"color\",\n                \"value\": {\n                  \"fixedColor\": \"dark-red\",\n                  \"mode\": \"fixed\"\n                }\n              }\n            ]\n          }\n        ]\n      },\n      \"gridPos\": {\n        \"h\": 11,\n        \"w\": 12,\n        \"x\": 0,\n        \"y\": 63\n      },\n      \"id\": 139,\n      \"options\": {\n        \"legend\": {\n          \"displayMode\": \"table\",\n          \"placement\": \"right\",\n          \"showLegend\": true,\n          \"values\": [\n            \"value\",\n            \"percent\"\n          ]\n        },\n        \"pieType\": \"pie\",\n        \"reduceOptions\": {\n          \"calcs\": [\n            \"lastNotNull\"\n          ],\n          \"fields\": \"\",\n          \"values\": false\n        },\n        \"tooltip\": {\n          \"hideZeros\": false,\n          \"mode\": \"single\",\n          \"sort\": \"none\"\n        }\n      },\n      \"pluginVersion\": \"12.0.2\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"exemplar\": true,\n          \"expr\": \"sum by (interval) (increase(beacon_block_import_delay_counter{instance=~\\\"$system\\\", stage=\\\"execution_payload_result_received\\\"}[$__range])) or sum by (interval) (increase(beacon_block_import_delay_counter_total{instance=~\\\"$system\\\", stage=\\\"execution_payload_result_received\\\"}[$__range]))\",\n          \"interval\": \"\",\n          \"legendFormat\": \"{{interval}}\",\n          \"refId\": \"A\"\n        }\n      ],\n      \"title\": \"Wait for Block Execution Layer Processing Time\",\n      \"type\": \"piechart\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"description\": \"Block import failures grouped by failure reason\",\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"palette-classic\"\n          },\n          \"custom\": {\n            \"hideFrom\": {\n              \"legend\": false,\n              \"tooltip\": false,\n              \"viz\": false\n            }\n          },\n          \"mappings\": []\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 11,\n        \"w\": 12,\n        \"x\": 12,\n        \"y\": 63\n      },\n      \"id\": 147,\n      \"options\": {\n        \"legend\": {\n          \"displayMode\": \"table\",\n          \"placement\": \"right\",\n          \"showLegend\": true,\n          \"values\": [\n            \"value\",\n            \"percent\"\n          ]\n        },\n        \"pieType\": \"pie\",\n        \"reduceOptions\": {\n          \"calcs\": [\n            \"lastNotNull\"\n          ],\n          \"fields\": \"\",\n          \"values\": false\n        },\n        \"tooltip\": {\n          \"hideZeros\": false,\n          \"mode\": \"single\",\n          \"sort\": \"none\"\n        }\n      },\n      \"pluginVersion\": \"12.0.2\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"editorMode\": \"code\",\n          \"exemplar\": true,\n          \"expr\": \"sum by (result) (increase(beacon_block_import_delay_counter{instance=~\\\"$system\\\", stage=\\\"total_processing_time\\\", result!=\\\"success\\\"}[$__range])) or sum by (result) (increase(beacon_block_import_delay_counter_total{instance=~\\\"$system\\\", stage=\\\"total_processing_time\\\", result!=\\\"success\\\"}[$__range]))\",\n          \"interval\": \"\",\n          \"legendFormat\": \"{{interval}}\",\n          \"range\": true,\n          \"refId\": \"A\"\n        }\n      ],\n      \"title\": \"Failed block import\",\n      \"type\": \"piechart\"\n    },\n    {\n      \"collapsed\": true,\n      \"gridPos\": {\n        \"h\": 1,\n        \"w\": 24,\n        \"x\": 0,\n        \"y\": 74\n      },\n      \"id\": 77,\n      \"panels\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"description\": \"\",\n          \"fieldConfig\": {\n            \"defaults\": {\n              \"color\": {\n                \"mode\": \"palette-classic\"\n              },\n              \"custom\": {\n                \"axisBorderShow\": false,\n                \"axisCenteredZero\": false,\n                \"axisColorMode\": \"text\",\n                \"axisLabel\": \"\",\n                \"axisPlacement\": \"auto\",\n                \"barAlignment\": 0,\n                \"barWidthFactor\": 0.6,\n                \"drawStyle\": \"line\",\n                \"fillOpacity\": 0,\n                \"gradientMode\": \"none\",\n                \"hideFrom\": {\n                  \"legend\": false,\n                  \"tooltip\": false,\n                  \"viz\": false\n                },\n                \"insertNulls\": false,\n                \"lineInterpolation\": \"linear\",\n                \"lineWidth\": 1,\n                \"pointSize\": 5,\n                \"scaleDistribution\": {\n                  \"type\": \"linear\"\n                },\n                \"showPoints\": \"never\",\n                \"spanNulls\": true,\n                \"stacking\": {\n                  \"group\": \"A\",\n                  \"mode\": \"none\"\n                },\n                \"thresholdsStyle\": {\n                  \"mode\": \"off\"\n                }\n              },\n              \"links\": [],\n              \"mappings\": [],\n              \"min\": 0,\n              \"thresholds\": {\n                \"mode\": \"absolute\",\n                \"steps\": [\n                  {\n                    \"color\": \"green\"\n                  },\n                  {\n                    \"color\": \"red\",\n                    \"value\": 80\n                  }\n                ]\n              },\n              \"unit\": \"none\"\n            },\n            \"overrides\": []\n          },\n          \"gridPos\": {\n            \"h\": 11,\n            \"w\": 24,\n            \"x\": 0,\n            \"y\": 72\n          },\n          \"id\": 59,\n          \"options\": {\n            \"legend\": {\n              \"calcs\": [\n                \"mean\",\n                \"lastNotNull\"\n              ],\n              \"displayMode\": \"table\",\n              \"placement\": \"bottom\",\n              \"showLegend\": true\n            },\n            \"tooltip\": {\n              \"hideZeros\": false,\n              \"mode\": \"multi\",\n              \"sort\": \"none\"\n            }\n          },\n          \"pluginVersion\": \"12.0.2\",\n          \"targets\": [\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"PBFA97CFB590B2093\"\n              },\n              \"editorMode\": \"code\",\n              \"exemplar\": true,\n              \"expr\": \"irate(process_cpu_seconds_total{instance=~\\\"$system\\\"}[1m])\",\n              \"hide\": false,\n              \"interval\": \"\",\n              \"legendFormat\": \"{{instance}} {{job}}\",\n              \"range\": true,\n              \"refId\": \"C\"\n            },\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"PBFA97CFB590B2093\"\n              },\n              \"exemplar\": true,\n              \"expr\": \"avg without (instance) (irate(process_cpu_seconds_total{instance=~\\\"$system\\\"}[1m]))\",\n              \"hide\": true,\n              \"interval\": \"\",\n              \"legendFormat\": \"Average {{job}}\",\n              \"refId\": \"A\"\n            },\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"PBFA97CFB590B2093\"\n              },\n              \"exemplar\": true,\n              \"expr\": \"max without (instance) (irate(process_cpu_seconds_total{instance=~\\\"$system\\\"}[1m]))\",\n              \"hide\": true,\n              \"interval\": \"\",\n              \"legendFormat\": \"Max {{job}}\",\n              \"refId\": \"B\"\n            },\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"PBFA97CFB590B2093\"\n              },\n              \"editorMode\": \"code\",\n              \"exemplar\": true,\n              \"expr\": \"sum by (instance) (irate(node_cpu_seconds_total{instance=~\\\"$system\\\",mode!=\\\"idle\\\"}[1m]))\",\n              \"hide\": false,\n              \"interval\": \"\",\n              \"legendFormat\": \"{{instance}} Total\",\n              \"range\": true,\n              \"refId\": \"D\"\n            },\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"PBFA97CFB590B2093\"\n              },\n              \"exemplar\": true,\n              \"expr\": \"avg by (instance,mode) (irate(node_cpu_seconds_total{instance=~\\\"$system\\\",mode!=\\\"idle\\\"}[1m]))\",\n              \"hide\": true,\n              \"interval\": \"\",\n              \"legendFormat\": \"{{instance}} {{mode}}\",\n              \"refId\": \"E\"\n            }\n          ],\n          \"title\": \"CPU usage\",\n          \"type\": \"timeseries\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"description\": \"Percentage of old gen heap used.\",\n          \"fieldConfig\": {\n            \"defaults\": {\n              \"color\": {\n                \"mode\": \"palette-classic\"\n              },\n              \"custom\": {\n                \"axisBorderShow\": false,\n                \"axisCenteredZero\": false,\n                \"axisColorMode\": \"text\",\n                \"axisLabel\": \"\",\n                \"axisPlacement\": \"auto\",\n                \"axisSoftMax\": 100,\n                \"barAlignment\": 0,\n                \"barWidthFactor\": 0.6,\n                \"drawStyle\": \"line\",\n                \"fillOpacity\": 0,\n                \"gradientMode\": \"none\",\n                \"hideFrom\": {\n                  \"legend\": false,\n                  \"tooltip\": false,\n                  \"viz\": false\n                },\n                \"insertNulls\": false,\n                \"lineInterpolation\": \"linear\",\n                \"lineWidth\": 1,\n                \"pointSize\": 5,\n                \"scaleDistribution\": {\n                  \"type\": \"linear\"\n                },\n                \"showPoints\": \"auto\",\n                \"spanNulls\": false,\n                \"stacking\": {\n                  \"group\": \"A\",\n                  \"mode\": \"none\"\n                },\n                \"thresholdsStyle\": {\n                  \"mode\": \"area\"\n                }\n              },\n              \"mappings\": [],\n              \"thresholds\": {\n                \"mode\": \"absolute\",\n                \"steps\": [\n                  {\n                    \"color\": \"green\"\n                  },\n                  {\n                    \"color\": \"red\",\n                    \"value\": 90\n                  }\n                ]\n              },\n              \"unit\": \"percent\"\n            },\n            \"overrides\": []\n          },\n          \"gridPos\": {\n            \"h\": 10,\n            \"w\": 8,\n            \"x\": 0,\n            \"y\": 83\n          },\n          \"id\": 141,\n          \"options\": {\n            \"legend\": {\n              \"calcs\": [],\n              \"displayMode\": \"list\",\n              \"placement\": \"bottom\",\n              \"showLegend\": true\n            },\n            \"tooltip\": {\n              \"hideZeros\": false,\n              \"mode\": \"single\",\n              \"sort\": \"none\"\n            }\n          },\n          \"pluginVersion\": \"12.0.2\",\n          \"targets\": [\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"PBFA97CFB590B2093\"\n              },\n              \"editorMode\": \"code\",\n              \"expr\": \"(jvm_memory_pool_bytes_used{job=\\\"besu-node\\\", pool=\\\"G1 Old Gen\\\", instance=~\\\"$system\\\"} / jvm_memory_pool_bytes_max{job=\\\"besu-node\\\", pool=\\\"G1 Old Gen\\\", instance=~\\\"$system\\\"}) * 100  or (jvm_memory_pool_used_bytes{job=\\\"besu-node\\\", pool=\\\"G1 Old Gen\\\", instance=~\\\"$system\\\"} / jvm_memory_pool_max_bytes{job=\\\"besu-node\\\", pool=\\\"G1 Old Gen\\\", instance=~\\\"$system\\\"}) * 100  \",\n              \"hide\": false,\n              \"legendFormat\": \"{{instance}} {{job}}\",\n              \"range\": true,\n              \"refId\": \"A\"\n            },\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"PBFA97CFB590B2093\"\n              },\n              \"editorMode\": \"code\",\n              \"expr\": \"(jvm_memory_pool_bytes_used{job=~\\\"teku-.*\\\", pool=\\\"G1 Old Gen\\\", instance=~\\\"$system\\\"} / jvm_memory_pool_bytes_max{job=~\\\"teku-.*\\\", pool=\\\"G1 Old Gen\\\", instance=~\\\"$system\\\"}) * 100 or (jvm_memory_pool_used_bytes{job=~\\\"teku-.*\\\", pool=\\\"G1 Old Gen\\\", instance=~\\\"$system\\\"} / jvm_memory_pool_max_bytes{job=~\\\"teku-.*\\\", pool=\\\"G1 Old Gen\\\", instance=~\\\"$system\\\"}) * 100\",\n              \"hide\": false,\n              \"legendFormat\": \"{{instance}} {{job}}\",\n              \"range\": true,\n              \"refId\": \"B\"\n            }\n          ],\n          \"title\": \"Old Gen Heap Usage\",\n          \"type\": \"timeseries\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"description\": \"\",\n          \"fieldConfig\": {\n            \"defaults\": {\n              \"color\": {\n                \"mode\": \"palette-classic\"\n              },\n              \"custom\": {\n                \"axisBorderShow\": false,\n                \"axisCenteredZero\": false,\n                \"axisColorMode\": \"text\",\n                \"axisLabel\": \"\",\n                \"axisPlacement\": \"auto\",\n                \"barAlignment\": 0,\n                \"barWidthFactor\": 0.6,\n                \"drawStyle\": \"line\",\n                \"fillOpacity\": 0,\n                \"gradientMode\": \"opacity\",\n                \"hideFrom\": {\n                  \"legend\": false,\n                  \"tooltip\": false,\n                  \"viz\": false\n                },\n                \"insertNulls\": false,\n                \"lineInterpolation\": \"linear\",\n                \"lineWidth\": 1,\n                \"pointSize\": 5,\n                \"scaleDistribution\": {\n                  \"type\": \"linear\"\n                },\n                \"showPoints\": \"never\",\n                \"spanNulls\": false,\n                \"stacking\": {\n                  \"group\": \"A\",\n                  \"mode\": \"none\"\n                },\n                \"thresholdsStyle\": {\n                  \"mode\": \"off\"\n                }\n              },\n              \"links\": [],\n              \"mappings\": [],\n              \"min\": 0,\n              \"thresholds\": {\n                \"mode\": \"absolute\",\n                \"steps\": [\n                  {\n                    \"color\": \"green\"\n                  },\n                  {\n                    \"color\": \"red\",\n                    \"value\": 80\n                  }\n                ]\n              },\n              \"unit\": \"bytes\"\n            },\n            \"overrides\": [\n              {\n                \"matcher\": {\n                  \"id\": \"byValue\",\n                  \"options\": {\n                    \"op\": \"gte\",\n                    \"reducer\": \"allIsZero\",\n                    \"value\": 0\n                  }\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"custom.hideFrom\",\n                    \"value\": {\n                      \"legend\": true,\n                      \"tooltip\": true,\n                      \"viz\": false\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byValue\",\n                  \"options\": {\n                    \"op\": \"gte\",\n                    \"reducer\": \"allIsNull\",\n                    \"value\": 0\n                  }\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"custom.hideFrom\",\n                    \"value\": {\n                      \"legend\": true,\n                      \"tooltip\": true,\n                      \"viz\": false\n                    }\n                  }\n                ]\n              }\n            ]\n          },\n          \"gridPos\": {\n            \"h\": 10,\n            \"w\": 8,\n            \"x\": 8,\n            \"y\": 83\n          },\n          \"id\": 60,\n          \"options\": {\n            \"legend\": {\n              \"calcs\": [\n                \"mean\",\n                \"lastNotNull\",\n                \"max\"\n              ],\n              \"displayMode\": \"table\",\n              \"placement\": \"bottom\",\n              \"showLegend\": true\n            },\n            \"tooltip\": {\n              \"hideZeros\": false,\n              \"mode\": \"multi\",\n              \"sort\": \"none\"\n            }\n          },\n          \"pluginVersion\": \"12.0.2\",\n          \"targets\": [\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"PBFA97CFB590B2093\"\n              },\n              \"expr\": \"jvm_memory_pool_bytes_used{instance=~\\\"$system\\\"} or jvm_memory_pool_used_bytes{instance=~\\\"$system\\\"}\",\n              \"hide\": false,\n              \"interval\": \"\",\n              \"legendFormat\": \"{{instance}} {{job}} {{pool}} Used\",\n              \"refId\": \"C\"\n            },\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"PBFA97CFB590B2093\"\n              },\n              \"expr\": \"sum by (instance) (jvm_memory_pool_bytes_used{instance=~\\\"$system\\\"}) or sum by (instance) (jvm_memory_pool_used_bytes{instance=~\\\"$system\\\"})\",\n              \"hide\": false,\n              \"interval\": \"\",\n              \"legendFormat\": \"{{instance}} {{job}} {{pool}} Used Total\",\n              \"refId\": \"A\"\n            },\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"PBFA97CFB590B2093\"\n              },\n              \"expr\": \"process_resident_memory_bytes{instance=~\\\"$system\\\"}\",\n              \"hide\": false,\n              \"interval\": \"\",\n              \"legendFormat\": \"{{instance}} {{job}} {{pool}} Process Total\",\n              \"refId\": \"B\"\n            },\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"PBFA97CFB590B2093\"\n              },\n              \"expr\": \" (jvm_memory_pool_bytes_max{instance=~\\\"$system\\\"}) or (jvm_memory_pool_max_bytes{instance=~\\\"$system\\\"})\",\n              \"hide\": false,\n              \"interval\": \"\",\n              \"legendFormat\": \"{{instance}} {{job}} {{pool}} Max\",\n              \"refId\": \"D\"\n            },\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"PBFA97CFB590B2093\"\n              },\n              \"expr\": \"node_memory_MemTotal_bytes{instance=~\\\"$system\\\"}\",\n              \"hide\": true,\n              \"interval\": \"\",\n              \"legendFormat\": \"{{instance}} System Memory\",\n              \"refId\": \"E\"\n            }\n          ],\n          \"title\": \"Memory Usage\",\n          \"type\": \"timeseries\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"description\": \"\",\n          \"fieldConfig\": {\n            \"defaults\": {\n              \"color\": {\n                \"mode\": \"palette-classic\"\n              },\n              \"custom\": {\n                \"axisBorderShow\": false,\n                \"axisCenteredZero\": false,\n                \"axisColorMode\": \"text\",\n                \"axisLabel\": \"\",\n                \"axisPlacement\": \"auto\",\n                \"barAlignment\": 0,\n                \"barWidthFactor\": 0.6,\n                \"drawStyle\": \"line\",\n                \"fillOpacity\": 0,\n                \"gradientMode\": \"opacity\",\n                \"hideFrom\": {\n                  \"legend\": false,\n                  \"tooltip\": false,\n                  \"viz\": false\n                },\n                \"insertNulls\": false,\n                \"lineInterpolation\": \"linear\",\n                \"lineWidth\": 1,\n                \"pointSize\": 5,\n                \"scaleDistribution\": {\n                  \"type\": \"linear\"\n                },\n                \"showPoints\": \"never\",\n                \"spanNulls\": false,\n                \"stacking\": {\n                  \"group\": \"A\",\n                  \"mode\": \"none\"\n                },\n                \"thresholdsStyle\": {\n                  \"mode\": \"off\"\n                }\n              },\n              \"links\": [],\n              \"mappings\": [],\n              \"min\": 0,\n              \"thresholds\": {\n                \"mode\": \"absolute\",\n                \"steps\": [\n                  {\n                    \"color\": \"green\"\n                  },\n                  {\n                    \"color\": \"red\",\n                    \"value\": 80\n                  }\n                ]\n              },\n              \"unit\": \"percentunit\"\n            },\n            \"overrides\": [\n              {\n                \"matcher\": {\n                  \"id\": \"byValue\",\n                  \"options\": {\n                    \"op\": \"gte\",\n                    \"reducer\": \"allIsNull\",\n                    \"value\": 0\n                  }\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"custom.hideFrom\",\n                    \"value\": {\n                      \"legend\": true,\n                      \"tooltip\": true,\n                      \"viz\": false\n                    }\n                  }\n                ]\n              }\n            ]\n          },\n          \"gridPos\": {\n            \"h\": 10,\n            \"w\": 8,\n            \"x\": 16,\n            \"y\": 83\n          },\n          \"id\": 61,\n          \"options\": {\n            \"legend\": {\n              \"calcs\": [\n                \"mean\",\n                \"lastNotNull\",\n                \"max\"\n              ],\n              \"displayMode\": \"table\",\n              \"placement\": \"bottom\",\n              \"showLegend\": true\n            },\n            \"tooltip\": {\n              \"hideZeros\": false,\n              \"mode\": \"multi\",\n              \"sort\": \"none\"\n            }\n          },\n          \"pluginVersion\": \"12.0.2\",\n          \"targets\": [\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"PBFA97CFB590B2093\"\n              },\n              \"editorMode\": \"code\",\n              \"exemplar\": true,\n              \"expr\": \"rate(jvm_gc_collection_seconds_sum{instance=~\\\"$system\\\"}[1m])\",\n              \"interval\": \"\",\n              \"legendFormat\": \"{{instance}} {{job}} {{gc}}\",\n              \"range\": true,\n              \"refId\": \"C\"\n            }\n          ],\n          \"title\": \"GC Time\",\n          \"type\": \"timeseries\"\n        }\n      ],\n      \"title\": \"System\",\n      \"type\": \"row\"\n    },\n    {\n      \"collapsed\": false,\n      \"gridPos\": {\n        \"h\": 1,\n        \"w\": 24,\n        \"x\": 0,\n        \"y\": 75\n      },\n      \"id\": 83,\n      \"panels\": [],\n      \"title\": \"Network\",\n      \"type\": \"row\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"description\": \"\",\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"palette-classic\"\n          },\n          \"custom\": {\n            \"axisBorderShow\": false,\n            \"axisCenteredZero\": false,\n            \"axisColorMode\": \"text\",\n            \"axisLabel\": \"\",\n            \"axisPlacement\": \"auto\",\n            \"barAlignment\": 0,\n            \"barWidthFactor\": 0.6,\n            \"drawStyle\": \"line\",\n            \"fillOpacity\": 10,\n            \"gradientMode\": \"opacity\",\n            \"hideFrom\": {\n              \"legend\": false,\n              \"tooltip\": false,\n              \"viz\": false\n            },\n            \"insertNulls\": false,\n            \"lineInterpolation\": \"linear\",\n            \"lineWidth\": 1,\n            \"pointSize\": 5,\n            \"scaleDistribution\": {\n              \"type\": \"linear\"\n            },\n            \"showPoints\": \"never\",\n            \"spanNulls\": true,\n            \"stacking\": {\n              \"group\": \"A\",\n              \"mode\": \"none\"\n            },\n            \"thresholdsStyle\": {\n              \"mode\": \"off\"\n            }\n          },\n          \"links\": [],\n          \"mappings\": [],\n          \"min\": 0,\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\"\n              },\n              {\n                \"color\": \"red\",\n                \"value\": 80\n              }\n            ]\n          },\n          \"unit\": \"binBps\"\n        },\n        \"overrides\": [\n          {\n            \"matcher\": {\n              \"id\": \"byRegexp\",\n              \"options\": \".*GC\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"custom.axisPlacement\",\n                \"value\": \"right\"\n              }\n            ]\n          }\n        ]\n      },\n      \"gridPos\": {\n        \"h\": 10,\n        \"w\": 8,\n        \"x\": 0,\n        \"y\": 76\n      },\n      \"id\": 71,\n      \"options\": {\n        \"legend\": {\n          \"calcs\": [\n            \"mean\",\n            \"lastNotNull\",\n            \"max\"\n          ],\n          \"displayMode\": \"table\",\n          \"placement\": \"bottom\",\n          \"showLegend\": true,\n          \"sortBy\": \"Mean\",\n          \"sortDesc\": true\n        },\n        \"tooltip\": {\n          \"hideZeros\": false,\n          \"mode\": \"multi\",\n          \"sort\": \"none\"\n        }\n      },\n      \"pluginVersion\": \"12.0.2\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"exemplar\": true,\n          \"expr\": \"sum by (instance) (irate(node_network_transmit_bytes_total{instance=~\\\"$system\\\"}[1m]))\",\n          \"hide\": false,\n          \"interval\": \"\",\n          \"legendFormat\": \"{{instance}} Transmit\",\n          \"refId\": \"J\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"exemplar\": true,\n          \"expr\": \"sum by (instance) (irate(node_network_receive_bytes_total{instance=~\\\"$system\\\"}[1m]))\",\n          \"hide\": false,\n          \"interval\": \"\",\n          \"legendFormat\": \"{{instance}} Receive\",\n          \"refId\": \"A\"\n        }\n      ],\n      \"title\": \"Network Traffic\",\n      \"type\": \"timeseries\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"description\": \"\",\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"palette-classic\"\n          },\n          \"custom\": {\n            \"axisBorderShow\": false,\n            \"axisCenteredZero\": false,\n            \"axisColorMode\": \"text\",\n            \"axisLabel\": \"\",\n            \"axisPlacement\": \"auto\",\n            \"barAlignment\": 0,\n            \"barWidthFactor\": 0.6,\n            \"drawStyle\": \"line\",\n            \"fillOpacity\": 10,\n            \"gradientMode\": \"opacity\",\n            \"hideFrom\": {\n              \"legend\": false,\n              \"tooltip\": false,\n              \"viz\": false\n            },\n            \"insertNulls\": false,\n            \"lineInterpolation\": \"linear\",\n            \"lineWidth\": 1,\n            \"pointSize\": 5,\n            \"scaleDistribution\": {\n              \"type\": \"linear\"\n            },\n            \"showPoints\": \"never\",\n            \"spanNulls\": true,\n            \"stacking\": {\n              \"group\": \"A\",\n              \"mode\": \"none\"\n            },\n            \"thresholdsStyle\": {\n              \"mode\": \"off\"\n            }\n          },\n          \"links\": [],\n          \"mappings\": [],\n          \"min\": 0,\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\"\n              },\n              {\n                \"color\": \"red\",\n                \"value\": 80\n              }\n            ]\n          },\n          \"unit\": \"none\"\n        },\n        \"overrides\": [\n          {\n            \"matcher\": {\n              \"id\": \"byRegexp\",\n              \"options\": \".*GC\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"custom.axisPlacement\",\n                \"value\": \"right\"\n              }\n            ]\n          },\n          {\n            \"__systemRef\": \"hideSeriesFrom\",\n            \"matcher\": {\n              \"id\": \"byNames\",\n              \"options\": {\n                \"mode\": \"exclude\",\n                \"names\": [\n                  \"prd-clc-besu-teku-mainnet-secure-canary-01 /eth2/6a95a1a9/blob_sidecar_5/ssz_snappy\"\n                ],\n                \"prefix\": \"All except:\",\n                \"readOnly\": true\n              }\n            },\n            \"properties\": [\n              {\n                \"id\": \"custom.hideFrom\",\n                \"value\": {\n                  \"legend\": false,\n                  \"tooltip\": false,\n                  \"viz\": true\n                }\n              }\n            ]\n          }\n        ]\n      },\n      \"gridPos\": {\n        \"h\": 10,\n        \"w\": 8,\n        \"x\": 8,\n        \"y\": 76\n      },\n      \"id\": 72,\n      \"options\": {\n        \"legend\": {\n          \"calcs\": [\n            \"mean\",\n            \"lastNotNull\",\n            \"max\"\n          ],\n          \"displayMode\": \"table\",\n          \"placement\": \"bottom\",\n          \"showLegend\": true\n        },\n        \"tooltip\": {\n          \"hideZeros\": false,\n          \"mode\": \"multi\",\n          \"sort\": \"none\"\n        }\n      },\n      \"pluginVersion\": \"12.0.2\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"exemplar\": true,\n          \"expr\": \"sum by (instance)(irate(libp2p_gossip_messages_total{instance=~\\\"$system\\\"}[1m]))\",\n          \"hide\": false,\n          \"interval\": \"\",\n          \"legendFormat\": \"{{instance}} Total\",\n          \"refId\": \"J\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"exemplar\": true,\n          \"expr\": \"irate(libp2p_gossip_messages_total{instance=~\\\"$system\\\"}[1m])\",\n          \"hide\": false,\n          \"interval\": \"\",\n          \"legendFormat\": \"{{instance}} {{topic}}\",\n          \"refId\": \"A\"\n        }\n      ],\n      \"title\": \"Gossip Messages\",\n      \"type\": \"timeseries\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"description\": \"Tracks the total number of RPC requests served and the total number of objects served per request type\",\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"palette-classic\"\n          },\n          \"custom\": {\n            \"axisBorderShow\": false,\n            \"axisCenteredZero\": false,\n            \"axisColorMode\": \"text\",\n            \"axisLabel\": \"\",\n            \"axisPlacement\": \"auto\",\n            \"barAlignment\": 0,\n            \"barWidthFactor\": 0.6,\n            \"drawStyle\": \"line\",\n            \"fillOpacity\": 10,\n            \"gradientMode\": \"opacity\",\n            \"hideFrom\": {\n              \"legend\": false,\n              \"tooltip\": false,\n              \"viz\": false\n            },\n            \"insertNulls\": false,\n            \"lineInterpolation\": \"linear\",\n            \"lineWidth\": 1,\n            \"pointSize\": 5,\n            \"scaleDistribution\": {\n              \"type\": \"linear\"\n            },\n            \"showPoints\": \"never\",\n            \"spanNulls\": true,\n            \"stacking\": {\n              \"group\": \"A\",\n              \"mode\": \"none\"\n            },\n            \"thresholdsStyle\": {\n              \"mode\": \"off\"\n            }\n          },\n          \"links\": [],\n          \"mappings\": [],\n          \"min\": 0,\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\"\n              },\n              {\n                \"color\": \"red\",\n                \"value\": 80\n              }\n            ]\n          },\n          \"unit\": \"none\"\n        },\n        \"overrides\": [\n          {\n            \"matcher\": {\n              \"id\": \"byRegexp\",\n              \"options\": \".*GC\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"custom.axisPlacement\",\n                \"value\": \"right\"\n              }\n            ]\n          }\n        ]\n      },\n      \"gridPos\": {\n        \"h\": 10,\n        \"w\": 8,\n        \"x\": 16,\n        \"y\": 76\n      },\n      \"id\": 133,\n      \"options\": {\n        \"legend\": {\n          \"calcs\": [\n            \"mean\",\n            \"lastNotNull\",\n            \"max\"\n          ],\n          \"displayMode\": \"table\",\n          \"placement\": \"bottom\",\n          \"showLegend\": true\n        },\n        \"tooltip\": {\n          \"hideZeros\": false,\n          \"mode\": \"multi\",\n          \"sort\": \"none\"\n        }\n      },\n      \"pluginVersion\": \"12.0.2\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"editorMode\": \"code\",\n          \"exemplar\": true,\n          \"expr\": \"irate(network_rpc_blocks_by_root_requested_blocks_total{instance=~\\\"$system\\\"}[1m])\",\n          \"hide\": false,\n          \"interval\": \"\",\n          \"legendFormat\": \"{{instance}} Blocks By Root\",\n          \"range\": true,\n          \"refId\": \"J\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"editorMode\": \"code\",\n          \"exemplar\": true,\n          \"expr\": \"irate(network_rpc_blocks_by_range_requested_blocks_total{instance=~\\\"$system\\\"}[1m])\",\n          \"hide\": false,\n          \"interval\": \"\",\n          \"legendFormat\": \"{{instance}} Blocks By Range\",\n          \"range\": true,\n          \"refId\": \"A\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"editorMode\": \"code\",\n          \"exemplar\": true,\n          \"expr\": \"irate(network_rpc_blob_sidecars_by_range_requested_sidecars_total{instance=~\\\"$system\\\"}[1m])\",\n          \"hide\": false,\n          \"interval\": \"\",\n          \"legendFormat\": \"{{instance}} Blob sidecars By Range\",\n          \"range\": true,\n          \"refId\": \"B\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"editorMode\": \"code\",\n          \"exemplar\": true,\n          \"expr\": \"irate(network_rpc_blob_sidecars_by_root_requested_blob_sidecars_total{instance=~\\\"$system\\\"}[1m])\",\n          \"hide\": false,\n          \"interval\": \"\",\n          \"legendFormat\": \"{{instance}} Blob sidecars By Root\",\n          \"range\": true,\n          \"refId\": \"C\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"editorMode\": \"code\",\n          \"exemplar\": true,\n          \"expr\": \"irate(network_rpc_data_column_sidecars_by_range_requested_sidecars_total{instance=~\\\"$system\\\"}[1m])\",\n          \"hide\": false,\n          \"interval\": \"\",\n          \"legendFormat\": \"{{instance}} Data Column sidecars By Range\",\n          \"range\": true,\n          \"refId\": \"D\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"editorMode\": \"code\",\n          \"exemplar\": true,\n          \"expr\": \"irate(network_rpc_data_column_sidecars_by_root_requested_sidecars_total{instance=~\\\"$system\\\"}[1m])\",\n          \"hide\": false,\n          \"interval\": \"\",\n          \"legendFormat\": \"{{instance}} Data Column sidecars By Root\",\n          \"range\": true,\n          \"refId\": \"E\"\n        }\n      ],\n      \"title\": \"RPC Requests Served\",\n      \"type\": \"timeseries\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"description\": \"Tracks the reason for remotely initiated disconnections\",\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"palette-classic\"\n          },\n          \"custom\": {\n            \"hideFrom\": {\n              \"legend\": false,\n              \"tooltip\": false,\n              \"viz\": false\n            }\n          },\n          \"links\": [],\n          \"mappings\": [],\n          \"min\": 0,\n          \"unit\": \"none\"\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 10,\n        \"w\": 8,\n        \"x\": 0,\n        \"y\": 86\n      },\n      \"id\": 134,\n      \"options\": {\n        \"displayLabels\": [],\n        \"legend\": {\n          \"displayMode\": \"table\",\n          \"placement\": \"bottom\",\n          \"showLegend\": true,\n          \"values\": [\n            \"value\",\n            \"percent\"\n          ]\n        },\n        \"pieType\": \"pie\",\n        \"reduceOptions\": {\n          \"calcs\": [\n            \"lastNotNull\"\n          ],\n          \"fields\": \"\",\n          \"values\": false\n        },\n        \"tooltip\": {\n          \"hideZeros\": false,\n          \"mode\": \"single\",\n          \"sort\": \"none\"\n        }\n      },\n      \"pluginVersion\": \"12.0.2\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"editorMode\": \"code\",\n          \"exemplar\": true,\n          \"expr\": \"sum by (reason) (increase(network_peer_goodbye_total{instance=~\\\"$system\\\"}[$__range]))\",\n          \"hide\": false,\n          \"interval\": \"\",\n          \"legendFormat\": \"{{reason}}\",\n          \"range\": true,\n          \"refId\": \"J\"\n        }\n      ],\n      \"title\": \"Peer Disconnect Reasons\",\n      \"type\": \"piechart\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"description\": \"\",\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"palette-classic\"\n          },\n          \"custom\": {\n            \"hideFrom\": {\n              \"legend\": false,\n              \"tooltip\": false,\n              \"viz\": false\n            }\n          },\n          \"links\": [],\n          \"mappings\": [],\n          \"min\": 0,\n          \"unit\": \"none\"\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 10,\n        \"w\": 8,\n        \"x\": 8,\n        \"y\": 86\n      },\n      \"id\": 135,\n      \"options\": {\n        \"displayLabels\": [],\n        \"legend\": {\n          \"displayMode\": \"table\",\n          \"placement\": \"bottom\",\n          \"showLegend\": true,\n          \"values\": [\n            \"value\",\n            \"percent\"\n          ]\n        },\n        \"pieType\": \"pie\",\n        \"reduceOptions\": {\n          \"calcs\": [\n            \"lastNotNull\"\n          ],\n          \"fields\": \"\",\n          \"values\": false\n        },\n        \"tooltip\": {\n          \"hideZeros\": false,\n          \"mode\": \"single\",\n          \"sort\": \"none\"\n        }\n      },\n      \"pluginVersion\": \"12.0.2\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"editorMode\": \"code\",\n          \"exemplar\": true,\n          \"expr\": \"sum by (status) (increase(network_peer_chain_validation_attempts{instance=~\\\"$system\\\",status!=\\\"started\\\"}[$__range])) or sum by (status) (increase(network_peer_chain_validation_attempts_total{instance=~\\\"$system\\\",status!=\\\"started\\\"}[$__range]))\",\n          \"hide\": false,\n          \"interval\": \"\",\n          \"legendFormat\": \"{{status}}\",\n          \"range\": true,\n          \"refId\": \"J\"\n        }\n      ],\n      \"title\": \"Peer Chain Validation Attempts\",\n      \"type\": \"piechart\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"description\": \"\",\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"palette-classic\"\n          },\n          \"custom\": {\n            \"axisBorderShow\": false,\n            \"axisCenteredZero\": false,\n            \"axisColorMode\": \"text\",\n            \"axisLabel\": \"\",\n            \"axisPlacement\": \"auto\",\n            \"barAlignment\": 0,\n            \"barWidthFactor\": 0.6,\n            \"drawStyle\": \"line\",\n            \"fillOpacity\": 0,\n            \"gradientMode\": \"none\",\n            \"hideFrom\": {\n              \"legend\": false,\n              \"tooltip\": false,\n              \"viz\": false\n            },\n            \"insertNulls\": false,\n            \"lineInterpolation\": \"linear\",\n            \"lineWidth\": 1,\n            \"pointSize\": 5,\n            \"scaleDistribution\": {\n              \"type\": \"linear\"\n            },\n            \"showPoints\": \"never\",\n            \"spanNulls\": true,\n            \"stacking\": {\n              \"group\": \"A\",\n              \"mode\": \"none\"\n            },\n            \"thresholdsStyle\": {\n              \"mode\": \"area\"\n            }\n          },\n          \"links\": [],\n          \"mappings\": [],\n          \"min\": 0,\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"red\"\n              },\n              {\n                \"color\": \"green\",\n                \"value\": 2\n              }\n            ]\n          },\n          \"unit\": \"none\"\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 10,\n        \"w\": 8,\n        \"x\": 16,\n        \"y\": 86\n      },\n      \"id\": 144,\n      \"options\": {\n        \"legend\": {\n          \"calcs\": [\n            \"min\",\n            \"max\",\n            \"mean\",\n            \"lastNotNull\"\n          ],\n          \"displayMode\": \"table\",\n          \"placement\": \"bottom\",\n          \"showLegend\": true,\n          \"sortBy\": \"Min\",\n          \"sortDesc\": true\n        },\n        \"tooltip\": {\n          \"hideZeros\": false,\n          \"mode\": \"multi\",\n          \"sort\": \"none\"\n        }\n      },\n      \"pluginVersion\": \"12.0.2\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"editorMode\": \"code\",\n          \"exemplar\": true,\n          \"expr\": \"network_subnet_peer_count{instance=~\\\"$system\\\", subnet=~\\\"attestation.*\\\"}\",\n          \"hide\": false,\n          \"interval\": \"\",\n          \"legendFormat\": \"{{instance}} {{subnet}}\",\n          \"range\": true,\n          \"refId\": \"J\"\n        }\n      ],\n      \"title\": \"Peer Count By Subnet\",\n      \"type\": \"timeseries\"\n    },\n    {\n      \"collapsed\": true,\n      \"gridPos\": {\n        \"h\": 1,\n        \"w\": 24,\n        \"x\": 0,\n        \"y\": 96\n      },\n      \"id\": 130,\n      \"panels\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"description\": \"\",\n          \"fieldConfig\": {\n            \"defaults\": {\n              \"color\": {\n                \"mode\": \"palette-classic\"\n              },\n              \"custom\": {\n                \"axisLabel\": \"\",\n                \"axisPlacement\": \"auto\",\n                \"barAlignment\": 0,\n                \"drawStyle\": \"line\",\n                \"fillOpacity\": 10,\n                \"gradientMode\": \"opacity\",\n                \"hideFrom\": {\n                  \"legend\": false,\n                  \"tooltip\": false,\n                  \"viz\": false\n                },\n                \"lineInterpolation\": \"linear\",\n                \"lineWidth\": 1,\n                \"pointSize\": 5,\n                \"scaleDistribution\": {\n                  \"type\": \"linear\"\n                },\n                \"showPoints\": \"never\",\n                \"spanNulls\": true,\n                \"stacking\": {\n                  \"group\": \"A\",\n                  \"mode\": \"none\"\n                },\n                \"thresholdsStyle\": {\n                  \"mode\": \"off\"\n                }\n              },\n              \"links\": [],\n              \"mappings\": [],\n              \"max\": 1,\n              \"min\": 0,\n              \"thresholds\": {\n                \"mode\": \"absolute\",\n                \"steps\": [\n                  {\n                    \"color\": \"green\"\n                  },\n                  {\n                    \"color\": \"red\",\n                    \"value\": 80\n                  }\n                ]\n              },\n              \"unit\": \"percentunit\"\n            },\n            \"overrides\": [\n              {\n                \"matcher\": {\n                  \"id\": \"byRegexp\",\n                  \"options\": \".*GC\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"custom.axisPlacement\",\n                    \"value\": \"right\"\n                  }\n                ]\n              }\n            ]\n          },\n          \"gridPos\": {\n            \"h\": 10,\n            \"w\": 8,\n            \"x\": 0,\n            \"y\": 42\n          },\n          \"id\": 128,\n          \"options\": {\n            \"legend\": {\n              \"calcs\": [\n                \"mean\",\n                \"lastNotNull\",\n                \"max\"\n              ],\n              \"displayMode\": \"table\",\n              \"placement\": \"bottom\",\n              \"showLegend\": true\n            },\n            \"tooltip\": {\n              \"mode\": \"multi\",\n              \"sort\": \"none\"\n            }\n          },\n          \"pluginVersion\": \"9.3.1\",\n          \"targets\": [\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"PBFA97CFB590B2093\"\n              },\n              \"editorMode\": \"code\",\n              \"exemplar\": true,\n              \"expr\": \"1 - node_filesystem_avail_bytes{instance=~\\\"$system\\\",mountpoint=~\\\"(/data|/)\\\"} / node_filesystem_size_bytes{instance=~\\\"$system\\\"}\",\n              \"hide\": false,\n              \"interval\": \"\",\n              \"legendFormat\": \"{{instance}} {{mountpoint}}\",\n              \"range\": true,\n              \"refId\": \"J\"\n            }\n          ],\n          \"title\": \"Disk Space Used\",\n          \"type\": \"timeseries\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"description\": \"\",\n          \"fieldConfig\": {\n            \"defaults\": {\n              \"color\": {\n                \"mode\": \"palette-classic\"\n              },\n              \"custom\": {\n                \"axisLabel\": \"\",\n                \"axisPlacement\": \"auto\",\n                \"barAlignment\": 0,\n                \"drawStyle\": \"line\",\n                \"fillOpacity\": 10,\n                \"gradientMode\": \"opacity\",\n                \"hideFrom\": {\n                  \"legend\": false,\n                  \"tooltip\": false,\n                  \"viz\": false\n                },\n                \"lineInterpolation\": \"linear\",\n                \"lineWidth\": 1,\n                \"pointSize\": 5,\n                \"scaleDistribution\": {\n                  \"type\": \"linear\"\n                },\n                \"showPoints\": \"never\",\n                \"spanNulls\": true,\n                \"stacking\": {\n                  \"group\": \"A\",\n                  \"mode\": \"none\"\n                },\n                \"thresholdsStyle\": {\n                  \"mode\": \"off\"\n                }\n              },\n              \"links\": [],\n              \"mappings\": [],\n              \"min\": 0,\n              \"thresholds\": {\n                \"mode\": \"absolute\",\n                \"steps\": [\n                  {\n                    \"color\": \"green\"\n                  },\n                  {\n                    \"color\": \"red\",\n                    \"value\": 80\n                  }\n                ]\n              },\n              \"unit\": \"percentunit\"\n            },\n            \"overrides\": [\n              {\n                \"matcher\": {\n                  \"id\": \"byRegexp\",\n                  \"options\": \".*GC\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"custom.axisPlacement\",\n                    \"value\": \"right\"\n                  }\n                ]\n              }\n            ]\n          },\n          \"gridPos\": {\n            \"h\": 10,\n            \"w\": 8,\n            \"x\": 8,\n            \"y\": 42\n          },\n          \"id\": 131,\n          \"options\": {\n            \"legend\": {\n              \"calcs\": [\n                \"mean\",\n                \"lastNotNull\",\n                \"max\"\n              ],\n              \"displayMode\": \"table\",\n              \"placement\": \"bottom\",\n              \"showLegend\": true\n            },\n            \"tooltip\": {\n              \"mode\": \"multi\",\n              \"sort\": \"none\"\n            }\n          },\n          \"pluginVersion\": \"9.3.1\",\n          \"targets\": [\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"PBFA97CFB590B2093\"\n              },\n              \"exemplar\": true,\n              \"expr\": \"irate(node_disk_io_time_seconds_total{instance=~\\\"$system\\\"}[1m])\",\n              \"hide\": false,\n              \"interval\": \"\",\n              \"legendFormat\": \"{{instance}} {{device}} IO Time\",\n              \"refId\": \"J\"\n            }\n          ],\n          \"title\": \"Disk Active Time\",\n          \"type\": \"timeseries\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"description\": \"\",\n          \"fieldConfig\": {\n            \"defaults\": {\n              \"color\": {\n                \"mode\": \"palette-classic\"\n              },\n              \"custom\": {\n                \"axisLabel\": \"\",\n                \"axisPlacement\": \"auto\",\n                \"barAlignment\": 0,\n                \"drawStyle\": \"line\",\n                \"fillOpacity\": 10,\n                \"gradientMode\": \"opacity\",\n                \"hideFrom\": {\n                  \"legend\": false,\n                  \"tooltip\": false,\n                  \"viz\": false\n                },\n                \"lineInterpolation\": \"linear\",\n                \"lineWidth\": 1,\n                \"pointSize\": 5,\n                \"scaleDistribution\": {\n                  \"type\": \"linear\"\n                },\n                \"showPoints\": \"never\",\n                \"spanNulls\": true,\n                \"stacking\": {\n                  \"group\": \"A\",\n                  \"mode\": \"none\"\n                },\n                \"thresholdsStyle\": {\n                  \"mode\": \"off\"\n                }\n              },\n              \"links\": [],\n              \"mappings\": [],\n              \"min\": 0,\n              \"thresholds\": {\n                \"mode\": \"absolute\",\n                \"steps\": [\n                  {\n                    \"color\": \"green\"\n                  },\n                  {\n                    \"color\": \"red\",\n                    \"value\": 80\n                  }\n                ]\n              },\n              \"unit\": \"s\"\n            },\n            \"overrides\": [\n              {\n                \"matcher\": {\n                  \"id\": \"byRegexp\",\n                  \"options\": \".*GC\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"custom.axisPlacement\",\n                    \"value\": \"right\"\n                  }\n                ]\n              }\n            ]\n          },\n          \"gridPos\": {\n            \"h\": 10,\n            \"w\": 8,\n            \"x\": 16,\n            \"y\": 42\n          },\n          \"id\": 132,\n          \"options\": {\n            \"legend\": {\n              \"calcs\": [\n                \"mean\",\n                \"lastNotNull\",\n                \"max\"\n              ],\n              \"displayMode\": \"table\",\n              \"placement\": \"bottom\",\n              \"showLegend\": true\n            },\n            \"tooltip\": {\n              \"mode\": \"multi\",\n              \"sort\": \"none\"\n            }\n          },\n          \"pluginVersion\": \"9.3.1\",\n          \"targets\": [\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"PBFA97CFB590B2093\"\n              },\n              \"editorMode\": \"code\",\n              \"exemplar\": true,\n              \"expr\": \"irate(node_disk_read_time_seconds_total{instance=~\\\"$system\\\"}[1m]) / irate(node_disk_reads_completed_total{instance=~\\\"$system\\\"}[1m])\",\n              \"hide\": false,\n              \"interval\": \"\",\n              \"legendFormat\": \"{{instance}} {{device}} Read Latency\",\n              \"range\": true,\n              \"refId\": \"J\"\n            },\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"PBFA97CFB590B2093\"\n              },\n              \"editorMode\": \"code\",\n              \"exemplar\": true,\n              \"expr\": \"irate(node_disk_write_time_seconds_total{instance=~\\\"$system\\\"}[1m]) / irate(node_disk_writes_completed_total{instance=~\\\"$system\\\"}[1m])\",\n              \"hide\": false,\n              \"interval\": \"\",\n              \"legendFormat\": \"{{instance}} {{device}} Write Latency\",\n              \"range\": true,\n              \"refId\": \"A\"\n            }\n          ],\n          \"title\": \"Disk Latency\",\n          \"type\": \"timeseries\"\n        }\n      ],\n      \"title\": \"Disk\",\n      \"type\": \"row\"\n    },\n    {\n      \"collapsed\": false,\n      \"gridPos\": {\n        \"h\": 1,\n        \"w\": 24,\n        \"x\": 0,\n        \"y\": 97\n      },\n      \"id\": 85,\n      \"panels\": [],\n      \"title\": \"Queues, Excecutors and Caches\",\n      \"type\": \"row\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"description\": \"Tracks number of signatures waiting to be batch verified\",\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"palette-classic\"\n          },\n          \"custom\": {\n            \"axisBorderShow\": false,\n            \"axisCenteredZero\": false,\n            \"axisColorMode\": \"text\",\n            \"axisLabel\": \"\",\n            \"axisPlacement\": \"auto\",\n            \"barAlignment\": 0,\n            \"barWidthFactor\": 0.6,\n            \"drawStyle\": \"line\",\n            \"fillOpacity\": 0,\n            \"gradientMode\": \"opacity\",\n            \"hideFrom\": {\n              \"legend\": false,\n              \"tooltip\": false,\n              \"viz\": false\n            },\n            \"insertNulls\": false,\n            \"lineInterpolation\": \"linear\",\n            \"lineWidth\": 1,\n            \"pointSize\": 5,\n            \"scaleDistribution\": {\n              \"type\": \"linear\"\n            },\n            \"showPoints\": \"never\",\n            \"spanNulls\": false,\n            \"stacking\": {\n              \"group\": \"A\",\n              \"mode\": \"none\"\n            },\n            \"thresholdsStyle\": {\n              \"mode\": \"off\"\n            }\n          },\n          \"links\": [],\n          \"mappings\": [],\n          \"min\": 0,\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\"\n              },\n              {\n                \"color\": \"red\",\n                \"value\": 80\n              }\n            ]\n          },\n          \"unit\": \"none\"\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 10,\n        \"w\": 8,\n        \"x\": 0,\n        \"y\": 98\n      },\n      \"id\": 68,\n      \"options\": {\n        \"legend\": {\n          \"calcs\": [\n            \"mean\",\n            \"lastNotNull\"\n          ],\n          \"displayMode\": \"table\",\n          \"placement\": \"bottom\",\n          \"showLegend\": true\n        },\n        \"tooltip\": {\n          \"hideZeros\": false,\n          \"mode\": \"multi\",\n          \"sort\": \"none\"\n        }\n      },\n      \"pluginVersion\": \"12.0.2\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"exemplar\": true,\n          \"expr\": \"executor_signature_verifications_queue_size{instance=~\\\"$system\\\"}\",\n          \"interval\": \"\",\n          \"legendFormat\": \"{{instance}}\",\n          \"refId\": \"C\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"exemplar\": true,\n          \"expr\": \"avg without (instance) (executor_signature_verifications_queue_size{instance=~\\\"$system\\\"})\",\n          \"hide\": false,\n          \"interval\": \"\",\n          \"legendFormat\": \"Average\",\n          \"refId\": \"A\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"exemplar\": true,\n          \"expr\": \"max without (instance) (executor_signature_verifications_queue_size{instance=~\\\"$system\\\"})\",\n          \"hide\": false,\n          \"interval\": \"\",\n          \"legendFormat\": \"Max\",\n          \"refId\": \"B\"\n        }\n      ],\n      \"title\": \"Batch Signature Verification Queue Size\",\n      \"type\": \"timeseries\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"description\": \"The average number of signature tasks per batch. \\n\\nCalculated by dividing the total number of tasks by the total number of batches for the period (1m).\",\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"palette-classic\"\n          },\n          \"custom\": {\n            \"axisBorderShow\": false,\n            \"axisCenteredZero\": false,\n            \"axisColorMode\": \"text\",\n            \"axisLabel\": \"\",\n            \"axisPlacement\": \"auto\",\n            \"barAlignment\": 0,\n            \"barWidthFactor\": 0.6,\n            \"drawStyle\": \"line\",\n            \"fillOpacity\": 0,\n            \"gradientMode\": \"opacity\",\n            \"hideFrom\": {\n              \"legend\": false,\n              \"tooltip\": false,\n              \"viz\": false\n            },\n            \"insertNulls\": false,\n            \"lineInterpolation\": \"linear\",\n            \"lineWidth\": 1,\n            \"pointSize\": 5,\n            \"scaleDistribution\": {\n              \"type\": \"linear\"\n            },\n            \"showPoints\": \"never\",\n            \"spanNulls\": false,\n            \"stacking\": {\n              \"group\": \"A\",\n              \"mode\": \"none\"\n            },\n            \"thresholdsStyle\": {\n              \"mode\": \"off\"\n            }\n          },\n          \"links\": [],\n          \"mappings\": [],\n          \"min\": 0,\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\"\n              },\n              {\n                \"color\": \"red\",\n                \"value\": 80\n              }\n            ]\n          },\n          \"unit\": \"none\"\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 10,\n        \"w\": 8,\n        \"x\": 8,\n        \"y\": 98\n      },\n      \"id\": 69,\n      \"options\": {\n        \"legend\": {\n          \"calcs\": [\n            \"mean\",\n            \"lastNotNull\"\n          ],\n          \"displayMode\": \"table\",\n          \"placement\": \"bottom\",\n          \"showLegend\": true\n        },\n        \"tooltip\": {\n          \"hideZeros\": false,\n          \"mode\": \"multi\",\n          \"sort\": \"none\"\n        }\n      },\n      \"pluginVersion\": \"12.0.2\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"exemplar\": true,\n          \"expr\": \"irate(executor_signature_verifications_task_count{instance=~\\\"$system\\\"}[1m]) / irate(executor_signature_verifications_batch_count{instance=~\\\"$system\\\"}[1m]) or irate(executor_signature_verifications_task_count_total{instance=~\\\"$system\\\"}[1m]) / irate(executor_signature_verifications_batch_count_total{instance=~\\\"$system\\\"}[1m])\",\n          \"interval\": \"\",\n          \"legendFormat\": \"{{instance}}\",\n          \"refId\": \"C\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"exemplar\": true,\n          \"expr\": \"avg without (instance) (irate(executor_signature_verifications_task_count{instance=~\\\"$system\\\"}[1m]) / irate(executor_signature_verifications_batch_count{instance=~\\\"$system\\\"}[1m])) or avg without (instance) (irate(executor_signature_verifications_task_count_total{instance=~\\\"$system\\\"}[1m]) / irate(executor_signature_verifications_batch_count_total{instance=~\\\"$system\\\"}[1m]))\",\n          \"hide\": false,\n          \"interval\": \"\",\n          \"legendFormat\": \"Average\",\n          \"refId\": \"A\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"exemplar\": true,\n          \"expr\": \"max without (instance) (irate(executor_signature_verifications_task_count{instance=~\\\"$system\\\"}[1m]) / irate(executor_signature_verifications_batch_count{instance=~\\\"$system\\\"}[1m])) or max without (instance) (irate(executor_signature_verifications_task_count_total{instance=~\\\"$system\\\"}[1m]) / irate(executor_signature_verifications_batch_count_total{instance=~\\\"$system\\\"}[1m]))\",\n          \"hide\": false,\n          \"interval\": \"\",\n          \"legendFormat\": \"Max\",\n          \"refId\": \"B\"\n        }\n      ],\n      \"title\": \"Signature Verification Tasks/Batch Average Size\",\n      \"type\": \"timeseries\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"description\": \"Histogram of signature verification batch sizes.\",\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"palette-classic\"\n          },\n          \"custom\": {\n            \"axisBorderShow\": false,\n            \"axisCenteredZero\": false,\n            \"axisColorMode\": \"text\",\n            \"axisLabel\": \"\",\n            \"axisPlacement\": \"auto\",\n            \"barAlignment\": 0,\n            \"barWidthFactor\": 0.6,\n            \"drawStyle\": \"line\",\n            \"fillOpacity\": 0,\n            \"gradientMode\": \"opacity\",\n            \"hideFrom\": {\n              \"legend\": false,\n              \"tooltip\": false,\n              \"viz\": false\n            },\n            \"insertNulls\": false,\n            \"lineInterpolation\": \"linear\",\n            \"lineWidth\": 1,\n            \"pointSize\": 5,\n            \"scaleDistribution\": {\n              \"type\": \"linear\"\n            },\n            \"showPoints\": \"never\",\n            \"spanNulls\": false,\n            \"stacking\": {\n              \"group\": \"A\",\n              \"mode\": \"none\"\n            },\n            \"thresholdsStyle\": {\n              \"mode\": \"off\"\n            }\n          },\n          \"links\": [],\n          \"mappings\": [],\n          \"min\": 0,\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\"\n              },\n              {\n                \"color\": \"red\",\n                \"value\": 80\n              }\n            ]\n          },\n          \"unit\": \"none\"\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 10,\n        \"w\": 8,\n        \"x\": 16,\n        \"y\": 98\n      },\n      \"id\": 70,\n      \"options\": {\n        \"legend\": {\n          \"calcs\": [\n            \"mean\",\n            \"lastNotNull\"\n          ],\n          \"displayMode\": \"table\",\n          \"placement\": \"bottom\",\n          \"showLegend\": true\n        },\n        \"tooltip\": {\n          \"hideZeros\": false,\n          \"mode\": \"multi\",\n          \"sort\": \"none\"\n        }\n      },\n      \"pluginVersion\": \"12.0.2\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"exemplar\": true,\n          \"expr\": \"executor_signature_verifications_batch_size{instance=~\\\"$system\\\"}\",\n          \"interval\": \"\",\n          \"legendFormat\": \"{{instance}} {{quantile}}\",\n          \"refId\": \"C\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"exemplar\": true,\n          \"expr\": \"avg without (instance) (executor_signature_verifications_batch_size{instance=~\\\"$system\\\"})\",\n          \"hide\": false,\n          \"interval\": \"\",\n          \"legendFormat\": \"Average {{quantile}}\",\n          \"refId\": \"A\"\n        }\n      ],\n      \"title\": \"Signature Verification Batch Size\",\n      \"type\": \"timeseries\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"description\": \"\",\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"palette-classic\"\n          },\n          \"custom\": {\n            \"axisBorderShow\": false,\n            \"axisCenteredZero\": false,\n            \"axisColorMode\": \"text\",\n            \"axisLabel\": \"\",\n            \"axisPlacement\": \"auto\",\n            \"barAlignment\": 0,\n            \"barWidthFactor\": 0.6,\n            \"drawStyle\": \"line\",\n            \"fillOpacity\": 10,\n            \"gradientMode\": \"opacity\",\n            \"hideFrom\": {\n              \"legend\": false,\n              \"tooltip\": false,\n              \"viz\": false\n            },\n            \"insertNulls\": false,\n            \"lineInterpolation\": \"linear\",\n            \"lineWidth\": 1,\n            \"pointSize\": 5,\n            \"scaleDistribution\": {\n              \"type\": \"linear\"\n            },\n            \"showPoints\": \"never\",\n            \"spanNulls\": true,\n            \"stacking\": {\n              \"group\": \"A\",\n              \"mode\": \"none\"\n            },\n            \"thresholdsStyle\": {\n              \"mode\": \"off\"\n            }\n          },\n          \"links\": [],\n          \"mappings\": [],\n          \"min\": 0,\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\"\n              },\n              {\n                \"color\": \"red\",\n                \"value\": 80\n              }\n            ]\n          },\n          \"unit\": \"none\"\n        },\n        \"overrides\": [\n          {\n            \"matcher\": {\n              \"id\": \"byRegexp\",\n              \"options\": \".*GC\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"custom.axisPlacement\",\n                \"value\": \"right\"\n              }\n            ]\n          }\n        ]\n      },\n      \"gridPos\": {\n        \"h\": 10,\n        \"w\": 8,\n        \"x\": 0,\n        \"y\": 108\n      },\n      \"id\": 74,\n      \"options\": {\n        \"legend\": {\n          \"calcs\": [\n            \"mean\",\n            \"lastNotNull\",\n            \"max\"\n          ],\n          \"displayMode\": \"table\",\n          \"placement\": \"bottom\",\n          \"showLegend\": true\n        },\n        \"tooltip\": {\n          \"hideZeros\": false,\n          \"mode\": \"multi\",\n          \"sort\": \"none\"\n        }\n      },\n      \"pluginVersion\": \"12.0.2\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"exemplar\": true,\n          \"expr\": \"beacon_pending_pool_size{instance=~\\\"$system\\\"}\",\n          \"hide\": false,\n          \"interval\": \"\",\n          \"legendFormat\": \"{{instance}} Pending {{type}}\",\n          \"refId\": \"J\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"exemplar\": true,\n          \"expr\": \"beacon_future_items_size{instance=~\\\"$system\\\"}\",\n          \"hide\": false,\n          \"interval\": \"\",\n          \"legendFormat\": \"{{instance}} Future {{type}}\",\n          \"refId\": \"A\"\n        }\n      ],\n      \"title\": \"Pending Pool Size\",\n      \"type\": \"timeseries\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"description\": \"\",\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"palette-classic\"\n          },\n          \"custom\": {\n            \"axisBorderShow\": false,\n            \"axisCenteredZero\": false,\n            \"axisColorMode\": \"text\",\n            \"axisLabel\": \"\",\n            \"axisPlacement\": \"auto\",\n            \"barAlignment\": 0,\n            \"barWidthFactor\": 0.6,\n            \"drawStyle\": \"line\",\n            \"fillOpacity\": 10,\n            \"gradientMode\": \"opacity\",\n            \"hideFrom\": {\n              \"legend\": false,\n              \"tooltip\": false,\n              \"viz\": false\n            },\n            \"insertNulls\": false,\n            \"lineInterpolation\": \"linear\",\n            \"lineWidth\": 1,\n            \"pointSize\": 5,\n            \"scaleDistribution\": {\n              \"type\": \"linear\"\n            },\n            \"showPoints\": \"never\",\n            \"spanNulls\": true,\n            \"stacking\": {\n              \"group\": \"A\",\n              \"mode\": \"none\"\n            },\n            \"thresholdsStyle\": {\n              \"mode\": \"off\"\n            }\n          },\n          \"links\": [],\n          \"mappings\": [],\n          \"min\": 0,\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\"\n              },\n              {\n                \"color\": \"red\",\n                \"value\": 80\n              }\n            ]\n          },\n          \"unit\": \"none\"\n        },\n        \"overrides\": [\n          {\n            \"matcher\": {\n              \"id\": \"byRegexp\",\n              \"options\": \".*GC\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"custom.axisPlacement\",\n                \"value\": \"right\"\n              }\n            ]\n          }\n        ]\n      },\n      \"gridPos\": {\n        \"h\": 10,\n        \"w\": 8,\n        \"x\": 8,\n        \"y\": 108\n      },\n      \"id\": 75,\n      \"options\": {\n        \"legend\": {\n          \"calcs\": [\n            \"mean\",\n            \"lastNotNull\",\n            \"max\"\n          ],\n          \"displayMode\": \"table\",\n          \"placement\": \"bottom\",\n          \"showLegend\": true,\n          \"sortBy\": \"Max\",\n          \"sortDesc\": true\n        },\n        \"tooltip\": {\n          \"hideZeros\": false,\n          \"mode\": \"multi\",\n          \"sort\": \"none\"\n        }\n      },\n      \"pluginVersion\": \"12.0.2\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"exemplar\": true,\n          \"expr\": \"executor_queue_size{instance=~\\\"$system\\\"}\",\n          \"hide\": false,\n          \"interval\": \"\",\n          \"legendFormat\": \"{{instance}} {{name}}\",\n          \"refId\": \"J\"\n        }\n      ],\n      \"title\": \"Executor Queues\",\n      \"type\": \"timeseries\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"description\": \"\",\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"palette-classic\"\n          },\n          \"custom\": {\n            \"axisBorderShow\": false,\n            \"axisCenteredZero\": false,\n            \"axisColorMode\": \"text\",\n            \"axisLabel\": \"\",\n            \"axisPlacement\": \"auto\",\n            \"barAlignment\": 0,\n            \"barWidthFactor\": 0.6,\n            \"drawStyle\": \"line\",\n            \"fillOpacity\": 10,\n            \"gradientMode\": \"opacity\",\n            \"hideFrom\": {\n              \"legend\": false,\n              \"tooltip\": false,\n              \"viz\": false\n            },\n            \"insertNulls\": false,\n            \"lineInterpolation\": \"linear\",\n            \"lineWidth\": 1,\n            \"pointSize\": 5,\n            \"scaleDistribution\": {\n              \"type\": \"linear\"\n            },\n            \"showPoints\": \"never\",\n            \"spanNulls\": true,\n            \"stacking\": {\n              \"group\": \"A\",\n              \"mode\": \"none\"\n            },\n            \"thresholdsStyle\": {\n              \"mode\": \"off\"\n            }\n          },\n          \"links\": [],\n          \"mappings\": [],\n          \"min\": 0,\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\"\n              },\n              {\n                \"color\": \"red\",\n                \"value\": 80\n              }\n            ]\n          },\n          \"unit\": \"none\"\n        },\n        \"overrides\": [\n          {\n            \"matcher\": {\n              \"id\": \"byRegexp\",\n              \"options\": \".*GC\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"custom.axisPlacement\",\n                \"value\": \"right\"\n              }\n            ]\n          }\n        ]\n      },\n      \"gridPos\": {\n        \"h\": 10,\n        \"w\": 8,\n        \"x\": 16,\n        \"y\": 108\n      },\n      \"id\": 73,\n      \"options\": {\n        \"legend\": {\n          \"calcs\": [\n            \"mean\",\n            \"lastNotNull\",\n            \"max\"\n          ],\n          \"displayMode\": \"table\",\n          \"placement\": \"bottom\",\n          \"showLegend\": true\n        },\n        \"tooltip\": {\n          \"hideZeros\": false,\n          \"mode\": \"multi\",\n          \"sort\": \"none\"\n        }\n      },\n      \"pluginVersion\": \"12.0.2\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"exemplar\": true,\n          \"expr\": \"storage_memory_states_cache_size{instance=~\\\"$system\\\"}\",\n          \"hide\": false,\n          \"interval\": \"\",\n          \"legendFormat\": \"{{instance}} States\",\n          \"refId\": \"J\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"exemplar\": true,\n          \"expr\": \"storage_memory_block_count{instance=~\\\"$system\\\"}\",\n          \"hide\": false,\n          \"interval\": \"\",\n          \"legendFormat\": \"{{instance}} Blocks\",\n          \"refId\": \"A\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"exemplar\": true,\n          \"expr\": \"storage_memory_checkpoint_states_cache_size{instance=~\\\"$system\\\"}\",\n          \"hide\": false,\n          \"interval\": \"\",\n          \"legendFormat\": \"{{instance}} Checkpoint States\",\n          \"refId\": \"B\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"editorMode\": \"code\",\n          \"expr\": \"storage_memory_epoch_states_cache_size{instance=~\\\"$system\\\"}\",\n          \"hide\": false,\n          \"instant\": false,\n          \"legendFormat\": \"{{instance}} Epoch States\",\n          \"range\": true,\n          \"refId\": \"C\"\n        }\n      ],\n      \"title\": \"In Memory Storage\",\n      \"type\": \"timeseries\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"description\": \"\",\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"palette-classic\"\n          },\n          \"custom\": {\n            \"axisBorderShow\": false,\n            \"axisCenteredZero\": false,\n            \"axisColorMode\": \"text\",\n            \"axisLabel\": \"\",\n            \"axisPlacement\": \"auto\",\n            \"barAlignment\": 0,\n            \"barWidthFactor\": 0.6,\n            \"drawStyle\": \"line\",\n            \"fillOpacity\": 10,\n            \"gradientMode\": \"opacity\",\n            \"hideFrom\": {\n              \"legend\": false,\n              \"tooltip\": false,\n              \"viz\": false\n            },\n            \"insertNulls\": false,\n            \"lineInterpolation\": \"linear\",\n            \"lineWidth\": 1,\n            \"pointSize\": 5,\n            \"scaleDistribution\": {\n              \"type\": \"linear\"\n            },\n            \"showPoints\": \"never\",\n            \"spanNulls\": true,\n            \"stacking\": {\n              \"group\": \"A\",\n              \"mode\": \"none\"\n            },\n            \"thresholdsStyle\": {\n              \"mode\": \"off\"\n            }\n          },\n          \"links\": [],\n          \"mappings\": [],\n          \"min\": 0,\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\"\n              },\n              {\n                \"color\": \"red\",\n                \"value\": 80\n              }\n            ]\n          },\n          \"unit\": \"none\"\n        },\n        \"overrides\": [\n          {\n            \"matcher\": {\n              \"id\": \"byRegexp\",\n              \"options\": \".*GC\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"custom.axisPlacement\",\n                \"value\": \"right\"\n              }\n            ]\n          }\n        ]\n      },\n      \"gridPos\": {\n        \"h\": 10,\n        \"w\": 8,\n        \"x\": 0,\n        \"y\": 118\n      },\n      \"id\": 127,\n      \"options\": {\n        \"legend\": {\n          \"calcs\": [\n            \"mean\",\n            \"lastNotNull\",\n            \"max\"\n          ],\n          \"displayMode\": \"table\",\n          \"placement\": \"bottom\",\n          \"showLegend\": true,\n          \"sortBy\": \"Max\",\n          \"sortDesc\": false\n        },\n        \"tooltip\": {\n          \"hideZeros\": false,\n          \"mode\": \"multi\",\n          \"sort\": \"none\"\n        }\n      },\n      \"pluginVersion\": \"12.0.2\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"exemplar\": true,\n          \"expr\": \"eventbus_event_published_count{instance=~\\\"$system\\\"} - ignoring(subscriber) group_right eventbus_event_consumed_count{instance=~\\\"$system\\\"} or eventbus_event_published_count_total{instance=~\\\"$system\\\"} - ignoring(subscriber) group_right eventbus_event_consumed_count_total{instance=~\\\"$system\\\"}\",\n          \"hide\": false,\n          \"interval\": \"\",\n          \"legendFormat\": \"{{instance}} {{channel}} {{subscriber}}\",\n          \"refId\": \"J\"\n        }\n      ],\n      \"title\": \"Event Channels\",\n      \"type\": \"timeseries\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"description\": \"\",\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"palette-classic\"\n          },\n          \"custom\": {\n            \"axisBorderShow\": false,\n            \"axisCenteredZero\": false,\n            \"axisColorMode\": \"text\",\n            \"axisLabel\": \"\",\n            \"axisPlacement\": \"auto\",\n            \"barAlignment\": 0,\n            \"barWidthFactor\": 0.6,\n            \"drawStyle\": \"line\",\n            \"fillOpacity\": 10,\n            \"gradientMode\": \"opacity\",\n            \"hideFrom\": {\n              \"legend\": false,\n              \"tooltip\": false,\n              \"viz\": false\n            },\n            \"insertNulls\": false,\n            \"lineInterpolation\": \"linear\",\n            \"lineWidth\": 1,\n            \"pointSize\": 5,\n            \"scaleDistribution\": {\n              \"type\": \"linear\"\n            },\n            \"showPoints\": \"never\",\n            \"spanNulls\": true,\n            \"stacking\": {\n              \"group\": \"A\",\n              \"mode\": \"none\"\n            },\n            \"thresholdsStyle\": {\n              \"mode\": \"off\"\n            }\n          },\n          \"links\": [],\n          \"mappings\": [],\n          \"min\": 0,\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\"\n              },\n              {\n                \"color\": \"red\",\n                \"value\": 80\n              }\n            ]\n          },\n          \"unit\": \"none\"\n        },\n        \"overrides\": [\n          {\n            \"matcher\": {\n              \"id\": \"byRegexp\",\n              \"options\": \".*GC\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"custom.axisPlacement\",\n                \"value\": \"right\"\n              }\n            ]\n          }\n        ]\n      },\n      \"gridPos\": {\n        \"h\": 10,\n        \"w\": 8,\n        \"x\": 8,\n        \"y\": 118\n      },\n      \"id\": 136,\n      \"options\": {\n        \"legend\": {\n          \"calcs\": [\n            \"mean\",\n            \"lastNotNull\",\n            \"max\"\n          ],\n          \"displayMode\": \"table\",\n          \"placement\": \"bottom\",\n          \"showLegend\": true,\n          \"sortBy\": \"Max\",\n          \"sortDesc\": true\n        },\n        \"tooltip\": {\n          \"hideZeros\": false,\n          \"mode\": \"multi\",\n          \"sort\": \"none\"\n        }\n      },\n      \"pluginVersion\": \"12.0.2\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"editorMode\": \"code\",\n          \"exemplar\": true,\n          \"expr\": \"beacon_ee_request_queue_size{instance=~\\\"$system\\\"}\",\n          \"hide\": false,\n          \"interval\": \"\",\n          \"legendFormat\": \"{{instance}} EE Queue Size\",\n          \"range\": true,\n          \"refId\": \"J\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"editorMode\": \"code\",\n          \"exemplar\": true,\n          \"expr\": \"beacon_eth1_request_queue_size{instance=~\\\"$system\\\"} or beacon_eth1_request_queue_size_total{instance=~\\\"$system\\\"}\",\n          \"hide\": false,\n          \"interval\": \"\",\n          \"legendFormat\": \"{{instance}} Eth1 Queue Size\",\n          \"range\": true,\n          \"refId\": \"A\"\n        }\n      ],\n      \"title\": \"EL Request Queues\",\n      \"type\": \"timeseries\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"description\": \"\",\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"palette-classic\"\n          },\n          \"custom\": {\n            \"axisBorderShow\": false,\n            \"axisCenteredZero\": false,\n            \"axisColorMode\": \"text\",\n            \"axisLabel\": \"\",\n            \"axisPlacement\": \"auto\",\n            \"barAlignment\": 0,\n            \"barWidthFactor\": 0.6,\n            \"drawStyle\": \"line\",\n            \"fillOpacity\": 10,\n            \"gradientMode\": \"opacity\",\n            \"hideFrom\": {\n              \"legend\": false,\n              \"tooltip\": false,\n              \"viz\": false\n            },\n            \"insertNulls\": false,\n            \"lineInterpolation\": \"linear\",\n            \"lineWidth\": 1,\n            \"pointSize\": 5,\n            \"scaleDistribution\": {\n              \"type\": \"linear\"\n            },\n            \"showPoints\": \"never\",\n            \"spanNulls\": true,\n            \"stacking\": {\n              \"group\": \"A\",\n              \"mode\": \"none\"\n            },\n            \"thresholdsStyle\": {\n              \"mode\": \"off\"\n            }\n          },\n          \"links\": [],\n          \"mappings\": [],\n          \"min\": 0,\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\"\n              },\n              {\n                \"color\": \"red\",\n                \"value\": 80\n              }\n            ]\n          },\n          \"unit\": \"none\"\n        },\n        \"overrides\": [\n          {\n            \"matcher\": {\n              \"id\": \"byRegexp\",\n              \"options\": \".* Blocks / Minute\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"custom.axisPlacement\",\n                \"value\": \"right\"\n              }\n            ]\n          }\n        ]\n      },\n      \"gridPos\": {\n        \"h\": 10,\n        \"w\": 8,\n        \"x\": 16,\n        \"y\": 118\n      },\n      \"id\": 138,\n      \"options\": {\n        \"legend\": {\n          \"calcs\": [\n            \"lastNotNull\",\n            \"max\"\n          ],\n          \"displayMode\": \"table\",\n          \"placement\": \"bottom\",\n          \"showLegend\": true,\n          \"sortBy\": \"Max\",\n          \"sortDesc\": true\n        },\n        \"tooltip\": {\n          \"hideZeros\": false,\n          \"mode\": \"multi\",\n          \"sort\": \"none\"\n        }\n      },\n      \"pluginVersion\": \"12.0.2\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"editorMode\": \"code\",\n          \"exemplar\": true,\n          \"expr\": \"beacon_historical_block_sync_earliest_block{instance=~\\\"$system\\\"}\",\n          \"hide\": false,\n          \"interval\": \"\",\n          \"legendFormat\": \"{{instance}} earliest available block\",\n          \"range\": true,\n          \"refId\": \"J\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"editorMode\": \"code\",\n          \"exemplar\": true,\n          \"expr\": \"-1 * delta(beacon_historical_block_sync_earliest_block{instance=~\\\"$system\\\"}[1m])\",\n          \"hide\": false,\n          \"interval\": \"\",\n          \"legendFormat\": \"{{instance}} Blocks / Minute\",\n          \"range\": true,\n          \"refId\": \"A\"\n        }\n      ],\n      \"title\": \"Historic Block Sync\",\n      \"type\": \"timeseries\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"PBFA97CFB590B2093\"\n      },\n      \"description\": \"Shows the number of BlsToExecutionChange operations in the operation pool.\",\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"palette-classic\"\n          },\n          \"custom\": {\n            \"axisBorderShow\": false,\n            \"axisCenteredZero\": false,\n            \"axisColorMode\": \"text\",\n            \"axisLabel\": \"\",\n            \"axisPlacement\": \"auto\",\n            \"barAlignment\": 0,\n            \"barWidthFactor\": 0.6,\n            \"drawStyle\": \"line\",\n            \"fillOpacity\": 10,\n            \"gradientMode\": \"opacity\",\n            \"hideFrom\": {\n              \"legend\": false,\n              \"tooltip\": false,\n              \"viz\": false\n            },\n            \"insertNulls\": false,\n            \"lineInterpolation\": \"linear\",\n            \"lineWidth\": 1,\n            \"pointSize\": 5,\n            \"scaleDistribution\": {\n              \"type\": \"linear\"\n            },\n            \"showPoints\": \"never\",\n            \"spanNulls\": true,\n            \"stacking\": {\n              \"group\": \"A\",\n              \"mode\": \"none\"\n            },\n            \"thresholdsStyle\": {\n              \"mode\": \"off\"\n            }\n          },\n          \"links\": [],\n          \"mappings\": [],\n          \"min\": 0,\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\"\n              },\n              {\n                \"color\": \"red\",\n                \"value\": 80\n              }\n            ]\n          },\n          \"unit\": \"none\"\n        },\n        \"overrides\": [\n          {\n            \"matcher\": {\n              \"id\": \"byRegexp\",\n              \"options\": \".* Blocks / Minute\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"custom.axisPlacement\",\n                \"value\": \"right\"\n              }\n            ]\n          }\n        ]\n      },\n      \"gridPos\": {\n        \"h\": 10,\n        \"w\": 8,\n        \"x\": 0,\n        \"y\": 128\n      },\n      \"id\": 146,\n      \"options\": {\n        \"legend\": {\n          \"calcs\": [\n            \"lastNotNull\",\n            \"max\"\n          ],\n          \"displayMode\": \"table\",\n          \"placement\": \"bottom\",\n          \"showLegend\": true,\n          \"sortBy\": \"Max\",\n          \"sortDesc\": true\n        },\n        \"tooltip\": {\n          \"hideZeros\": false,\n          \"mode\": \"multi\",\n          \"sort\": \"none\"\n        }\n      },\n      \"pluginVersion\": \"12.0.2\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"editorMode\": \"code\",\n          \"exemplar\": true,\n          \"expr\": \"beacon_operation_pool_size_SignedBlsToExecutionChangePool{instance=~\\\"$system\\\"}\",\n          \"hide\": false,\n          \"interval\": \"\",\n          \"legendFormat\": \"{{instance}} execution changes\",\n          \"range\": true,\n          \"refId\": \"J\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"editorMode\": \"code\",\n          \"exemplar\": true,\n          \"expr\": \"-1 * delta(beacon_operation_pool_size_SignedBlsToExecutionChangePool{instance=~\\\"$system\\\"}[1m])\",\n          \"hide\": false,\n          \"interval\": \"\",\n          \"legendFormat\": \"{{instance}} execution changes / Minute\",\n          \"range\": true,\n          \"refId\": \"A\"\n        }\n      ],\n      \"title\": \"BLS change queue\",\n      \"type\": \"timeseries\"\n    },\n    {\n      \"collapsed\": true,\n      \"gridPos\": {\n        \"h\": 1,\n        \"w\": 24,\n        \"x\": 0,\n        \"y\": 138\n      },\n      \"id\": 148,\n      \"panels\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"fieldConfig\": {\n            \"defaults\": {\n              \"color\": {\n                \"mode\": \"palette-classic\"\n              },\n              \"custom\": {\n                \"axisBorderShow\": false,\n                \"axisCenteredZero\": false,\n                \"axisColorMode\": \"text\",\n                \"axisLabel\": \"\",\n                \"axisPlacement\": \"auto\",\n                \"barAlignment\": 0,\n                \"barWidthFactor\": 0.6,\n                \"drawStyle\": \"line\",\n                \"fillOpacity\": 0,\n                \"gradientMode\": \"none\",\n                \"hideFrom\": {\n                  \"legend\": false,\n                  \"tooltip\": false,\n                  \"viz\": false\n                },\n                \"insertNulls\": false,\n                \"lineInterpolation\": \"linear\",\n                \"lineWidth\": 1,\n                \"pointSize\": 5,\n                \"scaleDistribution\": {\n                  \"type\": \"linear\"\n                },\n                \"showPoints\": \"auto\",\n                \"spanNulls\": false,\n                \"stacking\": {\n                  \"group\": \"A\",\n                  \"mode\": \"none\"\n                },\n                \"thresholdsStyle\": {\n                  \"mode\": \"off\"\n                }\n              },\n              \"mappings\": [],\n              \"thresholds\": {\n                \"mode\": \"absolute\",\n                \"steps\": [\n                  {\n                    \"color\": \"green\"\n                  },\n                  {\n                    \"color\": \"red\",\n                    \"value\": 80\n                  }\n                ]\n              }\n            },\n            \"overrides\": []\n          },\n          \"gridPos\": {\n            \"h\": 13,\n            \"w\": 12,\n            \"x\": 0,\n            \"y\": 136\n          },\n          \"id\": 149,\n          \"options\": {\n            \"legend\": {\n              \"calcs\": [\n                \"firstNotNull\",\n                \"mean\",\n                \"lastNotNull\"\n              ],\n              \"displayMode\": \"table\",\n              \"placement\": \"bottom\",\n              \"showLegend\": true,\n              \"sortBy\": \"Mean\",\n              \"sortDesc\": true\n            },\n            \"tooltip\": {\n              \"mode\": \"single\",\n              \"sort\": \"none\"\n            }\n          },\n          \"pluginVersion\": \"11.2.0\",\n          \"targets\": [\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"PBFA97CFB590B2093\"\n              },\n              \"editorMode\": \"code\",\n              \"expr\": \"beacon_block_blobs_trackers_pool_size{instance=~\\\"$system\\\"} or beacon_block_blobs_trackers_pool_size_total{instance=~\\\"$system\\\"}\",\n              \"instant\": false,\n              \"legendFormat\": \"{{instance}} {{type}}\",\n              \"range\": true,\n              \"refId\": \"A\"\n            }\n          ],\n          \"title\": \"Pooled Sidecars and Trackers\",\n          \"type\": \"timeseries\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"fieldConfig\": {\n            \"defaults\": {\n              \"color\": {\n                \"mode\": \"palette-classic\"\n              },\n              \"custom\": {\n                \"axisBorderShow\": false,\n                \"axisCenteredZero\": false,\n                \"axisColorMode\": \"text\",\n                \"axisLabel\": \"\",\n                \"axisPlacement\": \"auto\",\n                \"barAlignment\": 0,\n                \"barWidthFactor\": 0.6,\n                \"drawStyle\": \"line\",\n                \"fillOpacity\": 0,\n                \"gradientMode\": \"none\",\n                \"hideFrom\": {\n                  \"legend\": false,\n                  \"tooltip\": false,\n                  \"viz\": false\n                },\n                \"insertNulls\": false,\n                \"lineInterpolation\": \"linear\",\n                \"lineWidth\": 1,\n                \"pointSize\": 5,\n                \"scaleDistribution\": {\n                  \"type\": \"linear\"\n                },\n                \"showPoints\": \"auto\",\n                \"spanNulls\": false,\n                \"stacking\": {\n                  \"group\": \"A\",\n                  \"mode\": \"none\"\n                },\n                \"thresholdsStyle\": {\n                  \"mode\": \"off\"\n                }\n              },\n              \"mappings\": [],\n              \"thresholds\": {\n                \"mode\": \"absolute\",\n                \"steps\": [\n                  {\n                    \"color\": \"green\"\n                  },\n                  {\n                    \"color\": \"red\",\n                    \"value\": 80\n                  }\n                ]\n              }\n            },\n            \"overrides\": []\n          },\n          \"gridPos\": {\n            \"h\": 13,\n            \"w\": 12,\n            \"x\": 12,\n            \"y\": 136\n          },\n          \"id\": 150,\n          \"options\": {\n            \"legend\": {\n              \"calcs\": [\n                \"firstNotNull\",\n                \"mean\",\n                \"lastNotNull\"\n              ],\n              \"displayMode\": \"table\",\n              \"placement\": \"bottom\",\n              \"showLegend\": true,\n              \"sortBy\": \"Name\",\n              \"sortDesc\": true\n            },\n            \"tooltip\": {\n              \"mode\": \"single\",\n              \"sort\": \"none\"\n            }\n          },\n          \"pluginVersion\": \"11.2.0\",\n          \"targets\": [\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"PBFA97CFB590B2093\"\n              },\n              \"editorMode\": \"code\",\n              \"expr\": \"rate(beacon_block_blobs_trackers_pool_stats{instance=~\\\"$system\\\"}[$__rate_interval]) or rate(beacon_block_blobs_trackers_pool_stats_total{instance=~\\\"$system\\\"}[$__rate_interval])\",\n              \"instant\": false,\n              \"legendFormat\": \"{{instance}} {{type}} {{subtype}}\",\n              \"range\": true,\n              \"refId\": \"A\"\n            }\n          ],\n          \"title\": \"Trackers pool stats counters\",\n          \"type\": \"timeseries\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"description\": \"\",\n          \"fieldConfig\": {\n            \"defaults\": {\n              \"color\": {\n                \"mode\": \"palette-classic\"\n              },\n              \"custom\": {\n                \"axisBorderShow\": false,\n                \"axisCenteredZero\": false,\n                \"axisColorMode\": \"text\",\n                \"axisLabel\": \"\",\n                \"axisPlacement\": \"auto\",\n                \"barAlignment\": 0,\n                \"barWidthFactor\": 0.6,\n                \"drawStyle\": \"line\",\n                \"fillOpacity\": 0,\n                \"gradientMode\": \"none\",\n                \"hideFrom\": {\n                  \"legend\": false,\n                  \"tooltip\": false,\n                  \"viz\": false\n                },\n                \"insertNulls\": false,\n                \"lineInterpolation\": \"linear\",\n                \"lineWidth\": 1,\n                \"pointSize\": 5,\n                \"scaleDistribution\": {\n                  \"type\": \"linear\"\n                },\n                \"showPoints\": \"auto\",\n                \"spanNulls\": false,\n                \"stacking\": {\n                  \"group\": \"A\",\n                  \"mode\": \"none\"\n                },\n                \"thresholdsStyle\": {\n                  \"mode\": \"off\"\n                }\n              },\n              \"mappings\": [],\n              \"thresholds\": {\n                \"mode\": \"absolute\",\n                \"steps\": [\n                  {\n                    \"color\": \"green\"\n                  },\n                  {\n                    \"color\": \"red\",\n                    \"value\": 80\n                  }\n                ]\n              }\n            },\n            \"overrides\": []\n          },\n          \"gridPos\": {\n            \"h\": 14,\n            \"w\": 8,\n            \"x\": 16,\n            \"y\": 285\n          },\n          \"id\": 153,\n          \"options\": {\n            \"legend\": {\n              \"calcs\": [\n                \"firstNotNull\",\n                \"mean\",\n                \"lastNotNull\",\n                \"diff\"\n              ],\n              \"displayMode\": \"table\",\n              \"placement\": \"bottom\",\n              \"showLegend\": true,\n              \"sortBy\": \"Mean\",\n              \"sortDesc\": true\n            },\n            \"tooltip\": {\n              \"mode\": \"single\",\n              \"sort\": \"none\"\n            }\n          },\n          \"pluginVersion\": \"11.2.0\",\n          \"targets\": [\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"PBFA97CFB590B2093\"\n              },\n              \"editorMode\": \"code\",\n              \"expr\": \"beacon_block_blobs_trackers_pool_stats{instance=~\\\"$system\\\", subtype=~\\\"gossip_duplicate|rpc_duplicate|local_el_duplicate\\\"} or beacon_block_blobs_trackers_pool_stats_total{instance=~\\\"$system\\\", subtype=~\\\"gossip_duplicate|rpc_duplicate|local_el_duplicate\\\"}\",\n              \"instant\": false,\n              \"legendFormat\": \"{{instance}} {{type}} {{subtype}}\",\n              \"range\": true,\n              \"refId\": \"A\"\n            }\n          ],\n          \"title\": \"Duplicates\",\n          \"type\": \"timeseries\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"fieldConfig\": {\n            \"defaults\": {\n              \"color\": {\n                \"mode\": \"palette-classic\"\n              },\n              \"custom\": {\n                \"axisBorderShow\": false,\n                \"axisCenteredZero\": false,\n                \"axisColorMode\": \"text\",\n                \"axisLabel\": \"\",\n                \"axisPlacement\": \"auto\",\n                \"barAlignment\": 0,\n                \"barWidthFactor\": 0.6,\n                \"drawStyle\": \"line\",\n                \"fillOpacity\": 0,\n                \"gradientMode\": \"none\",\n                \"hideFrom\": {\n                  \"legend\": false,\n                  \"tooltip\": false,\n                  \"viz\": false\n                },\n                \"insertNulls\": false,\n                \"lineInterpolation\": \"linear\",\n                \"lineWidth\": 1,\n                \"pointSize\": 5,\n                \"scaleDistribution\": {\n                  \"type\": \"linear\"\n                },\n                \"showPoints\": \"auto\",\n                \"spanNulls\": false,\n                \"stacking\": {\n                  \"group\": \"A\",\n                  \"mode\": \"none\"\n                },\n                \"thresholdsStyle\": {\n                  \"mode\": \"off\"\n                }\n              },\n              \"mappings\": [],\n              \"thresholds\": {\n                \"mode\": \"absolute\",\n                \"steps\": [\n                  {\n                    \"color\": \"green\"\n                  },\n                  {\n                    \"color\": \"red\",\n                    \"value\": 80\n                  }\n                ]\n              }\n            },\n            \"overrides\": []\n          },\n          \"gridPos\": {\n            \"h\": 14,\n            \"w\": 8,\n            \"x\": 0,\n            \"y\": 299\n          },\n          \"id\": 151,\n          \"options\": {\n            \"legend\": {\n              \"calcs\": [\n                \"firstNotNull\",\n                \"mean\",\n                \"lastNotNull\",\n                \"diff\"\n              ],\n              \"displayMode\": \"table\",\n              \"placement\": \"bottom\",\n              \"showLegend\": true,\n              \"sortBy\": \"Mean\",\n              \"sortDesc\": true\n            },\n            \"tooltip\": {\n              \"mode\": \"single\",\n              \"sort\": \"none\"\n            }\n          },\n          \"pluginVersion\": \"11.2.0\",\n          \"targets\": [\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"PBFA97CFB590B2093\"\n              },\n              \"editorMode\": \"code\",\n              \"expr\": \"beacon_block_blobs_trackers_pool_stats{instance=~\\\"$system\\\", subtype=\\\"rpc_fetch\\\"} or beacon_block_blobs_trackers_pool_stats_total{instance=~\\\"$system\\\", subtype=\\\"rpc_fetch\\\"}\",\n              \"instant\": false,\n              \"legendFormat\": \"{{instance}} {{type}}\",\n              \"range\": true,\n              \"refId\": \"A\"\n            }\n          ],\n          \"title\": \"RPC fetches\",\n          \"type\": \"timeseries\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"description\": \"\",\n          \"fieldConfig\": {\n            \"defaults\": {\n              \"color\": {\n                \"mode\": \"palette-classic\"\n              },\n              \"custom\": {\n                \"axisBorderShow\": false,\n                \"axisCenteredZero\": false,\n                \"axisColorMode\": \"text\",\n                \"axisLabel\": \"\",\n                \"axisPlacement\": \"auto\",\n                \"barAlignment\": 0,\n                \"barWidthFactor\": 0.6,\n                \"drawStyle\": \"line\",\n                \"fillOpacity\": 0,\n                \"gradientMode\": \"none\",\n                \"hideFrom\": {\n                  \"legend\": false,\n                  \"tooltip\": false,\n                  \"viz\": false\n                },\n                \"insertNulls\": false,\n                \"lineInterpolation\": \"linear\",\n                \"lineWidth\": 1,\n                \"pointSize\": 5,\n                \"scaleDistribution\": {\n                  \"type\": \"linear\"\n                },\n                \"showPoints\": \"auto\",\n                \"spanNulls\": false,\n                \"stacking\": {\n                  \"group\": \"A\",\n                  \"mode\": \"none\"\n                },\n                \"thresholdsStyle\": {\n                  \"mode\": \"off\"\n                }\n              },\n              \"mappings\": [],\n              \"thresholds\": {\n                \"mode\": \"absolute\",\n                \"steps\": [\n                  {\n                    \"color\": \"green\"\n                  },\n                  {\n                    \"color\": \"red\",\n                    \"value\": 80\n                  }\n                ]\n              }\n            },\n            \"overrides\": []\n          },\n          \"gridPos\": {\n            \"h\": 14,\n            \"w\": 8,\n            \"x\": 8,\n            \"y\": 299\n          },\n          \"id\": 152,\n          \"options\": {\n            \"legend\": {\n              \"calcs\": [\n                \"firstNotNull\",\n                \"mean\",\n                \"lastNotNull\",\n                \"diff\"\n              ],\n              \"displayMode\": \"table\",\n              \"placement\": \"bottom\",\n              \"showLegend\": true,\n              \"sortBy\": \"Mean\",\n              \"sortDesc\": true\n            },\n            \"tooltip\": {\n              \"mode\": \"single\",\n              \"sort\": \"none\"\n            }\n          },\n          \"pluginVersion\": \"11.2.0\",\n          \"targets\": [\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"PBFA97CFB590B2093\"\n              },\n              \"editorMode\": \"code\",\n              \"expr\": \"beacon_block_blobs_trackers_pool_stats{instance=~\\\"$system\\\", subtype=\\\"rpc\\\"} or beacon_block_blobs_trackers_pool_stats_total{instance=~\\\"$system\\\", subtype=\\\"rpc\\\"}\",\n              \"instant\": false,\n              \"legendFormat\": \"{{instance}} {{type}}\",\n              \"range\": true,\n              \"refId\": \"A\"\n            }\n          ],\n          \"title\": \"RPC receives\",\n          \"type\": \"timeseries\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"fieldConfig\": {\n            \"defaults\": {\n              \"color\": {\n                \"mode\": \"palette-classic\"\n              },\n              \"custom\": {\n                \"axisBorderShow\": false,\n                \"axisCenteredZero\": false,\n                \"axisColorMode\": \"text\",\n                \"axisLabel\": \"\",\n                \"axisPlacement\": \"auto\",\n                \"barAlignment\": 0,\n                \"barWidthFactor\": 0.6,\n                \"drawStyle\": \"line\",\n                \"fillOpacity\": 0,\n                \"gradientMode\": \"none\",\n                \"hideFrom\": {\n                  \"legend\": false,\n                  \"tooltip\": false,\n                  \"viz\": false\n                },\n                \"insertNulls\": false,\n                \"lineInterpolation\": \"linear\",\n                \"lineWidth\": 1,\n                \"pointSize\": 5,\n                \"scaleDistribution\": {\n                  \"type\": \"linear\"\n                },\n                \"showPoints\": \"auto\",\n                \"spanNulls\": false,\n                \"stacking\": {\n                  \"group\": \"A\",\n                  \"mode\": \"none\"\n                },\n                \"thresholdsStyle\": {\n                  \"mode\": \"off\"\n                }\n              },\n              \"mappings\": [],\n              \"thresholds\": {\n                \"mode\": \"absolute\",\n                \"steps\": [\n                  {\n                    \"color\": \"green\"\n                  },\n                  {\n                    \"color\": \"red\",\n                    \"value\": 80\n                  }\n                ]\n              }\n            },\n            \"overrides\": []\n          },\n          \"gridPos\": {\n            \"h\": 14,\n            \"w\": 8,\n            \"x\": 0,\n            \"y\": 309\n          },\n          \"id\": 154,\n          \"options\": {\n            \"legend\": {\n              \"calcs\": [\n                \"firstNotNull\",\n                \"mean\",\n                \"lastNotNull\",\n                \"diff\"\n              ],\n              \"displayMode\": \"table\",\n              \"placement\": \"bottom\",\n              \"showLegend\": true,\n              \"sortBy\": \"Mean\",\n              \"sortDesc\": true\n            },\n            \"tooltip\": {\n              \"mode\": \"single\",\n              \"sort\": \"none\"\n            }\n          },\n          \"pluginVersion\": \"11.2.0\",\n          \"targets\": [\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"PBFA97CFB590B2093\"\n              },\n              \"disableTextWrap\": false,\n              \"editorMode\": \"code\",\n              \"expr\": \"beacon_block_blobs_trackers_pool_stats{instance=~\\\"$system\\\", subtype=\\\"local_el_fetch\\\", name=\\\"blob_sidecar\\\"} or beacon_block_blobs_trackers_pool_stats_total{instance=~\\\"$system\\\", subtype=\\\"local_el_fetch\\\"}\",\n              \"fullMetaSearch\": false,\n              \"hide\": false,\n              \"includeNullMetadata\": true,\n              \"instant\": false,\n              \"legendFormat\": \"{{instance}} Fetched\",\n              \"range\": true,\n              \"refId\": \"Fetches\",\n              \"useBackend\": false\n            },\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"PBFA97CFB590B2093\"\n              },\n              \"editorMode\": \"code\",\n              \"expr\": \"beacon_block_blobs_trackers_pool_stats{instance=~\\\"$system\\\", subtype=\\\"local_el\\\"} or beacon_block_blobs_trackers_pool_stats_total{instance=~\\\"$system\\\", subtype=\\\"local_el\\\"}\",\n              \"hide\": false,\n              \"instant\": false,\n              \"legendFormat\": \"{{instance}} Received\",\n              \"range\": true,\n              \"refId\": \"Received\"\n            }\n          ],\n          \"title\": \"Blobs from EL\",\n          \"type\": \"timeseries\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"fieldConfig\": {\n            \"defaults\": {\n              \"color\": {\n                \"mode\": \"palette-classic\"\n              },\n              \"custom\": {\n                \"axisBorderShow\": false,\n                \"axisCenteredZero\": false,\n                \"axisColorMode\": \"text\",\n                \"axisLabel\": \"\",\n                \"axisPlacement\": \"auto\",\n                \"barAlignment\": 0,\n                \"barWidthFactor\": 0.6,\n                \"drawStyle\": \"line\",\n                \"fillOpacity\": 0,\n                \"gradientMode\": \"none\",\n                \"hideFrom\": {\n                  \"legend\": false,\n                  \"tooltip\": false,\n                  \"viz\": false\n                },\n                \"insertNulls\": false,\n                \"lineInterpolation\": \"linear\",\n                \"lineWidth\": 1,\n                \"pointSize\": 5,\n                \"scaleDistribution\": {\n                  \"type\": \"linear\"\n                },\n                \"showPoints\": \"auto\",\n                \"spanNulls\": false,\n                \"stacking\": {\n                  \"group\": \"A\",\n                  \"mode\": \"none\"\n                },\n                \"thresholdsStyle\": {\n                  \"mode\": \"off\"\n                }\n              },\n              \"mappings\": [],\n              \"thresholds\": {\n                \"mode\": \"absolute\",\n                \"steps\": [\n                  {\n                    \"color\": \"green\"\n                  },\n                  {\n                    \"color\": \"red\",\n                    \"value\": 80\n                  }\n                ]\n              }\n            },\n            \"overrides\": []\n          },\n          \"gridPos\": {\n            \"h\": 14,\n            \"w\": 8,\n            \"x\": 8,\n            \"y\": 309\n          },\n          \"id\": 155,\n          \"options\": {\n            \"legend\": {\n              \"calcs\": [\n                \"firstNotNull\",\n                \"mean\",\n                \"lastNotNull\",\n                \"diff\"\n              ],\n              \"displayMode\": \"table\",\n              \"placement\": \"bottom\",\n              \"showLegend\": true,\n              \"sortBy\": \"Mean\",\n              \"sortDesc\": true\n            },\n            \"tooltip\": {\n              \"mode\": \"single\",\n              \"sort\": \"none\"\n            }\n          },\n          \"pluginVersion\": \"11.2.0\",\n          \"targets\": [\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"PBFA97CFB590B2093\"\n              },\n              \"disableTextWrap\": false,\n              \"editorMode\": \"code\",\n              \"expr\": \"beacon_block_blobs_trackers_pool_stats{instance=~\\\"$system\\\", subtype=\\\"gossip\\\"} or beacon_block_blobs_trackers_pool_stats_total{instance=~\\\"$system\\\", subtype=\\\"gossip\\\"}\",\n              \"fullMetaSearch\": false,\n              \"hide\": false,\n              \"includeNullMetadata\": true,\n              \"instant\": false,\n              \"legendFormat\": \"{{instance}} {{type}}\",\n              \"range\": true,\n              \"refId\": \"A\",\n              \"useBackend\": false\n            }\n          ],\n          \"title\": \"Gossip\",\n          \"type\": \"timeseries\"\n        }\n      ],\n      \"title\": \"Block and Blob-Sidecars trackers Pool\",\n      \"type\": \"row\"\n    },\n    {\n      \"collapsed\": true,\n      \"gridPos\": {\n        \"h\": 1,\n        \"w\": 24,\n        \"x\": 0,\n        \"y\": 139\n      },\n      \"id\": 158,\n      \"panels\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"description\": \"\",\n          \"fieldConfig\": {\n            \"defaults\": {\n              \"color\": {\n                \"mode\": \"thresholds\"\n              },\n              \"fieldMinMax\": false,\n              \"mappings\": [],\n              \"min\": 0,\n              \"thresholds\": {\n                \"mode\": \"absolute\",\n                \"steps\": [\n                  {\n                    \"color\": \"red\"\n                  },\n                  {\n                    \"color\": \"green\",\n                    \"value\": 3\n                  }\n                ]\n              }\n            },\n            \"overrides\": []\n          },\n          \"gridPos\": {\n            \"h\": 8,\n            \"w\": 8,\n            \"x\": 0,\n            \"y\": 140\n          },\n          \"id\": 161,\n          \"options\": {\n            \"colorMode\": \"value\",\n            \"graphMode\": \"area\",\n            \"justifyMode\": \"center\",\n            \"orientation\": \"auto\",\n            \"percentChangeColorMode\": \"standard\",\n            \"reduceOptions\": {\n              \"calcs\": [\n                \"lastNotNull\"\n              ],\n              \"fields\": \"\",\n              \"values\": false\n            },\n            \"showPercentChange\": false,\n            \"textMode\": \"auto\",\n            \"wideLayout\": true\n          },\n          \"pluginVersion\": \"12.0.2\",\n          \"targets\": [\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"PBFA97CFB590B2093\"\n              },\n              \"disableTextWrap\": false,\n              \"editorMode\": \"code\",\n              \"expr\": \"clamp_max(sum(beacon_custody_groups{instance=~\\\"$system\\\"}), 128)\",\n              \"fullMetaSearch\": false,\n              \"hide\": false,\n              \"includeNullMetadata\": false,\n              \"legendFormat\": \"Custody Groups\",\n              \"range\": true,\n              \"refId\": \"A\",\n              \"useBackend\": false\n            },\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"PBFA97CFB590B2093\"\n              },\n              \"disableTextWrap\": false,\n              \"editorMode\": \"code\",\n              \"expr\": \"clamp_max(sum(beacon_custody_groups_backfilled{instance=~\\\"$system\\\"}), 128)\",\n              \"fullMetaSearch\": false,\n              \"hide\": false,\n              \"includeNullMetadata\": false,\n              \"legendFormat\": \"Custody Groups Backfilled\",\n              \"range\": true,\n              \"refId\": \"B\",\n              \"useBackend\": false\n            }\n          ],\n          \"title\": \"Custody Group Gauges\",\n          \"type\": \"stat\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"description\": \"\",\n          \"fieldConfig\": {\n            \"defaults\": {\n              \"color\": {\n                \"mode\": \"thresholds\"\n              },\n              \"mappings\": [],\n              \"thresholds\": {\n                \"mode\": \"absolute\",\n                \"steps\": [\n                  {\n                    \"color\": \"green\"\n                  }\n                ]\n              }\n            },\n            \"overrides\": []\n          },\n          \"gridPos\": {\n            \"h\": 8,\n            \"w\": 4,\n            \"x\": 8,\n            \"y\": 140\n          },\n          \"id\": 163,\n          \"options\": {\n            \"colorMode\": \"value\",\n            \"graphMode\": \"none\",\n            \"justifyMode\": \"auto\",\n            \"orientation\": \"auto\",\n            \"percentChangeColorMode\": \"standard\",\n            \"reduceOptions\": {\n              \"calcs\": [\n                \"lastNotNull\"\n              ],\n              \"fields\": \"\",\n              \"values\": false\n            },\n            \"showPercentChange\": false,\n            \"textMode\": \"auto\",\n            \"wideLayout\": true\n          },\n          \"pluginVersion\": \"12.0.2\",\n          \"targets\": [\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"PBFA97CFB590B2093\"\n              },\n              \"editorMode\": \"code\",\n              \"expr\": \"beacon_earliest_available_slot{instance=~\\\"$system\\\"}\",\n              \"hide\": false,\n              \"legendFormat\": \"{{instance}} Rate (p99)\",\n              \"range\": true,\n              \"refId\": \"A\"\n            }\n          ],\n          \"title\": \"Earliest Available Slot\",\n          \"type\": \"stat\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"description\": \"\",\n          \"fieldConfig\": {\n            \"defaults\": {\n              \"color\": {\n                \"mode\": \"palette-classic\"\n              },\n              \"custom\": {\n                \"axisBorderShow\": false,\n                \"axisCenteredZero\": false,\n                \"axisColorMode\": \"text\",\n                \"axisLabel\": \"\",\n                \"axisPlacement\": \"auto\",\n                \"barAlignment\": 0,\n                \"barWidthFactor\": 0.6,\n                \"drawStyle\": \"line\",\n                \"fillOpacity\": 0,\n                \"gradientMode\": \"none\",\n                \"hideFrom\": {\n                  \"legend\": false,\n                  \"tooltip\": false,\n                  \"viz\": false\n                },\n                \"insertNulls\": false,\n                \"lineInterpolation\": \"linear\",\n                \"lineWidth\": 1,\n                \"pointSize\": 5,\n                \"scaleDistribution\": {\n                  \"type\": \"linear\"\n                },\n                \"showPoints\": \"never\",\n                \"spanNulls\": true,\n                \"stacking\": {\n                  \"group\": \"A\",\n                  \"mode\": \"none\"\n                },\n                \"thresholdsStyle\": {\n                  \"mode\": \"area\"\n                }\n              },\n              \"links\": [],\n              \"mappings\": [],\n              \"min\": 0,\n              \"thresholds\": {\n                \"mode\": \"absolute\",\n                \"steps\": [\n                  {\n                    \"color\": \"red\"\n                  },\n                  {\n                    \"color\": \"green\",\n                    \"value\": 2\n                  }\n                ]\n              },\n              \"unit\": \"none\"\n            },\n            \"overrides\": []\n          },\n          \"gridPos\": {\n            \"h\": 8,\n            \"w\": 12,\n            \"x\": 12,\n            \"y\": 140\n          },\n          \"id\": 162,\n          \"options\": {\n            \"legend\": {\n              \"calcs\": [\n                \"min\",\n                \"max\",\n                \"mean\",\n                \"lastNotNull\"\n              ],\n              \"displayMode\": \"table\",\n              \"placement\": \"bottom\",\n              \"showLegend\": true,\n              \"sortBy\": \"Min\",\n              \"sortDesc\": true\n            },\n            \"tooltip\": {\n              \"hideZeros\": false,\n              \"mode\": \"multi\",\n              \"sort\": \"none\"\n            }\n          },\n          \"pluginVersion\": \"12.0.2\",\n          \"targets\": [\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"PBFA97CFB590B2093\"\n              },\n              \"editorMode\": \"code\",\n              \"exemplar\": true,\n              \"expr\": \"network_subnet_peer_count{instance=~\\\"$system\\\", subnet=~\\\"data_column.*\\\"}\",\n              \"hide\": false,\n              \"interval\": \"\",\n              \"legendFormat\": \"{{instance}} {{subnet}}\",\n              \"range\": true,\n              \"refId\": \"J\"\n            }\n          ],\n          \"title\": \"Datacolumn Subnets Peer Distribution\",\n          \"type\": \"timeseries\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"description\": \"Number of data column gossip messages received per second.\",\n          \"fieldConfig\": {\n            \"defaults\": {\n              \"color\": {\n                \"mode\": \"palette-classic\"\n              },\n              \"custom\": {\n                \"axisBorderShow\": false,\n                \"axisCenteredZero\": false,\n                \"axisColorMode\": \"text\",\n                \"axisLabel\": \"\",\n                \"axisPlacement\": \"auto\",\n                \"barAlignment\": 0,\n                \"barWidthFactor\": 0.6,\n                \"drawStyle\": \"line\",\n                \"fillOpacity\": 0,\n                \"gradientMode\": \"none\",\n                \"hideFrom\": {\n                  \"legend\": false,\n                  \"tooltip\": false,\n                  \"viz\": false\n                },\n                \"insertNulls\": false,\n                \"lineInterpolation\": \"linear\",\n                \"lineStyle\": {\n                  \"fill\": \"solid\"\n                },\n                \"lineWidth\": 1,\n                \"pointSize\": 5,\n                \"scaleDistribution\": {\n                  \"type\": \"linear\"\n                },\n                \"showPoints\": \"never\",\n                \"spanNulls\": true,\n                \"stacking\": {\n                  \"group\": \"A\",\n                  \"mode\": \"none\"\n                },\n                \"thresholdsStyle\": {\n                  \"mode\": \"off\"\n                }\n              },\n              \"mappings\": [],\n              \"min\": 0,\n              \"thresholds\": {\n                \"mode\": \"absolute\",\n                \"steps\": [\n                  {\n                    \"color\": \"green\"\n                  },\n                  {\n                    \"color\": \"red\",\n                    \"value\": 80\n                  }\n                ]\n              },\n              \"unit\": \"msg/s\"\n            },\n            \"overrides\": [\n              {\n                \"matcher\": {\n                  \"id\": \"byRegexp\",\n                  \"options\": \"/.*msg\\\\/s/\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"custom.lineStyle\",\n                    \"value\": {\n                      \"dash\": [\n                        10,\n                        10\n                      ],\n                      \"fill\": \"dash\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byRegexp\",\n                  \"options\": \"/.*Moving Average \\\\(1h\\\\)/\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"custom.lineWidth\",\n                    \"value\": 2\n                  }\n                ]\n              }\n            ]\n          },\n          \"gridPos\": {\n            \"h\": 8,\n            \"w\": 8,\n            \"x\": 0,\n            \"y\": 148\n          },\n          \"id\": 164,\n          \"options\": {\n            \"legend\": {\n              \"calcs\": [],\n              \"displayMode\": \"list\",\n              \"placement\": \"bottom\",\n              \"showLegend\": true\n            },\n            \"tooltip\": {\n              \"hideZeros\": false,\n              \"mode\": \"single\",\n              \"sort\": \"none\"\n            }\n          },\n          \"pluginVersion\": \"12.0.2\",\n          \"targets\": [\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"PBFA97CFB590B2093\"\n              },\n              \"editorMode\": \"code\",\n              \"expr\": \"rate(beacon_data_column_sidecar_processing_requests_total{instance=~\\\"$system\\\"}[$__rate_interval])\",\n              \"hide\": false,\n              \"legendFormat\": \"{{instance}} msg/s\",\n              \"range\": true,\n              \"refId\": \"A\"\n            },\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"PBFA97CFB590B2093\"\n              },\n              \"editorMode\": \"code\",\n              \"expr\": \"avg_over_time(rate(beacon_data_column_sidecar_processing_requests_total{instance=~\\\"$system\\\"}[$__rate_interval])[1h:])\",\n              \"hide\": false,\n              \"legendFormat\": \"{{instance}} Moving Average (1h)\",\n              \"range\": true,\n              \"refId\": \"B\"\n            }\n          ],\n          \"title\": \"Gossip - Data Columns Received Messages\",\n          \"type\": \"timeseries\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"description\": \"Rate of gossip messages that have failed validations. \\n\\nThe number of failed messages corresponds to the difference between the number of messages received and the number of messages successfully validated.\",\n          \"fieldConfig\": {\n            \"defaults\": {\n              \"color\": {\n                \"mode\": \"palette-classic\"\n              },\n              \"custom\": {\n                \"axisBorderShow\": false,\n                \"axisCenteredZero\": false,\n                \"axisColorMode\": \"text\",\n                \"axisLabel\": \"\",\n                \"axisPlacement\": \"auto\",\n                \"barAlignment\": 0,\n                \"barWidthFactor\": 0.6,\n                \"drawStyle\": \"line\",\n                \"fillOpacity\": 0,\n                \"gradientMode\": \"none\",\n                \"hideFrom\": {\n                  \"legend\": false,\n                  \"tooltip\": false,\n                  \"viz\": false\n                },\n                \"insertNulls\": false,\n                \"lineInterpolation\": \"linear\",\n                \"lineStyle\": {\n                  \"fill\": \"solid\"\n                },\n                \"lineWidth\": 1,\n                \"pointSize\": 5,\n                \"scaleDistribution\": {\n                  \"type\": \"linear\"\n                },\n                \"showPoints\": \"never\",\n                \"spanNulls\": true,\n                \"stacking\": {\n                  \"group\": \"A\",\n                  \"mode\": \"none\"\n                },\n                \"thresholdsStyle\": {\n                  \"mode\": \"area\"\n                }\n              },\n              \"mappings\": [],\n              \"max\": 1,\n              \"min\": 0,\n              \"thresholds\": {\n                \"mode\": \"absolute\",\n                \"steps\": [\n                  {\n                    \"color\": \"green\"\n                  },\n                  {\n                    \"color\": \"red\",\n                    \"value\": 0.05\n                  }\n                ]\n              },\n              \"unit\": \"percentunit\"\n            },\n            \"overrides\": []\n          },\n          \"gridPos\": {\n            \"h\": 8,\n            \"w\": 8,\n            \"x\": 8,\n            \"y\": 148\n          },\n          \"id\": 166,\n          \"options\": {\n            \"legend\": {\n              \"calcs\": [],\n              \"displayMode\": \"list\",\n              \"placement\": \"bottom\",\n              \"showLegend\": true\n            },\n            \"tooltip\": {\n              \"hideZeros\": false,\n              \"mode\": \"single\",\n              \"sort\": \"none\"\n            }\n          },\n          \"pluginVersion\": \"12.0.2\",\n          \"targets\": [\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"PBFA97CFB590B2093\"\n              },\n              \"disableTextWrap\": false,\n              \"editorMode\": \"code\",\n              \"expr\": \"(rate(beacon_data_column_sidecar_processing_validated_total{instance=~\\\"$system\\\",validation_result=~\\\"REJECT\\\"}[$__rate_interval]) >= 0) OR on() vector(0)\",\n              \"fullMetaSearch\": false,\n              \"hide\": true,\n              \"includeNullMetadata\": true,\n              \"instant\": false,\n              \"legendFormat\": \"{{instance}}\",\n              \"range\": true,\n              \"refId\": \"A\",\n              \"useBackend\": false\n            },\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"PBFA97CFB590B2093\"\n              },\n              \"disableTextWrap\": false,\n              \"editorMode\": \"code\",\n              \"expr\": \"sum without (validation_result) (rate(beacon_data_column_sidecar_processing_validated_total{instance=~\\\"$system\\\"}[$__rate_interval]))\",\n              \"fullMetaSearch\": false,\n              \"hide\": true,\n              \"includeNullMetadata\": true,\n              \"instant\": false,\n              \"legendFormat\": \"{{instance}}\",\n              \"range\": true,\n              \"refId\": \"B\",\n              \"useBackend\": false\n            },\n            {\n              \"datasource\": {\n                \"type\": \"__expr__\",\n                \"uid\": \"__expr__\"\n              },\n              \"expression\": \"$A/$B\",\n              \"hide\": false,\n              \"refId\": \"C\",\n              \"type\": \"math\"\n            }\n          ],\n          \"title\": \"Gossip - Data Columns Validation Failure Rate\",\n          \"type\": \"timeseries\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"description\": \"Rate of Data Column Validation Result\\n\\nThe number of failed messages corresponds to the difference between the number of messages received and the number of messages successfully validated.\",\n          \"fieldConfig\": {\n            \"defaults\": {\n              \"color\": {\n                \"mode\": \"palette-classic\"\n              },\n              \"custom\": {\n                \"axisBorderShow\": false,\n                \"axisCenteredZero\": false,\n                \"axisColorMode\": \"text\",\n                \"axisLabel\": \"\",\n                \"axisPlacement\": \"auto\",\n                \"barAlignment\": 0,\n                \"barWidthFactor\": 0.6,\n                \"drawStyle\": \"line\",\n                \"fillOpacity\": 0,\n                \"gradientMode\": \"none\",\n                \"hideFrom\": {\n                  \"legend\": false,\n                  \"tooltip\": false,\n                  \"viz\": false\n                },\n                \"insertNulls\": false,\n                \"lineInterpolation\": \"linear\",\n                \"lineStyle\": {\n                  \"fill\": \"solid\"\n                },\n                \"lineWidth\": 1,\n                \"pointSize\": 5,\n                \"scaleDistribution\": {\n                  \"type\": \"linear\"\n                },\n                \"showPoints\": \"never\",\n                \"spanNulls\": true,\n                \"stacking\": {\n                  \"group\": \"A\",\n                  \"mode\": \"none\"\n                },\n                \"thresholdsStyle\": {\n                  \"mode\": \"off\"\n                }\n              },\n              \"mappings\": [],\n              \"min\": 0,\n              \"thresholds\": {\n                \"mode\": \"absolute\",\n                \"steps\": [\n                  {\n                    \"color\": \"green\"\n                  }\n                ]\n              },\n              \"unit\": \"ops\"\n            },\n            \"overrides\": []\n          },\n          \"gridPos\": {\n            \"h\": 8,\n            \"w\": 8,\n            \"x\": 16,\n            \"y\": 148\n          },\n          \"id\": 171,\n          \"options\": {\n            \"legend\": {\n              \"calcs\": [],\n              \"displayMode\": \"list\",\n              \"placement\": \"bottom\",\n              \"showLegend\": true\n            },\n            \"tooltip\": {\n              \"hideZeros\": false,\n              \"mode\": \"single\",\n              \"sort\": \"none\"\n            }\n          },\n          \"pluginVersion\": \"12.0.2\",\n          \"targets\": [\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"PBFA97CFB590B2093\"\n              },\n              \"disableTextWrap\": false,\n              \"editorMode\": \"builder\",\n              \"expr\": \"sum by(validation_result) (rate(beacon_data_column_sidecar_processing_validated_total{instance=~\\\"$system\\\"}[15m]))\",\n              \"fullMetaSearch\": false,\n              \"hide\": false,\n              \"includeNullMetadata\": true,\n              \"instant\": false,\n              \"legendFormat\": \"{{validation_result}} {{instance}}\",\n              \"range\": true,\n              \"refId\": \"A\",\n              \"useBackend\": false\n            }\n          ],\n          \"title\": \"Gossip - Data Columns Validation (15min)\",\n          \"type\": \"timeseries\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"fieldConfig\": {\n            \"defaults\": {\n              \"color\": {\n                \"mode\": \"palette-classic\"\n              },\n              \"custom\": {\n                \"axisBorderShow\": false,\n                \"axisCenteredZero\": false,\n                \"axisColorMode\": \"text\",\n                \"axisLabel\": \"\",\n                \"axisPlacement\": \"auto\",\n                \"barAlignment\": 0,\n                \"barWidthFactor\": 0.6,\n                \"drawStyle\": \"line\",\n                \"fillOpacity\": 0,\n                \"gradientMode\": \"none\",\n                \"hideFrom\": {\n                  \"legend\": false,\n                  \"tooltip\": false,\n                  \"viz\": false\n                },\n                \"insertNulls\": false,\n                \"lineInterpolation\": \"linear\",\n                \"lineWidth\": 1,\n                \"pointSize\": 5,\n                \"scaleDistribution\": {\n                  \"type\": \"linear\"\n                },\n                \"showPoints\": \"auto\",\n                \"spanNulls\": false,\n                \"stacking\": {\n                  \"group\": \"A\",\n                  \"mode\": \"none\"\n                },\n                \"thresholdsStyle\": {\n                  \"mode\": \"off\"\n                }\n              },\n              \"mappings\": [],\n              \"thresholds\": {\n                \"mode\": \"absolute\",\n                \"steps\": [\n                  {\n                    \"color\": \"green\"\n                  },\n                  {\n                    \"color\": \"red\",\n                    \"value\": 80\n                  }\n                ]\n              },\n              \"unit\": \"mpm\"\n            },\n            \"overrides\": [\n              {\n                \"matcher\": {\n                  \"id\": \"byRegexp\",\n                  \"options\": \"/.rpm*/\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"custom.lineStyle\",\n                    \"value\": {\n                      \"dash\": [\n                        10,\n                        10\n                      ],\n                      \"fill\": \"dash\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byRegexp\",\n                  \"options\": \"/.*Moving Average \\\\(1h\\\\)/\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"custom.lineWidth\",\n                    \"value\": 2\n                  }\n                ]\n              }\n            ]\n          },\n          \"gridPos\": {\n            \"h\": 8,\n            \"w\": 12,\n            \"x\": 0,\n            \"y\": 156\n          },\n          \"id\": 169,\n          \"options\": {\n            \"legend\": {\n              \"calcs\": [],\n              \"displayMode\": \"list\",\n              \"placement\": \"bottom\",\n              \"showLegend\": true\n            },\n            \"tooltip\": {\n              \"hideZeros\": false,\n              \"mode\": \"single\",\n              \"sort\": \"none\"\n            }\n          },\n          \"pluginVersion\": \"12.0.2\",\n          \"targets\": [\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"PBFA97CFB590B2093\"\n              },\n              \"editorMode\": \"code\",\n              \"expr\": \"increase(libp2p_rpc_requests_sent_total{instance=~\\\"$system\\\", protocolId=~\\\"/eth2/beacon_chain/req/data_column_sidecars_by_root/\\\\\\\\d+/.*\\\"}[1m])\",\n              \"hide\": false,\n              \"legendFormat\": \"{{instance}} By Root (rpm)\",\n              \"range\": true,\n              \"refId\": \"A\"\n            },\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"PBFA97CFB590B2093\"\n              },\n              \"editorMode\": \"code\",\n              \"expr\": \"increase(libp2p_rpc_requests_sent_total{instance=~\\\"$system\\\", protocolId=~\\\"/eth2/beacon_chain/req/data_column_sidecars_by_range/\\\\\\\\d+/.*\\\"}[1m])\",\n              \"hide\": false,\n              \"instant\": false,\n              \"legendFormat\": \"{{instance}} By Range (rpm)\",\n              \"range\": true,\n              \"refId\": \"B\"\n            },\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"PBFA97CFB590B2093\"\n              },\n              \"editorMode\": \"code\",\n              \"expr\": \"avg_over_time(increase(libp2p_rpc_requests_sent_total{instance=~\\\"$system\\\", protocolId=~\\\"/eth2/beacon_chain/req/data_column_sidecars_by_root/\\\\\\\\d+/.*\\\"}[1m])[1h:])\",\n              \"hide\": false,\n              \"legendFormat\": \"{{instance}} By Root - Moving Average (1h)\",\n              \"range\": true,\n              \"refId\": \"C\"\n            },\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"PBFA97CFB590B2093\"\n              },\n              \"editorMode\": \"code\",\n              \"expr\": \"avg_over_time(increase(libp2p_rpc_requests_sent_total{instance=~\\\"$system\\\", protocolId=~\\\"/eth2/beacon_chain/req/data_column_sidecars_by_range/\\\\\\\\d+/.*\\\"}[1m])[1h:])\",\n              \"hide\": false,\n              \"instant\": false,\n              \"legendFormat\": \"{{instance}} By Range  - Moving Average (1h)\",\n              \"range\": true,\n              \"refId\": \"D\"\n            }\n          ],\n          \"title\": \"RPC - data_column_sidecars_by_[root|range]\",\n          \"type\": \"timeseries\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"fieldConfig\": {\n            \"defaults\": {\n              \"color\": {\n                \"mode\": \"palette-classic\"\n              },\n              \"custom\": {\n                \"axisBorderShow\": false,\n                \"axisCenteredZero\": false,\n                \"axisColorMode\": \"text\",\n                \"axisLabel\": \"\",\n                \"axisPlacement\": \"auto\",\n                \"barAlignment\": 0,\n                \"barWidthFactor\": 0.6,\n                \"drawStyle\": \"line\",\n                \"fillOpacity\": 0,\n                \"gradientMode\": \"none\",\n                \"hideFrom\": {\n                  \"legend\": false,\n                  \"tooltip\": false,\n                  \"viz\": false\n                },\n                \"insertNulls\": false,\n                \"lineInterpolation\": \"linear\",\n                \"lineWidth\": 1,\n                \"pointSize\": 5,\n                \"scaleDistribution\": {\n                  \"type\": \"linear\"\n                },\n                \"showPoints\": \"auto\",\n                \"spanNulls\": false,\n                \"stacking\": {\n                  \"group\": \"A\",\n                  \"mode\": \"none\"\n                },\n                \"thresholdsStyle\": {\n                  \"mode\": \"area\"\n                }\n              },\n              \"mappings\": [],\n              \"thresholds\": {\n                \"mode\": \"absolute\",\n                \"steps\": [\n                  {\n                    \"color\": \"green\"\n                  },\n                  {\n                    \"color\": \"red\",\n                    \"value\": 0.05\n                  }\n                ]\n              },\n              \"unit\": \"percentunit\"\n            },\n            \"overrides\": []\n          },\n          \"gridPos\": {\n            \"h\": 8,\n            \"w\": 12,\n            \"x\": 12,\n            \"y\": 156\n          },\n          \"id\": 170,\n          \"options\": {\n            \"legend\": {\n              \"calcs\": [],\n              \"displayMode\": \"list\",\n              \"placement\": \"bottom\",\n              \"showLegend\": true\n            },\n            \"tooltip\": {\n              \"hideZeros\": false,\n              \"mode\": \"single\",\n              \"sort\": \"none\"\n            }\n          },\n          \"pluginVersion\": \"12.0.2\",\n          \"targets\": [\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"PBFA97CFB590B2093\"\n              },\n              \"editorMode\": \"code\",\n              \"expr\": \"rate(libp2p_rpc_requests_failed_total{instance=~\\\"$system\\\"}[$__rate_interval]) / rate(libp2p_rpc_requests_total{instance=~\\\"$system\\\"}[$__rate_interval])\",\n              \"legendFormat\": \"__auto\",\n              \"range\": true,\n              \"refId\": \"A\"\n            }\n          ],\n          \"title\": \"RPC - Submitted Requests Failure Rate\",\n          \"type\": \"timeseries\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"description\": \"Number of engine_getBlobsV2 requests received per minute.\",\n          \"fieldConfig\": {\n            \"defaults\": {\n              \"color\": {\n                \"mode\": \"palette-classic\"\n              },\n              \"custom\": {\n                \"axisBorderShow\": false,\n                \"axisCenteredZero\": false,\n                \"axisColorMode\": \"text\",\n                \"axisLabel\": \"\",\n                \"axisPlacement\": \"auto\",\n                \"barAlignment\": 0,\n                \"barWidthFactor\": 0.6,\n                \"drawStyle\": \"line\",\n                \"fillOpacity\": 0,\n                \"gradientMode\": \"none\",\n                \"hideFrom\": {\n                  \"legend\": false,\n                  \"tooltip\": false,\n                  \"viz\": false\n                },\n                \"insertNulls\": false,\n                \"lineInterpolation\": \"smooth\",\n                \"lineStyle\": {\n                  \"fill\": \"solid\"\n                },\n                \"lineWidth\": 1,\n                \"pointSize\": 5,\n                \"scaleDistribution\": {\n                  \"type\": \"linear\"\n                },\n                \"showPoints\": \"never\",\n                \"spanNulls\": false,\n                \"stacking\": {\n                  \"group\": \"A\",\n                  \"mode\": \"none\"\n                },\n                \"thresholdsStyle\": {\n                  \"mode\": \"off\"\n                }\n              },\n              \"fieldMinMax\": false,\n              \"mappings\": [],\n              \"min\": 0,\n              \"thresholds\": {\n                \"mode\": \"absolute\",\n                \"steps\": [\n                  {\n                    \"color\": \"green\"\n                  }\n                ]\n              },\n              \"unit\": \"reqpm\"\n            },\n            \"overrides\": [\n              {\n                \"matcher\": {\n                  \"id\": \"byRegexp\",\n                  \"options\": \"/.rpm*/\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"custom.lineStyle\",\n                    \"value\": {\n                      \"dash\": [\n                        10,\n                        10\n                      ],\n                      \"fill\": \"dash\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byRegexp\",\n                  \"options\": \"/.*Moving Average \\\\(1h\\\\)/\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"custom.lineWidth\",\n                    \"value\": 2\n                  }\n                ]\n              }\n            ]\n          },\n          \"gridPos\": {\n            \"h\": 8,\n            \"w\": 8,\n            \"x\": 0,\n            \"y\": 164\n          },\n          \"id\": 159,\n          \"options\": {\n            \"legend\": {\n              \"calcs\": [],\n              \"displayMode\": \"list\",\n              \"placement\": \"bottom\",\n              \"showLegend\": true\n            },\n            \"tooltip\": {\n              \"hideZeros\": false,\n              \"mode\": \"single\",\n              \"sort\": \"none\"\n            }\n          },\n          \"pluginVersion\": \"12.0.2\",\n          \"targets\": [\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"PBFA97CFB590B2093\"\n              },\n              \"disableTextWrap\": false,\n              \"editorMode\": \"code\",\n              \"exemplar\": false,\n              \"expr\": \"increase(beacon_engine_getBlobsV2_requests_total{instance=~\\\"$system\\\"}[1m])\",\n              \"fullMetaSearch\": false,\n              \"hide\": false,\n              \"includeNullMetadata\": false,\n              \"instant\": false,\n              \"interval\": \"\",\n              \"legendFormat\": \"{{instance}} rpm\",\n              \"range\": true,\n              \"refId\": \"A\",\n              \"useBackend\": false\n            },\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"PBFA97CFB590B2093\"\n              },\n              \"disableTextWrap\": false,\n              \"editorMode\": \"code\",\n              \"expr\": \"avg_over_time(increase(beacon_engine_getBlobsV2_requests_total{instance=~\\\"$system\\\"}[1m])[1h:])\",\n              \"fullMetaSearch\": false,\n              \"hide\": false,\n              \"includeNullMetadata\": false,\n              \"interval\": \"\",\n              \"legendFormat\": \"{{instance}} Moving Average (1h)\",\n              \"range\": true,\n              \"refId\": \"B\",\n              \"useBackend\": false\n            }\n          ],\n          \"title\": \"EL - engine_getBlobsV2 (requests/minute)\",\n          \"type\": \"timeseries\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"description\": \"Rate of engine_getBlobsV2 requests that have failed. \\n\\n\\nThe number of failed requests corresponds to the difference between the number of requests and the number of successful responses received.\",\n          \"fieldConfig\": {\n            \"defaults\": {\n              \"color\": {\n                \"mode\": \"palette-classic\"\n              },\n              \"custom\": {\n                \"axisBorderShow\": false,\n                \"axisCenteredZero\": false,\n                \"axisColorMode\": \"text\",\n                \"axisLabel\": \"\",\n                \"axisPlacement\": \"auto\",\n                \"barAlignment\": 0,\n                \"barWidthFactor\": 0.6,\n                \"drawStyle\": \"line\",\n                \"fillOpacity\": 0,\n                \"gradientMode\": \"none\",\n                \"hideFrom\": {\n                  \"legend\": false,\n                  \"tooltip\": false,\n                  \"viz\": false\n                },\n                \"insertNulls\": false,\n                \"lineInterpolation\": \"linear\",\n                \"lineStyle\": {\n                  \"fill\": \"solid\"\n                },\n                \"lineWidth\": 1,\n                \"pointSize\": 5,\n                \"scaleDistribution\": {\n                  \"type\": \"linear\"\n                },\n                \"showPoints\": \"never\",\n                \"spanNulls\": true,\n                \"stacking\": {\n                  \"group\": \"A\",\n                  \"mode\": \"none\"\n                },\n                \"thresholdsStyle\": {\n                  \"mode\": \"area\"\n                }\n              },\n              \"mappings\": [],\n              \"min\": 0,\n              \"thresholds\": {\n                \"mode\": \"absolute\",\n                \"steps\": [\n                  {\n                    \"color\": \"green\"\n                  },\n                  {\n                    \"color\": \"red\",\n                    \"value\": 0.05\n                  }\n                ]\n              },\n              \"unit\": \"percentunit\"\n            },\n            \"overrides\": []\n          },\n          \"gridPos\": {\n            \"h\": 8,\n            \"w\": 8,\n            \"x\": 8,\n            \"y\": 164\n          },\n          \"id\": 168,\n          \"options\": {\n            \"legend\": {\n              \"calcs\": [],\n              \"displayMode\": \"list\",\n              \"placement\": \"bottom\",\n              \"showLegend\": true\n            },\n            \"tooltip\": {\n              \"hideZeros\": false,\n              \"mode\": \"single\",\n              \"sort\": \"none\"\n            }\n          },\n          \"pluginVersion\": \"12.0.2\",\n          \"targets\": [\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"PBFA97CFB590B2093\"\n              },\n              \"disableTextWrap\": false,\n              \"editorMode\": \"code\",\n              \"expr\": \"(rate(beacon_engine_getBlobsV2_requests_total{instance=~\\\"$system\\\"}[1m]) - rate(beacon_engine_getBlobsV2_responses_total{instance=~\\\"$system\\\"}[1m])) / rate(beacon_engine_getBlobsV2_requests_total{instance=~\\\"$system\\\"}[1m])\",\n              \"fullMetaSearch\": false,\n              \"hide\": false,\n              \"includeNullMetadata\": true,\n              \"instant\": false,\n              \"legendFormat\": \"{{instance}}\",\n              \"range\": true,\n              \"refId\": \"A\",\n              \"useBackend\": false\n            }\n          ],\n          \"title\": \"EL - engine_getBlobsV2 Failure Rate\",\n          \"type\": \"timeseries\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"PBFA97CFB590B2093\"\n          },\n          \"description\": \"\",\n          \"fieldConfig\": {\n            \"defaults\": {\n              \"color\": {\n                \"mode\": \"palette-classic\"\n              },\n              \"custom\": {\n                \"axisBorderShow\": false,\n                \"axisCenteredZero\": false,\n                \"axisColorMode\": \"text\",\n                \"axisLabel\": \"\",\n                \"axisPlacement\": \"auto\",\n                \"barAlignment\": 0,\n                \"barWidthFactor\": 0.6,\n                \"drawStyle\": \"line\",\n                \"fillOpacity\": 0,\n                \"gradientMode\": \"none\",\n                \"hideFrom\": {\n                  \"legend\": false,\n                  \"tooltip\": false,\n                  \"viz\": false\n                },\n                \"insertNulls\": false,\n                \"lineInterpolation\": \"smooth\",\n                \"lineStyle\": {\n                  \"fill\": \"solid\"\n                },\n                \"lineWidth\": 1,\n                \"pointSize\": 5,\n                \"scaleDistribution\": {\n                  \"type\": \"linear\"\n                },\n                \"showPoints\": \"never\",\n                \"spanNulls\": true,\n                \"stacking\": {\n                  \"group\": \"A\",\n                  \"mode\": \"none\"\n                },\n                \"thresholdsStyle\": {\n                  \"mode\": \"off\"\n                }\n              },\n              \"fieldMinMax\": false,\n              \"mappings\": [],\n              \"min\": 0,\n              \"thresholds\": {\n                \"mode\": \"absolute\",\n                \"steps\": [\n                  {\n                    \"color\": \"green\"\n                  }\n                ]\n              },\n              \"unit\": \"s\"\n            },\n            \"overrides\": [\n              {\n                \"matcher\": {\n                  \"id\": \"byRegexp\",\n                  \"options\": \"/.*Moving Average \\\\(1h\\\\)/\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"custom.lineWidth\",\n                    \"value\": 2\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byRegexp\",\n                  \"options\": \"/.*avg req time/\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"custom.lineStyle\",\n                    \"value\": {\n                      \"dash\": [\n                        10,\n                        10\n                      ],\n                      \"fill\": \"dash\"\n                    }\n                  }\n                ]\n              }\n            ]\n          },\n          \"gridPos\": {\n            \"h\": 8,\n            \"w\": 8,\n            \"x\": 16,\n            \"y\": 164\n          },\n          \"id\": 160,\n          \"options\": {\n            \"legend\": {\n              \"calcs\": [],\n              \"displayMode\": \"list\",\n              \"placement\": \"bottom\",\n              \"showLegend\": true\n            },\n            \"tooltip\": {\n              \"hideZeros\": false,\n              \"mode\": \"single\",\n              \"sort\": \"none\"\n            }\n          },\n          \"pluginVersion\": \"12.0.2\",\n          \"targets\": [\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"PBFA97CFB590B2093\"\n              },\n              \"disableTextWrap\": false,\n              \"editorMode\": \"code\",\n              \"expr\": \"rate(beacon_engine_getBlobsV2_request_duration_seconds_sum{instance=~\\\"$system\\\"}[1m]) / rate(beacon_engine_getBlobsV2_request_duration_seconds_count{instance=~\\\"$system\\\"}[1m])\",\n              \"fullMetaSearch\": false,\n              \"hide\": false,\n              \"includeNullMetadata\": true,\n              \"instant\": false,\n              \"legendFormat\": \"{{instance}} avg req time\",\n              \"range\": true,\n              \"refId\": \"D\",\n              \"useBackend\": false\n            },\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"PBFA97CFB590B2093\"\n              },\n              \"editorMode\": \"code\",\n              \"expr\": \"avg_over_time((rate(beacon_engine_getBlobsV2_request_duration_seconds_sum{instance=~\\\"$system\\\"}[1m])/rate(beacon_engine_getBlobsV2_request_duration_seconds_count{instance=~\\\"$system\\\"}[1m]))[1h:])\",\n              \"hide\": false,\n              \"instant\": false,\n              \"legendFormat\": \"{{instance}} Moving Average (1h)\",\n              \"range\": true,\n              \"refId\": \"G\"\n            }\n          ],\n          \"title\": \"EL - engine_getBlobsV2 Request Duration\",\n          \"type\": \"timeseries\"\n        }\n      ],\n      \"title\": \"PeerDAS\",\n      \"type\": \"row\"\n    }\n  ],\n  \"refresh\": \"30s\",\n  \"schemaVersion\": 41,\n  \"tags\": [\n    \"teku\",\n    \"ethereum\",\n    \"eth2.0\"\n  ],\n  \"templating\": {\n    \"list\": [\n      {\n        \"current\": {},\n        \"datasource\": {\n          \"type\": \"prometheus\",\n          \"uid\": \"PBFA97CFB590B2093\"\n        },\n        \"definition\": \"label_values({client_name=\\\"teku\\\"}, instance)\",\n        \"includeAll\": true,\n        \"label\": \"System\",\n        \"multi\": true,\n        \"name\": \"system\",\n        \"options\": [],\n        \"query\": {\n          \"query\": \"label_values({client_name=\\\"teku\\\"}, instance)\",\n          \"refId\": \"StandardVariableQuery\"\n        },\n        \"refresh\": 2,\n        \"regex\": \"\",\n        \"sort\": 1,\n        \"type\": \"query\"\n      }\n    ]\n  },\n  \"time\": {\n    \"from\": \"now-15m\",\n    \"to\": \"now\"\n  },\n  \"timepicker\": {},\n  \"timezone\": \"\",\n  \"title\": \"Teku - Detailed\",\n  \"uid\": \"G_GUWeJ4z\",\n  \"version\": 120,\n  \"weekStart\": \"\",\n  \"gnetId\": 16737\n}"
  },
  {
    "path": "static_files/grafana-config/dashboards/vero-detailed.json",
    "content": "{\n  \"annotations\": {\n    \"list\": [\n      {\n        \"builtIn\": 1,\n        \"datasource\": {\n          \"type\": \"grafana\",\n          \"uid\": \"-- Grafana --\"\n        },\n        \"enable\": true,\n        \"hide\": true,\n        \"iconColor\": \"rgba(0, 211, 255, 1)\",\n        \"name\": \"Annotations & Alerts\",\n        \"type\": \"dashboard\"\n      }\n    ]\n  },\n  \"editable\": true,\n  \"fiscalYearStartMonth\": 0,\n  \"graphTooltip\": 1,\n  \"id\": 39,\n  \"links\": [],\n  \"liveNow\": false,\n  \"panels\": [\n    {\n      \"collapsed\": false,\n      \"gridPos\": {\n        \"h\": 1,\n        \"w\": 24,\n        \"x\": 0,\n        \"y\": 0\n      },\n      \"id\": 12,\n      \"panels\": [],\n      \"title\": \"Overview\",\n      \"type\": \"row\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"${datasource}\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"thresholds\"\n          },\n          \"mappings\": [],\n          \"min\": 0,\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\",\n                \"value\": null\n              }\n            ]\n          }\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 4,\n        \"w\": 4,\n        \"x\": 0,\n        \"y\": 1\n      },\n      \"id\": 5,\n      \"options\": {\n        \"colorMode\": \"value\",\n        \"graphMode\": \"area\",\n        \"justifyMode\": \"auto\",\n        \"orientation\": \"auto\",\n        \"percentChangeColorMode\": \"standard\",\n        \"reduceOptions\": {\n          \"calcs\": [\n            \"lastNotNull\"\n          ],\n          \"fields\": \"\",\n          \"values\": false\n        },\n        \"showPercentChange\": false,\n        \"textMode\": \"auto\",\n        \"wideLayout\": true\n      },\n      \"pluginVersion\": \"11.1.1\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"${datasource}\"\n          },\n          \"editorMode\": \"code\",\n          \"expr\": \"round(increase(vc_published_blocks_total{job=\\\"$job\\\"}[1h]))\",\n          \"instant\": false,\n          \"legendFormat\": \"__auto\",\n          \"range\": true,\n          \"refId\": \"A\"\n        }\n      ],\n      \"title\": \"Published blocks [1h]\",\n      \"type\": \"stat\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"${datasource}\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"thresholds\"\n          },\n          \"mappings\": [],\n          \"min\": 0,\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\",\n                \"value\": null\n              }\n            ]\n          }\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 4,\n        \"w\": 5,\n        \"x\": 4,\n        \"y\": 1\n      },\n      \"id\": 4,\n      \"options\": {\n        \"colorMode\": \"value\",\n        \"graphMode\": \"area\",\n        \"justifyMode\": \"auto\",\n        \"orientation\": \"auto\",\n        \"percentChangeColorMode\": \"standard\",\n        \"reduceOptions\": {\n          \"calcs\": [\n            \"lastNotNull\"\n          ],\n          \"fields\": \"\",\n          \"values\": false\n        },\n        \"showPercentChange\": false,\n        \"textMode\": \"auto\",\n        \"wideLayout\": true\n      },\n      \"pluginVersion\": \"11.1.1\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"${datasource}\"\n          },\n          \"editorMode\": \"code\",\n          \"exemplar\": false,\n          \"expr\": \"round(increase(vc_published_attestations_total{job=\\\"$job\\\"}[1h]))\",\n          \"instant\": false,\n          \"legendFormat\": \"__auto\",\n          \"range\": true,\n          \"refId\": \"A\"\n        }\n      ],\n      \"title\": \"Published attestations [1h]\",\n      \"type\": \"stat\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"${datasource}\"\n      },\n      \"description\": \"\",\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"thresholds\"\n          },\n          \"mappings\": [],\n          \"min\": 0,\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\",\n                \"value\": null\n              }\n            ]\n          }\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 4,\n        \"w\": 5,\n        \"x\": 9,\n        \"y\": 1\n      },\n      \"id\": 8,\n      \"options\": {\n        \"colorMode\": \"value\",\n        \"graphMode\": \"area\",\n        \"justifyMode\": \"auto\",\n        \"orientation\": \"auto\",\n        \"percentChangeColorMode\": \"standard\",\n        \"reduceOptions\": {\n          \"calcs\": [\n            \"lastNotNull\"\n          ],\n          \"fields\": \"\",\n          \"values\": false\n        },\n        \"showPercentChange\": false,\n        \"textMode\": \"auto\",\n        \"wideLayout\": true\n      },\n      \"pluginVersion\": \"11.1.1\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"${datasource}\"\n          },\n          \"editorMode\": \"code\",\n          \"expr\": \"round(increase(vc_published_sync_committee_messages_total{job=\\\"$job\\\"}[1h]))\",\n          \"instant\": false,\n          \"legendFormat\": \"__auto\",\n          \"range\": true,\n          \"refId\": \"A\"\n        }\n      ],\n      \"title\": \"Published sync messages [1h]\",\n      \"type\": \"stat\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"${datasource}\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"thresholds\"\n          },\n          \"mappings\": [],\n          \"min\": 0,\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\",\n                \"value\": null\n              }\n            ]\n          }\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 4,\n        \"w\": 5,\n        \"x\": 14,\n        \"y\": 1\n      },\n      \"id\": 9,\n      \"options\": {\n        \"colorMode\": \"value\",\n        \"graphMode\": \"area\",\n        \"justifyMode\": \"auto\",\n        \"orientation\": \"auto\",\n        \"percentChangeColorMode\": \"standard\",\n        \"reduceOptions\": {\n          \"calcs\": [\n            \"lastNotNull\"\n          ],\n          \"fields\": \"\",\n          \"values\": false\n        },\n        \"showPercentChange\": false,\n        \"textMode\": \"auto\",\n        \"wideLayout\": true\n      },\n      \"pluginVersion\": \"11.1.1\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"${datasource}\"\n          },\n          \"editorMode\": \"code\",\n          \"expr\": \"round(increase(vc_published_aggregate_attestations_total{job=\\\"$job\\\"}[1h]))\",\n          \"instant\": false,\n          \"legendFormat\": \"__auto\",\n          \"range\": true,\n          \"refId\": \"A\"\n        }\n      ],\n      \"title\": \"Published aggregate attestations [1h]\",\n      \"type\": \"stat\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"${datasource}\"\n      },\n      \"description\": \"\",\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"thresholds\"\n          },\n          \"mappings\": [],\n          \"min\": 0,\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\",\n                \"value\": null\n              }\n            ]\n          }\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 4,\n        \"w\": 5,\n        \"x\": 19,\n        \"y\": 1\n      },\n      \"id\": 11,\n      \"options\": {\n        \"colorMode\": \"value\",\n        \"graphMode\": \"area\",\n        \"justifyMode\": \"auto\",\n        \"orientation\": \"auto\",\n        \"percentChangeColorMode\": \"standard\",\n        \"reduceOptions\": {\n          \"calcs\": [\n            \"lastNotNull\"\n          ],\n          \"fields\": \"\",\n          \"values\": false\n        },\n        \"showPercentChange\": false,\n        \"textMode\": \"auto\",\n        \"wideLayout\": true\n      },\n      \"pluginVersion\": \"11.1.1\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"${datasource}\"\n          },\n          \"editorMode\": \"code\",\n          \"expr\": \"round(increase(vc_published_sync_committee_contributions_total{job=\\\"$job\\\"}[1h]))\",\n          \"instant\": false,\n          \"legendFormat\": \"__auto\",\n          \"range\": true,\n          \"refId\": \"A\"\n        }\n      ],\n      \"title\": \"Published sync contributions [1h]\",\n      \"type\": \"stat\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"${datasource}\"\n      },\n      \"description\": \"\",\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"palette-classic\"\n          },\n          \"custom\": {\n            \"axisBorderShow\": false,\n            \"axisCenteredZero\": false,\n            \"axisColorMode\": \"text\",\n            \"axisLabel\": \"\",\n            \"axisPlacement\": \"auto\",\n            \"barAlignment\": 0,\n            \"drawStyle\": \"line\",\n            \"fillOpacity\": 0,\n            \"gradientMode\": \"none\",\n            \"hideFrom\": {\n              \"legend\": false,\n              \"tooltip\": false,\n              \"viz\": false\n            },\n            \"insertNulls\": false,\n            \"lineInterpolation\": \"linear\",\n            \"lineWidth\": 1,\n            \"pointSize\": 5,\n            \"scaleDistribution\": {\n              \"type\": \"linear\"\n            },\n            \"showPoints\": \"auto\",\n            \"spanNulls\": false,\n            \"stacking\": {\n              \"group\": \"A\",\n              \"mode\": \"none\"\n            },\n            \"thresholdsStyle\": {\n              \"mode\": \"off\"\n            }\n          },\n          \"mappings\": [],\n          \"min\": 0,\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\",\n                \"value\": null\n              }\n            ]\n          },\n          \"unit\": \"s\"\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 6,\n        \"w\": 9,\n        \"x\": 0,\n        \"y\": 5\n      },\n      \"id\": 34,\n      \"maxDataPoints\": 50,\n      \"options\": {\n        \"legend\": {\n          \"calcs\": [],\n          \"displayMode\": \"list\",\n          \"placement\": \"bottom\",\n          \"showLegend\": false\n        },\n        \"tooltip\": {\n          \"mode\": \"single\",\n          \"sort\": \"none\"\n        }\n      },\n      \"pluginVersion\": \"11.1.1\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"${datasource}\"\n          },\n          \"editorMode\": \"code\",\n          \"exemplar\": false,\n          \"expr\": \"histogram_quantile(0.99, rate(vc_attestation_consensus_time_bucket{job=\\\"$job\\\"}[$__interval]))\",\n          \"format\": \"time_series\",\n          \"hide\": false,\n          \"instant\": false,\n          \"legendFormat\": \"99% quantile\",\n          \"range\": true,\n          \"refId\": \"99% quantile\"\n        }\n      ],\n      \"title\": \"Attestation Consensus Time [$__interval] - 99% quantile\",\n      \"type\": \"timeseries\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"${datasource}\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"thresholds\"\n          },\n          \"mappings\": [],\n          \"min\": 0,\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\",\n                \"value\": null\n              }\n            ]\n          }\n        },\n        \"overrides\": [\n          {\n            \"matcher\": {\n              \"id\": \"byName\",\n              \"options\": \"pending\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"color\",\n                \"value\": {\n                  \"fixedColor\": \"yellow\",\n                  \"mode\": \"fixed\"\n                }\n              }\n            ]\n          }\n        ]\n      },\n      \"gridPos\": {\n        \"h\": 6,\n        \"w\": 5,\n        \"x\": 9,\n        \"y\": 5\n      },\n      \"id\": 16,\n      \"options\": {\n        \"colorMode\": \"value\",\n        \"graphMode\": \"area\",\n        \"justifyMode\": \"auto\",\n        \"orientation\": \"horizontal\",\n        \"percentChangeColorMode\": \"standard\",\n        \"reduceOptions\": {\n          \"calcs\": [\n            \"last\"\n          ],\n          \"fields\": \"\",\n          \"values\": false\n        },\n        \"showPercentChange\": false,\n        \"textMode\": \"auto\",\n        \"wideLayout\": true\n      },\n      \"pluginVersion\": \"11.1.1\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"${datasource}\"\n          },\n          \"editorMode\": \"code\",\n          \"exemplar\": false,\n          \"expr\": \"validator_status{job=\\\"$job\\\", status!=\\\"other\\\"}\",\n          \"instant\": false,\n          \"legendFormat\": \"{{status}}\",\n          \"range\": true,\n          \"refId\": \"A\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"${datasource}\"\n          },\n          \"editorMode\": \"code\",\n          \"exemplar\": false,\n          \"expr\": \"validator_status{job=\\\"$job\\\", status=\\\"other\\\"}\",\n          \"hide\": false,\n          \"instant\": false,\n          \"legendFormat\": \"{{status}}\",\n          \"range\": true,\n          \"refId\": \"B\"\n        }\n      ],\n      \"title\": \"Validators\",\n      \"type\": \"stat\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"${datasource}\"\n      },\n      \"description\": \"\",\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"thresholds\"\n          },\n          \"mappings\": [],\n          \"min\": 0,\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\",\n                \"value\": null\n              },\n              {\n                \"color\": \"red\",\n                \"value\": 1\n              }\n            ]\n          },\n          \"unit\": \"none\"\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 3,\n        \"w\": 5,\n        \"x\": 14,\n        \"y\": 5\n      },\n      \"id\": 35,\n      \"options\": {\n        \"colorMode\": \"value\",\n        \"graphMode\": \"area\",\n        \"justifyMode\": \"auto\",\n        \"orientation\": \"auto\",\n        \"percentChangeColorMode\": \"standard\",\n        \"reduceOptions\": {\n          \"calcs\": [\n            \"last\"\n          ],\n          \"fields\": \"\",\n          \"values\": false\n        },\n        \"showPercentChange\": false,\n        \"textMode\": \"auto\",\n        \"wideLayout\": true\n      },\n      \"pluginVersion\": \"11.1.1\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"${datasource}\"\n          },\n          \"editorMode\": \"code\",\n          \"exemplar\": false,\n          \"expr\": \"round(increase(vc_attestation_consensus_failures_total{job=\\\"$job\\\"}[1h]))\",\n          \"format\": \"time_series\",\n          \"instant\": false,\n          \"legendFormat\": \"{{ job }}\",\n          \"range\": true,\n          \"refId\": \"A\"\n        }\n      ],\n      \"title\": \"Attestation Consensus Failures [1h]\",\n      \"type\": \"stat\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"${datasource}\"\n      },\n      \"description\": \"\",\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"thresholds\"\n          },\n          \"mappings\": [\n            {\n              \"options\": {\n                \"0\": {\n                  \"color\": \"green\",\n                  \"index\": 0,\n                  \"text\": \"No slashing detected, performing duties ✅\"\n                },\n                \"1\": {\n                  \"index\": 1,\n                  \"text\": \"Validator(s) slashed, duties stopped 🛑\"\n                }\n              },\n              \"type\": \"value\"\n            }\n          ],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\",\n                \"value\": null\n              },\n              {\n                \"color\": \"red\",\n                \"value\": 0\n              }\n            ]\n          }\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 3,\n        \"w\": 5,\n        \"x\": 19,\n        \"y\": 5\n      },\n      \"id\": 27,\n      \"options\": {\n        \"colorMode\": \"value\",\n        \"graphMode\": \"area\",\n        \"justifyMode\": \"auto\",\n        \"orientation\": \"auto\",\n        \"percentChangeColorMode\": \"standard\",\n        \"reduceOptions\": {\n          \"calcs\": [\n            \"last\"\n          ],\n          \"fields\": \"\",\n          \"values\": false\n        },\n        \"showPercentChange\": false,\n        \"textMode\": \"auto\",\n        \"wideLayout\": true\n      },\n      \"pluginVersion\": \"11.1.1\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"${datasource}\"\n          },\n          \"editorMode\": \"code\",\n          \"exemplar\": false,\n          \"expr\": \"slashing_detected{job=\\\"$job\\\"}\",\n          \"instant\": true,\n          \"legendFormat\": \"__auto\",\n          \"range\": false,\n          \"refId\": \"A\"\n        }\n      ],\n      \"title\": \"Slashing Detection Status\",\n      \"type\": \"stat\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"${datasource}\"\n      },\n      \"description\": \"\",\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"thresholds\"\n          },\n          \"mappings\": [],\n          \"min\": 0,\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\",\n                \"value\": null\n              },\n              {\n                \"color\": \"red\",\n                \"value\": 1\n              }\n            ]\n          },\n          \"unit\": \"none\"\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 3,\n        \"w\": 5,\n        \"x\": 14,\n        \"y\": 8\n      },\n      \"id\": 37,\n      \"options\": {\n        \"colorMode\": \"value\",\n        \"graphMode\": \"area\",\n        \"justifyMode\": \"auto\",\n        \"orientation\": \"auto\",\n        \"percentChangeColorMode\": \"standard\",\n        \"reduceOptions\": {\n          \"calcs\": [\n            \"last\"\n          ],\n          \"fields\": \"\",\n          \"values\": false\n        },\n        \"showPercentChange\": false,\n        \"textMode\": \"auto\",\n        \"wideLayout\": true\n      },\n      \"pluginVersion\": \"11.1.1\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"${datasource}\"\n          },\n          \"editorMode\": \"code\",\n          \"exemplar\": false,\n          \"expr\": \"round(sum(increase(errors_total{job=\\\"$job\\\"}[1h])))\",\n          \"format\": \"time_series\",\n          \"instant\": false,\n          \"legendFormat\": \"{{ job }}\",\n          \"range\": true,\n          \"refId\": \"A\"\n        }\n      ],\n      \"title\": \"Errors [1h]\",\n      \"type\": \"stat\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"${datasource}\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"thresholds\"\n          },\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\",\n                \"value\": null\n              }\n            ]\n          }\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 3,\n        \"w\": 5,\n        \"x\": 19,\n        \"y\": 8\n      },\n      \"id\": 109,\n      \"options\": {\n        \"colorMode\": \"value\",\n        \"graphMode\": \"area\",\n        \"justifyMode\": \"auto\",\n        \"orientation\": \"auto\",\n        \"percentChangeColorMode\": \"standard\",\n        \"reduceOptions\": {\n          \"calcs\": [\n            \"last\"\n          ],\n          \"fields\": \"\",\n          \"values\": false\n        },\n        \"showPercentChange\": false,\n        \"textMode\": \"name\",\n        \"wideLayout\": true\n      },\n      \"pluginVersion\": \"11.1.1\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"${datasource}\"\n          },\n          \"editorMode\": \"code\",\n          \"exemplar\": false,\n          \"expr\": \"vero_info{job=~\\\"$job\\\"}\",\n          \"instant\": true,\n          \"legendFormat\": \"{{ version }}\",\n          \"range\": false,\n          \"refId\": \"A\"\n        }\n      ],\n      \"title\": \"Version\",\n      \"type\": \"stat\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"${datasource}\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"thresholds\"\n          },\n          \"custom\": {\n            \"fillOpacity\": 70,\n            \"hideFrom\": {\n              \"legend\": false,\n              \"tooltip\": false,\n              \"viz\": false\n            },\n            \"insertNulls\": false,\n            \"lineWidth\": 0,\n            \"spanNulls\": false\n          },\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"red\",\n                \"value\": null\n              },\n              {\n                \"color\": \"#EAB839\",\n                \"value\": 90\n              },\n              {\n                \"color\": \"green\",\n                \"value\": 100\n              }\n            ]\n          }\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 7,\n        \"w\": 24,\n        \"x\": 0,\n        \"y\": 11\n      },\n      \"id\": 53,\n      \"maxDataPoints\": 100,\n      \"options\": {\n        \"alignValue\": \"left\",\n        \"legend\": {\n          \"displayMode\": \"list\",\n          \"placement\": \"bottom\",\n          \"showLegend\": true\n        },\n        \"mergeValues\": true,\n        \"rowHeight\": 0.9,\n        \"showValue\": \"never\",\n        \"tooltip\": {\n          \"mode\": \"single\",\n          \"sort\": \"none\"\n        }\n      },\n      \"pluginVersion\": \"10.2.6\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"${datasource}\"\n          },\n          \"editorMode\": \"code\",\n          \"exemplar\": false,\n          \"expr\": \"beacon_node_score{job=\\\"$job\\\"}\",\n          \"instant\": false,\n          \"legendFormat\": \"{{ host }}\",\n          \"range\": true,\n          \"refId\": \"A\"\n        }\n      ],\n      \"title\": \"Beacon Node Score\",\n      \"type\": \"state-timeline\"\n    },\n    {\n      \"collapsed\": true,\n      \"gridPos\": {\n        \"h\": 1,\n        \"w\": 24,\n        \"x\": 0,\n        \"y\": 18\n      },\n      \"id\": 29,\n      \"panels\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"${datasource}\"\n          },\n          \"description\": \"\",\n          \"fieldConfig\": {\n            \"defaults\": {\n              \"color\": {\n                \"mode\": \"palette-classic\"\n              },\n              \"custom\": {\n                \"axisBorderShow\": false,\n                \"axisCenteredZero\": false,\n                \"axisColorMode\": \"text\",\n                \"axisLabel\": \"\",\n                \"axisPlacement\": \"auto\",\n                \"axisSoftMin\": 0,\n                \"barAlignment\": 0,\n                \"drawStyle\": \"line\",\n                \"fillOpacity\": 0,\n                \"gradientMode\": \"none\",\n                \"hideFrom\": {\n                  \"legend\": false,\n                  \"tooltip\": false,\n                  \"viz\": false\n                },\n                \"insertNulls\": false,\n                \"lineInterpolation\": \"linear\",\n                \"lineStyle\": {\n                  \"fill\": \"solid\"\n                },\n                \"lineWidth\": 1,\n                \"pointSize\": 5,\n                \"scaleDistribution\": {\n                  \"type\": \"linear\"\n                },\n                \"showPoints\": \"auto\",\n                \"spanNulls\": false,\n                \"stacking\": {\n                  \"group\": \"A\",\n                  \"mode\": \"none\"\n                },\n                \"thresholdsStyle\": {\n                  \"mode\": \"off\"\n                }\n              },\n              \"fieldMinMax\": false,\n              \"mappings\": [],\n              \"thresholds\": {\n                \"mode\": \"absolute\",\n                \"steps\": [\n                  {\n                    \"color\": \"green\"\n                  }\n                ]\n              },\n              \"unit\": \"s\"\n            },\n            \"overrides\": [\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"90% quantile\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"yellow\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"99% quantile\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"orange\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"100% quantile\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"red\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"50% quantile\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"blue\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"80% quantile\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"green\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              }\n            ]\n          },\n          \"gridPos\": {\n            \"h\": 7,\n            \"w\": 24,\n            \"x\": 0,\n            \"y\": 27\n          },\n          \"id\": 28,\n          \"options\": {\n            \"legend\": {\n              \"calcs\": [\n                \"mean\",\n                \"stdDev\"\n              ],\n              \"displayMode\": \"list\",\n              \"placement\": \"right\",\n              \"showLegend\": true\n            },\n            \"tooltip\": {\n              \"mode\": \"multi\",\n              \"sort\": \"none\"\n            }\n          },\n          \"pluginVersion\": \"11.1.1\",\n          \"targets\": [\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"${datasource}\"\n              },\n              \"editorMode\": \"code\",\n              \"expr\": \"histogram_quantile(0.5, rate(vc_attestation_consensus_time_bucket{job=\\\"$job\\\"}[$__rate_interval]))\",\n              \"hide\": false,\n              \"instant\": false,\n              \"legendFormat\": \"50% quantile\",\n              \"range\": true,\n              \"refId\": \"50% quantile\"\n            },\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"${datasource}\"\n              },\n              \"editorMode\": \"code\",\n              \"expr\": \"histogram_quantile(0.8, rate(vc_attestation_consensus_time_bucket{job=\\\"$job\\\"}[$__rate_interval]))\",\n              \"hide\": false,\n              \"instant\": false,\n              \"legendFormat\": \"80% quantile\",\n              \"range\": true,\n              \"refId\": \"80% quantile\"\n            },\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"${datasource}\"\n              },\n              \"editorMode\": \"code\",\n              \"expr\": \"histogram_quantile(0.9, rate(vc_attestation_consensus_time_bucket{job=\\\"$job\\\"}[$__rate_interval]))\",\n              \"hide\": false,\n              \"instant\": false,\n              \"legendFormat\": \"90% quantile\",\n              \"range\": true,\n              \"refId\": \"90% quantile\"\n            },\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"${datasource}\"\n              },\n              \"editorMode\": \"code\",\n              \"expr\": \"histogram_quantile(0.99, rate(vc_attestation_consensus_time_bucket{job=\\\"$job\\\"}[$__rate_interval]))\",\n              \"hide\": false,\n              \"instant\": false,\n              \"legendFormat\": \"99% quantile\",\n              \"range\": true,\n              \"refId\": \"99% quantile\"\n            },\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"${datasource}\"\n              },\n              \"editorMode\": \"code\",\n              \"expr\": \"histogram_quantile(1, rate(vc_attestation_consensus_time_bucket{job=\\\"$job\\\"}[$__rate_interval]))\",\n              \"hide\": false,\n              \"instant\": false,\n              \"legendFormat\": \"100% quantile\",\n              \"range\": true,\n              \"refId\": \"100% quantile\"\n            }\n          ],\n          \"title\": \"Attestation Consensus Time\",\n          \"type\": \"timeseries\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"${datasource}\"\n          },\n          \"description\": \"\",\n          \"fieldConfig\": {\n            \"defaults\": {\n              \"color\": {\n                \"fixedColor\": \"dark-green\",\n                \"mode\": \"fixed\"\n              },\n              \"decimals\": 2,\n              \"mappings\": [],\n              \"max\": 1,\n              \"min\": 0,\n              \"thresholds\": {\n                \"mode\": \"absolute\",\n                \"steps\": [\n                  {\n                    \"color\": \"red\"\n                  },\n                  {\n                    \"color\": \"orange\",\n                    \"value\": 0.5\n                  },\n                  {\n                    \"color\": \"yellow\",\n                    \"value\": 0.9\n                  },\n                  {\n                    \"color\": \"green\",\n                    \"value\": 1\n                  }\n                ]\n              },\n              \"unit\": \"percentunit\"\n            },\n            \"overrides\": []\n          },\n          \"gridPos\": {\n            \"h\": 8,\n            \"w\": 24,\n            \"x\": 0,\n            \"y\": 34\n          },\n          \"id\": 33,\n          \"maxDataPoints\": 50,\n          \"options\": {\n            \"displayMode\": \"basic\",\n            \"maxVizHeight\": 300,\n            \"minVizHeight\": 16,\n            \"minVizWidth\": 8,\n            \"namePlacement\": \"auto\",\n            \"orientation\": \"auto\",\n            \"reduceOptions\": {\n              \"calcs\": [\n                \"lastNotNull\"\n              ],\n              \"fields\": \"\",\n              \"values\": false\n            },\n            \"showUnfilled\": true,\n            \"sizing\": \"auto\",\n            \"text\": {},\n            \"valueMode\": \"color\"\n          },\n          \"pluginVersion\": \"11.1.1\",\n          \"targets\": [\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"${datasource}\"\n              },\n              \"editorMode\": \"code\",\n              \"exemplar\": false,\n              \"expr\": \"rate(vc_attestation_consensus_time_bucket{le!=\\\"+Inf\\\", job=\\\"$job\\\"}[$__range])\\n/ ignoring(le) group_left\\nrate(vc_attestation_consensus_time_bucket{le=\\\"+Inf\\\", job=\\\"$job\\\"}[$__range])\",\n              \"format\": \"time_series\",\n              \"instant\": true,\n              \"legendFormat\": \"{{ le }}s\",\n              \"range\": false,\n              \"refId\": \"A\"\n            }\n          ],\n          \"title\": \"Attestation Consensus Time\",\n          \"type\": \"bargauge\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"${datasource}\"\n          },\n          \"description\": \"\",\n          \"fieldConfig\": {\n            \"defaults\": {\n              \"custom\": {\n                \"hideFrom\": {\n                  \"legend\": false,\n                  \"tooltip\": false,\n                  \"viz\": false\n                },\n                \"scaleDistribution\": {\n                  \"type\": \"linear\"\n                }\n              }\n            },\n            \"overrides\": []\n          },\n          \"gridPos\": {\n            \"h\": 14,\n            \"w\": 24,\n            \"x\": 0,\n            \"y\": 42\n          },\n          \"id\": 19,\n          \"maxDataPoints\": 50,\n          \"options\": {\n            \"calculate\": false,\n            \"cellGap\": 1,\n            \"color\": {\n              \"exponent\": 0.5,\n              \"fill\": \"dark-orange\",\n              \"mode\": \"scheme\",\n              \"reverse\": false,\n              \"scale\": \"exponential\",\n              \"scheme\": \"Oranges\",\n              \"steps\": 64\n            },\n            \"exemplars\": {\n              \"color\": \"rgba(255,0,255,0.7)\"\n            },\n            \"filterValues\": {\n              \"le\": 1e-9\n            },\n            \"legend\": {\n              \"show\": true\n            },\n            \"rowsFrame\": {\n              \"layout\": \"auto\"\n            },\n            \"tooltip\": {\n              \"mode\": \"single\",\n              \"showColorScale\": false,\n              \"yHistogram\": false\n            },\n            \"yAxis\": {\n              \"axisPlacement\": \"left\",\n              \"reverse\": false\n            }\n          },\n          \"pluginVersion\": \"11.1.1\",\n          \"targets\": [\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"${datasource}\"\n              },\n              \"editorMode\": \"code\",\n              \"exemplar\": false,\n              \"expr\": \"sum(rate(vc_attestation_consensus_time_bucket{job=\\\"$job\\\"}[$__rate_interval])) by (le)\",\n              \"format\": \"heatmap\",\n              \"instant\": false,\n              \"legendFormat\": \"{{le}}\",\n              \"range\": true,\n              \"refId\": \"A\"\n            }\n          ],\n          \"title\": \"Attestation Consensus Time\",\n          \"type\": \"heatmap\"\n        }\n      ],\n      \"title\": \"Attestation Consensus\",\n      \"type\": \"row\"\n    },\n    {\n      \"collapsed\": true,\n      \"gridPos\": {\n        \"h\": 1,\n        \"w\": 24,\n        \"x\": 0,\n        \"y\": 19\n      },\n      \"id\": 14,\n      \"panels\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"${datasource}\"\n          },\n          \"description\": \"\",\n          \"fieldConfig\": {\n            \"defaults\": {\n              \"color\": {\n                \"fixedColor\": \"blue\",\n                \"mode\": \"fixed\",\n                \"seriesBy\": \"max\"\n              },\n              \"custom\": {\n                \"axisBorderShow\": false,\n                \"axisCenteredZero\": false,\n                \"axisColorMode\": \"text\",\n                \"axisLabel\": \"\",\n                \"axisPlacement\": \"auto\",\n                \"axisSoftMax\": 4,\n                \"axisSoftMin\": 0,\n                \"barAlignment\": 0,\n                \"drawStyle\": \"line\",\n                \"fillOpacity\": 0,\n                \"gradientMode\": \"none\",\n                \"hideFrom\": {\n                  \"legend\": false,\n                  \"tooltip\": false,\n                  \"viz\": false\n                },\n                \"insertNulls\": false,\n                \"lineInterpolation\": \"linear\",\n                \"lineWidth\": 1,\n                \"pointSize\": 5,\n                \"scaleDistribution\": {\n                  \"type\": \"linear\"\n                },\n                \"showPoints\": \"auto\",\n                \"spanNulls\": false,\n                \"stacking\": {\n                  \"group\": \"A\",\n                  \"mode\": \"none\"\n                },\n                \"thresholdsStyle\": {\n                  \"mode\": \"off\"\n                }\n              },\n              \"mappings\": [],\n              \"thresholds\": {\n                \"mode\": \"absolute\",\n                \"steps\": [\n                  {\n                    \"color\": \"green\"\n                  }\n                ]\n              },\n              \"unit\": \"s\"\n            },\n            \"overrides\": [\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"Mean\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"yellow\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"99% quantile\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"orange\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"Max (estimate) <=\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"red\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              }\n            ]\n          },\n          \"gridPos\": {\n            \"h\": 6,\n            \"w\": 4,\n            \"x\": 0,\n            \"y\": 3\n          },\n          \"id\": 230,\n          \"maxDataPoints\": 100,\n          \"options\": {\n            \"legend\": {\n              \"calcs\": [],\n              \"displayMode\": \"list\",\n              \"placement\": \"bottom\",\n              \"showLegend\": false\n            },\n            \"tooltip\": {\n              \"mode\": \"multi\",\n              \"sort\": \"none\"\n            }\n          },\n          \"pluginVersion\": \"10.2.6\",\n          \"targets\": [\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"${datasource}\"\n              },\n              \"editorMode\": \"code\",\n              \"expr\": \"rate(duty_start_time_sum{job=\\\"$job\\\", duty=\\\"block-proposal\\\"}[$__rate_interval])\\n/\\nrate(duty_start_time_count[$__rate_interval])\",\n              \"instant\": false,\n              \"legendFormat\": \"Mean\",\n              \"range\": true,\n              \"refId\": \"A\"\n            },\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"${datasource}\"\n              },\n              \"editorMode\": \"code\",\n              \"expr\": \"histogram_quantile(0.99, rate(duty_start_time_bucket{job=\\\"$job\\\", duty=\\\"block-proposal\\\"}[$__rate_interval]))\",\n              \"hide\": false,\n              \"instant\": false,\n              \"interval\": \"\",\n              \"legendFormat\": \"99% quantile\",\n              \"range\": true,\n              \"refId\": \"B\"\n            },\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"${datasource}\"\n              },\n              \"editorMode\": \"code\",\n              \"expr\": \"histogram_quantile(1, rate(duty_start_time_bucket{job=\\\"$job\\\", duty=\\\"block-proposal\\\"}[$__rate_interval]))\",\n              \"hide\": false,\n              \"instant\": false,\n              \"legendFormat\": \"Max (estimate) <=\",\n              \"range\": true,\n              \"refId\": \"C\"\n            }\n          ],\n          \"title\": \"block-proposal\",\n          \"type\": \"timeseries\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"${datasource}\"\n          },\n          \"description\": \"\",\n          \"fieldConfig\": {\n            \"defaults\": {\n              \"color\": {\n                \"fixedColor\": \"blue\",\n                \"mode\": \"fixed\",\n                \"seriesBy\": \"max\"\n              },\n              \"custom\": {\n                \"axisBorderShow\": false,\n                \"axisCenteredZero\": false,\n                \"axisColorMode\": \"text\",\n                \"axisLabel\": \"\",\n                \"axisPlacement\": \"auto\",\n                \"axisSoftMax\": 8,\n                \"axisSoftMin\": 0,\n                \"barAlignment\": 0,\n                \"drawStyle\": \"line\",\n                \"fillOpacity\": 0,\n                \"gradientMode\": \"none\",\n                \"hideFrom\": {\n                  \"legend\": false,\n                  \"tooltip\": false,\n                  \"viz\": false\n                },\n                \"insertNulls\": false,\n                \"lineInterpolation\": \"linear\",\n                \"lineWidth\": 1,\n                \"pointSize\": 5,\n                \"scaleDistribution\": {\n                  \"type\": \"linear\"\n                },\n                \"showPoints\": \"auto\",\n                \"spanNulls\": false,\n                \"stacking\": {\n                  \"group\": \"A\",\n                  \"mode\": \"none\"\n                },\n                \"thresholdsStyle\": {\n                  \"mode\": \"off\"\n                }\n              },\n              \"mappings\": [],\n              \"thresholds\": {\n                \"mode\": \"absolute\",\n                \"steps\": [\n                  {\n                    \"color\": \"green\"\n                  }\n                ]\n              },\n              \"unit\": \"s\"\n            },\n            \"overrides\": [\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"Mean\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"yellow\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"99% quantile\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"orange\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"Max (estimate) <=\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"red\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              }\n            ]\n          },\n          \"gridPos\": {\n            \"h\": 6,\n            \"w\": 5,\n            \"x\": 4,\n            \"y\": 3\n          },\n          \"id\": 214,\n          \"maxDataPoints\": 100,\n          \"options\": {\n            \"legend\": {\n              \"calcs\": [],\n              \"displayMode\": \"list\",\n              \"placement\": \"bottom\",\n              \"showLegend\": false\n            },\n            \"tooltip\": {\n              \"mode\": \"multi\",\n              \"sort\": \"none\"\n            }\n          },\n          \"pluginVersion\": \"10.2.6\",\n          \"targets\": [\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"${datasource}\"\n              },\n              \"editorMode\": \"code\",\n              \"expr\": \"rate(duty_start_time_sum{job=\\\"$job\\\", duty=\\\"attestation\\\"}[$__rate_interval])\\n/\\nrate(duty_start_time_count[$__rate_interval])\",\n              \"instant\": false,\n              \"legendFormat\": \"Mean\",\n              \"range\": true,\n              \"refId\": \"A\"\n            },\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"${datasource}\"\n              },\n              \"editorMode\": \"code\",\n              \"expr\": \"histogram_quantile(0.99, rate(duty_start_time_bucket{job=\\\"$job\\\", duty=\\\"attestation\\\"}[$__rate_interval]))\",\n              \"hide\": false,\n              \"instant\": false,\n              \"interval\": \"\",\n              \"legendFormat\": \"99% quantile\",\n              \"range\": true,\n              \"refId\": \"B\"\n            },\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"${datasource}\"\n              },\n              \"editorMode\": \"code\",\n              \"expr\": \"histogram_quantile(1, rate(duty_start_time_bucket{job=\\\"$job\\\", duty=\\\"attestation\\\"}[$__rate_interval]))\",\n              \"hide\": false,\n              \"instant\": false,\n              \"legendFormat\": \"Max (estimate) <=\",\n              \"range\": true,\n              \"refId\": \"C\"\n            }\n          ],\n          \"title\": \"attestation\",\n          \"type\": \"timeseries\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"${datasource}\"\n          },\n          \"description\": \"\",\n          \"fieldConfig\": {\n            \"defaults\": {\n              \"color\": {\n                \"fixedColor\": \"blue\",\n                \"mode\": \"fixed\",\n                \"seriesBy\": \"max\"\n              },\n              \"custom\": {\n                \"axisBorderShow\": false,\n                \"axisCenteredZero\": false,\n                \"axisColorMode\": \"text\",\n                \"axisLabel\": \"\",\n                \"axisPlacement\": \"auto\",\n                \"axisSoftMax\": 8,\n                \"axisSoftMin\": 0,\n                \"barAlignment\": 0,\n                \"drawStyle\": \"line\",\n                \"fillOpacity\": 0,\n                \"gradientMode\": \"none\",\n                \"hideFrom\": {\n                  \"legend\": false,\n                  \"tooltip\": false,\n                  \"viz\": false\n                },\n                \"insertNulls\": false,\n                \"lineInterpolation\": \"linear\",\n                \"lineWidth\": 1,\n                \"pointSize\": 5,\n                \"scaleDistribution\": {\n                  \"type\": \"linear\"\n                },\n                \"showPoints\": \"auto\",\n                \"spanNulls\": false,\n                \"stacking\": {\n                  \"group\": \"A\",\n                  \"mode\": \"none\"\n                },\n                \"thresholdsStyle\": {\n                  \"mode\": \"off\"\n                }\n              },\n              \"mappings\": [],\n              \"thresholds\": {\n                \"mode\": \"absolute\",\n                \"steps\": [\n                  {\n                    \"color\": \"green\"\n                  }\n                ]\n              },\n              \"unit\": \"s\"\n            },\n            \"overrides\": [\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"Mean\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"yellow\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"99% quantile\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"orange\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"Max (estimate) <=\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"red\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              }\n            ]\n          },\n          \"gridPos\": {\n            \"h\": 6,\n            \"w\": 5,\n            \"x\": 9,\n            \"y\": 3\n          },\n          \"id\": 215,\n          \"maxDataPoints\": 100,\n          \"options\": {\n            \"legend\": {\n              \"calcs\": [],\n              \"displayMode\": \"list\",\n              \"placement\": \"bottom\",\n              \"showLegend\": false\n            },\n            \"tooltip\": {\n              \"mode\": \"multi\",\n              \"sort\": \"none\"\n            }\n          },\n          \"pluginVersion\": \"10.2.6\",\n          \"targets\": [\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"${datasource}\"\n              },\n              \"editorMode\": \"code\",\n              \"expr\": \"rate(duty_start_time_sum{job=\\\"$job\\\", duty=\\\"sync-committee-message\\\"}[$__rate_interval])\\n/\\nrate(duty_start_time_count[$__rate_interval])\",\n              \"instant\": false,\n              \"legendFormat\": \"Mean\",\n              \"range\": true,\n              \"refId\": \"A\"\n            },\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"${datasource}\"\n              },\n              \"editorMode\": \"code\",\n              \"expr\": \"histogram_quantile(0.99, rate(duty_start_time_bucket{job=\\\"$job\\\", duty=\\\"sync-committee-message\\\"}[$__rate_interval]))\",\n              \"hide\": false,\n              \"instant\": false,\n              \"interval\": \"\",\n              \"legendFormat\": \"99% quantile\",\n              \"range\": true,\n              \"refId\": \"B\"\n            },\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"${datasource}\"\n              },\n              \"editorMode\": \"code\",\n              \"expr\": \"histogram_quantile(1, rate(duty_start_time_bucket{job=\\\"$job\\\", duty=\\\"sync-committee-message\\\"}[$__rate_interval]))\",\n              \"hide\": false,\n              \"instant\": false,\n              \"legendFormat\": \"Max (estimate) <=\",\n              \"range\": true,\n              \"refId\": \"C\"\n            }\n          ],\n          \"title\": \"sync-committee-message\",\n          \"type\": \"timeseries\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"${datasource}\"\n          },\n          \"description\": \"\",\n          \"fieldConfig\": {\n            \"defaults\": {\n              \"color\": {\n                \"fixedColor\": \"blue\",\n                \"mode\": \"fixed\",\n                \"seriesBy\": \"max\"\n              },\n              \"custom\": {\n                \"axisBorderShow\": false,\n                \"axisCenteredZero\": false,\n                \"axisColorMode\": \"text\",\n                \"axisLabel\": \"\",\n                \"axisPlacement\": \"auto\",\n                \"axisSoftMax\": 12,\n                \"axisSoftMin\": 0,\n                \"barAlignment\": 0,\n                \"drawStyle\": \"line\",\n                \"fillOpacity\": 0,\n                \"gradientMode\": \"none\",\n                \"hideFrom\": {\n                  \"legend\": false,\n                  \"tooltip\": false,\n                  \"viz\": false\n                },\n                \"insertNulls\": false,\n                \"lineInterpolation\": \"linear\",\n                \"lineWidth\": 1,\n                \"pointSize\": 5,\n                \"scaleDistribution\": {\n                  \"type\": \"linear\"\n                },\n                \"showPoints\": \"auto\",\n                \"spanNulls\": false,\n                \"stacking\": {\n                  \"group\": \"A\",\n                  \"mode\": \"none\"\n                },\n                \"thresholdsStyle\": {\n                  \"mode\": \"off\"\n                }\n              },\n              \"mappings\": [],\n              \"thresholds\": {\n                \"mode\": \"absolute\",\n                \"steps\": [\n                  {\n                    \"color\": \"green\"\n                  }\n                ]\n              },\n              \"unit\": \"s\"\n            },\n            \"overrides\": [\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"Mean\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"yellow\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"99% quantile\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"orange\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"Max (estimate) <=\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"red\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              }\n            ]\n          },\n          \"gridPos\": {\n            \"h\": 6,\n            \"w\": 5,\n            \"x\": 14,\n            \"y\": 3\n          },\n          \"id\": 216,\n          \"maxDataPoints\": 100,\n          \"options\": {\n            \"legend\": {\n              \"calcs\": [],\n              \"displayMode\": \"list\",\n              \"placement\": \"bottom\",\n              \"showLegend\": false\n            },\n            \"tooltip\": {\n              \"mode\": \"multi\",\n              \"sort\": \"none\"\n            }\n          },\n          \"pluginVersion\": \"10.2.6\",\n          \"targets\": [\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"${datasource}\"\n              },\n              \"editorMode\": \"code\",\n              \"expr\": \"rate(duty_start_time_sum{job=\\\"$job\\\", duty=\\\"attestation-aggregation\\\"}[$__rate_interval])\\n/\\nrate(duty_start_time_count[$__rate_interval])\",\n              \"instant\": false,\n              \"legendFormat\": \"Mean\",\n              \"range\": true,\n              \"refId\": \"A\"\n            },\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"${datasource}\"\n              },\n              \"editorMode\": \"code\",\n              \"expr\": \"histogram_quantile(0.99, rate(duty_start_time_bucket{job=\\\"$job\\\", duty=\\\"attestation-aggregation\\\"}[$__rate_interval]))\",\n              \"hide\": false,\n              \"instant\": false,\n              \"interval\": \"\",\n              \"legendFormat\": \"99% quantile\",\n              \"range\": true,\n              \"refId\": \"B\"\n            },\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"${datasource}\"\n              },\n              \"editorMode\": \"code\",\n              \"expr\": \"histogram_quantile(1, rate(duty_start_time_bucket{job=\\\"$job\\\", duty=\\\"attestation-aggregation\\\"}[$__rate_interval]))\",\n              \"hide\": false,\n              \"instant\": false,\n              \"legendFormat\": \"Max (estimate) <=\",\n              \"range\": true,\n              \"refId\": \"C\"\n            }\n          ],\n          \"title\": \"attestation-aggregation\",\n          \"type\": \"timeseries\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"${datasource}\"\n          },\n          \"description\": \"\",\n          \"fieldConfig\": {\n            \"defaults\": {\n              \"color\": {\n                \"fixedColor\": \"blue\",\n                \"mode\": \"fixed\",\n                \"seriesBy\": \"max\"\n              },\n              \"custom\": {\n                \"axisBorderShow\": false,\n                \"axisCenteredZero\": false,\n                \"axisColorMode\": \"text\",\n                \"axisLabel\": \"\",\n                \"axisPlacement\": \"auto\",\n                \"axisSoftMax\": 12,\n                \"axisSoftMin\": 0,\n                \"barAlignment\": 0,\n                \"drawStyle\": \"line\",\n                \"fillOpacity\": 0,\n                \"gradientMode\": \"none\",\n                \"hideFrom\": {\n                  \"legend\": false,\n                  \"tooltip\": false,\n                  \"viz\": false\n                },\n                \"insertNulls\": false,\n                \"lineInterpolation\": \"linear\",\n                \"lineWidth\": 1,\n                \"pointSize\": 5,\n                \"scaleDistribution\": {\n                  \"type\": \"linear\"\n                },\n                \"showPoints\": \"auto\",\n                \"spanNulls\": false,\n                \"stacking\": {\n                  \"group\": \"A\",\n                  \"mode\": \"none\"\n                },\n                \"thresholdsStyle\": {\n                  \"mode\": \"off\"\n                }\n              },\n              \"mappings\": [],\n              \"thresholds\": {\n                \"mode\": \"absolute\",\n                \"steps\": [\n                  {\n                    \"color\": \"green\"\n                  }\n                ]\n              },\n              \"unit\": \"s\"\n            },\n            \"overrides\": [\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"Mean\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"yellow\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"99% quantile\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"orange\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"Max (estimate) <=\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"red\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              }\n            ]\n          },\n          \"gridPos\": {\n            \"h\": 6,\n            \"w\": 5,\n            \"x\": 19,\n            \"y\": 3\n          },\n          \"id\": 217,\n          \"maxDataPoints\": 100,\n          \"options\": {\n            \"legend\": {\n              \"calcs\": [],\n              \"displayMode\": \"list\",\n              \"placement\": \"bottom\",\n              \"showLegend\": false\n            },\n            \"tooltip\": {\n              \"mode\": \"multi\",\n              \"sort\": \"none\"\n            }\n          },\n          \"pluginVersion\": \"10.2.6\",\n          \"targets\": [\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"${datasource}\"\n              },\n              \"editorMode\": \"code\",\n              \"expr\": \"rate(duty_start_time_sum{job=\\\"$job\\\", duty=\\\"sync-committee-contribution\\\"}[$__rate_interval])\\n/\\nrate(duty_start_time_count[$__rate_interval])\",\n              \"instant\": false,\n              \"legendFormat\": \"Mean\",\n              \"range\": true,\n              \"refId\": \"A\"\n            },\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"${datasource}\"\n              },\n              \"editorMode\": \"code\",\n              \"expr\": \"histogram_quantile(0.99, rate(duty_start_time_bucket{job=\\\"$job\\\", duty=\\\"sync-committee-contribution\\\"}[$__rate_interval]))\",\n              \"hide\": false,\n              \"instant\": false,\n              \"interval\": \"\",\n              \"legendFormat\": \"99% quantile\",\n              \"range\": true,\n              \"refId\": \"B\"\n            },\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"${datasource}\"\n              },\n              \"editorMode\": \"code\",\n              \"expr\": \"histogram_quantile(1, rate(duty_start_time_bucket{job=\\\"$job\\\", duty=\\\"sync-committee-contribution\\\"}[$__rate_interval]))\",\n              \"hide\": false,\n              \"instant\": false,\n              \"legendFormat\": \"Max (estimate) <=\",\n              \"range\": true,\n              \"refId\": \"C\"\n            }\n          ],\n          \"title\": \"sync-committee-contribution\",\n          \"type\": \"timeseries\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"${datasource}\"\n          },\n          \"description\": \"\",\n          \"fieldConfig\": {\n            \"defaults\": {\n              \"custom\": {\n                \"hideFrom\": {\n                  \"legend\": false,\n                  \"tooltip\": false,\n                  \"viz\": false\n                },\n                \"scaleDistribution\": {\n                  \"type\": \"linear\"\n                }\n              }\n            },\n            \"overrides\": []\n          },\n          \"gridPos\": {\n            \"h\": 19,\n            \"w\": 4,\n            \"x\": 0,\n            \"y\": 9\n          },\n          \"id\": 24,\n          \"maxDataPoints\": 10,\n          \"options\": {\n            \"calculate\": false,\n            \"cellGap\": 1,\n            \"color\": {\n              \"exponent\": 0.5,\n              \"fill\": \"dark-orange\",\n              \"mode\": \"scheme\",\n              \"reverse\": false,\n              \"scale\": \"exponential\",\n              \"scheme\": \"Oranges\",\n              \"steps\": 64\n            },\n            \"exemplars\": {\n              \"color\": \"rgba(255,0,255,0.7)\"\n            },\n            \"filterValues\": {\n              \"le\": 1e-9\n            },\n            \"legend\": {\n              \"show\": true\n            },\n            \"rowsFrame\": {\n              \"layout\": \"auto\"\n            },\n            \"tooltip\": {\n              \"mode\": \"single\",\n              \"showColorScale\": false,\n              \"yHistogram\": false\n            },\n            \"yAxis\": {\n              \"axisPlacement\": \"left\",\n              \"reverse\": false\n            }\n          },\n          \"pluginVersion\": \"11.1.1\",\n          \"targets\": [\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"${datasource}\"\n              },\n              \"editorMode\": \"code\",\n              \"exemplar\": false,\n              \"expr\": \"sum(rate(duty_start_time_bucket{duty=\\\"block-proposal\\\", job=\\\"$job\\\"}[$__rate_interval])) by (le)\",\n              \"format\": \"heatmap\",\n              \"instant\": false,\n              \"legendFormat\": \"{{le}}\",\n              \"range\": true,\n              \"refId\": \"A\"\n            }\n          ],\n          \"title\": \"block-proposal\",\n          \"type\": \"heatmap\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"${datasource}\"\n          },\n          \"description\": \"\",\n          \"fieldConfig\": {\n            \"defaults\": {\n              \"custom\": {\n                \"hideFrom\": {\n                  \"legend\": false,\n                  \"tooltip\": false,\n                  \"viz\": false\n                },\n                \"scaleDistribution\": {\n                  \"type\": \"linear\"\n                }\n              }\n            },\n            \"overrides\": []\n          },\n          \"gridPos\": {\n            \"h\": 19,\n            \"w\": 5,\n            \"x\": 4,\n            \"y\": 9\n          },\n          \"id\": 18,\n          \"maxDataPoints\": 10,\n          \"options\": {\n            \"calculate\": false,\n            \"cellGap\": 1,\n            \"color\": {\n              \"exponent\": 0.5,\n              \"fill\": \"dark-orange\",\n              \"mode\": \"scheme\",\n              \"reverse\": false,\n              \"scale\": \"exponential\",\n              \"scheme\": \"Oranges\",\n              \"steps\": 64\n            },\n            \"exemplars\": {\n              \"color\": \"rgba(255,0,255,0.7)\"\n            },\n            \"filterValues\": {\n              \"le\": 1e-9\n            },\n            \"legend\": {\n              \"show\": true\n            },\n            \"rowsFrame\": {\n              \"layout\": \"auto\"\n            },\n            \"tooltip\": {\n              \"mode\": \"single\",\n              \"showColorScale\": false,\n              \"yHistogram\": false\n            },\n            \"yAxis\": {\n              \"axisPlacement\": \"left\",\n              \"reverse\": false\n            }\n          },\n          \"pluginVersion\": \"11.1.1\",\n          \"targets\": [\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"${datasource}\"\n              },\n              \"editorMode\": \"code\",\n              \"exemplar\": false,\n              \"expr\": \"sum(rate(duty_start_time_bucket{duty=\\\"attestation\\\", job=\\\"$job\\\"}[$__rate_interval])) by (le)\",\n              \"format\": \"heatmap\",\n              \"instant\": false,\n              \"legendFormat\": \"{{le}}\",\n              \"range\": true,\n              \"refId\": \"A\"\n            }\n          ],\n          \"title\": \"attestation\",\n          \"type\": \"heatmap\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"${datasource}\"\n          },\n          \"description\": \"\",\n          \"fieldConfig\": {\n            \"defaults\": {\n              \"custom\": {\n                \"hideFrom\": {\n                  \"legend\": false,\n                  \"tooltip\": false,\n                  \"viz\": false\n                },\n                \"scaleDistribution\": {\n                  \"type\": \"linear\"\n                }\n              }\n            },\n            \"overrides\": []\n          },\n          \"gridPos\": {\n            \"h\": 19,\n            \"w\": 5,\n            \"x\": 9,\n            \"y\": 9\n          },\n          \"id\": 22,\n          \"maxDataPoints\": 10,\n          \"options\": {\n            \"calculate\": false,\n            \"cellGap\": 1,\n            \"color\": {\n              \"exponent\": 0.5,\n              \"fill\": \"dark-orange\",\n              \"mode\": \"scheme\",\n              \"reverse\": false,\n              \"scale\": \"exponential\",\n              \"scheme\": \"Oranges\",\n              \"steps\": 64\n            },\n            \"exemplars\": {\n              \"color\": \"rgba(255,0,255,0.7)\"\n            },\n            \"filterValues\": {\n              \"le\": 1e-9\n            },\n            \"legend\": {\n              \"show\": true\n            },\n            \"rowsFrame\": {\n              \"layout\": \"auto\"\n            },\n            \"tooltip\": {\n              \"mode\": \"single\",\n              \"showColorScale\": false,\n              \"yHistogram\": false\n            },\n            \"yAxis\": {\n              \"axisPlacement\": \"left\",\n              \"reverse\": false\n            }\n          },\n          \"pluginVersion\": \"11.1.1\",\n          \"targets\": [\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"${datasource}\"\n              },\n              \"editorMode\": \"code\",\n              \"exemplar\": false,\n              \"expr\": \"sum(rate(duty_start_time_bucket{duty=\\\"sync-committee-message\\\", job=\\\"$job\\\"}[$__rate_interval])) by (le)\",\n              \"format\": \"heatmap\",\n              \"instant\": false,\n              \"legendFormat\": \"{{le}}\",\n              \"range\": true,\n              \"refId\": \"A\"\n            }\n          ],\n          \"title\": \"sync-committee-message\",\n          \"type\": \"heatmap\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"${datasource}\"\n          },\n          \"description\": \"\",\n          \"fieldConfig\": {\n            \"defaults\": {\n              \"custom\": {\n                \"hideFrom\": {\n                  \"legend\": false,\n                  \"tooltip\": false,\n                  \"viz\": false\n                },\n                \"scaleDistribution\": {\n                  \"type\": \"linear\"\n                }\n              }\n            },\n            \"overrides\": []\n          },\n          \"gridPos\": {\n            \"h\": 19,\n            \"w\": 5,\n            \"x\": 14,\n            \"y\": 9\n          },\n          \"id\": 26,\n          \"maxDataPoints\": 10,\n          \"options\": {\n            \"calculate\": false,\n            \"cellGap\": 1,\n            \"color\": {\n              \"exponent\": 0.5,\n              \"fill\": \"dark-orange\",\n              \"mode\": \"scheme\",\n              \"reverse\": false,\n              \"scale\": \"exponential\",\n              \"scheme\": \"Oranges\",\n              \"steps\": 64\n            },\n            \"exemplars\": {\n              \"color\": \"rgba(255,0,255,0.7)\"\n            },\n            \"filterValues\": {\n              \"le\": 1e-9\n            },\n            \"legend\": {\n              \"show\": true\n            },\n            \"rowsFrame\": {\n              \"layout\": \"auto\"\n            },\n            \"tooltip\": {\n              \"mode\": \"single\",\n              \"showColorScale\": false,\n              \"yHistogram\": false\n            },\n            \"yAxis\": {\n              \"axisPlacement\": \"left\",\n              \"reverse\": false\n            }\n          },\n          \"pluginVersion\": \"11.1.1\",\n          \"targets\": [\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"${datasource}\"\n              },\n              \"editorMode\": \"code\",\n              \"exemplar\": false,\n              \"expr\": \"sum(rate(duty_start_time_bucket{duty=\\\"attestation-aggregation\\\", job=\\\"$job\\\"}[$__rate_interval])) by (le)\",\n              \"format\": \"heatmap\",\n              \"instant\": false,\n              \"legendFormat\": \"{{le}}\",\n              \"range\": true,\n              \"refId\": \"A\"\n            }\n          ],\n          \"title\": \"attestation-aggregation\",\n          \"type\": \"heatmap\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"${datasource}\"\n          },\n          \"description\": \"\",\n          \"fieldConfig\": {\n            \"defaults\": {\n              \"custom\": {\n                \"hideFrom\": {\n                  \"legend\": false,\n                  \"tooltip\": false,\n                  \"viz\": false\n                },\n                \"scaleDistribution\": {\n                  \"type\": \"linear\"\n                }\n              }\n            },\n            \"overrides\": []\n          },\n          \"gridPos\": {\n            \"h\": 19,\n            \"w\": 5,\n            \"x\": 19,\n            \"y\": 9\n          },\n          \"id\": 23,\n          \"maxDataPoints\": 10,\n          \"options\": {\n            \"calculate\": false,\n            \"cellGap\": 1,\n            \"color\": {\n              \"exponent\": 0.5,\n              \"fill\": \"dark-orange\",\n              \"mode\": \"scheme\",\n              \"reverse\": false,\n              \"scale\": \"exponential\",\n              \"scheme\": \"Oranges\",\n              \"steps\": 64\n            },\n            \"exemplars\": {\n              \"color\": \"rgba(255,0,255,0.7)\"\n            },\n            \"filterValues\": {\n              \"le\": 1e-9\n            },\n            \"legend\": {\n              \"show\": true\n            },\n            \"rowsFrame\": {\n              \"layout\": \"auto\"\n            },\n            \"tooltip\": {\n              \"mode\": \"single\",\n              \"showColorScale\": false,\n              \"yHistogram\": false\n            },\n            \"yAxis\": {\n              \"axisPlacement\": \"left\",\n              \"reverse\": false\n            }\n          },\n          \"pluginVersion\": \"11.1.1\",\n          \"targets\": [\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"${datasource}\"\n              },\n              \"editorMode\": \"code\",\n              \"exemplar\": false,\n              \"expr\": \"sum(rate(duty_start_time_bucket{duty=\\\"sync-committee-contribution\\\", job=\\\"$job\\\"}[$__rate_interval])) by (le)\",\n              \"format\": \"heatmap\",\n              \"instant\": false,\n              \"legendFormat\": \"{{le}}\",\n              \"range\": true,\n              \"refId\": \"A\"\n            }\n          ],\n          \"title\": \"sync-committee-contribution\",\n          \"type\": \"heatmap\"\n        }\n      ],\n      \"title\": \"Duty Start Time\",\n      \"type\": \"row\"\n    },\n    {\n      \"collapsed\": true,\n      \"gridPos\": {\n        \"h\": 1,\n        \"w\": 24,\n        \"x\": 0,\n        \"y\": 20\n      },\n      \"id\": 80,\n      \"panels\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"${datasource}\"\n          },\n          \"description\": \"\",\n          \"fieldConfig\": {\n            \"defaults\": {\n              \"color\": {\n                \"fixedColor\": \"blue\",\n                \"mode\": \"fixed\",\n                \"seriesBy\": \"max\"\n              },\n              \"custom\": {\n                \"axisBorderShow\": false,\n                \"axisCenteredZero\": false,\n                \"axisColorMode\": \"text\",\n                \"axisLabel\": \"\",\n                \"axisPlacement\": \"auto\",\n                \"axisSoftMax\": 4,\n                \"axisSoftMin\": 0,\n                \"barAlignment\": 0,\n                \"drawStyle\": \"line\",\n                \"fillOpacity\": 0,\n                \"gradientMode\": \"none\",\n                \"hideFrom\": {\n                  \"legend\": false,\n                  \"tooltip\": false,\n                  \"viz\": false\n                },\n                \"insertNulls\": false,\n                \"lineInterpolation\": \"linear\",\n                \"lineWidth\": 1,\n                \"pointSize\": 5,\n                \"scaleDistribution\": {\n                  \"type\": \"linear\"\n                },\n                \"showPoints\": \"auto\",\n                \"spanNulls\": false,\n                \"stacking\": {\n                  \"group\": \"A\",\n                  \"mode\": \"none\"\n                },\n                \"thresholdsStyle\": {\n                  \"mode\": \"off\"\n                }\n              },\n              \"mappings\": [],\n              \"thresholds\": {\n                \"mode\": \"absolute\",\n                \"steps\": [\n                  {\n                    \"color\": \"green\"\n                  }\n                ]\n              },\n              \"unit\": \"s\"\n            },\n            \"overrides\": [\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"Mean\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"yellow\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"99% quantile\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"orange\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"Max (estimate) <=\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"red\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              }\n            ]\n          },\n          \"gridPos\": {\n            \"h\": 6,\n            \"w\": 4,\n            \"x\": 0,\n            \"y\": 29\n          },\n          \"id\": 181,\n          \"maxDataPoints\": 100,\n          \"options\": {\n            \"legend\": {\n              \"calcs\": [],\n              \"displayMode\": \"list\",\n              \"placement\": \"bottom\",\n              \"showLegend\": false\n            },\n            \"tooltip\": {\n              \"mode\": \"multi\",\n              \"sort\": \"none\"\n            }\n          },\n          \"pluginVersion\": \"10.2.6\",\n          \"targets\": [\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"${datasource}\"\n              },\n              \"editorMode\": \"code\",\n              \"expr\": \"rate(duty_submission_time_sum{job=\\\"$job\\\", duty=\\\"block-proposal\\\"}[$__rate_interval])\\n/\\nrate(duty_submission_time_count[$__rate_interval])\",\n              \"instant\": false,\n              \"legendFormat\": \"Mean\",\n              \"range\": true,\n              \"refId\": \"A\"\n            },\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"${datasource}\"\n              },\n              \"editorMode\": \"code\",\n              \"expr\": \"histogram_quantile(0.99, rate(duty_submission_time_bucket{job=\\\"$job\\\", duty=\\\"block-proposal\\\"}[$__rate_interval]))\",\n              \"hide\": false,\n              \"instant\": false,\n              \"interval\": \"\",\n              \"legendFormat\": \"99% quantile\",\n              \"range\": true,\n              \"refId\": \"B\"\n            },\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"${datasource}\"\n              },\n              \"editorMode\": \"code\",\n              \"expr\": \"histogram_quantile(1, rate(duty_submission_time_bucket{job=\\\"$job\\\", duty=\\\"block-proposal\\\"}[$__rate_interval]))\",\n              \"hide\": false,\n              \"instant\": false,\n              \"legendFormat\": \"Max (estimate) <=\",\n              \"range\": true,\n              \"refId\": \"C\"\n            }\n          ],\n          \"title\": \"block-proposal\",\n          \"type\": \"timeseries\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"${datasource}\"\n          },\n          \"description\": \"\",\n          \"fieldConfig\": {\n            \"defaults\": {\n              \"color\": {\n                \"fixedColor\": \"blue\",\n                \"mode\": \"fixed\",\n                \"seriesBy\": \"max\"\n              },\n              \"custom\": {\n                \"axisBorderShow\": false,\n                \"axisCenteredZero\": false,\n                \"axisColorMode\": \"text\",\n                \"axisLabel\": \"\",\n                \"axisPlacement\": \"auto\",\n                \"axisSoftMax\": 8,\n                \"axisSoftMin\": 0,\n                \"barAlignment\": 0,\n                \"drawStyle\": \"line\",\n                \"fillOpacity\": 0,\n                \"gradientMode\": \"none\",\n                \"hideFrom\": {\n                  \"legend\": false,\n                  \"tooltip\": false,\n                  \"viz\": false\n                },\n                \"insertNulls\": false,\n                \"lineInterpolation\": \"linear\",\n                \"lineWidth\": 1,\n                \"pointSize\": 5,\n                \"scaleDistribution\": {\n                  \"type\": \"linear\"\n                },\n                \"showPoints\": \"auto\",\n                \"spanNulls\": false,\n                \"stacking\": {\n                  \"group\": \"A\",\n                  \"mode\": \"none\"\n                },\n                \"thresholdsStyle\": {\n                  \"mode\": \"off\"\n                }\n              },\n              \"mappings\": [],\n              \"thresholds\": {\n                \"mode\": \"absolute\",\n                \"steps\": [\n                  {\n                    \"color\": \"green\"\n                  }\n                ]\n              },\n              \"unit\": \"s\"\n            },\n            \"overrides\": [\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"Mean\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"yellow\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"99% quantile\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"orange\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"Max (estimate) <=\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"red\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              }\n            ]\n          },\n          \"gridPos\": {\n            \"h\": 6,\n            \"w\": 5,\n            \"x\": 4,\n            \"y\": 29\n          },\n          \"id\": 198,\n          \"maxDataPoints\": 100,\n          \"options\": {\n            \"legend\": {\n              \"calcs\": [],\n              \"displayMode\": \"list\",\n              \"placement\": \"bottom\",\n              \"showLegend\": false\n            },\n            \"tooltip\": {\n              \"mode\": \"multi\",\n              \"sort\": \"none\"\n            }\n          },\n          \"pluginVersion\": \"10.2.6\",\n          \"targets\": [\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"${datasource}\"\n              },\n              \"editorMode\": \"code\",\n              \"expr\": \"rate(duty_submission_time_sum{job=\\\"$job\\\", duty=\\\"attestation\\\"}[$__rate_interval])\\n/\\nrate(duty_submission_time_count[$__rate_interval])\",\n              \"instant\": false,\n              \"legendFormat\": \"Mean\",\n              \"range\": true,\n              \"refId\": \"A\"\n            },\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"${datasource}\"\n              },\n              \"editorMode\": \"code\",\n              \"expr\": \"histogram_quantile(0.99, rate(duty_submission_time_bucket{job=\\\"$job\\\", duty=\\\"attestation\\\"}[$__rate_interval]))\",\n              \"hide\": false,\n              \"instant\": false,\n              \"interval\": \"\",\n              \"legendFormat\": \"99% quantile\",\n              \"range\": true,\n              \"refId\": \"B\"\n            },\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"${datasource}\"\n              },\n              \"editorMode\": \"code\",\n              \"expr\": \"histogram_quantile(1, rate(duty_submission_time_bucket{job=\\\"$job\\\", duty=\\\"attestation\\\"}[$__rate_interval]))\",\n              \"hide\": false,\n              \"instant\": false,\n              \"legendFormat\": \"Max (estimate) <=\",\n              \"range\": true,\n              \"refId\": \"C\"\n            }\n          ],\n          \"title\": \"attestation\",\n          \"type\": \"timeseries\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"${datasource}\"\n          },\n          \"description\": \"\",\n          \"fieldConfig\": {\n            \"defaults\": {\n              \"color\": {\n                \"fixedColor\": \"blue\",\n                \"mode\": \"fixed\",\n                \"seriesBy\": \"max\"\n              },\n              \"custom\": {\n                \"axisBorderShow\": false,\n                \"axisCenteredZero\": false,\n                \"axisColorMode\": \"text\",\n                \"axisLabel\": \"\",\n                \"axisPlacement\": \"auto\",\n                \"axisSoftMax\": 8,\n                \"axisSoftMin\": 0,\n                \"barAlignment\": 0,\n                \"drawStyle\": \"line\",\n                \"fillOpacity\": 0,\n                \"gradientMode\": \"none\",\n                \"hideFrom\": {\n                  \"legend\": false,\n                  \"tooltip\": false,\n                  \"viz\": false\n                },\n                \"insertNulls\": false,\n                \"lineInterpolation\": \"linear\",\n                \"lineWidth\": 1,\n                \"pointSize\": 5,\n                \"scaleDistribution\": {\n                  \"type\": \"linear\"\n                },\n                \"showPoints\": \"auto\",\n                \"spanNulls\": false,\n                \"stacking\": {\n                  \"group\": \"A\",\n                  \"mode\": \"none\"\n                },\n                \"thresholdsStyle\": {\n                  \"mode\": \"off\"\n                }\n              },\n              \"mappings\": [],\n              \"thresholds\": {\n                \"mode\": \"absolute\",\n                \"steps\": [\n                  {\n                    \"color\": \"green\"\n                  }\n                ]\n              },\n              \"unit\": \"s\"\n            },\n            \"overrides\": [\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"Mean\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"yellow\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"99% quantile\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"orange\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"Max (estimate) <=\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"red\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              }\n            ]\n          },\n          \"gridPos\": {\n            \"h\": 6,\n            \"w\": 5,\n            \"x\": 9,\n            \"y\": 29\n          },\n          \"id\": 199,\n          \"maxDataPoints\": 100,\n          \"options\": {\n            \"legend\": {\n              \"calcs\": [],\n              \"displayMode\": \"list\",\n              \"placement\": \"bottom\",\n              \"showLegend\": false\n            },\n            \"tooltip\": {\n              \"mode\": \"multi\",\n              \"sort\": \"none\"\n            }\n          },\n          \"pluginVersion\": \"10.2.6\",\n          \"targets\": [\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"${datasource}\"\n              },\n              \"editorMode\": \"code\",\n              \"expr\": \"rate(duty_submission_time_sum{job=\\\"$job\\\", duty=\\\"sync-committee-message\\\"}[$__rate_interval])\\n/\\nrate(duty_submission_time_count[$__rate_interval])\",\n              \"instant\": false,\n              \"legendFormat\": \"Mean\",\n              \"range\": true,\n              \"refId\": \"A\"\n            },\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"${datasource}\"\n              },\n              \"editorMode\": \"code\",\n              \"expr\": \"histogram_quantile(0.99, rate(duty_submission_time_bucket{job=\\\"$job\\\", duty=\\\"sync-committee-message\\\"}[$__rate_interval]))\",\n              \"hide\": false,\n              \"instant\": false,\n              \"interval\": \"\",\n              \"legendFormat\": \"99% quantile\",\n              \"range\": true,\n              \"refId\": \"B\"\n            },\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"${datasource}\"\n              },\n              \"editorMode\": \"code\",\n              \"expr\": \"histogram_quantile(1, rate(duty_submission_time_bucket{job=\\\"$job\\\", duty=\\\"sync-committee-message\\\"}[$__rate_interval]))\",\n              \"hide\": false,\n              \"instant\": false,\n              \"legendFormat\": \"Max (estimate) <=\",\n              \"range\": true,\n              \"refId\": \"C\"\n            }\n          ],\n          \"title\": \"sync-committee-message\",\n          \"type\": \"timeseries\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"${datasource}\"\n          },\n          \"description\": \"\",\n          \"fieldConfig\": {\n            \"defaults\": {\n              \"color\": {\n                \"fixedColor\": \"blue\",\n                \"mode\": \"fixed\",\n                \"seriesBy\": \"max\"\n              },\n              \"custom\": {\n                \"axisBorderShow\": false,\n                \"axisCenteredZero\": false,\n                \"axisColorMode\": \"text\",\n                \"axisLabel\": \"\",\n                \"axisPlacement\": \"auto\",\n                \"axisSoftMax\": 12,\n                \"axisSoftMin\": 0,\n                \"barAlignment\": 0,\n                \"drawStyle\": \"line\",\n                \"fillOpacity\": 0,\n                \"gradientMode\": \"none\",\n                \"hideFrom\": {\n                  \"legend\": false,\n                  \"tooltip\": false,\n                  \"viz\": false\n                },\n                \"insertNulls\": false,\n                \"lineInterpolation\": \"linear\",\n                \"lineWidth\": 1,\n                \"pointSize\": 5,\n                \"scaleDistribution\": {\n                  \"type\": \"linear\"\n                },\n                \"showPoints\": \"auto\",\n                \"spanNulls\": false,\n                \"stacking\": {\n                  \"group\": \"A\",\n                  \"mode\": \"none\"\n                },\n                \"thresholdsStyle\": {\n                  \"mode\": \"off\"\n                }\n              },\n              \"mappings\": [],\n              \"thresholds\": {\n                \"mode\": \"absolute\",\n                \"steps\": [\n                  {\n                    \"color\": \"green\"\n                  }\n                ]\n              },\n              \"unit\": \"s\"\n            },\n            \"overrides\": [\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"Mean\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"yellow\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"99% quantile\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"orange\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"Max (estimate) <=\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"red\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              }\n            ]\n          },\n          \"gridPos\": {\n            \"h\": 6,\n            \"w\": 5,\n            \"x\": 14,\n            \"y\": 29\n          },\n          \"id\": 200,\n          \"maxDataPoints\": 100,\n          \"options\": {\n            \"legend\": {\n              \"calcs\": [],\n              \"displayMode\": \"list\",\n              \"placement\": \"bottom\",\n              \"showLegend\": false\n            },\n            \"tooltip\": {\n              \"mode\": \"multi\",\n              \"sort\": \"none\"\n            }\n          },\n          \"pluginVersion\": \"10.2.6\",\n          \"targets\": [\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"${datasource}\"\n              },\n              \"editorMode\": \"code\",\n              \"expr\": \"rate(duty_submission_time_sum{job=\\\"$job\\\", duty=\\\"attestation-aggregation\\\"}[$__rate_interval])\\n/\\nrate(duty_submission_time_count[$__rate_interval])\",\n              \"instant\": false,\n              \"legendFormat\": \"Mean\",\n              \"range\": true,\n              \"refId\": \"A\"\n            },\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"${datasource}\"\n              },\n              \"editorMode\": \"code\",\n              \"expr\": \"histogram_quantile(0.99, rate(duty_submission_time_bucket{job=\\\"$job\\\", duty=\\\"attestation-aggregation\\\"}[$__rate_interval]))\",\n              \"hide\": false,\n              \"instant\": false,\n              \"interval\": \"\",\n              \"legendFormat\": \"99% quantile\",\n              \"range\": true,\n              \"refId\": \"B\"\n            },\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"${datasource}\"\n              },\n              \"editorMode\": \"code\",\n              \"expr\": \"histogram_quantile(1, rate(duty_submission_time_bucket{job=\\\"$job\\\", duty=\\\"attestation-aggregation\\\"}[$__rate_interval]))\",\n              \"hide\": false,\n              \"instant\": false,\n              \"legendFormat\": \"Max (estimate) <=\",\n              \"range\": true,\n              \"refId\": \"C\"\n            }\n          ],\n          \"title\": \"attestation-aggregation\",\n          \"type\": \"timeseries\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"${datasource}\"\n          },\n          \"description\": \"\",\n          \"fieldConfig\": {\n            \"defaults\": {\n              \"color\": {\n                \"fixedColor\": \"blue\",\n                \"mode\": \"fixed\",\n                \"seriesBy\": \"max\"\n              },\n              \"custom\": {\n                \"axisBorderShow\": false,\n                \"axisCenteredZero\": false,\n                \"axisColorMode\": \"text\",\n                \"axisLabel\": \"\",\n                \"axisPlacement\": \"auto\",\n                \"axisSoftMax\": 12,\n                \"axisSoftMin\": 0,\n                \"barAlignment\": 0,\n                \"drawStyle\": \"line\",\n                \"fillOpacity\": 0,\n                \"gradientMode\": \"none\",\n                \"hideFrom\": {\n                  \"legend\": false,\n                  \"tooltip\": false,\n                  \"viz\": false\n                },\n                \"insertNulls\": false,\n                \"lineInterpolation\": \"linear\",\n                \"lineWidth\": 1,\n                \"pointSize\": 5,\n                \"scaleDistribution\": {\n                  \"type\": \"linear\"\n                },\n                \"showPoints\": \"auto\",\n                \"spanNulls\": false,\n                \"stacking\": {\n                  \"group\": \"A\",\n                  \"mode\": \"none\"\n                },\n                \"thresholdsStyle\": {\n                  \"mode\": \"off\"\n                }\n              },\n              \"mappings\": [],\n              \"thresholds\": {\n                \"mode\": \"absolute\",\n                \"steps\": [\n                  {\n                    \"color\": \"green\"\n                  }\n                ]\n              },\n              \"unit\": \"s\"\n            },\n            \"overrides\": [\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"Mean\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"yellow\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"99% quantile\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"orange\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              },\n              {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"Max (estimate) <=\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"red\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              }\n            ]\n          },\n          \"gridPos\": {\n            \"h\": 6,\n            \"w\": 5,\n            \"x\": 19,\n            \"y\": 29\n          },\n          \"id\": 201,\n          \"maxDataPoints\": 100,\n          \"options\": {\n            \"legend\": {\n              \"calcs\": [],\n              \"displayMode\": \"list\",\n              \"placement\": \"bottom\",\n              \"showLegend\": false\n            },\n            \"tooltip\": {\n              \"mode\": \"multi\",\n              \"sort\": \"none\"\n            }\n          },\n          \"pluginVersion\": \"10.2.6\",\n          \"targets\": [\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"${datasource}\"\n              },\n              \"editorMode\": \"code\",\n              \"expr\": \"rate(duty_submission_time_sum{job=\\\"$job\\\", duty=\\\"sync-committee-contribution\\\"}[$__rate_interval])\\n/\\nrate(duty_submission_time_count[$__rate_interval])\",\n              \"instant\": false,\n              \"legendFormat\": \"Mean\",\n              \"range\": true,\n              \"refId\": \"A\"\n            },\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"${datasource}\"\n              },\n              \"editorMode\": \"code\",\n              \"expr\": \"histogram_quantile(0.99, rate(duty_submission_time_bucket{job=\\\"$job\\\", duty=\\\"sync-committee-contribution\\\"}[$__rate_interval]))\",\n              \"hide\": false,\n              \"instant\": false,\n              \"interval\": \"\",\n              \"legendFormat\": \"99% quantile\",\n              \"range\": true,\n              \"refId\": \"B\"\n            },\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"${datasource}\"\n              },\n              \"editorMode\": \"code\",\n              \"expr\": \"histogram_quantile(1, rate(duty_submission_time_bucket{job=\\\"$job\\\", duty=\\\"sync-committee-contribution\\\"}[$__rate_interval]))\",\n              \"hide\": false,\n              \"instant\": false,\n              \"legendFormat\": \"Max (estimate) <=\",\n              \"range\": true,\n              \"refId\": \"C\"\n            }\n          ],\n          \"title\": \"sync-committee-contribution\",\n          \"type\": \"timeseries\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"${datasource}\"\n          },\n          \"description\": \"\",\n          \"fieldConfig\": {\n            \"defaults\": {\n              \"custom\": {\n                \"hideFrom\": {\n                  \"legend\": false,\n                  \"tooltip\": false,\n                  \"viz\": false\n                },\n                \"scaleDistribution\": {\n                  \"type\": \"linear\"\n                }\n              }\n            },\n            \"overrides\": []\n          },\n          \"gridPos\": {\n            \"h\": 19,\n            \"w\": 4,\n            \"x\": 0,\n            \"y\": 35\n          },\n          \"id\": 82,\n          \"maxDataPoints\": 10,\n          \"options\": {\n            \"calculate\": false,\n            \"cellGap\": 1,\n            \"color\": {\n              \"exponent\": 0.5,\n              \"fill\": \"dark-orange\",\n              \"mode\": \"scheme\",\n              \"reverse\": false,\n              \"scale\": \"exponential\",\n              \"scheme\": \"Oranges\",\n              \"steps\": 64\n            },\n            \"exemplars\": {\n              \"color\": \"rgba(255,0,255,0.7)\"\n            },\n            \"filterValues\": {\n              \"le\": 1e-9\n            },\n            \"legend\": {\n              \"show\": true\n            },\n            \"rowsFrame\": {\n              \"layout\": \"auto\"\n            },\n            \"tooltip\": {\n              \"mode\": \"single\",\n              \"showColorScale\": false,\n              \"yHistogram\": false\n            },\n            \"yAxis\": {\n              \"axisPlacement\": \"left\",\n              \"reverse\": false\n            }\n          },\n          \"pluginVersion\": \"11.1.1\",\n          \"targets\": [\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"${datasource}\"\n              },\n              \"editorMode\": \"code\",\n              \"exemplar\": false,\n              \"expr\": \"sum(rate(duty_submission_time_bucket{duty=\\\"block-proposal\\\", job=\\\"$job\\\"}[$__rate_interval])) by (le)\",\n              \"format\": \"heatmap\",\n              \"instant\": false,\n              \"legendFormat\": \"{{le}}\",\n              \"range\": true,\n              \"refId\": \"A\"\n            }\n          ],\n          \"title\": \"block-proposal\",\n          \"type\": \"heatmap\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"${datasource}\"\n          },\n          \"description\": \"\",\n          \"fieldConfig\": {\n            \"defaults\": {\n              \"custom\": {\n                \"hideFrom\": {\n                  \"legend\": false,\n                  \"tooltip\": false,\n                  \"viz\": false\n                },\n                \"scaleDistribution\": {\n                  \"type\": \"linear\"\n                }\n              }\n            },\n            \"overrides\": []\n          },\n          \"gridPos\": {\n            \"h\": 19,\n            \"w\": 5,\n            \"x\": 4,\n            \"y\": 35\n          },\n          \"id\": 83,\n          \"maxDataPoints\": 10,\n          \"options\": {\n            \"calculate\": false,\n            \"cellGap\": 1,\n            \"color\": {\n              \"exponent\": 0.5,\n              \"fill\": \"dark-orange\",\n              \"mode\": \"scheme\",\n              \"reverse\": false,\n              \"scale\": \"exponential\",\n              \"scheme\": \"Oranges\",\n              \"steps\": 64\n            },\n            \"exemplars\": {\n              \"color\": \"rgba(255,0,255,0.7)\"\n            },\n            \"filterValues\": {\n              \"le\": 1e-9\n            },\n            \"legend\": {\n              \"show\": true\n            },\n            \"rowsFrame\": {\n              \"layout\": \"auto\"\n            },\n            \"tooltip\": {\n              \"mode\": \"single\",\n              \"showColorScale\": false,\n              \"yHistogram\": false\n            },\n            \"yAxis\": {\n              \"axisPlacement\": \"left\",\n              \"reverse\": false\n            }\n          },\n          \"pluginVersion\": \"11.1.1\",\n          \"targets\": [\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"${datasource}\"\n              },\n              \"editorMode\": \"code\",\n              \"exemplar\": false,\n              \"expr\": \"sum(rate(duty_submission_time_bucket{duty=\\\"attestation\\\", job=\\\"$job\\\"}[$__rate_interval])) by (le)\",\n              \"format\": \"heatmap\",\n              \"instant\": false,\n              \"legendFormat\": \"{{le}}\",\n              \"range\": true,\n              \"refId\": \"A\"\n            }\n          ],\n          \"title\": \"attestation\",\n          \"type\": \"heatmap\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"${datasource}\"\n          },\n          \"description\": \"\",\n          \"fieldConfig\": {\n            \"defaults\": {\n              \"custom\": {\n                \"hideFrom\": {\n                  \"legend\": false,\n                  \"tooltip\": false,\n                  \"viz\": false\n                },\n                \"scaleDistribution\": {\n                  \"type\": \"linear\"\n                }\n              }\n            },\n            \"overrides\": []\n          },\n          \"gridPos\": {\n            \"h\": 19,\n            \"w\": 5,\n            \"x\": 9,\n            \"y\": 35\n          },\n          \"id\": 84,\n          \"maxDataPoints\": 10,\n          \"options\": {\n            \"calculate\": false,\n            \"cellGap\": 1,\n            \"color\": {\n              \"exponent\": 0.5,\n              \"fill\": \"dark-orange\",\n              \"mode\": \"scheme\",\n              \"reverse\": false,\n              \"scale\": \"exponential\",\n              \"scheme\": \"Oranges\",\n              \"steps\": 64\n            },\n            \"exemplars\": {\n              \"color\": \"rgba(255,0,255,0.7)\"\n            },\n            \"filterValues\": {\n              \"le\": 1e-9\n            },\n            \"legend\": {\n              \"show\": true\n            },\n            \"rowsFrame\": {\n              \"layout\": \"auto\"\n            },\n            \"tooltip\": {\n              \"mode\": \"single\",\n              \"showColorScale\": false,\n              \"yHistogram\": false\n            },\n            \"yAxis\": {\n              \"axisPlacement\": \"left\",\n              \"reverse\": false\n            }\n          },\n          \"pluginVersion\": \"11.1.1\",\n          \"targets\": [\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"${datasource}\"\n              },\n              \"editorMode\": \"code\",\n              \"exemplar\": false,\n              \"expr\": \"sum(rate(duty_submission_time_bucket{duty=\\\"sync-committee-message\\\", job=\\\"$job\\\"}[$__rate_interval])) by (le)\",\n              \"format\": \"heatmap\",\n              \"instant\": false,\n              \"legendFormat\": \"{{le}}\",\n              \"range\": true,\n              \"refId\": \"A\"\n            }\n          ],\n          \"title\": \"sync-committee-message\",\n          \"type\": \"heatmap\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"${datasource}\"\n          },\n          \"description\": \"\",\n          \"fieldConfig\": {\n            \"defaults\": {\n              \"custom\": {\n                \"hideFrom\": {\n                  \"legend\": false,\n                  \"tooltip\": false,\n                  \"viz\": false\n                },\n                \"scaleDistribution\": {\n                  \"type\": \"linear\"\n                }\n              }\n            },\n            \"overrides\": []\n          },\n          \"gridPos\": {\n            \"h\": 19,\n            \"w\": 5,\n            \"x\": 14,\n            \"y\": 35\n          },\n          \"id\": 85,\n          \"maxDataPoints\": 10,\n          \"options\": {\n            \"calculate\": false,\n            \"cellGap\": 1,\n            \"color\": {\n              \"exponent\": 0.5,\n              \"fill\": \"dark-orange\",\n              \"mode\": \"scheme\",\n              \"reverse\": false,\n              \"scale\": \"exponential\",\n              \"scheme\": \"Oranges\",\n              \"steps\": 64\n            },\n            \"exemplars\": {\n              \"color\": \"rgba(255,0,255,0.7)\"\n            },\n            \"filterValues\": {\n              \"le\": 1e-9\n            },\n            \"legend\": {\n              \"show\": true\n            },\n            \"rowsFrame\": {\n              \"layout\": \"auto\"\n            },\n            \"tooltip\": {\n              \"mode\": \"single\",\n              \"showColorScale\": false,\n              \"yHistogram\": false\n            },\n            \"yAxis\": {\n              \"axisPlacement\": \"left\",\n              \"reverse\": false\n            }\n          },\n          \"pluginVersion\": \"11.1.1\",\n          \"targets\": [\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"${datasource}\"\n              },\n              \"editorMode\": \"code\",\n              \"exemplar\": false,\n              \"expr\": \"sum(rate(duty_submission_time_bucket{duty=\\\"attestation-aggregation\\\", job=\\\"$job\\\"}[$__rate_interval])) by (le)\",\n              \"format\": \"heatmap\",\n              \"instant\": false,\n              \"legendFormat\": \"{{le}}\",\n              \"range\": true,\n              \"refId\": \"A\"\n            }\n          ],\n          \"title\": \"attestation-aggregation\",\n          \"type\": \"heatmap\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"${datasource}\"\n          },\n          \"description\": \"\",\n          \"fieldConfig\": {\n            \"defaults\": {\n              \"custom\": {\n                \"hideFrom\": {\n                  \"legend\": false,\n                  \"tooltip\": false,\n                  \"viz\": false\n                },\n                \"scaleDistribution\": {\n                  \"type\": \"linear\"\n                }\n              }\n            },\n            \"overrides\": []\n          },\n          \"gridPos\": {\n            \"h\": 19,\n            \"w\": 5,\n            \"x\": 19,\n            \"y\": 35\n          },\n          \"id\": 86,\n          \"maxDataPoints\": 10,\n          \"options\": {\n            \"calculate\": false,\n            \"cellGap\": 1,\n            \"color\": {\n              \"exponent\": 0.5,\n              \"fill\": \"dark-orange\",\n              \"mode\": \"scheme\",\n              \"reverse\": false,\n              \"scale\": \"exponential\",\n              \"scheme\": \"Oranges\",\n              \"steps\": 64\n            },\n            \"exemplars\": {\n              \"color\": \"rgba(255,0,255,0.7)\"\n            },\n            \"filterValues\": {\n              \"le\": 1e-9\n            },\n            \"legend\": {\n              \"show\": true\n            },\n            \"rowsFrame\": {\n              \"layout\": \"auto\"\n            },\n            \"tooltip\": {\n              \"mode\": \"single\",\n              \"showColorScale\": false,\n              \"yHistogram\": false\n            },\n            \"yAxis\": {\n              \"axisPlacement\": \"left\",\n              \"reverse\": false\n            }\n          },\n          \"pluginVersion\": \"11.1.1\",\n          \"targets\": [\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"${datasource}\"\n              },\n              \"editorMode\": \"code\",\n              \"exemplar\": false,\n              \"expr\": \"sum(rate(duty_submission_time_bucket{duty=\\\"sync-committee-contribution\\\", job=\\\"$job\\\"}[$__rate_interval])) by (le)\",\n              \"format\": \"heatmap\",\n              \"instant\": false,\n              \"legendFormat\": \"{{le}}\",\n              \"range\": true,\n              \"refId\": \"A\"\n            }\n          ],\n          \"title\": \"sync-committee-contribution\",\n          \"type\": \"heatmap\"\n        }\n      ],\n      \"title\": \"Duty Submission Time\",\n      \"type\": \"row\"\n    },\n    {\n      \"collapsed\": true,\n      \"gridPos\": {\n        \"h\": 1,\n        \"w\": 24,\n        \"x\": 0,\n        \"y\": 21\n      },\n      \"id\": 10,\n      \"panels\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"${datasource}\"\n          },\n          \"fieldConfig\": {\n            \"defaults\": {\n              \"color\": {\n                \"mode\": \"thresholds\"\n              },\n              \"mappings\": [],\n              \"thresholds\": {\n                \"mode\": \"absolute\",\n                \"steps\": [\n                  {\n                    \"color\": \"green\"\n                  }\n                ]\n              }\n            },\n            \"overrides\": []\n          },\n          \"gridPos\": {\n            \"h\": 4,\n            \"w\": 4,\n            \"x\": 0,\n            \"y\": 38\n          },\n          \"id\": 131,\n          \"options\": {\n            \"colorMode\": \"value\",\n            \"graphMode\": \"area\",\n            \"justifyMode\": \"auto\",\n            \"orientation\": \"auto\",\n            \"percentChangeColorMode\": \"standard\",\n            \"reduceOptions\": {\n              \"calcs\": [\n                \"last\"\n              ],\n              \"fields\": \"\",\n              \"values\": false\n            },\n            \"showPercentChange\": false,\n            \"textMode\": \"name\",\n            \"wideLayout\": true\n          },\n          \"pluginVersion\": \"11.1.1\",\n          \"targets\": [\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"${datasource}\"\n              },\n              \"editorMode\": \"code\",\n              \"expr\": \"beacon_node_version{job=\\\"$job\\\", host=~\\\"$beacon_node_host\\\"}\",\n              \"instant\": false,\n              \"legendFormat\": \"{{ version }}\",\n              \"range\": true,\n              \"refId\": \"A\"\n            }\n          ],\n          \"title\": \"Version\",\n          \"type\": \"stat\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"${datasource}\"\n          },\n          \"description\": \"\",\n          \"fieldConfig\": {\n            \"defaults\": {\n              \"color\": {\n                \"mode\": \"palette-classic\"\n              },\n              \"custom\": {\n                \"axisBorderShow\": false,\n                \"axisCenteredZero\": false,\n                \"axisColorMode\": \"text\",\n                \"axisLabel\": \"\",\n                \"axisPlacement\": \"auto\",\n                \"barAlignment\": 0,\n                \"drawStyle\": \"line\",\n                \"fillOpacity\": 0,\n                \"gradientMode\": \"none\",\n                \"hideFrom\": {\n                  \"legend\": false,\n                  \"tooltip\": false,\n                  \"viz\": false\n                },\n                \"insertNulls\": false,\n                \"lineInterpolation\": \"linear\",\n                \"lineWidth\": 1,\n                \"pointSize\": 5,\n                \"scaleDistribution\": {\n                  \"type\": \"linear\"\n                },\n                \"showPoints\": \"auto\",\n                \"spanNulls\": false,\n                \"stacking\": {\n                  \"group\": \"A\",\n                  \"mode\": \"none\"\n                },\n                \"thresholdsStyle\": {\n                  \"mode\": \"off\"\n                }\n              },\n              \"mappings\": [],\n              \"thresholds\": {\n                \"mode\": \"absolute\",\n                \"steps\": [\n                  {\n                    \"color\": \"green\"\n                  }\n                ]\n              },\n              \"unit\": \"none\"\n            },\n            \"overrides\": []\n          },\n          \"gridPos\": {\n            \"h\": 20,\n            \"w\": 10,\n            \"x\": 4,\n            \"y\": 38\n          },\n          \"id\": 7,\n          \"maxDataPoints\": 100,\n          \"options\": {\n            \"legend\": {\n              \"calcs\": [],\n              \"displayMode\": \"list\",\n              \"placement\": \"bottom\",\n              \"showLegend\": true\n            },\n            \"tooltip\": {\n              \"maxHeight\": 600,\n              \"mode\": \"multi\",\n              \"sort\": \"none\"\n            }\n          },\n          \"targets\": [\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"${datasource}\"\n              },\n              \"editorMode\": \"code\",\n              \"expr\": \"sum(increase(requests_total{service_type=\\\"beacon_node\\\", host=~\\\"$beacon_node_host\\\", job=\\\"$job\\\"}[$__interval])) by (status, method, path)\",\n              \"instant\": false,\n              \"legendFormat\": \"{{status}} {{method}} {{path}}\",\n              \"range\": true,\n              \"refId\": \"A\"\n            }\n          ],\n          \"title\": \"Requests [$__interval]\",\n          \"type\": \"timeseries\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"${datasource}\"\n          },\n          \"description\": \"\",\n          \"fieldConfig\": {\n            \"defaults\": {\n              \"color\": {\n                \"mode\": \"palette-classic\"\n              },\n              \"custom\": {\n                \"axisBorderShow\": false,\n                \"axisCenteredZero\": false,\n                \"axisColorMode\": \"text\",\n                \"axisLabel\": \"\",\n                \"axisPlacement\": \"auto\",\n                \"axisSoftMin\": 0,\n                \"barAlignment\": 0,\n                \"drawStyle\": \"line\",\n                \"fillOpacity\": 0,\n                \"gradientMode\": \"none\",\n                \"hideFrom\": {\n                  \"legend\": false,\n                  \"tooltip\": false,\n                  \"viz\": false\n                },\n                \"insertNulls\": false,\n                \"lineInterpolation\": \"linear\",\n                \"lineWidth\": 1,\n                \"pointSize\": 5,\n                \"scaleDistribution\": {\n                  \"type\": \"linear\"\n                },\n                \"showPoints\": \"auto\",\n                \"spanNulls\": false,\n                \"stacking\": {\n                  \"group\": \"A\",\n                  \"mode\": \"none\"\n                },\n                \"thresholdsStyle\": {\n                  \"mode\": \"off\"\n                }\n              },\n              \"mappings\": [],\n              \"thresholds\": {\n                \"mode\": \"absolute\",\n                \"steps\": [\n                  {\n                    \"color\": \"green\"\n                  }\n                ]\n              },\n              \"unit\": \"s\"\n            },\n            \"overrides\": []\n          },\n          \"gridPos\": {\n            \"h\": 20,\n            \"w\": 10,\n            \"x\": 14,\n            \"y\": 38\n          },\n          \"id\": 39,\n          \"maxDataPoints\": 100,\n          \"options\": {\n            \"legend\": {\n              \"calcs\": [],\n              \"displayMode\": \"list\",\n              \"placement\": \"bottom\",\n              \"showLegend\": true\n            },\n            \"tooltip\": {\n              \"maxHeight\": 600,\n              \"mode\": \"single\",\n              \"sort\": \"none\"\n            }\n          },\n          \"targets\": [\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"${datasource}\"\n              },\n              \"editorMode\": \"code\",\n              \"expr\": \"rate(request_duration_seconds_sum{service_type=\\\"beacon_node\\\", host=~\\\"$beacon_node_host\\\", job=\\\"$job\\\"}[$__rate_interval])\\n/\\nrate(request_duration_seconds_count[$__rate_interval])\",\n              \"instant\": false,\n              \"legendFormat\": \"{{ status}} {{ method }} {{ path }}\",\n              \"range\": true,\n              \"refId\": \"A\"\n            }\n          ],\n          \"title\": \"Request Duration\",\n          \"type\": \"timeseries\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"${datasource}\"\n          },\n          \"description\": \"\",\n          \"fieldConfig\": {\n            \"defaults\": {\n              \"color\": {\n                \"mode\": \"thresholds\"\n              },\n              \"custom\": {\n                \"axisBorderShow\": false,\n                \"axisCenteredZero\": false,\n                \"axisColorMode\": \"text\",\n                \"axisLabel\": \"\",\n                \"axisPlacement\": \"auto\",\n                \"axisSoftMax\": 100,\n                \"axisSoftMin\": 0,\n                \"barAlignment\": 0,\n                \"drawStyle\": \"line\",\n                \"fillOpacity\": 0,\n                \"gradientMode\": \"none\",\n                \"hideFrom\": {\n                  \"legend\": false,\n                  \"tooltip\": false,\n                  \"viz\": false\n                },\n                \"insertNulls\": false,\n                \"lineInterpolation\": \"linear\",\n                \"lineWidth\": 1,\n                \"pointSize\": 5,\n                \"scaleDistribution\": {\n                  \"type\": \"linear\"\n                },\n                \"showPoints\": \"auto\",\n                \"spanNulls\": false,\n                \"stacking\": {\n                  \"group\": \"A\",\n                  \"mode\": \"none\"\n                },\n                \"thresholdsStyle\": {\n                  \"mode\": \"off\"\n                }\n              },\n              \"mappings\": [],\n              \"thresholds\": {\n                \"mode\": \"absolute\",\n                \"steps\": [\n                  {\n                    \"color\": \"red\"\n                  },\n                  {\n                    \"color\": \"#EAB839\",\n                    \"value\": 90\n                  },\n                  {\n                    \"color\": \"green\",\n                    \"value\": 100\n                  }\n                ]\n              },\n              \"unit\": \"none\"\n            },\n            \"overrides\": []\n          },\n          \"gridPos\": {\n            \"h\": 16,\n            \"w\": 4,\n            \"x\": 0,\n            \"y\": 42\n          },\n          \"id\": 60,\n          \"options\": {\n            \"legend\": {\n              \"calcs\": [],\n              \"displayMode\": \"list\",\n              \"placement\": \"bottom\",\n              \"showLegend\": false\n            },\n            \"tooltip\": {\n              \"mode\": \"single\",\n              \"sort\": \"none\"\n            }\n          },\n          \"targets\": [\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"${datasource}\"\n              },\n              \"editorMode\": \"code\",\n              \"expr\": \"beacon_node_score{job=\\\"$job\\\", host=~\\\"$beacon_node_host\\\"}\",\n              \"instant\": false,\n              \"legendFormat\": \"__auto\",\n              \"range\": true,\n              \"refId\": \"A\"\n            }\n          ],\n          \"title\": \"Score\",\n          \"type\": \"timeseries\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"${datasource}\"\n          },\n          \"description\": \"\",\n          \"fieldConfig\": {\n            \"defaults\": {\n              \"color\": {\n                \"mode\": \"thresholds\"\n              },\n              \"custom\": {\n                \"fillOpacity\": 70,\n                \"hideFrom\": {\n                  \"legend\": false,\n                  \"tooltip\": false,\n                  \"viz\": false\n                },\n                \"lineWidth\": 1\n              },\n              \"mappings\": [],\n              \"thresholds\": {\n                \"mode\": \"absolute\",\n                \"steps\": [\n                  {\n                    \"color\": \"green\"\n                  }\n                ]\n              }\n            },\n            \"overrides\": [\n              {\n                \"matcher\": {\n                  \"id\": \"byRegexp\",\n                  \"options\": \"/.*Slashing.*/\"\n                },\n                \"properties\": [\n                  {\n                    \"id\": \"color\",\n                    \"value\": {\n                      \"fixedColor\": \"orange\",\n                      \"mode\": \"fixed\"\n                    }\n                  }\n                ]\n              }\n            ]\n          },\n          \"gridPos\": {\n            \"h\": 6,\n            \"w\": 24,\n            \"x\": 0,\n            \"y\": 58\n          },\n          \"id\": 49,\n          \"maxDataPoints\": 100,\n          \"options\": {\n            \"colWidth\": 0.9,\n            \"legend\": {\n              \"displayMode\": \"list\",\n              \"placement\": \"bottom\",\n              \"showLegend\": false\n            },\n            \"rowHeight\": 0.9,\n            \"showValue\": \"never\",\n            \"tooltip\": {\n              \"mode\": \"single\",\n              \"sort\": \"none\"\n            }\n          },\n          \"pluginVersion\": \"10.2.6\",\n          \"targets\": [\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"${datasource}\"\n              },\n              \"editorMode\": \"code\",\n              \"expr\": \"round(increase(vc_processed_beacon_node_events_total{job=\\\"$job\\\", host=~\\\"$beacon_node_host\\\"}[$__interval])) > 0\",\n              \"format\": \"time_series\",\n              \"instant\": false,\n              \"legendFormat\": \"{{ event_type }}\",\n              \"range\": true,\n              \"refId\": \"A\"\n            }\n          ],\n          \"title\": \"Processed beacon node events [$__interval]\",\n          \"type\": \"status-history\"\n        }\n      ],\n      \"repeat\": \"beacon_node_host\",\n      \"repeatDirection\": \"h\",\n      \"title\": \"Beacon node - $beacon_node_host\",\n      \"type\": \"row\"\n    },\n    {\n      \"collapsed\": true,\n      \"gridPos\": {\n        \"h\": 1,\n        \"w\": 24,\n        \"x\": 0,\n        \"y\": 24\n      },\n      \"id\": 13,\n      \"panels\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"${datasource}\"\n          },\n          \"description\": \"\",\n          \"fieldConfig\": {\n            \"defaults\": {\n              \"color\": {\n                \"mode\": \"palette-classic\"\n              },\n              \"custom\": {\n                \"axisBorderShow\": false,\n                \"axisCenteredZero\": false,\n                \"axisColorMode\": \"text\",\n                \"axisLabel\": \"\",\n                \"axisPlacement\": \"auto\",\n                \"axisSoftMin\": 0,\n                \"barAlignment\": 0,\n                \"drawStyle\": \"line\",\n                \"fillOpacity\": 0,\n                \"gradientMode\": \"none\",\n                \"hideFrom\": {\n                  \"legend\": false,\n                  \"tooltip\": false,\n                  \"viz\": false\n                },\n                \"insertNulls\": false,\n                \"lineInterpolation\": \"linear\",\n                \"lineWidth\": 1,\n                \"pointSize\": 5,\n                \"scaleDistribution\": {\n                  \"type\": \"linear\"\n                },\n                \"showPoints\": \"auto\",\n                \"spanNulls\": false,\n                \"stacking\": {\n                  \"group\": \"A\",\n                  \"mode\": \"none\"\n                },\n                \"thresholdsStyle\": {\n                  \"mode\": \"off\"\n                }\n              },\n              \"mappings\": [],\n              \"thresholds\": {\n                \"mode\": \"absolute\",\n                \"steps\": [\n                  {\n                    \"color\": \"green\"\n                  }\n                ]\n              },\n              \"unit\": \"s\"\n            },\n            \"overrides\": []\n          },\n          \"gridPos\": {\n            \"h\": 14,\n            \"w\": 12,\n            \"x\": 0,\n            \"y\": 94\n          },\n          \"id\": 69,\n          \"maxDataPoints\": 100,\n          \"options\": {\n            \"legend\": {\n              \"calcs\": [],\n              \"displayMode\": \"list\",\n              \"placement\": \"bottom\",\n              \"showLegend\": true\n            },\n            \"tooltip\": {\n              \"maxHeight\": 600,\n              \"mode\": \"single\",\n              \"sort\": \"none\"\n            }\n          },\n          \"targets\": [\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"${datasource}\"\n              },\n              \"editorMode\": \"code\",\n              \"expr\": \"rate(request_duration_seconds_sum{service_type=\\\"remote_signer\\\", job=\\\"$job\\\", request_type!=\\\"None\\\"}[$__rate_interval])\\n/\\nrate(request_duration_seconds_count[$__rate_interval])\",\n              \"instant\": false,\n              \"interval\": \"\",\n              \"legendFormat\": \"{{ request_type }}\",\n              \"range\": true,\n              \"refId\": \"A\"\n            }\n          ],\n          \"title\": \"Signing Request Duration\",\n          \"transformations\": [\n            {\n              \"id\": \"renameByRegex\",\n              \"options\": {\n                \"regex\": \"(.*)SignableMessage\",\n                \"renamePattern\": \"$1\"\n              }\n            }\n          ],\n          \"type\": \"timeseries\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"${datasource}\"\n          },\n          \"description\": \"\",\n          \"fieldConfig\": {\n            \"defaults\": {\n              \"color\": {\n                \"mode\": \"palette-classic\"\n              },\n              \"custom\": {\n                \"axisBorderShow\": false,\n                \"axisCenteredZero\": false,\n                \"axisColorMode\": \"text\",\n                \"axisLabel\": \"\",\n                \"axisPlacement\": \"auto\",\n                \"barAlignment\": 0,\n                \"drawStyle\": \"line\",\n                \"fillOpacity\": 0,\n                \"gradientMode\": \"none\",\n                \"hideFrom\": {\n                  \"legend\": false,\n                  \"tooltip\": false,\n                  \"viz\": false\n                },\n                \"insertNulls\": false,\n                \"lineInterpolation\": \"linear\",\n                \"lineWidth\": 1,\n                \"pointSize\": 5,\n                \"scaleDistribution\": {\n                  \"type\": \"linear\"\n                },\n                \"showPoints\": \"auto\",\n                \"spanNulls\": false,\n                \"stacking\": {\n                  \"group\": \"A\",\n                  \"mode\": \"none\"\n                },\n                \"thresholdsStyle\": {\n                  \"mode\": \"off\"\n                }\n              },\n              \"mappings\": [],\n              \"thresholds\": {\n                \"mode\": \"absolute\",\n                \"steps\": [\n                  {\n                    \"color\": \"green\"\n                  }\n                ]\n              },\n              \"unit\": \"none\"\n            },\n            \"overrides\": []\n          },\n          \"gridPos\": {\n            \"h\": 7,\n            \"w\": 12,\n            \"x\": 12,\n            \"y\": 94\n          },\n          \"id\": 42,\n          \"maxDataPoints\": 100,\n          \"options\": {\n            \"legend\": {\n              \"calcs\": [],\n              \"displayMode\": \"list\",\n              \"placement\": \"bottom\",\n              \"showLegend\": true\n            },\n            \"tooltip\": {\n              \"maxHeight\": 600,\n              \"mode\": \"single\",\n              \"sort\": \"none\"\n            }\n          },\n          \"targets\": [\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"${datasource}\"\n              },\n              \"editorMode\": \"code\",\n              \"expr\": \"sum(increase(requests_total{service_type=\\\"remote_signer\\\", job=\\\"$job\\\"}[$__interval])) by (status, method, path)\",\n              \"instant\": false,\n              \"interval\": \"\",\n              \"legendFormat\": \"{{status}} {{method}} {{path}}\",\n              \"range\": true,\n              \"refId\": \"A\"\n            }\n          ],\n          \"title\": \"Requests [$__interval]\",\n          \"type\": \"timeseries\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"${datasource}\"\n          },\n          \"description\": \"\",\n          \"fieldConfig\": {\n            \"defaults\": {\n              \"color\": {\n                \"mode\": \"palette-classic\"\n              },\n              \"custom\": {\n                \"axisBorderShow\": false,\n                \"axisCenteredZero\": false,\n                \"axisColorMode\": \"text\",\n                \"axisLabel\": \"\",\n                \"axisPlacement\": \"auto\",\n                \"barAlignment\": 0,\n                \"drawStyle\": \"line\",\n                \"fillOpacity\": 0,\n                \"gradientMode\": \"none\",\n                \"hideFrom\": {\n                  \"legend\": false,\n                  \"tooltip\": false,\n                  \"viz\": false\n                },\n                \"insertNulls\": false,\n                \"lineInterpolation\": \"linear\",\n                \"lineWidth\": 1,\n                \"pointSize\": 5,\n                \"scaleDistribution\": {\n                  \"type\": \"linear\"\n                },\n                \"showPoints\": \"auto\",\n                \"spanNulls\": false,\n                \"stacking\": {\n                  \"group\": \"A\",\n                  \"mode\": \"none\"\n                },\n                \"thresholdsStyle\": {\n                  \"mode\": \"off\"\n                }\n              },\n              \"mappings\": [],\n              \"thresholds\": {\n                \"mode\": \"absolute\",\n                \"steps\": [\n                  {\n                    \"color\": \"green\"\n                  }\n                ]\n              },\n              \"unit\": \"none\"\n            },\n            \"overrides\": []\n          },\n          \"gridPos\": {\n            \"h\": 7,\n            \"w\": 12,\n            \"x\": 12,\n            \"y\": 101\n          },\n          \"id\": 41,\n          \"maxDataPoints\": 100,\n          \"options\": {\n            \"legend\": {\n              \"calcs\": [],\n              \"displayMode\": \"list\",\n              \"placement\": \"bottom\",\n              \"showLegend\": true\n            },\n            \"tooltip\": {\n              \"maxHeight\": 600,\n              \"mode\": \"single\",\n              \"sort\": \"none\"\n            }\n          },\n          \"pluginVersion\": \"10.2.6\",\n          \"targets\": [\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"${datasource}\"\n              },\n              \"editorMode\": \"code\",\n              \"expr\": \"increase(signed_messages_total{job=\\\"$job\\\"}[$__interval])\",\n              \"instant\": false,\n              \"interval\": \"\",\n              \"legendFormat\": \"{{ signable_message_type }}\",\n              \"range\": true,\n              \"refId\": \"A\"\n            }\n          ],\n          \"title\": \"Signed Messages [$__interval]\",\n          \"transformations\": [\n            {\n              \"id\": \"renameByRegex\",\n              \"options\": {\n                \"regex\": \"(.*)SignableMessage\",\n                \"renamePattern\": \"$1\"\n              }\n            }\n          ],\n          \"type\": \"timeseries\"\n        }\n      ],\n      \"title\": \"Remote signer\",\n      \"type\": \"row\"\n    },\n    {\n      \"collapsed\": true,\n      \"gridPos\": {\n        \"h\": 1,\n        \"w\": 24,\n        \"x\": 0,\n        \"y\": 25\n      },\n      \"id\": 38,\n      \"panels\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"${datasource}\"\n          },\n          \"description\": \"\",\n          \"fieldConfig\": {\n            \"defaults\": {\n              \"color\": {\n                \"mode\": \"continuous-GrYlRd\"\n              },\n              \"custom\": {\n                \"fillOpacity\": 70,\n                \"hideFrom\": {\n                  \"legend\": false,\n                  \"tooltip\": false,\n                  \"viz\": false\n                },\n                \"lineWidth\": 1\n              },\n              \"mappings\": [],\n              \"max\": 1,\n              \"thresholds\": {\n                \"mode\": \"absolute\",\n                \"steps\": [\n                  {\n                    \"color\": \"green\"\n                  }\n                ]\n              }\n            },\n            \"overrides\": []\n          },\n          \"gridPos\": {\n            \"h\": 12,\n            \"w\": 24,\n            \"x\": 0,\n            \"y\": 42\n          },\n          \"id\": 36,\n          \"maxDataPoints\": 20,\n          \"options\": {\n            \"colWidth\": 0.9,\n            \"legend\": {\n              \"displayMode\": \"list\",\n              \"placement\": \"bottom\",\n              \"showLegend\": false\n            },\n            \"rowHeight\": 0.9,\n            \"showValue\": \"never\",\n            \"tooltip\": {\n              \"mode\": \"single\",\n              \"sort\": \"none\"\n            }\n          },\n          \"pluginVersion\": \"10.2.6\",\n          \"targets\": [\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"${datasource}\"\n              },\n              \"editorMode\": \"code\",\n              \"expr\": \"round(increase(errors_total{job=\\\"$job\\\"}[$__interval]))\",\n              \"instant\": false,\n              \"legendFormat\": \"{{ error_type }}\",\n              \"range\": true,\n              \"refId\": \"A\"\n            }\n          ],\n          \"title\": \"Errors [$__interval]\",\n          \"type\": \"status-history\"\n        }\n      ],\n      \"title\": \"Errors\",\n      \"type\": \"row\"\n    },\n    {\n      \"collapsed\": true,\n      \"gridPos\": {\n        \"h\": 1,\n        \"w\": 24,\n        \"x\": 0,\n        \"y\": 26\n      },\n      \"id\": 31,\n      \"panels\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"${datasource}\"\n          },\n          \"fieldConfig\": {\n            \"defaults\": {\n              \"color\": {\n                \"mode\": \"palette-classic\"\n              },\n              \"custom\": {\n                \"axisBorderShow\": false,\n                \"axisCenteredZero\": false,\n                \"axisColorMode\": \"text\",\n                \"axisLabel\": \"\",\n                \"axisPlacement\": \"auto\",\n                \"axisSoftMin\": 0,\n                \"barAlignment\": 0,\n                \"drawStyle\": \"line\",\n                \"fillOpacity\": 0,\n                \"gradientMode\": \"none\",\n                \"hideFrom\": {\n                  \"legend\": false,\n                  \"tooltip\": false,\n                  \"viz\": false\n                },\n                \"insertNulls\": false,\n                \"lineInterpolation\": \"linear\",\n                \"lineWidth\": 1,\n                \"pointSize\": 5,\n                \"scaleDistribution\": {\n                  \"type\": \"linear\"\n                },\n                \"showPoints\": \"auto\",\n                \"spanNulls\": false,\n                \"stacking\": {\n                  \"group\": \"A\",\n                  \"mode\": \"none\"\n                },\n                \"thresholdsStyle\": {\n                  \"mode\": \"off\"\n                }\n              },\n              \"mappings\": [],\n              \"thresholds\": {\n                \"mode\": \"absolute\",\n                \"steps\": [\n                  {\n                    \"color\": \"green\"\n                  },\n                  {\n                    \"color\": \"red\",\n                    \"value\": 80\n                  }\n                ]\n              },\n              \"unit\": \"percentunit\"\n            },\n            \"overrides\": []\n          },\n          \"gridPos\": {\n            \"h\": 8,\n            \"w\": 6,\n            \"x\": 0,\n            \"y\": 10\n          },\n          \"id\": 97,\n          \"options\": {\n            \"legend\": {\n              \"calcs\": [],\n              \"displayMode\": \"list\",\n              \"placement\": \"bottom\",\n              \"showLegend\": false\n            },\n            \"tooltip\": {\n              \"mode\": \"single\",\n              \"sort\": \"none\"\n            }\n          },\n          \"targets\": [\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"${datasource}\"\n              },\n              \"editorMode\": \"code\",\n              \"expr\": \"rate(process_cpu_seconds_total{job=\\\"$job\\\"}[$__rate_interval]) and on(job, job) vero_info\",\n              \"instant\": false,\n              \"legendFormat\": \"CPU Usage\",\n              \"range\": true,\n              \"refId\": \"A\"\n            }\n          ],\n          \"title\": \"CPU Usage - rate (Main Process)\",\n          \"type\": \"timeseries\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"${datasource}\"\n          },\n          \"fieldConfig\": {\n            \"defaults\": {\n              \"color\": {\n                \"mode\": \"palette-classic\"\n              },\n              \"custom\": {\n                \"axisBorderShow\": false,\n                \"axisCenteredZero\": false,\n                \"axisColorMode\": \"text\",\n                \"axisLabel\": \"\",\n                \"axisPlacement\": \"auto\",\n                \"axisSoftMin\": 0,\n                \"barAlignment\": 0,\n                \"drawStyle\": \"line\",\n                \"fillOpacity\": 0,\n                \"gradientMode\": \"none\",\n                \"hideFrom\": {\n                  \"legend\": false,\n                  \"tooltip\": false,\n                  \"viz\": false\n                },\n                \"insertNulls\": false,\n                \"lineInterpolation\": \"linear\",\n                \"lineWidth\": 1,\n                \"pointSize\": 5,\n                \"scaleDistribution\": {\n                  \"type\": \"linear\"\n                },\n                \"showPoints\": \"auto\",\n                \"spanNulls\": false,\n                \"stacking\": {\n                  \"group\": \"A\",\n                  \"mode\": \"none\"\n                },\n                \"thresholdsStyle\": {\n                  \"mode\": \"off\"\n                }\n              },\n              \"mappings\": [],\n              \"thresholds\": {\n                \"mode\": \"absolute\",\n                \"steps\": [\n                  {\n                    \"color\": \"green\"\n                  },\n                  {\n                    \"color\": \"red\",\n                    \"value\": 80\n                  }\n                ]\n              },\n              \"unit\": \"percentunit\"\n            },\n            \"overrides\": []\n          },\n          \"gridPos\": {\n            \"h\": 8,\n            \"w\": 6,\n            \"x\": 6,\n            \"y\": 10\n          },\n          \"id\": 98,\n          \"options\": {\n            \"legend\": {\n              \"calcs\": [],\n              \"displayMode\": \"list\",\n              \"placement\": \"bottom\",\n              \"showLegend\": false\n            },\n            \"tooltip\": {\n              \"mode\": \"single\",\n              \"sort\": \"none\"\n            }\n          },\n          \"targets\": [\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"${datasource}\"\n              },\n              \"editorMode\": \"code\",\n              \"expr\": \"irate(process_cpu_seconds_total{job=\\\"$job\\\"}[$__rate_interval]) and on(job, job) vero_info\",\n              \"instant\": false,\n              \"legendFormat\": \"CPU Usage\",\n              \"range\": true,\n              \"refId\": \"A\"\n            }\n          ],\n          \"title\": \"CPU Usage - irate (Main Process)\",\n          \"type\": \"timeseries\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"${datasource}\"\n          },\n          \"description\": \"\",\n          \"fieldConfig\": {\n            \"defaults\": {\n              \"color\": {\n                \"mode\": \"palette-classic\"\n              },\n              \"custom\": {\n                \"axisBorderShow\": false,\n                \"axisCenteredZero\": false,\n                \"axisColorMode\": \"text\",\n                \"axisLabel\": \"\",\n                \"axisPlacement\": \"auto\",\n                \"barAlignment\": 0,\n                \"drawStyle\": \"line\",\n                \"fillOpacity\": 0,\n                \"gradientMode\": \"none\",\n                \"hideFrom\": {\n                  \"legend\": false,\n                  \"tooltip\": false,\n                  \"viz\": false\n                },\n                \"insertNulls\": false,\n                \"lineInterpolation\": \"linear\",\n                \"lineWidth\": 1,\n                \"pointSize\": 5,\n                \"scaleDistribution\": {\n                  \"type\": \"linear\"\n                },\n                \"showPoints\": \"auto\",\n                \"spanNulls\": false,\n                \"stacking\": {\n                  \"group\": \"A\",\n                  \"mode\": \"none\"\n                },\n                \"thresholdsStyle\": {\n                  \"mode\": \"off\"\n                }\n              },\n              \"mappings\": [],\n              \"thresholds\": {\n                \"mode\": \"absolute\",\n                \"steps\": [\n                  {\n                    \"color\": \"green\"\n                  }\n                ]\n              },\n              \"unit\": \"decbytes\"\n            },\n            \"overrides\": []\n          },\n          \"gridPos\": {\n            \"h\": 8,\n            \"w\": 6,\n            \"x\": 12,\n            \"y\": 10\n          },\n          \"id\": 120,\n          \"options\": {\n            \"legend\": {\n              \"calcs\": [],\n              \"displayMode\": \"list\",\n              \"placement\": \"bottom\",\n              \"showLegend\": false\n            },\n            \"tooltip\": {\n              \"mode\": \"single\",\n              \"sort\": \"none\"\n            }\n          },\n          \"targets\": [\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"${datasource}\"\n              },\n              \"editorMode\": \"code\",\n              \"expr\": \"process_resident_memory_bytes{job=\\\"$job\\\"} and on(job, job) vero_info\",\n              \"instant\": false,\n              \"legendFormat\": \"Resident Memory\",\n              \"range\": true,\n              \"refId\": \"A\"\n            }\n          ],\n          \"title\": \"Resident Memory (Main Process)\",\n          \"type\": \"timeseries\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"${datasource}\"\n          },\n          \"description\": \"\",\n          \"fieldConfig\": {\n            \"defaults\": {\n              \"color\": {\n                \"mode\": \"thresholds\"\n              },\n              \"mappings\": [],\n              \"thresholds\": {\n                \"mode\": \"absolute\",\n                \"steps\": [\n                  {\n                    \"color\": \"red\"\n                  },\n                  {\n                    \"color\": \"#EAB839\",\n                    \"value\": 300\n                  },\n                  {\n                    \"color\": \"green\",\n                    \"value\": 1920\n                  }\n                ]\n              },\n              \"unit\": \"s\"\n            },\n            \"overrides\": []\n          },\n          \"gridPos\": {\n            \"h\": 8,\n            \"w\": 6,\n            \"x\": 18,\n            \"y\": 10\n          },\n          \"id\": 79,\n          \"options\": {\n            \"colorMode\": \"value\",\n            \"graphMode\": \"area\",\n            \"justifyMode\": \"auto\",\n            \"orientation\": \"auto\",\n            \"percentChangeColorMode\": \"standard\",\n            \"reduceOptions\": {\n              \"calcs\": [\n                \"last\"\n              ],\n              \"fields\": \"\",\n              \"values\": false\n            },\n            \"showPercentChange\": false,\n            \"textMode\": \"auto\",\n            \"wideLayout\": true\n          },\n          \"pluginVersion\": \"11.1.1\",\n          \"targets\": [\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"${datasource}\"\n              },\n              \"editorMode\": \"code\",\n              \"exemplar\": false,\n              \"expr\": \"time() - process_start_time_seconds{job=\\\"$job\\\"} and on(job, job) vero_info\",\n              \"instant\": true,\n              \"legendFormat\": \"__auto\",\n              \"range\": false,\n              \"refId\": \"A\"\n            }\n          ],\n          \"title\": \"Uptime (Main Process)\",\n          \"type\": \"stat\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"${datasource}\"\n          },\n          \"description\": \"\",\n          \"fieldConfig\": {\n            \"defaults\": {\n              \"color\": {\n                \"mode\": \"palette-classic\"\n              },\n              \"custom\": {\n                \"axisBorderShow\": false,\n                \"axisCenteredZero\": false,\n                \"axisColorMode\": \"text\",\n                \"axisLabel\": \"\",\n                \"axisPlacement\": \"auto\",\n                \"barAlignment\": 0,\n                \"drawStyle\": \"line\",\n                \"fillOpacity\": 0,\n                \"gradientMode\": \"none\",\n                \"hideFrom\": {\n                  \"legend\": false,\n                  \"tooltip\": false,\n                  \"viz\": false\n                },\n                \"insertNulls\": false,\n                \"lineInterpolation\": \"linear\",\n                \"lineWidth\": 1,\n                \"pointSize\": 5,\n                \"scaleDistribution\": {\n                  \"type\": \"linear\"\n                },\n                \"showPoints\": \"auto\",\n                \"spanNulls\": false,\n                \"stacking\": {\n                  \"group\": \"A\",\n                  \"mode\": \"none\"\n                },\n                \"thresholdsStyle\": {\n                  \"mode\": \"off\"\n                }\n              },\n              \"mappings\": [],\n              \"thresholds\": {\n                \"mode\": \"absolute\",\n                \"steps\": [\n                  {\n                    \"color\": \"green\"\n                  },\n                  {\n                    \"color\": \"red\",\n                    \"value\": 80\n                  }\n                ]\n              },\n              \"unit\": \"s\"\n            },\n            \"overrides\": []\n          },\n          \"gridPos\": {\n            \"h\": 8,\n            \"w\": 12,\n            \"x\": 0,\n            \"y\": 18\n          },\n          \"id\": 30,\n          \"options\": {\n            \"legend\": {\n              \"calcs\": [],\n              \"displayMode\": \"list\",\n              \"placement\": \"bottom\",\n              \"showLegend\": true\n            },\n            \"tooltip\": {\n              \"mode\": \"multi\",\n              \"sort\": \"none\"\n            }\n          },\n          \"targets\": [\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"${datasource}\"\n              },\n              \"editorMode\": \"code\",\n              \"expr\": \"histogram_quantile(0.99, rate(event_loop_lag_seconds_bucket{job=\\\"$job\\\"}[$__rate_interval])) and on(job, job) vero_info\",\n              \"instant\": false,\n              \"legendFormat\": \"{{ time_since_slot_start }}s into slot\",\n              \"range\": true,\n              \"refId\": \"A\"\n            }\n          ],\n          \"title\": \"Event Loop Lag - 99% quantile (Main Process)\",\n          \"type\": \"timeseries\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"${datasource}\"\n          },\n          \"description\": \"\",\n          \"fieldConfig\": {\n            \"defaults\": {\n              \"color\": {\n                \"mode\": \"palette-classic\"\n              },\n              \"custom\": {\n                \"axisBorderShow\": false,\n                \"axisCenteredZero\": false,\n                \"axisColorMode\": \"text\",\n                \"axisLabel\": \"\",\n                \"axisPlacement\": \"auto\",\n                \"barAlignment\": 0,\n                \"drawStyle\": \"line\",\n                \"fillOpacity\": 0,\n                \"gradientMode\": \"none\",\n                \"hideFrom\": {\n                  \"legend\": false,\n                  \"tooltip\": false,\n                  \"viz\": false\n                },\n                \"insertNulls\": false,\n                \"lineInterpolation\": \"linear\",\n                \"lineWidth\": 1,\n                \"pointSize\": 5,\n                \"scaleDistribution\": {\n                  \"type\": \"linear\"\n                },\n                \"showPoints\": \"auto\",\n                \"spanNulls\": false,\n                \"stacking\": {\n                  \"group\": \"A\",\n                  \"mode\": \"none\"\n                },\n                \"thresholdsStyle\": {\n                  \"mode\": \"off\"\n                }\n              },\n              \"mappings\": [],\n              \"thresholds\": {\n                \"mode\": \"absolute\",\n                \"steps\": [\n                  {\n                    \"color\": \"green\"\n                  }\n                ]\n              },\n              \"unit\": \"none\"\n            },\n            \"overrides\": []\n          },\n          \"gridPos\": {\n            \"h\": 8,\n            \"w\": 12,\n            \"x\": 12,\n            \"y\": 18\n          },\n          \"id\": 32,\n          \"options\": {\n            \"legend\": {\n              \"calcs\": [],\n              \"displayMode\": \"list\",\n              \"placement\": \"bottom\",\n              \"showLegend\": false\n            },\n            \"tooltip\": {\n              \"mode\": \"single\",\n              \"sort\": \"none\"\n            }\n          },\n          \"pluginVersion\": \"10.2.6\",\n          \"targets\": [\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"${datasource}\"\n              },\n              \"editorMode\": \"code\",\n              \"expr\": \"event_loop_tasks{job=\\\"$job\\\"} and on(job, job) vero_info\",\n              \"instant\": false,\n              \"legendFormat\": \"Tasks\",\n              \"range\": true,\n              \"refId\": \"A\"\n            }\n          ],\n          \"title\": \"Event Loop Tasks (Main Process)\",\n          \"type\": \"timeseries\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"${datasource}\"\n          },\n          \"description\": \"\",\n          \"fieldConfig\": {\n            \"defaults\": {\n              \"color\": {\n                \"mode\": \"palette-classic\"\n              },\n              \"custom\": {\n                \"axisBorderShow\": false,\n                \"axisCenteredZero\": false,\n                \"axisColorMode\": \"text\",\n                \"axisLabel\": \"\",\n                \"axisPlacement\": \"auto\",\n                \"barAlignment\": 0,\n                \"drawStyle\": \"line\",\n                \"fillOpacity\": 0,\n                \"gradientMode\": \"none\",\n                \"hideFrom\": {\n                  \"legend\": false,\n                  \"tooltip\": false,\n                  \"viz\": false\n                },\n                \"insertNulls\": false,\n                \"lineInterpolation\": \"linear\",\n                \"lineWidth\": 1,\n                \"pointSize\": 5,\n                \"scaleDistribution\": {\n                  \"type\": \"linear\"\n                },\n                \"showPoints\": \"auto\",\n                \"spanNulls\": false,\n                \"stacking\": {\n                  \"group\": \"A\",\n                  \"mode\": \"none\"\n                },\n                \"thresholdsStyle\": {\n                  \"mode\": \"off\"\n                }\n              },\n              \"mappings\": [],\n              \"thresholds\": {\n                \"mode\": \"absolute\",\n                \"steps\": [\n                  {\n                    \"color\": \"green\"\n                  },\n                  {\n                    \"color\": \"red\",\n                    \"value\": 80\n                  }\n                ]\n              }\n            },\n            \"overrides\": []\n          },\n          \"gridPos\": {\n            \"h\": 8,\n            \"w\": 24,\n            \"x\": 0,\n            \"y\": 26\n          },\n          \"id\": 78,\n          \"options\": {\n            \"legend\": {\n              \"calcs\": [],\n              \"displayMode\": \"list\",\n              \"placement\": \"bottom\",\n              \"showLegend\": true\n            },\n            \"tooltip\": {\n              \"mode\": \"single\",\n              \"sort\": \"none\"\n            }\n          },\n          \"targets\": [\n            {\n              \"datasource\": {\n                \"type\": \"prometheus\",\n                \"uid\": \"${datasource}\"\n              },\n              \"editorMode\": \"code\",\n              \"expr\": \"rate(python_gc_objects_collected_total{job=\\\"$job\\\"}[$__rate_interval]) and on(job, job) vero_info\",\n              \"instant\": false,\n              \"legendFormat\": \"Generation {{ generation }}\",\n              \"range\": true,\n              \"refId\": \"A\"\n            }\n          ],\n          \"title\": \"GC Objects Collected (Main Process)\",\n          \"type\": \"timeseries\"\n        }\n      ],\n      \"title\": \"Misc\",\n      \"type\": \"row\"\n    }\n  ],\n  \"refresh\": \"1m\",\n  \"schemaVersion\": 39,\n  \"tags\": [],\n  \"templating\": {\n    \"list\": [\n      {\n        \"current\": {\n          \"selected\": false,\n          \"text\": \"default\",\n          \"value\": \"default\"\n        },\n        \"hide\": 0,\n        \"includeAll\": false,\n        \"label\": \"Data Source\",\n        \"multi\": false,\n        \"name\": \"datasource\",\n        \"options\": [],\n        \"query\": \"prometheus\",\n        \"queryValue\": \"\",\n        \"refresh\": 1,\n        \"regex\": \"\",\n        \"skipUrlSync\": false,\n        \"type\": \"datasource\"\n      },\n      {\n        \"current\": {\n          \"selected\": false,\n          \"text\": \"default\",\n          \"value\": \"default\"\n        },\n        \"datasource\": {\n          \"type\": \"prometheus\",\n          \"uid\": \"${datasource}\"\n        },\n        \"definition\": \"label_values(vero_info,job)\",\n        \"hide\": 0,\n        \"includeAll\": false,\n        \"label\": \"Job\",\n        \"multi\": false,\n        \"name\": \"job\",\n        \"options\": [],\n        \"query\": {\n          \"qryType\": 1,\n          \"query\": \"label_values(vero_info,job)\",\n          \"refId\": \"PrometheusVariableQueryEditor-VariableQuery\"\n        },\n        \"refresh\": 1,\n        \"regex\": \"\",\n        \"skipUrlSync\": false,\n        \"sort\": 0,\n        \"type\": \"query\"\n      },\n      {\n        \"current\": {\n          \"selected\": false,\n          \"text\": \"All\",\n          \"value\": \"$__all\"\n        },\n        \"datasource\": {\n          \"type\": \"prometheus\",\n          \"uid\": \"${datasource}\"\n        },\n        \"definition\": \"label_values(requests_created{service_type=\\\"beacon_node\\\", job=\\\"$job\\\"},host)\",\n        \"hide\": 2,\n        \"includeAll\": true,\n        \"label\": \"Beacon Node\",\n        \"multi\": false,\n        \"name\": \"beacon_node_host\",\n        \"options\": [],\n        \"query\": {\n          \"qryType\": 1,\n          \"query\": \"label_values(requests_created{service_type=\\\"beacon_node\\\", job=\\\"$job\\\"},host)\",\n          \"refId\": \"PrometheusVariableQueryEditor-VariableQuery\"\n        },\n        \"refresh\": 1,\n        \"regex\": \"\",\n        \"skipUrlSync\": false,\n        \"sort\": 0,\n        \"type\": \"query\"\n      }\n    ]\n  },\n  \"time\": {\n    \"from\": \"now-24h\",\n    \"to\": \"now\"\n  },\n  \"timepicker\": {},\n  \"timezone\": \"\",\n  \"title\": \"Vero - Detailed\",\n  \"uid\": \"f3868b92-83fd-43a3-8d18-a74f35369590\",\n  \"version\": 5,\n  \"weekStart\": \"\"\n}\n"
  },
  {
    "path": "static_files/grafana-config/dashboards/zkboost/zkboost.json",
    "content": "{\n  \"annotations\": {\n    \"list\": []\n  },\n  \"editable\": true,\n  \"fiscalYearStartMonth\": 0,\n  \"graphTooltip\": 0,\n  \"id\": null,\n  \"links\": [],\n  \"panels\": [\n    {\n      \"collapsed\": false,\n      \"gridPos\": {\n        \"h\": 1,\n        \"w\": 24,\n        \"x\": 0,\n        \"y\": 0\n      },\n      \"id\": 100,\n      \"panels\": [],\n      \"title\": \"Overview\",\n      \"type\": \"row\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"${datasource}\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"thresholds\"\n          },\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\",\n                \"value\": null\n              }\n            ]\n          }\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 4,\n        \"w\": 4,\n        \"x\": 0,\n        \"y\": 1\n      },\n      \"id\": 1,\n      \"options\": {\n        \"colorMode\": \"value\",\n        \"graphMode\": \"none\",\n        \"justifyMode\": \"auto\",\n        \"orientation\": \"auto\",\n        \"reduceOptions\": {\n          \"calcs\": [\n            \"lastNotNull\"\n          ],\n          \"fields\": \"\",\n          \"values\": false\n        },\n        \"textMode\": \"auto\"\n      },\n      \"pluginVersion\": \"10.0.0\",\n      \"targets\": [\n        {\n          \"expr\": \"zkboost_programs_loaded{service=~\\\"$service\\\"}\",\n          \"legendFormat\": \"Programs\",\n          \"refId\": \"A\"\n        }\n      ],\n      \"title\": \"Programs Loaded\",\n      \"type\": \"stat\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"${datasource}\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"thresholds\"\n          },\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\",\n                \"value\": null\n              }\n            ]\n          }\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 4,\n        \"w\": 4,\n        \"x\": 4,\n        \"y\": 1\n      },\n      \"id\": 2,\n      \"options\": {\n        \"colorMode\": \"value\",\n        \"graphMode\": \"area\",\n        \"justifyMode\": \"auto\",\n        \"orientation\": \"auto\",\n        \"reduceOptions\": {\n          \"calcs\": [\n            \"lastNotNull\"\n          ],\n          \"fields\": \"\",\n          \"values\": false\n        },\n        \"textMode\": \"auto\"\n      },\n      \"pluginVersion\": \"10.0.0\",\n      \"targets\": [\n        {\n          \"expr\": \"sum(zkboost_http_requests_in_flight{service=~\\\"$service\\\"})\",\n          \"legendFormat\": \"In Flight\",\n          \"refId\": \"A\"\n        }\n      ],\n      \"title\": \"Requests In Flight\",\n      \"type\": \"stat\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"${datasource}\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"thresholds\"\n          },\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\",\n                \"value\": null\n              }\n            ]\n          },\n          \"unit\": \"reqps\"\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 4,\n        \"w\": 4,\n        \"x\": 8,\n        \"y\": 1\n      },\n      \"id\": 3,\n      \"options\": {\n        \"colorMode\": \"value\",\n        \"graphMode\": \"area\",\n        \"justifyMode\": \"auto\",\n        \"orientation\": \"auto\",\n        \"reduceOptions\": {\n          \"calcs\": [\n            \"lastNotNull\"\n          ],\n          \"fields\": \"\",\n          \"values\": false\n        },\n        \"textMode\": \"auto\"\n      },\n      \"pluginVersion\": \"10.0.0\",\n      \"targets\": [\n        {\n          \"expr\": \"sum(rate(zkboost_http_requests_total{service=~\\\"$service\\\"}[$__rate_interval]))\",\n          \"legendFormat\": \"RPS\",\n          \"refId\": \"A\"\n        }\n      ],\n      \"title\": \"Request Rate\",\n      \"type\": \"stat\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"${datasource}\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"thresholds\"\n          },\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\",\n                \"value\": null\n              },\n              {\n                \"color\": \"yellow\",\n                \"value\": 0.01\n              },\n              {\n                \"color\": \"red\",\n                \"value\": 0.05\n              }\n            ]\n          },\n          \"unit\": \"percentunit\"\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 4,\n        \"w\": 4,\n        \"x\": 12,\n        \"y\": 1\n      },\n      \"id\": 4,\n      \"options\": {\n        \"colorMode\": \"value\",\n        \"graphMode\": \"area\",\n        \"justifyMode\": \"auto\",\n        \"orientation\": \"auto\",\n        \"reduceOptions\": {\n          \"calcs\": [\n            \"lastNotNull\"\n          ],\n          \"fields\": \"\",\n          \"values\": false\n        },\n        \"textMode\": \"auto\"\n      },\n      \"pluginVersion\": \"10.0.0\",\n      \"targets\": [\n        {\n          \"expr\": \"sum(rate(zkboost_http_requests_total{service=~\\\"$service\\\",status=~\\\"5..\\\"}[$__rate_interval])) / sum(rate(zkboost_http_requests_total{service=~\\\"$service\\\"}[$__rate_interval]))\",\n          \"legendFormat\": \"Error Rate\",\n          \"refId\": \"A\"\n        }\n      ],\n      \"title\": \"Error Rate (5xx)\",\n      \"type\": \"stat\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"${datasource}\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"thresholds\"\n          },\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"blue\",\n                \"value\": null\n              }\n            ]\n          }\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 4,\n        \"w\": 8,\n        \"x\": 16,\n        \"y\": 1\n      },\n      \"id\": 5,\n      \"options\": {\n        \"colorMode\": \"value\",\n        \"graphMode\": \"none\",\n        \"justifyMode\": \"auto\",\n        \"orientation\": \"auto\",\n        \"reduceOptions\": {\n          \"calcs\": [\n            \"lastNotNull\"\n          ],\n          \"fields\": \"/^version$/\",\n          \"values\": false\n        },\n        \"textMode\": \"value\"\n      },\n      \"pluginVersion\": \"10.0.0\",\n      \"targets\": [\n        {\n          \"expr\": \"zkboost_build_info{service=~\\\"$service\\\"}\",\n          \"format\": \"table\",\n          \"instant\": true,\n          \"legendFormat\": \"{{version}}\",\n          \"refId\": \"A\"\n        }\n      ],\n      \"title\": \"Build Version\",\n      \"type\": \"stat\"\n    },\n    {\n      \"collapsed\": false,\n      \"gridPos\": {\n        \"h\": 1,\n        \"w\": 24,\n        \"x\": 0,\n        \"y\": 5\n      },\n      \"id\": 101,\n      \"panels\": [],\n      \"title\": \"HTTP Metrics\",\n      \"type\": \"row\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"${datasource}\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"palette-classic\"\n          },\n          \"custom\": {\n            \"axisBorderShow\": false,\n            \"axisCenteredZero\": false,\n            \"axisColorMode\": \"text\",\n            \"axisLabel\": \"\",\n            \"axisPlacement\": \"auto\",\n            \"barAlignment\": 0,\n            \"drawStyle\": \"line\",\n            \"fillOpacity\": 10,\n            \"gradientMode\": \"none\",\n            \"hideFrom\": {\n              \"legend\": false,\n              \"tooltip\": false,\n              \"viz\": false\n            },\n            \"insertNulls\": false,\n            \"lineInterpolation\": \"linear\",\n            \"lineWidth\": 1,\n            \"pointSize\": 5,\n            \"scaleDistribution\": {\n              \"type\": \"linear\"\n            },\n            \"showPoints\": \"never\",\n            \"spanNulls\": false,\n            \"stacking\": {\n              \"group\": \"A\",\n              \"mode\": \"none\"\n            },\n            \"thresholdsStyle\": {\n              \"mode\": \"off\"\n            }\n          },\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\",\n                \"value\": null\n              }\n            ]\n          },\n          \"unit\": \"reqps\"\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 8,\n        \"w\": 12,\n        \"x\": 0,\n        \"y\": 6\n      },\n      \"id\": 6,\n      \"options\": {\n        \"legend\": {\n          \"calcs\": [\n            \"mean\",\n            \"max\"\n          ],\n          \"displayMode\": \"table\",\n          \"placement\": \"bottom\",\n          \"showLegend\": true\n        },\n        \"tooltip\": {\n          \"mode\": \"multi\",\n          \"sort\": \"desc\"\n        }\n      },\n      \"pluginVersion\": \"10.0.0\",\n      \"targets\": [\n        {\n          \"expr\": \"sum(rate(zkboost_http_requests_total{service=~\\\"$service\\\"}[$__rate_interval])) by (endpoint)\",\n          \"legendFormat\": \"{{endpoint}}\",\n          \"refId\": \"A\"\n        }\n      ],\n      \"title\": \"Request Rate by Endpoint\",\n      \"type\": \"timeseries\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"${datasource}\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"palette-classic\"\n          },\n          \"custom\": {\n            \"axisBorderShow\": false,\n            \"axisCenteredZero\": false,\n            \"axisColorMode\": \"text\",\n            \"axisLabel\": \"\",\n            \"axisPlacement\": \"auto\",\n            \"barAlignment\": 0,\n            \"drawStyle\": \"line\",\n            \"fillOpacity\": 10,\n            \"gradientMode\": \"none\",\n            \"hideFrom\": {\n              \"legend\": false,\n              \"tooltip\": false,\n              \"viz\": false\n            },\n            \"insertNulls\": false,\n            \"lineInterpolation\": \"linear\",\n            \"lineWidth\": 1,\n            \"pointSize\": 5,\n            \"scaleDistribution\": {\n              \"type\": \"linear\"\n            },\n            \"showPoints\": \"never\",\n            \"spanNulls\": false,\n            \"stacking\": {\n              \"group\": \"A\",\n              \"mode\": \"none\"\n            },\n            \"thresholdsStyle\": {\n              \"mode\": \"off\"\n            }\n          },\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\",\n                \"value\": null\n              }\n            ]\n          },\n          \"unit\": \"s\"\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 8,\n        \"w\": 12,\n        \"x\": 12,\n        \"y\": 6\n      },\n      \"id\": 7,\n      \"options\": {\n        \"legend\": {\n          \"calcs\": [\n            \"mean\",\n            \"max\"\n          ],\n          \"displayMode\": \"table\",\n          \"placement\": \"bottom\",\n          \"showLegend\": true\n        },\n        \"tooltip\": {\n          \"mode\": \"multi\",\n          \"sort\": \"desc\"\n        }\n      },\n      \"pluginVersion\": \"10.0.0\",\n      \"targets\": [\n        {\n          \"expr\": \"histogram_quantile(0.50, sum(rate(zkboost_http_request_duration_seconds_bucket{service=~\\\"$service\\\"}[$__rate_interval])) by (le, endpoint))\",\n          \"legendFormat\": \"{{endpoint}} p50\",\n          \"refId\": \"A\"\n        },\n        {\n          \"expr\": \"histogram_quantile(0.95, sum(rate(zkboost_http_request_duration_seconds_bucket{service=~\\\"$service\\\"}[$__rate_interval])) by (le, endpoint))\",\n          \"legendFormat\": \"{{endpoint}} p95\",\n          \"refId\": \"B\"\n        },\n        {\n          \"expr\": \"histogram_quantile(0.99, sum(rate(zkboost_http_request_duration_seconds_bucket{service=~\\\"$service\\\"}[$__rate_interval])) by (le, endpoint))\",\n          \"legendFormat\": \"{{endpoint}} p99\",\n          \"refId\": \"C\"\n        }\n      ],\n      \"title\": \"Request Latency by Endpoint\",\n      \"type\": \"timeseries\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"${datasource}\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"palette-classic\"\n          },\n          \"custom\": {\n            \"axisBorderShow\": false,\n            \"axisCenteredZero\": false,\n            \"axisColorMode\": \"text\",\n            \"axisLabel\": \"\",\n            \"axisPlacement\": \"auto\",\n            \"barAlignment\": 0,\n            \"drawStyle\": \"line\",\n            \"fillOpacity\": 10,\n            \"gradientMode\": \"none\",\n            \"hideFrom\": {\n              \"legend\": false,\n              \"tooltip\": false,\n              \"viz\": false\n            },\n            \"insertNulls\": false,\n            \"lineInterpolation\": \"linear\",\n            \"lineWidth\": 1,\n            \"pointSize\": 5,\n            \"scaleDistribution\": {\n              \"type\": \"linear\"\n            },\n            \"showPoints\": \"never\",\n            \"spanNulls\": false,\n            \"stacking\": {\n              \"group\": \"A\",\n              \"mode\": \"normal\"\n            },\n            \"thresholdsStyle\": {\n              \"mode\": \"off\"\n            }\n          },\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\",\n                \"value\": null\n              }\n            ]\n          },\n          \"unit\": \"reqps\"\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 8,\n        \"w\": 12,\n        \"x\": 0,\n        \"y\": 14\n      },\n      \"id\": 8,\n      \"options\": {\n        \"legend\": {\n          \"calcs\": [\n            \"mean\",\n            \"max\"\n          ],\n          \"displayMode\": \"table\",\n          \"placement\": \"bottom\",\n          \"showLegend\": true\n        },\n        \"tooltip\": {\n          \"mode\": \"multi\",\n          \"sort\": \"desc\"\n        }\n      },\n      \"pluginVersion\": \"10.0.0\",\n      \"targets\": [\n        {\n          \"expr\": \"sum(rate(zkboost_http_requests_total{service=~\\\"$service\\\"}[$__rate_interval])) by (status)\",\n          \"legendFormat\": \"{{status}}\",\n          \"refId\": \"A\"\n        }\n      ],\n      \"title\": \"Request Rate by Status Code\",\n      \"type\": \"timeseries\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"${datasource}\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"palette-classic\"\n          },\n          \"custom\": {\n            \"axisBorderShow\": false,\n            \"axisCenteredZero\": false,\n            \"axisColorMode\": \"text\",\n            \"axisLabel\": \"\",\n            \"axisPlacement\": \"auto\",\n            \"barAlignment\": 0,\n            \"drawStyle\": \"line\",\n            \"fillOpacity\": 10,\n            \"gradientMode\": \"none\",\n            \"hideFrom\": {\n              \"legend\": false,\n              \"tooltip\": false,\n              \"viz\": false\n            },\n            \"insertNulls\": false,\n            \"lineInterpolation\": \"linear\",\n            \"lineWidth\": 1,\n            \"pointSize\": 5,\n            \"scaleDistribution\": {\n              \"type\": \"linear\"\n            },\n            \"showPoints\": \"never\",\n            \"spanNulls\": false,\n            \"stacking\": {\n              \"group\": \"A\",\n              \"mode\": \"none\"\n            },\n            \"thresholdsStyle\": {\n              \"mode\": \"off\"\n            }\n          },\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\",\n                \"value\": null\n              }\n            ]\n          },\n          \"unit\": \"short\"\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 8,\n        \"w\": 12,\n        \"x\": 12,\n        \"y\": 14\n      },\n      \"id\": 9,\n      \"options\": {\n        \"legend\": {\n          \"calcs\": [\n            \"mean\",\n            \"max\"\n          ],\n          \"displayMode\": \"table\",\n          \"placement\": \"bottom\",\n          \"showLegend\": true\n        },\n        \"tooltip\": {\n          \"mode\": \"multi\",\n          \"sort\": \"desc\"\n        }\n      },\n      \"pluginVersion\": \"10.0.0\",\n      \"targets\": [\n        {\n          \"expr\": \"sum(zkboost_http_requests_in_flight{service=~\\\"$service\\\"}) by (endpoint)\",\n          \"legendFormat\": \"{{endpoint}}\",\n          \"refId\": \"A\"\n        }\n      ],\n      \"title\": \"Requests In Flight\",\n      \"type\": \"timeseries\"\n    },\n    {\n      \"collapsed\": false,\n      \"gridPos\": {\n        \"h\": 1,\n        \"w\": 24,\n        \"x\": 0,\n        \"y\": 22\n      },\n      \"id\": 105,\n      \"panels\": [],\n      \"title\": \"Witness Fetch\",\n      \"type\": \"row\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"${datasource}\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"palette-classic\"\n          },\n          \"custom\": {\n            \"axisBorderShow\": false,\n            \"axisCenteredZero\": false,\n            \"axisColorMode\": \"text\",\n            \"axisLabel\": \"\",\n            \"axisPlacement\": \"auto\",\n            \"barAlignment\": 0,\n            \"drawStyle\": \"line\",\n            \"fillOpacity\": 10,\n            \"gradientMode\": \"none\",\n            \"hideFrom\": {\n              \"legend\": false,\n              \"tooltip\": false,\n              \"viz\": false\n            },\n            \"insertNulls\": false,\n            \"lineInterpolation\": \"linear\",\n            \"lineWidth\": 1,\n            \"pointSize\": 5,\n            \"scaleDistribution\": {\n              \"type\": \"linear\"\n            },\n            \"showPoints\": \"never\",\n            \"spanNulls\": false,\n            \"stacking\": {\n              \"group\": \"A\",\n              \"mode\": \"none\"\n            },\n            \"thresholdsStyle\": {\n              \"mode\": \"off\"\n            }\n          },\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\",\n                \"value\": null\n              }\n            ]\n          },\n          \"unit\": \"ops\"\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 8,\n        \"w\": 8,\n        \"x\": 0,\n        \"y\": 23\n      },\n      \"id\": 30,\n      \"options\": {\n        \"legend\": {\n          \"calcs\": [\n            \"sum\"\n          ],\n          \"displayMode\": \"table\",\n          \"placement\": \"bottom\",\n          \"showLegend\": true\n        },\n        \"tooltip\": {\n          \"mode\": \"multi\",\n          \"sort\": \"desc\"\n        }\n      },\n      \"pluginVersion\": \"10.0.0\",\n      \"targets\": [\n        {\n          \"expr\": \"sum(rate(zkboost_witness_fetch_total{service=~\\\"$service\\\"}[$__rate_interval])) by (status)\",\n          \"legendFormat\": \"{{status}}\",\n          \"refId\": \"A\"\n        }\n      ],\n      \"title\": \"Witness Fetch Rate\",\n      \"type\": \"timeseries\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"${datasource}\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"palette-classic\"\n          },\n          \"custom\": {\n            \"axisBorderShow\": false,\n            \"axisCenteredZero\": false,\n            \"axisColorMode\": \"text\",\n            \"axisLabel\": \"\",\n            \"axisPlacement\": \"auto\",\n            \"barAlignment\": 0,\n            \"drawStyle\": \"line\",\n            \"fillOpacity\": 10,\n            \"gradientMode\": \"none\",\n            \"hideFrom\": {\n              \"legend\": false,\n              \"tooltip\": false,\n              \"viz\": false\n            },\n            \"insertNulls\": false,\n            \"lineInterpolation\": \"linear\",\n            \"lineWidth\": 1,\n            \"pointSize\": 5,\n            \"scaleDistribution\": {\n              \"type\": \"linear\"\n            },\n            \"showPoints\": \"never\",\n            \"spanNulls\": false,\n            \"stacking\": {\n              \"group\": \"A\",\n              \"mode\": \"none\"\n            },\n            \"thresholdsStyle\": {\n              \"mode\": \"off\"\n            }\n          },\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\",\n                \"value\": null\n              }\n            ]\n          },\n          \"unit\": \"s\"\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 8,\n        \"w\": 8,\n        \"x\": 8,\n        \"y\": 23\n      },\n      \"id\": 31,\n      \"options\": {\n        \"legend\": {\n          \"calcs\": [\n            \"mean\",\n            \"max\"\n          ],\n          \"displayMode\": \"table\",\n          \"placement\": \"bottom\",\n          \"showLegend\": true\n        },\n        \"tooltip\": {\n          \"mode\": \"multi\",\n          \"sort\": \"desc\"\n        }\n      },\n      \"pluginVersion\": \"10.0.0\",\n      \"targets\": [\n        {\n          \"expr\": \"histogram_quantile(0.50, sum(rate(zkboost_witness_fetch_duration_seconds_bucket{service=~\\\"$service\\\"}[$__rate_interval])) by (le))\",\n          \"legendFormat\": \"p50\",\n          \"refId\": \"A\"\n        },\n        {\n          \"expr\": \"histogram_quantile(0.95, sum(rate(zkboost_witness_fetch_duration_seconds_bucket{service=~\\\"$service\\\"}[$__rate_interval])) by (le))\",\n          \"legendFormat\": \"p95\",\n          \"refId\": \"B\"\n        },\n        {\n          \"expr\": \"histogram_quantile(0.99, sum(rate(zkboost_witness_fetch_duration_seconds_bucket{service=~\\\"$service\\\"}[$__rate_interval])) by (le))\",\n          \"legendFormat\": \"p99\",\n          \"refId\": \"C\"\n        }\n      ],\n      \"title\": \"Witness Fetch Duration\",\n      \"type\": \"timeseries\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"${datasource}\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"palette-classic\"\n          },\n          \"custom\": {\n            \"axisBorderShow\": false,\n            \"axisCenteredZero\": false,\n            \"axisColorMode\": \"text\",\n            \"axisLabel\": \"\",\n            \"axisPlacement\": \"auto\",\n            \"barAlignment\": 0,\n            \"drawStyle\": \"line\",\n            \"fillOpacity\": 10,\n            \"gradientMode\": \"none\",\n            \"hideFrom\": {\n              \"legend\": false,\n              \"tooltip\": false,\n              \"viz\": false\n            },\n            \"insertNulls\": false,\n            \"lineInterpolation\": \"linear\",\n            \"lineWidth\": 1,\n            \"pointSize\": 5,\n            \"scaleDistribution\": {\n              \"type\": \"linear\"\n            },\n            \"showPoints\": \"never\",\n            \"spanNulls\": false,\n            \"stacking\": {\n              \"group\": \"A\",\n              \"mode\": \"none\"\n            },\n            \"thresholdsStyle\": {\n              \"mode\": \"off\"\n            }\n          },\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\",\n                \"value\": null\n              }\n            ]\n          },\n          \"unit\": \"decbytes\"\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 8,\n        \"w\": 8,\n        \"x\": 16,\n        \"y\": 23\n      },\n      \"id\": 32,\n      \"options\": {\n        \"legend\": {\n          \"calcs\": [\n            \"mean\",\n            \"max\"\n          ],\n          \"displayMode\": \"table\",\n          \"placement\": \"bottom\",\n          \"showLegend\": true\n        },\n        \"tooltip\": {\n          \"mode\": \"multi\",\n          \"sort\": \"desc\"\n        }\n      },\n      \"pluginVersion\": \"10.0.0\",\n      \"targets\": [\n        {\n          \"expr\": \"histogram_quantile(0.50, sum(rate(zkboost_witness_bytes_bucket{service=~\\\"$service\\\"}[$__rate_interval])) by (le))\",\n          \"legendFormat\": \"p50\",\n          \"refId\": \"A\"\n        },\n        {\n          \"expr\": \"histogram_quantile(0.95, sum(rate(zkboost_witness_bytes_bucket{service=~\\\"$service\\\"}[$__rate_interval])) by (le))\",\n          \"legendFormat\": \"p95\",\n          \"refId\": \"B\"\n        }\n      ],\n      \"title\": \"Witness Size\",\n      \"type\": \"timeseries\"\n    },\n    {\n      \"collapsed\": false,\n      \"gridPos\": {\n        \"h\": 1,\n        \"w\": 24,\n        \"x\": 0,\n        \"y\": 31\n      },\n      \"id\": 102,\n      \"panels\": [],\n      \"title\": \"Prove Operations\",\n      \"type\": \"row\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"${datasource}\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"palette-classic\"\n          },\n          \"custom\": {\n            \"axisBorderShow\": false,\n            \"axisCenteredZero\": false,\n            \"axisColorMode\": \"text\",\n            \"axisLabel\": \"\",\n            \"axisPlacement\": \"auto\",\n            \"barAlignment\": 0,\n            \"drawStyle\": \"line\",\n            \"fillOpacity\": 10,\n            \"gradientMode\": \"none\",\n            \"hideFrom\": {\n              \"legend\": false,\n              \"tooltip\": false,\n              \"viz\": false\n            },\n            \"insertNulls\": false,\n            \"lineInterpolation\": \"linear\",\n            \"lineWidth\": 1,\n            \"pointSize\": 5,\n            \"scaleDistribution\": {\n              \"type\": \"linear\"\n            },\n            \"showPoints\": \"never\",\n            \"spanNulls\": false,\n            \"stacking\": {\n              \"group\": \"A\",\n              \"mode\": \"none\"\n            },\n            \"thresholdsStyle\": {\n              \"mode\": \"off\"\n            }\n          },\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\",\n                \"value\": null\n              }\n            ]\n          },\n          \"unit\": \"ops\"\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 8,\n        \"w\": 8,\n        \"x\": 0,\n        \"y\": 32\n      },\n      \"id\": 10,\n      \"options\": {\n        \"legend\": {\n          \"calcs\": [\n            \"sum\"\n          ],\n          \"displayMode\": \"table\",\n          \"placement\": \"bottom\",\n          \"showLegend\": true\n        },\n        \"tooltip\": {\n          \"mode\": \"multi\",\n          \"sort\": \"desc\"\n        }\n      },\n      \"pluginVersion\": \"10.0.0\",\n      \"targets\": [\n        {\n          \"expr\": \"sum(rate(zkboost_prove_total{service=~\\\"$service\\\"}[$__rate_interval])) by (proof_type, status)\",\n          \"legendFormat\": \"{{proof_type}} ({{status}})\",\n          \"refId\": \"A\"\n        }\n      ],\n      \"title\": \"Prove Operations Rate\",\n      \"type\": \"timeseries\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"${datasource}\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"palette-classic\"\n          },\n          \"custom\": {\n            \"axisBorderShow\": false,\n            \"axisCenteredZero\": false,\n            \"axisColorMode\": \"text\",\n            \"axisLabel\": \"\",\n            \"axisPlacement\": \"auto\",\n            \"barAlignment\": 0,\n            \"drawStyle\": \"line\",\n            \"fillOpacity\": 10,\n            \"gradientMode\": \"none\",\n            \"hideFrom\": {\n              \"legend\": false,\n              \"tooltip\": false,\n              \"viz\": false\n            },\n            \"insertNulls\": false,\n            \"lineInterpolation\": \"linear\",\n            \"lineWidth\": 1,\n            \"pointSize\": 5,\n            \"scaleDistribution\": {\n              \"type\": \"linear\"\n            },\n            \"showPoints\": \"never\",\n            \"spanNulls\": false,\n            \"stacking\": {\n              \"group\": \"A\",\n              \"mode\": \"none\"\n            },\n            \"thresholdsStyle\": {\n              \"mode\": \"off\"\n            }\n          },\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\",\n                \"value\": null\n              }\n            ]\n          },\n          \"unit\": \"s\"\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 8,\n        \"w\": 8,\n        \"x\": 8,\n        \"y\": 32\n      },\n      \"id\": 11,\n      \"options\": {\n        \"legend\": {\n          \"calcs\": [\n            \"mean\",\n            \"max\"\n          ],\n          \"displayMode\": \"table\",\n          \"placement\": \"bottom\",\n          \"showLegend\": true\n        },\n        \"tooltip\": {\n          \"mode\": \"multi\",\n          \"sort\": \"desc\"\n        }\n      },\n      \"pluginVersion\": \"10.0.0\",\n      \"targets\": [\n        {\n          \"expr\": \"histogram_quantile(0.50, sum(rate(zkboost_prove_duration_seconds_bucket{service=~\\\"$service\\\"}[$__rate_interval])) by (le, proof_type))\",\n          \"legendFormat\": \"{{proof_type}} p50\",\n          \"refId\": \"A\"\n        },\n        {\n          \"expr\": \"histogram_quantile(0.95, sum(rate(zkboost_prove_duration_seconds_bucket{service=~\\\"$service\\\"}[$__rate_interval])) by (le, proof_type))\",\n          \"legendFormat\": \"{{proof_type}} p95\",\n          \"refId\": \"B\"\n        },\n        {\n          \"expr\": \"histogram_quantile(0.99, sum(rate(zkboost_prove_duration_seconds_bucket{service=~\\\"$service\\\"}[$__rate_interval])) by (le, proof_type))\",\n          \"legendFormat\": \"{{proof_type}} p99\",\n          \"refId\": \"C\"\n        }\n      ],\n      \"title\": \"Prove Duration\",\n      \"type\": \"timeseries\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"${datasource}\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"palette-classic\"\n          },\n          \"custom\": {\n            \"axisBorderShow\": false,\n            \"axisCenteredZero\": false,\n            \"axisColorMode\": \"text\",\n            \"axisLabel\": \"\",\n            \"axisPlacement\": \"auto\",\n            \"barAlignment\": 0,\n            \"drawStyle\": \"line\",\n            \"fillOpacity\": 10,\n            \"gradientMode\": \"none\",\n            \"hideFrom\": {\n              \"legend\": false,\n              \"tooltip\": false,\n              \"viz\": false\n            },\n            \"insertNulls\": false,\n            \"lineInterpolation\": \"linear\",\n            \"lineWidth\": 1,\n            \"pointSize\": 5,\n            \"scaleDistribution\": {\n              \"type\": \"linear\"\n            },\n            \"showPoints\": \"never\",\n            \"spanNulls\": false,\n            \"stacking\": {\n              \"group\": \"A\",\n              \"mode\": \"none\"\n            },\n            \"thresholdsStyle\": {\n              \"mode\": \"off\"\n            }\n          },\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\",\n                \"value\": null\n              }\n            ]\n          },\n          \"unit\": \"decbytes\"\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 8,\n        \"w\": 8,\n        \"x\": 16,\n        \"y\": 32\n      },\n      \"id\": 12,\n      \"options\": {\n        \"legend\": {\n          \"calcs\": [\n            \"mean\",\n            \"max\"\n          ],\n          \"displayMode\": \"table\",\n          \"placement\": \"bottom\",\n          \"showLegend\": true\n        },\n        \"tooltip\": {\n          \"mode\": \"multi\",\n          \"sort\": \"desc\"\n        }\n      },\n      \"pluginVersion\": \"10.0.0\",\n      \"targets\": [\n        {\n          \"expr\": \"histogram_quantile(0.50, sum(rate(zkboost_prove_proof_bytes_bucket{service=~\\\"$service\\\"}[$__rate_interval])) by (le, proof_type))\",\n          \"legendFormat\": \"{{proof_type}} p50\",\n          \"refId\": \"A\"\n        },\n        {\n          \"expr\": \"histogram_quantile(0.95, sum(rate(zkboost_prove_proof_bytes_bucket{service=~\\\"$service\\\"}[$__rate_interval])) by (le, proof_type))\",\n          \"legendFormat\": \"{{proof_type}} p95\",\n          \"refId\": \"B\"\n        }\n      ],\n      \"title\": \"Proof Size\",\n      \"type\": \"timeseries\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"${datasource}\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"palette-classic\"\n          },\n          \"custom\": {\n            \"axisBorderShow\": false,\n            \"axisCenteredZero\": false,\n            \"axisColorMode\": \"text\",\n            \"axisLabel\": \"proofs\",\n            \"axisPlacement\": \"auto\",\n            \"fillOpacity\": 80,\n            \"gradientMode\": \"none\",\n            \"hideFrom\": {\n              \"legend\": false,\n              \"tooltip\": false,\n              \"viz\": false\n            },\n            \"lineWidth\": 0,\n            \"scaleDistribution\": {\n              \"type\": \"linear\"\n            },\n            \"thresholdsStyle\": {\n              \"mode\": \"off\"\n            }\n          },\n          \"decimals\": 0,\n          \"mappings\": [],\n          \"min\": 0,\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\",\n                \"value\": 0\n              },\n              {\n                \"color\": \"red\",\n                \"value\": 80\n              }\n            ]\n          }\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 8,\n        \"w\": 24,\n        \"x\": 0,\n        \"y\": 40\n      },\n      \"id\": 27,\n      \"options\": {\n        \"barRadius\": 0,\n        \"barWidth\": 1,\n        \"fullHighlight\": false,\n        \"groupWidth\": 0.7,\n        \"legend\": {\n          \"calcs\": [],\n          \"displayMode\": \"list\",\n          \"placement\": \"right\",\n          \"showLegend\": true\n        },\n        \"orientation\": \"auto\",\n        \"showValue\": \"never\",\n        \"stacking\": \"none\",\n        \"tooltip\": {\n          \"hideZeros\": false,\n          \"mode\": \"multi\",\n          \"sort\": \"desc\"\n        },\n        \"xTickLabelRotation\": 0,\n        \"xTickLabelSpacing\": 0\n      },\n      \"pluginVersion\": \"12.4.2\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"${datasource}\"\n          },\n          \"expr\": \"sum by (proof_type) (increase(zkboost_prove_duration_seconds_bucket{le=\\\"0.5\\\"}[$__range]))\",\n          \"format\": \"table\",\n          \"instant\": true,\n          \"refId\": \"A\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"${datasource}\"\n          },\n          \"expr\": \"sum by (proof_type) (increase(zkboost_prove_duration_seconds_bucket{le=\\\"1.0\\\"}[$__range])) - sum by (proof_type) (increase(zkboost_prove_duration_seconds_bucket{le=\\\"0.5\\\"}[$__range]))\",\n          \"format\": \"table\",\n          \"instant\": true,\n          \"refId\": \"B\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"${datasource}\"\n          },\n          \"expr\": \"sum by (proof_type) (increase(zkboost_prove_duration_seconds_bucket{le=\\\"1.5\\\"}[$__range])) - sum by (proof_type) (increase(zkboost_prove_duration_seconds_bucket{le=\\\"1.0\\\"}[$__range]))\",\n          \"format\": \"table\",\n          \"instant\": true,\n          \"refId\": \"C\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"${datasource}\"\n          },\n          \"expr\": \"sum by (proof_type) (increase(zkboost_prove_duration_seconds_bucket{le=\\\"2.0\\\"}[$__range])) - sum by (proof_type) (increase(zkboost_prove_duration_seconds_bucket{le=\\\"1.5\\\"}[$__range]))\",\n          \"format\": \"table\",\n          \"instant\": true,\n          \"refId\": \"D\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"${datasource}\"\n          },\n          \"expr\": \"sum by (proof_type) (increase(zkboost_prove_duration_seconds_bucket{le=\\\"2.5\\\"}[$__range])) - sum by (proof_type) (increase(zkboost_prove_duration_seconds_bucket{le=\\\"2.0\\\"}[$__range]))\",\n          \"format\": \"table\",\n          \"instant\": true,\n          \"refId\": \"E\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"${datasource}\"\n          },\n          \"expr\": \"sum by (proof_type) (increase(zkboost_prove_duration_seconds_bucket{le=\\\"3.0\\\"}[$__range])) - sum by (proof_type) (increase(zkboost_prove_duration_seconds_bucket{le=\\\"2.5\\\"}[$__range]))\",\n          \"format\": \"table\",\n          \"instant\": true,\n          \"refId\": \"F\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"${datasource}\"\n          },\n          \"expr\": \"sum by (proof_type) (increase(zkboost_prove_duration_seconds_bucket{le=\\\"3.5\\\"}[$__range])) - sum by (proof_type) (increase(zkboost_prove_duration_seconds_bucket{le=\\\"3.0\\\"}[$__range]))\",\n          \"format\": \"table\",\n          \"instant\": true,\n          \"refId\": \"G\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"${datasource}\"\n          },\n          \"expr\": \"sum by (proof_type) (increase(zkboost_prove_duration_seconds_bucket{le=\\\"4.0\\\"}[$__range])) - sum by (proof_type) (increase(zkboost_prove_duration_seconds_bucket{le=\\\"3.5\\\"}[$__range]))\",\n          \"format\": \"table\",\n          \"instant\": true,\n          \"refId\": \"H\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"${datasource}\"\n          },\n          \"expr\": \"sum by (proof_type) (increase(zkboost_prove_duration_seconds_bucket{le=\\\"4.5\\\"}[$__range])) - sum by (proof_type) (increase(zkboost_prove_duration_seconds_bucket{le=\\\"4.0\\\"}[$__range]))\",\n          \"format\": \"table\",\n          \"instant\": true,\n          \"refId\": \"I\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"${datasource}\"\n          },\n          \"expr\": \"sum by (proof_type) (increase(zkboost_prove_duration_seconds_bucket{le=\\\"5.0\\\"}[$__range])) - sum by (proof_type) (increase(zkboost_prove_duration_seconds_bucket{le=\\\"4.5\\\"}[$__range]))\",\n          \"format\": \"table\",\n          \"instant\": true,\n          \"refId\": \"J\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"${datasource}\"\n          },\n          \"expr\": \"sum by (proof_type) (increase(zkboost_prove_duration_seconds_bucket{le=\\\"5.5\\\"}[$__range])) - sum by (proof_type) (increase(zkboost_prove_duration_seconds_bucket{le=\\\"5.0\\\"}[$__range]))\",\n          \"format\": \"table\",\n          \"instant\": true,\n          \"refId\": \"K\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"${datasource}\"\n          },\n          \"expr\": \"sum by (proof_type) (increase(zkboost_prove_duration_seconds_bucket{le=\\\"6.0\\\"}[$__range])) - sum by (proof_type) (increase(zkboost_prove_duration_seconds_bucket{le=\\\"5.5\\\"}[$__range]))\",\n          \"format\": \"table\",\n          \"instant\": true,\n          \"refId\": \"L\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"${datasource}\"\n          },\n          \"expr\": \"sum by (proof_type) (increase(zkboost_prove_duration_seconds_bucket{le=\\\"6.5\\\"}[$__range])) - sum by (proof_type) (increase(zkboost_prove_duration_seconds_bucket{le=\\\"6.0\\\"}[$__range]))\",\n          \"format\": \"table\",\n          \"instant\": true,\n          \"refId\": \"M\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"${datasource}\"\n          },\n          \"expr\": \"sum by (proof_type) (increase(zkboost_prove_duration_seconds_bucket{le=\\\"7.0\\\"}[$__range])) - sum by (proof_type) (increase(zkboost_prove_duration_seconds_bucket{le=\\\"6.5\\\"}[$__range]))\",\n          \"format\": \"table\",\n          \"instant\": true,\n          \"refId\": \"N\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"${datasource}\"\n          },\n          \"expr\": \"sum by (proof_type) (increase(zkboost_prove_duration_seconds_bucket{le=\\\"7.5\\\"}[$__range])) - sum by (proof_type) (increase(zkboost_prove_duration_seconds_bucket{le=\\\"7.0\\\"}[$__range]))\",\n          \"format\": \"table\",\n          \"instant\": true,\n          \"refId\": \"O\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"${datasource}\"\n          },\n          \"expr\": \"sum by (proof_type) (increase(zkboost_prove_duration_seconds_bucket{le=\\\"8.0\\\"}[$__range])) - sum by (proof_type) (increase(zkboost_prove_duration_seconds_bucket{le=\\\"7.5\\\"}[$__range]))\",\n          \"format\": \"table\",\n          \"instant\": true,\n          \"refId\": \"P\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"${datasource}\"\n          },\n          \"expr\": \"sum by (proof_type) (increase(zkboost_prove_duration_seconds_bucket{le=\\\"8.5\\\"}[$__range])) - sum by (proof_type) (increase(zkboost_prove_duration_seconds_bucket{le=\\\"8.0\\\"}[$__range]))\",\n          \"format\": \"table\",\n          \"instant\": true,\n          \"refId\": \"Q\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"${datasource}\"\n          },\n          \"expr\": \"sum by (proof_type) (increase(zkboost_prove_duration_seconds_bucket{le=\\\"9.0\\\"}[$__range])) - sum by (proof_type) (increase(zkboost_prove_duration_seconds_bucket{le=\\\"8.5\\\"}[$__range]))\",\n          \"format\": \"table\",\n          \"instant\": true,\n          \"refId\": \"R\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"${datasource}\"\n          },\n          \"expr\": \"sum by (proof_type) (increase(zkboost_prove_duration_seconds_bucket{le=\\\"9.5\\\"}[$__range])) - sum by (proof_type) (increase(zkboost_prove_duration_seconds_bucket{le=\\\"9.0\\\"}[$__range]))\",\n          \"format\": \"table\",\n          \"instant\": true,\n          \"refId\": \"S\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"${datasource}\"\n          },\n          \"expr\": \"sum by (proof_type) (increase(zkboost_prove_duration_seconds_bucket{le=\\\"10.0\\\"}[$__range])) - sum by (proof_type) (increase(zkboost_prove_duration_seconds_bucket{le=\\\"9.5\\\"}[$__range]))\",\n          \"format\": \"table\",\n          \"instant\": true,\n          \"refId\": \"T\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"${datasource}\"\n          },\n          \"expr\": \"sum by (proof_type) (increase(zkboost_prove_duration_seconds_bucket{le=\\\"10.5\\\"}[$__range])) - sum by (proof_type) (increase(zkboost_prove_duration_seconds_bucket{le=\\\"10.0\\\"}[$__range]))\",\n          \"format\": \"table\",\n          \"instant\": true,\n          \"refId\": \"U\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"${datasource}\"\n          },\n          \"expr\": \"sum by (proof_type) (increase(zkboost_prove_duration_seconds_bucket{le=\\\"11.0\\\"}[$__range])) - sum by (proof_type) (increase(zkboost_prove_duration_seconds_bucket{le=\\\"10.5\\\"}[$__range]))\",\n          \"format\": \"table\",\n          \"instant\": true,\n          \"refId\": \"V\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"${datasource}\"\n          },\n          \"expr\": \"sum by (proof_type) (increase(zkboost_prove_duration_seconds_bucket{le=\\\"11.5\\\"}[$__range])) - sum by (proof_type) (increase(zkboost_prove_duration_seconds_bucket{le=\\\"11.0\\\"}[$__range]))\",\n          \"format\": \"table\",\n          \"instant\": true,\n          \"refId\": \"W\"\n        },\n        {\n          \"datasource\": {\n            \"type\": \"prometheus\",\n            \"uid\": \"${datasource}\"\n          },\n          \"expr\": \"sum by (proof_type) (increase(zkboost_prove_duration_seconds_bucket{le=\\\"12.0\\\"}[$__range])) - sum by (proof_type) (increase(zkboost_prove_duration_seconds_bucket{le=\\\"11.5\\\"}[$__range]))\",\n          \"format\": \"table\",\n          \"instant\": true,\n          \"refId\": \"X\"\n        }\n      ],\n      \"title\": \"Prove Duration Distribution\",\n      \"transformations\": [\n        {\n          \"id\": \"merge\",\n          \"options\": {}\n        },\n        {\n          \"id\": \"organize\",\n          \"options\": {\n            \"excludeByName\": {\n              \"Time\": true,\n              \"__name__\": true,\n              \"instance\": true,\n              \"job\": true,\n              \"le\": true,\n              \"status\": true\n            },\n            \"indexByName\": {\n              \"Value #A\": 1,\n              \"Value #B\": 2,\n              \"Value #C\": 3,\n              \"Value #D\": 4,\n              \"Value #E\": 5,\n              \"Value #F\": 6,\n              \"Value #G\": 7,\n              \"Value #H\": 8,\n              \"Value #I\": 9,\n              \"Value #J\": 10,\n              \"Value #K\": 11,\n              \"Value #L\": 12,\n              \"Value #M\": 13,\n              \"Value #N\": 14,\n              \"Value #O\": 15,\n              \"Value #P\": 16,\n              \"Value #Q\": 17,\n              \"Value #R\": 18,\n              \"Value #S\": 19,\n              \"Value #T\": 20,\n              \"Value #U\": 21,\n              \"Value #V\": 22,\n              \"Value #W\": 23,\n              \"Value #X\": 24,\n              \"proof_type\": 0\n            },\n            \"renameByName\": {\n              \"Value #A\": \"0.5s\",\n              \"Value #B\": \"1.0s\",\n              \"Value #C\": \"1.5s\",\n              \"Value #D\": \"2.0s\",\n              \"Value #E\": \"2.5s\",\n              \"Value #F\": \"3.0s\",\n              \"Value #G\": \"3.5s\",\n              \"Value #H\": \"4.0s\",\n              \"Value #I\": \"4.5s\",\n              \"Value #J\": \"5.0s\",\n              \"Value #K\": \"5.5s\",\n              \"Value #L\": \"6.0s\",\n              \"Value #M\": \"6.5s\",\n              \"Value #N\": \"7.0s\",\n              \"Value #O\": \"7.5s\",\n              \"Value #P\": \"8.0s\",\n              \"Value #Q\": \"8.5s\",\n              \"Value #R\": \"9.0s\",\n              \"Value #S\": \"9.5s\",\n              \"Value #T\": \"10.0s\",\n              \"Value #U\": \"10.5s\",\n              \"Value #V\": \"11.0s\",\n              \"Value #W\": \"11.5s\",\n              \"Value #X\": \"12.0s\",\n              \"proof_type\": \"Proof Type\"\n            }\n          }\n        },\n        {\n          \"id\": \"transpose\",\n          \"options\": {}\n        }\n      ],\n      \"type\": \"barchart\"\n    },\n    {\n      \"collapsed\": false,\n      \"gridPos\": {\n        \"h\": 1,\n        \"w\": 24,\n        \"x\": 0,\n        \"y\": 40\n      },\n      \"id\": 104,\n      \"panels\": [],\n      \"title\": \"Verify Operations\",\n      \"type\": \"row\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"${datasource}\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"palette-classic\"\n          },\n          \"custom\": {\n            \"axisBorderShow\": false,\n            \"axisCenteredZero\": false,\n            \"axisColorMode\": \"text\",\n            \"axisLabel\": \"\",\n            \"axisPlacement\": \"auto\",\n            \"barAlignment\": 0,\n            \"drawStyle\": \"line\",\n            \"fillOpacity\": 10,\n            \"gradientMode\": \"none\",\n            \"hideFrom\": {\n              \"legend\": false,\n              \"tooltip\": false,\n              \"viz\": false\n            },\n            \"insertNulls\": false,\n            \"lineInterpolation\": \"linear\",\n            \"lineWidth\": 1,\n            \"pointSize\": 5,\n            \"scaleDistribution\": {\n              \"type\": \"linear\"\n            },\n            \"showPoints\": \"never\",\n            \"spanNulls\": false,\n            \"stacking\": {\n              \"group\": \"A\",\n              \"mode\": \"none\"\n            },\n            \"thresholdsStyle\": {\n              \"mode\": \"off\"\n            }\n          },\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\",\n                \"value\": null\n              }\n            ]\n          },\n          \"unit\": \"ops\"\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 8,\n        \"w\": 12,\n        \"x\": 0,\n        \"y\": 41\n      },\n      \"id\": 16,\n      \"options\": {\n        \"legend\": {\n          \"calcs\": [\n            \"sum\"\n          ],\n          \"displayMode\": \"table\",\n          \"placement\": \"bottom\",\n          \"showLegend\": true\n        },\n        \"tooltip\": {\n          \"mode\": \"multi\",\n          \"sort\": \"desc\"\n        }\n      },\n      \"pluginVersion\": \"10.0.0\",\n      \"targets\": [\n        {\n          \"expr\": \"sum(rate(zkboost_verify_total{service=~\\\"$service\\\"}[$__rate_interval])) by (proof_type, verified)\",\n          \"legendFormat\": \"{{proof_type}} (verified={{verified}})\",\n          \"refId\": \"A\"\n        }\n      ],\n      \"title\": \"Verify Operations Rate\",\n      \"type\": \"timeseries\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"prometheus\",\n        \"uid\": \"${datasource}\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"color\": {\n            \"mode\": \"palette-classic\"\n          },\n          \"custom\": {\n            \"axisBorderShow\": false,\n            \"axisCenteredZero\": false,\n            \"axisColorMode\": \"text\",\n            \"axisLabel\": \"\",\n            \"axisPlacement\": \"auto\",\n            \"barAlignment\": 0,\n            \"drawStyle\": \"line\",\n            \"fillOpacity\": 10,\n            \"gradientMode\": \"none\",\n            \"hideFrom\": {\n              \"legend\": false,\n              \"tooltip\": false,\n              \"viz\": false\n            },\n            \"insertNulls\": false,\n            \"lineInterpolation\": \"linear\",\n            \"lineWidth\": 1,\n            \"pointSize\": 5,\n            \"scaleDistribution\": {\n              \"type\": \"linear\"\n            },\n            \"showPoints\": \"never\",\n            \"spanNulls\": false,\n            \"stacking\": {\n              \"group\": \"A\",\n              \"mode\": \"none\"\n            },\n            \"thresholdsStyle\": {\n              \"mode\": \"off\"\n            }\n          },\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\",\n                \"value\": null\n              }\n            ]\n          },\n          \"unit\": \"s\"\n        },\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 8,\n        \"w\": 12,\n        \"x\": 12,\n        \"y\": 41\n      },\n      \"id\": 17,\n      \"options\": {\n        \"legend\": {\n          \"calcs\": [\n            \"mean\",\n            \"max\"\n          ],\n          \"displayMode\": \"table\",\n          \"placement\": \"bottom\",\n          \"showLegend\": true\n        },\n        \"tooltip\": {\n          \"mode\": \"multi\",\n          \"sort\": \"desc\"\n        }\n      },\n      \"pluginVersion\": \"10.0.0\",\n      \"targets\": [\n        {\n          \"expr\": \"histogram_quantile(0.50, sum(rate(zkboost_verify_duration_seconds_bucket{service=~\\\"$service\\\"}[$__rate_interval])) by (le, proof_type))\",\n          \"legendFormat\": \"{{proof_type}} p50\",\n          \"refId\": \"A\"\n        },\n        {\n          \"expr\": \"histogram_quantile(0.95, sum(rate(zkboost_verify_duration_seconds_bucket{service=~\\\"$service\\\"}[$__rate_interval])) by (le, proof_type))\",\n          \"legendFormat\": \"{{proof_type}} p95\",\n          \"refId\": \"B\"\n        },\n        {\n          \"expr\": \"histogram_quantile(0.99, sum(rate(zkboost_verify_duration_seconds_bucket{service=~\\\"$service\\\"}[$__rate_interval])) by (le, proof_type))\",\n          \"legendFormat\": \"{{proof_type}} p99\",\n          \"refId\": \"C\"\n        }\n      ],\n      \"title\": \"Verify Duration\",\n      \"type\": \"timeseries\"\n    },\n    {\n      \"collapsed\": false,\n      \"gridPos\": {\n        \"h\": 1,\n        \"w\": 24,\n        \"x\": 0,\n        \"y\": 57\n      },\n      \"id\": 103,\n      \"panels\": [],\n      \"title\": \"Proof Traces\",\n      \"type\": \"row\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"tempo\",\n        \"uid\": \"${tempo_datasource}\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {\n          \"custom\": {\n            \"align\": \"auto\",\n            \"cellOptions\": {\n              \"type\": \"auto\"\n            },\n            \"footer\": {\n              \"reducers\": []\n            },\n            \"inspect\": false\n          },\n          \"mappings\": [],\n          \"thresholds\": {\n            \"mode\": \"absolute\",\n            \"steps\": [\n              {\n                \"color\": \"green\",\n                \"value\": 0\n              },\n              {\n                \"color\": \"red\",\n                \"value\": 80\n              }\n            ]\n          }\n        },\n        \"overrides\": [\n          {\n            \"matcher\": {\n              \"id\": \"byName\",\n              \"options\": \"Trace ID\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"links\",\n                \"value\": [\n                  {\n                    \"targetBlank\": false,\n                    \"title\": \"show below\",\n                    \"url\": \"/d/zkboost-dashboard/zkboost?var-traceId=${__value.raw}&${__url_time_range}\"\n                  }\n                ]\n              },\n              {\n                \"id\": \"custom.width\",\n                \"value\": 326\n              }\n            ]\n          },\n          {\n            \"matcher\": {\n              \"id\": \"byName\",\n              \"options\": \"Duration\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"unit\",\n                \"value\": \"ns\"\n              },\n              {\n                \"id\": \"custom.width\",\n                \"value\": 74\n              }\n            ]\n          },\n          {\n            \"matcher\": {\n              \"id\": \"byName\",\n              \"options\": \"Block\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"custom.width\",\n                \"value\": 100\n              },\n              {\n                \"id\": \"custom.align\",\n                \"value\": \"right\"\n              }\n            ]\n          },\n          {\n            \"matcher\": {\n              \"id\": \"byName\",\n              \"options\": \"Gas Used\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"custom.width\",\n                \"value\": 80\n              },\n              {\n                \"id\": \"unit\",\n                \"value\": \"si:\"\n              },\n              {\n                \"id\": \"decimals\",\n                \"value\": 1\n              },\n              {\n                \"id\": \"custom.align\",\n                \"value\": \"right\"\n              }\n            ]\n          },\n          {\n            \"matcher\": {\n              \"id\": \"byName\",\n              \"options\": \"Start time\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"custom.width\"\n              }\n            ]\n          },\n          {\n            \"matcher\": {\n              \"id\": \"byName\",\n              \"options\": \"Request latency\"\n            },\n            \"properties\": [\n              {\n                \"id\": \"unit\",\n                \"value\": \"suffix: s\"\n              },\n              {\n                \"id\": \"decimals\",\n                \"value\": 3\n              },\n              {\n                \"id\": \"custom.width\",\n                \"value\": 124\n              },\n              {\n                \"id\": \"custom.align\",\n                \"value\": \"right\"\n              }\n            ]\n          }\n        ]\n      },\n      \"gridPos\": {\n        \"h\": 8,\n        \"w\": 24,\n        \"x\": 0,\n        \"y\": 58\n      },\n      \"id\": 25,\n      \"options\": {\n        \"cellHeight\": \"sm\",\n        \"showHeader\": true,\n        \"sortBy\": [\n          {\n            \"desc\": true,\n            \"displayName\": \"Start time\"\n          }\n        ]\n      },\n      \"pluginVersion\": \"12.4.2\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"tempo\",\n            \"uid\": \"${tempo_datasource}\"\n          },\n          \"limit\": 500,\n          \"metricsQueryType\": \"range\",\n          \"query\": \"{resource.service.name=~\\\"$service\\\" && name=~\\\"request_proof\\\"} | select(span.block_number, span.gas_used, span.timestamp)\",\n          \"queryType\": \"traceql\",\n          \"refId\": \"A\",\n          \"serviceMapUseNativeHistograms\": false,\n          \"tableType\": \"spans\"\n        }\n      ],\n      \"title\": \"Recent Proof Traces\",\n      \"transformations\": [\n        {\n          \"id\": \"calculateField\",\n          \"options\": {\n            \"alias\": \"Trace ID\",\n            \"mode\": \"reduceRow\",\n            \"reduce\": {\n              \"include\": [\n                \"traceIdHidden\"\n              ],\n              \"reducer\": \"first\"\n            }\n          }\n        },\n        {\n          \"id\": \"calculateField\",\n          \"options\": {\n            \"alias\": \"timestamp_ms\",\n            \"binary\": {\n              \"left\": {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"timestamp\"\n                }\n              },\n              \"operator\": \"*\",\n              \"right\": {\n                \"fixed\": \"1000\"\n              }\n            },\n            \"mode\": \"binary\",\n            \"reduce\": {\n              \"reducer\": \"sum\"\n            }\n          }\n        },\n        {\n          \"id\": \"calculateField\",\n          \"options\": {\n            \"alias\": \"latency_ms\",\n            \"binary\": {\n              \"left\": {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"Start time\"\n                }\n              },\n              \"operator\": \"-\",\n              \"right\": {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"timestamp_ms\"\n                }\n              }\n            },\n            \"mode\": \"binary\",\n            \"reduce\": {\n              \"reducer\": \"sum\"\n            }\n          }\n        },\n        {\n          \"id\": \"calculateField\",\n          \"options\": {\n            \"alias\": \"Request latency\",\n            \"binary\": {\n              \"left\": {\n                \"matcher\": {\n                  \"id\": \"byName\",\n                  \"options\": \"latency_ms\"\n                }\n              },\n              \"operator\": \"/\",\n              \"right\": {\n                \"fixed\": \"1000\"\n              }\n            },\n            \"mode\": \"binary\",\n            \"reduce\": {\n              \"reducer\": \"sum\"\n            }\n          }\n        },\n        {\n          \"id\": \"filterFieldsByName\",\n          \"options\": {\n            \"include\": {\n              \"names\": [\n                \"block_number\",\n                \"gas_used\",\n                \"Duration\",\n                \"Trace ID\",\n                \"Start time\",\n                \"Request latency\"\n              ]\n            }\n          }\n        },\n        {\n          \"id\": \"organize\",\n          \"options\": {\n            \"excludeByName\": {},\n            \"includeByName\": {},\n            \"indexByName\": {\n              \"Duration\": 4,\n              \"Request latency\": 3,\n              \"Start time\": 5,\n              \"Trace ID\": 0,\n              \"block_number\": 1,\n              \"gas_used\": 2\n            },\n            \"renameByName\": {\n              \"block_number\": \"Block\",\n              \"duration\": \"Duration\",\n              \"gas_used\": \"Gas Used\",\n              \"time\": \"Start time\"\n            }\n          }\n        }\n      ],\n      \"type\": \"table\"\n    },\n    {\n      \"datasource\": {\n        \"type\": \"tempo\",\n        \"uid\": \"${tempo_datasource}\"\n      },\n      \"fieldConfig\": {\n        \"defaults\": {},\n        \"overrides\": []\n      },\n      \"gridPos\": {\n        \"h\": 16,\n        \"w\": 24,\n        \"x\": 0,\n        \"y\": 66\n      },\n      \"id\": 23,\n      \"options\": {\n        \"spanFilters\": {\n          \"adhocFilters\": [],\n          \"criticalPathOnly\": false,\n          \"matchesOnly\": false\n        }\n      },\n      \"pluginVersion\": \"12.4.2\",\n      \"targets\": [\n        {\n          \"datasource\": {\n            \"type\": \"tempo\",\n            \"uid\": \"${tempo_datasource}\"\n          },\n          \"limit\": 20,\n          \"query\": \"${traceId}\",\n          \"queryType\": \"traceql\",\n          \"refId\": \"A\",\n          \"tableType\": \"traces\"\n        }\n      ],\n      \"title\": \"Proof Trace\",\n      \"type\": \"traces\"\n    }\n  ],\n  \"refresh\": \"10s\",\n  \"schemaVersion\": 38,\n  \"tags\": [\n    \"zkboost\",\n    \"zkvm\"\n  ],\n  \"templating\": {\n    \"list\": [\n      {\n        \"current\": {\n          \"selected\": false,\n          \"text\": \"Prometheus\",\n          \"value\": \"Prometheus\"\n        },\n        \"hide\": 0,\n        \"includeAll\": false,\n        \"label\": \"Datasource\",\n        \"multi\": false,\n        \"name\": \"datasource\",\n        \"options\": [],\n        \"query\": \"prometheus\",\n        \"queryValue\": \"\",\n        \"refresh\": 1,\n        \"regex\": \"\",\n        \"skipUrlSync\": false,\n        \"type\": \"datasource\"\n      },\n      {\n        \"current\": {},\n        \"datasource\": {\n          \"type\": \"prometheus\",\n          \"uid\": \"${datasource}\"\n        },\n        \"definition\": \"label_values(zkboost_build_info, service)\",\n        \"hide\": 0,\n        \"includeAll\": true,\n        \"multi\": true,\n        \"name\": \"service\",\n        \"label\": \"Instance\",\n        \"options\": [],\n        \"query\": {\n          \"qryType\": 1,\n          \"query\": \"label_values(zkboost_build_info, service)\",\n          \"refId\": \"StandardVariableQuery\"\n        },\n        \"refresh\": 2,\n        \"regex\": \"\",\n        \"sort\": 1,\n        \"type\": \"query\"\n      },\n      {\n        \"current\": {\n          \"text\": \"Tempo\",\n          \"value\": \"Tempo\"\n        },\n        \"label\": \"Tempo\",\n        \"name\": \"tempo_datasource\",\n        \"options\": [],\n        \"query\": \"tempo\",\n        \"refresh\": 1,\n        \"type\": \"datasource\"\n      },\n      {\n        \"current\": {\n          \"text\": \"\",\n          \"value\": \"\"\n        },\n        \"label\": \"Trace ID\",\n        \"name\": \"traceId\",\n        \"options\": [\n          {\n            \"selected\": true,\n            \"text\": \"\",\n            \"value\": \"\"\n          }\n        ],\n        \"query\": \"\",\n        \"type\": \"textbox\"\n      }\n    ]\n  },\n  \"time\": {\n    \"from\": \"now-1h\",\n    \"to\": \"now\"\n  },\n  \"timepicker\": {},\n  \"timezone\": \"browser\",\n  \"title\": \"zkboost\",\n  \"uid\": \"zkboost-dashboard\",\n  \"version\": 1,\n  \"weekStart\": \"\"\n}\n"
  },
  {
    "path": "static_files/grafana-config/templates/dashboard-providers.yml.tmpl",
    "content": "apiVersion: 1\n\nproviders:\n  # <string> an unique provider name. Required\n  - name: 'Eth2 Merge Kurtosis Module Dashboard Provider'\n    # <int> Org id. Default to 1\n    orgId: 1\n    # <string> name of the dashboard folder.\n    folder: ''\n    # <string> folder UID. will be automatically generated if not specified\n    folderUid: ''\n    # <string> provider type. Default to 'file'\n    type: file\n    # <bool> disable dashboard deletion\n    disableDeletion: false\n    # <int> how often Grafana will scan for changed dashboards\n    updateIntervalSeconds: 10\n    # <bool> allow updating provisioned dashboards from the UI\n    allowUiUpdates: true\n    editable: true\n    options:\n      # <string, required> path to dashboard files on disk. Required when using the 'file' type\n      path: {{ .DashboardsDirpath }}\n      # <bool> use folder names from filesystem to create folders in Grafana\n      foldersFromFilesStructure: true\n"
  },
  {
    "path": "static_files/grafana-config/templates/datasource.yml.tmpl",
    "content": "apiVersion: 1\n\ndatasources:\n  - name: Prometheus\n    uid: PBFA97CFB590B2093\n    type: prometheus\n    access: proxy\n    orgId: 1\n    url: {{ .PrometheusURL }}\n    basicAuth: false\n    isDefault: true\n    editable: true\n{{- if .TempoURL }}\n  - name: Tempo\n    type: tempo\n    access: proxy\n    orgId: 1\n    url: {{ .TempoURL }}\n    basicAuth: false\n    isDefault: false\n    editable: true\n    jsonData:\n      httpMethod: GET\n      tracesToLogs:\n        datasourceUid: 'Prometheus'\n        spanStartTimeShift: '1h'\n        spanEndTimeShift: '1h'\n        filterByTraceID: true\n{{- end }}\n"
  },
  {
    "path": "static_files/jwt/jwtsecret",
    "content": "0xdc49981516e8e72b401a63e6405495a32dafc3939b5d6d83cc319ac0388bca1b"
  },
  {
    "path": "static_files/keymanager/generate_certs.sh",
    "content": "# To run this script, you need to have openssl installed on your machine\n# This script generates a self-signed certificate and a private key, and then exports them to a PKCS12 keystore\n# The keystore is encrypted with a password that is stored in a file called keymanager.txt\n# The keystore is then saved to a file called validator_keystore.p12\n# https://docs.teku.consensys.io/23.12.0/how-to/use-external-signer/manage-keys#support-multiple-domains-and-ips\n\nopenssl req -x509 -nodes -days 3650 -newkey rsa:2048 -config openssl.cnf | openssl pkcs12 -export -out validator_keystore.p12 -passout file:keymanager.txt\n"
  },
  {
    "path": "static_files/keymanager/keymanager.txt",
    "content": "0x3ec0ad340bb9ca21e5593045b533d11d1b6784e03468af01db621db1804c2f0f"
  },
  {
    "path": "static_files/keymanager/openssl.cnf",
    "content": "[req]\ndistinguished_name = Kurtosis\nx509_extensions = v3_req\nprompt = no\n\n[Kurtosis]\ncountryName = EU\nstateOrProvinceName = CA\nlocalityName = San Francisco\norganizationName = Kurtosis\norganizationalUnitName = ethereum-package\n\n[v3_req]\nsubjectKeyIdentifier = hash\nauthorityKeyIdentifier = keyid,issuer\nbasicConstraints = CA:TRUE\nsubjectAltName = @alt_names\n\n[alt_names]\nDNS.1 = mydomain.com\nDNS.2 = localhost\nIP.1 = 127.0.0.1\nIP.2 = 10.0.0.6\n"
  },
  {
    "path": "static_files/mempool-bridge-config/config.yaml.tmpl",
    "content": "logging: \"{{ .LogLevel }}\"\n\nmetricsAddr: \":{{ .ListenPortNum }}\"\n\nmode: \"{{ .Mode }}\"\n\nsource:\n  retryInterval: {{ .RetryInterval }}\n  pollingInterval: {{ .PollingInterval }}\n{{- if eq .Mode \"p2p\" }}\n  nodeRecords:\n{{- else }}\n  rpcEndpoints:\n{{- end }}\n{{- range $endpoint := .SourceEndpoints }}\n{{- if $endpoint }}\n    - {{ $endpoint }}\n{{- end }}\n{{- end }}\n\ntarget:\n  retryInterval: {{ .RetryInterval }}\n  sendConcurrency: {{ .SendConcurrency }}\n{{- if eq .Mode \"p2p\" }}\n  nodeRecords:\n{{- else }}\n  rpcEndpoints:\n{{- end }}\n{{- range $endpoint := .TargetEndpoints }}\n{{- if $endpoint }}\n    - {{ $endpoint }}\n{{- end }}\n{{- end }}\n"
  },
  {
    "path": "static_files/mev/commit-boost/cb-config.toml.tmpl",
    "content": "chain = { genesis_time_secs = {{ .Timestamp }}, path = \"{{ .Network }}\" }\n\n[pbs]\nhost = \"0.0.0.0\"\nport = {{ .Port }}\n\n{{ range $index, $relay := .Relays }}\n[[relays]]\nid = \"mev_relay_{{$index}}\"\nurl = \"{{ $relay }}\"\n{{- end }}\n\n[logs.stdout]\nlevel = \"debug\"\n\n[logs.file]\nenabled=false\n"
  },
  {
    "path": "static_files/mev/flashbots/mev_builder/config.toml.tmpl",
    "content": "log_json = true\nlog_level = \"info,rbuilder=debug\"\nredacted_telemetry_server_port = 6061\nredacted_telemetry_server_ip = \"0.0.0.0\"\nfull_telemetry_server_port = 6060\nfull_telemetry_server_ip = \"0.0.0.0\"\n\nchain = \"{{ .Network }}\"\nreth_datadir = \"{{ .DataDir }}\"\n\ncoinbase_secret_key = \"{{ .SecretKey }}\"\nrelay_secret_key = \"{{ .SecretKey }}\"\n\n# cl_node_url can be a single value, array of values, or passed by an environment variables with values separated with a comma\ncl_node_url = [\"{{ .CLEndpoint }}\"]\njsonrpc_server_port = 8645\njsonrpc_server_ip = \"0.0.0.0\"\nel_node_ipc_path = \"/tmp/reth.ipc\"\nextra_data = \"🐼⚡🤖\"\ngenesis_fork_version = \"{{ .GenesisForkVersion }}\"\n\nignore_cancellable_orders = true\n\nlive_builders = [\"mp-ordering\", \"mgp-ordering\"]\n\nenabled_relays = [{{ .EnabledRelays }}]\n\nroot_hash_use_sparse_trie=true\nroot_hash_compare_sparse_trie=false\n\n{{- if ne (printf \"%v\" .Subsidy) \"0\" }}\nsubsidy = \"{{ .Subsidy }}\"\n{{- end }}\n\n{{ range $relay := .Relays }}\n[[relays]]\nname = \"{{ $relay.Name }}\"\nurl = \"http://{{ $.PublicKey }}@{{ $relay.Service }}:{{ $relay.Port }}\"\npriority = {{ $relay.Priority }}\nuse_ssz_for_submit = false\nuse_gzip_for_submit = false\n{{ end }}\n\n\n[[builders]]\nname = \"mgp-ordering\"\nalgo = \"ordering-builder\"\ndiscard_txs = true\nsorting = \"mev-gas-price\"\nfailed_order_retries = 1\ndrop_failed_orders = true\n\n[[builders]]\nname = \"mp-ordering\"\nalgo = \"ordering-builder\"\ndiscard_txs = true\nsorting = \"max-profit\"\nfailed_order_retries = 1\ndrop_failed_orders = true\n"
  },
  {
    "path": "static_files/mev/helix/config.yaml.tmpl",
    "content": "# Optional: Custom instance identifier for logging/monitoring\ninstance_id: \"kurtosis-helix-relay\"\n\nnetwork_config: !Custom\n  dir_path: \"{{ .GENESIS_CONFIG_MOUNT_PATH_ON_CONTAINER }}/config.json\"\n  genesis_validator_root: \"{{ .GENESIS_VALIDATORS_ROOT }}\"\n  genesis_time: {{ .GENESIS_TIME }}\n\n# PostgreSQL Database Configuration (with TimescaleDB)\npostgres:\n  hostname: \"{{ .POSTGRES_HOST_NAME }}\"\n  port: {{ .POSTGRES_PORT }}\n  db_name: \"{{ .POSTGRES_DB }}\"\n  user: \"{{ .POSTGRES_USER }}\"\n  password: \"{{ .POSTGRES_PASS }}\"\n  region: 0\n  region_name: \"LOCAL\"\n\n# Beacon Client(s) - for fetching chain data and publishing blocks\nbeacon_clients:\n  - url: \"{{ .BEACON_URI }}\"\n\ngossip_payload_on_header: false\n\n# Simulator(s) - Execution clients for block validation\nsimulators:\n  # Regular validation simulator\n  - url: \"{{ .BLOCKSIM_URI }}\"\n    namespace: flashbots  # RPC method prefix\n    is_merging_simulator: false\n    max_concurrent_tasks: 32\n\n# API Routes Configuration\nrouter_config:\n  enabled_routes:\n    # Builder API routes\n    - route: GetValidators\n    - route: SubmitBlock\n    - route: GetTopBid\n    \n    # Proposer API routes\n    - route: GetHeader\n      rate_limit:\n        replenish_ms: 100\n        burst_size: 10\n    - route: GetPayload\n    - route: RegisterValidators\n    - route: Status\n    \n    # Data API routes\n    - route: ProposerPayloadDelivered\n    - route: BuilderBidsReceived\n    - route: ValidatorRegistration\n  \n  # Graceful shutdown delay (milliseconds)\n  shutdown_delay_ms: 12000\n\n# Timing game configuration (for header delay strategy)\ntiming_game_config:\n  max_header_delay_ms: 650\n  latest_header_delay_ms_in_slot: 2000\n  default_client_latency_ms: 150\n\n# Target propagation duration for get_payload\ntarget_get_payload_propagation_duration_ms: 1000\n\n# Instance type flags\nis_submission_instance: true   # Accepts block submissions\nis_registration_instance: true  # Accepts validator registrations\n\n# Admin API authentication token\nadmin_token: \"admin_token\"\n\n# Alternative: Console logging\nlogging:\n  type: Console\n\n# Optional: Website/dashboard\nwebsite:\n  enabled: true\n  port: {{ .HELIX_RELAY_WEBSITE_PORT }}\n  listen_address: \"0.0.0.0\"\n  show_config_details: false\n  network_name: \"Kurtosis Helix Relay\" # TODO - we can configure this to show network\n  relay_url: \"https://{{ .HELIX_RELAY_ENDPOINT_URL }}\"\n  relay_pubkey: \"{{ .HELIX_RELAY_PUBKEY }}\"\n  link_beaconchain: \"https://holesky.beaconcha.in\"\n  link_etherscan: \"https://holesky.etherscan.io\"\n  link_data_api: \"https://relay.example.com/relay/v1/data\"\n\n# CPU Core Pinning (CRITICAL for production performance)\ncores:\n  auctioneer: 0             # Single core for main auctioneer thread\n  sub_workers: [0]  # Cores for submission workers\n  reg_workers: [0]  # Cores for registration workers\n  tokio: [0]    # Cores for Tokio async runtime\n\n# Optional: Enable local development mode (disables some checks)\nis_local_dev: false"
  },
  {
    "path": "static_files/mev/mev-rs/mev_boost/config.toml.tmpl",
    "content": "network = \"{{ .Network }}\"\n\n[boost]\nhost = \"0.0.0.0\"\nport = {{ .Port }}\nrelays = [\n{{ range $relays := .Relays }}\n  \"{{ $relays }}\",\n{{- end }}\n]\n"
  },
  {
    "path": "static_files/mev/mev-rs/mev_builder/config.toml.tmpl",
    "content": "network = \"{{ .Network }}\"\n\n[builder]\n# number of milliseconds to submit bids ahead of the target slot\nbidding_deadline_ms = 1000\n# amount of value to bid as a fraction of the payload's revenue\nbid_percent = 0.9\n# amount to add to the bid on top of the payload's revenue,\n# currently sourced from the builder's wallet authoring the payment transaction\nsubsidy_gwei = 100000000 # 0.1 eth\n\n[builder.auctioneer]\n# builder BLS secret key\nsecret_key = \"{{ .SecretKey }}\"\n# list of relays to connect to\nrelays = [\n  \"http://{{ .PublicKey }}@{{ .Relay }}:{{ .RelayPort }}\",\n]\n[builder.builder]\n# address to collect transaction fees\nfee_recipient = \"{{ .FeeRecipient }}\"\n# [optional] extra data to write into built execution payload\nextra_data = \"{{ .ExtraData }}\"\n# wallet seed for builder to author payment transactions\nexecution_mnemonic = \"{{ .Mnemonic }}\"\n\n[builder.bidder]\n# amount in milliseconds of time to wait until submitting bids\nwait_until_ms = 3000\n# [optional] amount of value to bid as a fraction of the payload's revenue\n# if missing, defaults to 1.0 (100%)\n# validation: should be between [0, 1] inclusive.\nbid_percent = 0.9\n# [optional] amount to add to the bid on top of the payload's revenue,\n# if missing, defaults to 0 wei\n# currently sourced from the builder's wallet authoring the payment transaction\nsubsidy_wei = \"0x0000000000000000000000000000000000000000000000000000000000000001\"\n"
  },
  {
    "path": "static_files/mev/mev-rs/mev_relay/config.toml.tmpl",
    "content": "network = \"{{ .Network }}\"\n\n[relay]\nhost = \"0.0.0.0\"\nport = {{ .Port }}\nbeacon_node_url = \"{{ .BeaconNodeURL }}\"\nsecret_key = \"{{ .SecretKey }}\"\naccepted_builders = [\n    \"{{ .PublicKey }}\",\n]\n"
  },
  {
    "path": "static_files/nginx-config/enode.txt.tmpl",
    "content": "{{ range $elClient := .ELClient }}\n{{ $elClient.Enode }}\n{{- end }}"
  },
  {
    "path": "static_files/nginx-config/enr.txt.tmpl",
    "content": "{{ range $clClient := .CLClient }}\n- {{ $clClient.Enr }}\n{{- end }}"
  },
  {
    "path": "static_files/nginx-config/enr_list.txt.tmpl",
    "content": "{{ range $clClient := .CLClient }}\n{{ $clClient.Enr }}\n{{- end }}"
  },
  {
    "path": "static_files/nginx-config/index.html",
    "content": "<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n    <meta charset=\"UTF-8\">\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n    <title>Welcome to My Website</title>\n    <style>\n        body {\n            font-family: Arial, sans-serif;\n            margin: 0;\n            padding: 0;\n            background-color: #f4f4f4;\n        }\n        .container {\n            max-width: 800px;\n            margin: 20px auto;\n            padding: 20px;\n            background-color: #fff;\n            border-radius: 5px;\n            box-shadow: 0 0 10px rgba(0, 0, 0, 0.1);\n        }\n        h1 {\n            color: #333;\n            text-align: center;\n        }\n        .download-btn {\n            display: block;\n            width: 200px;\n            margin: 20px auto;\n            padding: 10px;\n            text-align: center;\n            background-color: #007bff;\n            color: #fff;\n            border: none;\n            border-radius: 5px;\n            cursor: pointer;\n            text-decoration: none; /* Remove underline */\n        }\n        .download-btn:hover {\n            background-color: #0056b3;\n        }\n    </style>\n</head>\n<body>\n    <div class=\"container\">\n        <h1>Welcome to Kurtosis File sharing site</h1>\n        <a href=\"network-config.tar\" class=\"download-btn\">Download network configs</a>\n    </div>\n</body>\n</html>"
  },
  {
    "path": "static_files/peerdas-node-keys/grandine/node-key-file-1/key",
    "content": "\u00158Nw?&[\u0018򍫱L"
  },
  {
    "path": "static_files/peerdas-node-keys/grandine/node-key-file-10/key",
    "content": "Z>Uq5\\S\u0014P90\u001arEb7a\u0004"
  },
  {
    "path": "static_files/peerdas-node-keys/grandine/node-key-file-12/key",
    "content": "8\u001f6\ro]<B40\u0014).|ߏ"
  },
  {
    "path": "static_files/peerdas-node-keys/grandine/node-key-file-13/key",
    "content": "s^\u0013<J\nh\u0001\u0003>W\u0003ϪsJ\u0010Ɩ\u000eIG"
  },
  {
    "path": "static_files/peerdas-node-keys/grandine/node-key-file-14/key",
    "content": "uTmI.og\u001f/&2\u000bҴ\u0016z"
  },
  {
    "path": "static_files/peerdas-node-keys/grandine/node-key-file-16/key",
    "content": "x2Nt\u0011N?lv[\\{gP\u0006\b"
  },
  {
    "path": "static_files/peerdas-node-keys/grandine/node-key-file-2/key",
    "content": "VaHw'A\u0018K}mA&~uתh"
  },
  {
    "path": "static_files/peerdas-node-keys/grandine/node-key-file-4/key",
    "content": "n!OOQ-A|/\u0010\u0016D0\u0012)Ek,"
  },
  {
    "path": "static_files/peerdas-node-keys/grandine/node-key-file-5/key",
    "content": "..Tt[%[`:`d9ߛ"
  },
  {
    "path": "static_files/peerdas-node-keys/grandine/node-key-file-6/key",
    "content": ".,;H\u001c,.i\u0006uޞ\u001bW\u0007ҵVs#"
  },
  {
    "path": "static_files/peerdas-node-keys/grandine/node-key-file-7/key",
    "content": "p<\u000b\u0018sDHMX\u0012\u000f2zC_\u0004"
  },
  {
    "path": "static_files/peerdas-node-keys/grandine/node-key-file-8/key",
    "content": "\u0015H\u0013à=\u001dS4\u00046Oz\u0013\u0001w!\u00171"
  },
  {
    "path": "static_files/peerdas-node-keys/grandine/node-key-file-9/key",
    "content": "\u0007|ZGxADyD\u000fuEe\u0006»ژ\"܉"
  },
  {
    "path": "static_files/peerdas-node-keys/keys.json",
    "content": "[\n  {\n    \"nodeId\": \"99081ffcf42dd8ffd7d0e07fde6c04d55e4a146c97e4408020acc7eb42df4159\",\n    \"privateKey\": \"86e8ff81b315fc388b4eab77983fcd269f86d0c4cd5bf8bb18aef28dabb14c8d\",\n    \"columns\": [\n      17,\n      51,\n      52,\n      76,\n      103,\n      113,\n      117,\n      118\n    ]\n  },\n  {\n    \"nodeId\": \"acd41594f14c960eca84f7f480907fae4fdd4a49032e4fd4dddee2270fd784e1\",\n    \"privateKey\": \"e156614877adbfac274118a3be4b7dbfcd6d994126ab7e758dd7aa688f8ec0da\",\n    \"columns\": [\n      24,\n      35,\n      78,\n      80,\n      101,\n      107,\n      114,\n      122\n    ]\n  },\n  {\n    \"nodeId\": \"3916065a14dd78ffbae47a798517b0c834bb085f10b9438a93caf38933cb2b3d\",\n    \"privateKey\": \"932bc7ca6f9e2f3813518134c649271cb2c8f98f6af26b3c35634f0002d29dd5\",\n    \"columns\": [\n      16,\n      25,\n      57,\n      66,\n      69,\n      70,\n      77,\n      115\n    ]\n  },\n  {\n    \"nodeId\": \"95a8a2f9c9b4ce91457112f92c5b5e45b9702eb7f68ffc6c58dc0d2a5a13373b\",\n    \"privateKey\": \"6eca21ca4f4f512d417cc52f10fdf089e3c016e3a344b430ef122945e16bae2c\",\n    \"columns\": [\n      9,\n      30,\n      82,\n      99,\n      105,\n      116,\n      123,\n      125\n    ]\n  },\n  {\n    \"nodeId\": \"4a53329fb79402abc53c79a69b48edd34e8f495c679edcd42f2abe2ab6b52c82\",\n    \"privateKey\": \"2e2ec45474bd8ab39ea4a59c855b255ba7a68f8960b93aa4949a97606439df9b\",\n    \"columns\": [\n      10,\n      14,\n      61,\n      85,\n      86,\n      90,\n      111,\n      126\n    ]\n  },\n  {\n    \"nodeId\": \"47226213651fcef703092d7bfc5e809fd6e6e4942a1494a5376ee7c1fe6e8ff9\",\n    \"privateKey\": \"2ea02c3b9f8548eee91c2c2ea469069dd575de9e1bc3f457f807d2b5567323e9\",\n    \"columns\": [\n      2,\n      5,\n      18,\n      32,\n      33,\n      49,\n      83,\n      94\n    ]\n  },\n  {\n    \"nodeId\": \"912d2bc1b8c5d3d1e489f7215d4589a66225f9ee181c0199882db3344a6badd3\",\n    \"privateKey\": \"c070f1f23c0bdcf2e0c318ebcc73d04488484d58c0120ff332bf7a435f7fda04\",\n    \"columns\": [\n      3,\n      13,\n      48,\n      50,\n      74,\n      97,\n      119,\n      121\n    ]\n  },\n  {\n    \"nodeId\": \"93cd33c8d2a105d9754bc592e430e3c33b42438f0301e23c28fab9be0df73477\",\n    \"privateKey\": \"d91548137f8dc3a0e53d1d5334a6be043690f84f7a1301db77b49c2117b9e831\",\n    \"columns\": [\n      40,\n      42,\n      53,\n      58,\n      62,\n      87,\n      89,\n      120\n    ]\n  },\n  {\n    \"nodeId\": \"1e198d77fb88666ddd809efaea16db861582434a5a6170509888f5b30baddd2a\",\n    \"privateKey\": \"077cc1cf5a9b88e147784190a4bcad4479440f75456506c2bbda98c422dc89be\",\n    \"columns\": [\n      41,\n      43,\n      47,\n      54,\n      56,\n      63,\n      92,\n      98\n    ]\n  },\n  {\n    \"nodeId\": \"8165b775dd8bebb01130790f28c2e040fe909c879b54daeec41a1605cc8ff316\",\n    \"privateKey\": \"5a3e557135e95cc053d914dd50b339f530961a9f9d724562923761809404a8a6\",\n    \"columns\": [\n      8,\n      22,\n      38,\n      60,\n      79,\n      91,\n      93,\n      112\n    ]\n  },\n  {\n    \"nodeId\": \"e705ca8cad2c104c1354e9281caa7b265462b3bd6c3787cb1898d26b58c3fe55\",\n    \"privateKey\": \"a10fffc2c6b70cbf101900e97f9a51c0a7ac1fdf0bdf839353658b2d5760c636\",\n    \"columns\": [\n      6,\n      29,\n      44,\n      68,\n      75,\n      81,\n      109,\n      110\n    ]\n  },\n  {\n    \"nodeId\": \"18354a144ada5d236b2ed9c93a09c802e9f61b2a7fbaf926be6a5ed9fecef044\",\n    \"privateKey\": \"beb438d71fd9360d6f5dda3c42dd34cdc230fbe714292e7cb29ddf8fbccef299\",\n    \"columns\": [\n      0,\n      11,\n      26,\n      27,\n      34,\n      36,\n      39,\n      95\n    ]\n  },\n  {\n    \"nodeId\": \"4fb262f1556f040e27c2d8b301ed305cd22e51b671c395e2b5d68a78d77ee3ce\",\n    \"privateKey\": \"735e133c4a0a68adb68301033ed157dd0385d3cfaa73ac4a1088c696eb0e4947\",\n    \"columns\": [\n      4,\n      15,\n      28,\n      55,\n      72,\n      73,\n      88,\n      108\n    ]\n  },\n  {\n    \"nodeId\": \"d1f925bdde59621d59c1c82d87c8dd112a3a6844daab9bfb2d1e0d5292eb50c9\",\n    \"privateKey\": \"75bacc546d49e1992e6f82b299a9acf2a467df1fb52f26f78c320bd2b4fb167a\",\n    \"columns\": [\n      7,\n      12,\n      31,\n      37,\n      45,\n      65,\n      71,\n      84\n    ]\n  },\n  {\n    \"nodeId\": \"024a52a4bd9927145942e915a0e27179d69d5cf405f2115208b25b31b1948dc5\",\n    \"privateKey\": \"d93aa4fdb9c25f00e435f9cc719691eea6a2fc458d9a2806fa29e80a3df8e1a7\",\n    \"columns\": [\n      1,\n      19,\n      20,\n      21,\n      46,\n      64,\n      67,\n      124\n    ]\n  },\n  {\n    \"nodeId\": \"3f2b1289de103dfa8f1ee810bc9d4b9a230c418c1a64e58ae66d860b4b0c0db3\",\n    \"privateKey\": \"bcde78df324ef37411964ee73fadefa0e3bb6cbe765b5c7b8d6750fbe6a10608\",\n    \"columns\": [\n      23,\n      59,\n      96,\n      100,\n      102,\n      104,\n      106,\n      127\n    ]\n  }\n]"
  },
  {
    "path": "static_files/peerdas-node-keys/lighthouse/node-key-file-1/key",
    "content": "\u00158Nw?&[\u0018򍫱L"
  },
  {
    "path": "static_files/peerdas-node-keys/lighthouse/node-key-file-10/key",
    "content": "Z>Uq5\\S\u0014P90\u001arEb7a\u0004"
  },
  {
    "path": "static_files/peerdas-node-keys/lighthouse/node-key-file-12/key",
    "content": "8\u001f6\ro]<B40\u0014).|ߏ"
  },
  {
    "path": "static_files/peerdas-node-keys/lighthouse/node-key-file-13/key",
    "content": "s^\u0013<J\nh\u0001\u0003>W\u0003ϪsJ\u0010Ɩ\u000eIG"
  },
  {
    "path": "static_files/peerdas-node-keys/lighthouse/node-key-file-14/key",
    "content": "uTmI.og\u001f/&2\u000bҴ\u0016z"
  },
  {
    "path": "static_files/peerdas-node-keys/lighthouse/node-key-file-16/key",
    "content": "x2Nt\u0011N?lv[\\{gP\u0006\b"
  },
  {
    "path": "static_files/peerdas-node-keys/lighthouse/node-key-file-2/key",
    "content": "VaHw'A\u0018K}mA&~uתh"
  },
  {
    "path": "static_files/peerdas-node-keys/lighthouse/node-key-file-4/key",
    "content": "n!OOQ-A|/\u0010\u0016D0\u0012)Ek,"
  },
  {
    "path": "static_files/peerdas-node-keys/lighthouse/node-key-file-5/key",
    "content": "..Tt[%[`:`d9ߛ"
  },
  {
    "path": "static_files/peerdas-node-keys/lighthouse/node-key-file-6/key",
    "content": ".,;H\u001c,.i\u0006uޞ\u001bW\u0007ҵVs#"
  },
  {
    "path": "static_files/peerdas-node-keys/lighthouse/node-key-file-7/key",
    "content": "p<\u000b\u0018sDHMX\u0012\u000f2zC_\u0004"
  },
  {
    "path": "static_files/peerdas-node-keys/lighthouse/node-key-file-8/key",
    "content": "\u0015H\u0013à=\u001dS4\u00046Oz\u0013\u0001w!\u00171"
  },
  {
    "path": "static_files/peerdas-node-keys/lighthouse/node-key-file-9/key",
    "content": "\u0007|ZGxADyD\u000fuEe\u0006»ژ\"܉"
  },
  {
    "path": "static_files/peerdas-node-keys/lodestar/node-key-file-1/peer-id.json",
    "content": "{\n  \"id\": \"16Uiu2HAmNXweZU7MMGSeeLJ9F5k2GE9mi5w219ZXquxJ42hwyjxy\",\n  \"pubKey\": \"CAISIQOSxr+IufNJbeH8t3NWS6rV6JPyRj1NG9qgImQsY3SMdg==\",\n  \"privKey\": \"CAISIIbo/4GzFfw4i06rd5g/zSafhtDEzVv4uxiu8o2rsUyN\",\n  \"extra\": {\n    \"type\": \"Secp256k1\",\n    \"pubKeyRaw\": \"A5LGv4i580lt4fy3c1ZLqtXok/JGPU0b2qAiZCxjdIx2\",\n    \"privKeyRaw\": \"huj/gbMV/DiLTqt3mD/NJp+G0MTNW/i7GK7yjauxTI0=\",\n    \"pubKeyRawHex\": \"0392c6bf88b9f3496de1fcb773564baad5e893f2463d4d1bdaa022642c63748c76\",\n    \"privKeyRawHex\": \"86e8ff81b315fc388b4eab77983fcd269f86d0c4cd5bf8bb18aef28dabb14c8d\"\n  }\n}\n"
  },
  {
    "path": "static_files/peerdas-node-keys/lodestar/node-key-file-10/peer-id.json",
    "content": "{\n  \"id\": \"16Uiu2HAm6kbPbVeXR3PtGFKq4McCHhrRy6zt51QJFCCxYo5rW1cC\",\n  \"pubKey\": \"CAISIQKoSWbtij4hUt/x/avwqowuhfdNTmtweEPYDgsx7VJbEQ==\",\n  \"privKey\": \"CAISIFo+VXE16VzAU9kU3VCzOfUwlhqfnXJFYpI3YYCUBKim\",\n  \"extra\": {\n    \"type\": \"Secp256k1\",\n    \"pubKeyRaw\": \"AqhJZu2KPiFS3/H9q/CqjC6F901Oa3B4Q9gOCzHtUlsR\",\n    \"privKeyRaw\": \"Wj5VcTXpXMBT2RTdULM59TCWGp+dckVikjdhgJQEqKY=\",\n    \"pubKeyRawHex\": \"02a84966ed8a3e2152dff1fdabf0aa8c2e85f74d4e6b707843d80e0b31ed525b11\",\n    \"privKeyRawHex\": \"5a3e557135e95cc053d914dd50b339f530961a9f9d724562923761809404a8a6\"\n  }\n}\n"
  },
  {
    "path": "static_files/peerdas-node-keys/lodestar/node-key-file-11/peer-id.json",
    "content": "{\n  \"id\": \"16Uiu2HAkz6tr4pr41rg3WRBDUwtupHdw12xUkrd9iZVGXoXBZodb\",\n  \"pubKey\": \"CAISIQJFevKhUOnJ5T343S/h47XUyNdua7+JNFRxJO1RY0v+og==\",\n  \"privKey\": \"CAISIKEP/8LGtwy/EBkA6X+aUcCnrB/fC9+Dk1Nliy1XYMY2\",\n  \"extra\": {\n    \"type\": \"Secp256k1\",\n    \"pubKeyRaw\": \"AkV68qFQ6cnlPfjdL+HjtdTI125rv4k0VHEk7VFjS/6i\",\n    \"privKeyRaw\": \"oQ//wsa3DL8QGQDpf5pRwKesH98L34OTU2WLLVdgxjY=\",\n    \"pubKeyRawHex\": \"02457af2a150e9c9e53df8dd2fe1e3b5d4c8d76e6bbf8934547124ed51634bfea2\",\n    \"privKeyRawHex\": \"a10fffc2c6b70cbf101900e97f9a51c0a7ac1fdf0bdf839353658b2d5760c636\"\n  }\n}\n"
  },
  {
    "path": "static_files/peerdas-node-keys/lodestar/node-key-file-12/peer-id.json",
    "content": "{\n  \"id\": \"16Uiu2HAm1TnqHSPPrmUvbxEXSpgT595NfsW56zDXU7JwFYEXDHyU\",\n  \"pubKey\": \"CAISIQJZsQg/KaIgVT4ukO0ZJff4hesPjl2gMX+eueU39jnOqw==\",\n  \"privKey\": \"CAISIL60ONcf2TYNb13aPELdNM3CMPvnFCkufLKd34+8zvKZ\",\n  \"extra\": {\n    \"type\": \"Secp256k1\",\n    \"pubKeyRaw\": \"AlmxCD8poiBVPi6Q7Rkl9/iF6w+OXaAxf5655Tf2Oc6r\",\n    \"privKeyRaw\": \"vrQ41x/ZNg1vXdo8Qt00zcIw++cUKS58sp3fj7zO8pk=\",\n    \"pubKeyRawHex\": \"0259b1083f29a220553e2e90ed1925f7f885eb0f8e5da0317f9eb9e537f639ceab\",\n    \"privKeyRawHex\": \"beb438d71fd9360d6f5dda3c42dd34cdc230fbe714292e7cb29ddf8fbccef299\"\n  }\n}\n"
  },
  {
    "path": "static_files/peerdas-node-keys/lodestar/node-key-file-13/peer-id.json",
    "content": "{\n  \"id\": \"16Uiu2HAmCehdeLr8DqvjK4RCLpRLkBMnDzuN117CuAmwgM8WWX9f\",\n  \"pubKey\": \"CAISIQL/7RjMrkchT6fyLdWIpSgbtQEyzdd1TjcIEaAmGxstZg==\",\n  \"privKey\": \"CAISIHNeEzxKCmittoMBAz7RV90DhdPPqnOsShCIxpbrDklH\",\n  \"extra\": {\n    \"type\": \"Secp256k1\",\n    \"pubKeyRaw\": \"Av/tGMyuRyFPp/It1YilKBu1ATLN13VONwgRoCYbGy1m\",\n    \"privKeyRaw\": \"c14TPEoKaK22gwEDPtFX3QOF08+qc6xKEIjGlusOSUc=\",\n    \"pubKeyRawHex\": \"02ffed18ccae47214fa7f22dd588a5281bb50132cdd7754e370811a0261b1b2d66\",\n    \"privKeyRawHex\": \"735e133c4a0a68adb68301033ed157dd0385d3cfaa73ac4a1088c696eb0e4947\"\n  }\n}\n"
  },
  {
    "path": "static_files/peerdas-node-keys/lodestar/node-key-file-14/peer-id.json",
    "content": "{\n  \"id\": \"16Uiu2HAmGbuoHgTSfLjngnrFpjXMoMaZua8GQwS3vpLGQ9VuVpAn\",\n  \"pubKey\": \"CAISIQM6pNvNHzPB7Y7r9HKRqpEVnxSARn5NkoDyu6QqVTDxcw==\",\n  \"privKey\": \"CAISIHW6zFRtSeGZLm+CspmprPKkZ98ftS8m94wyC9K0+xZ6\",\n  \"extra\": {\n    \"type\": \"Secp256k1\",\n    \"pubKeyRaw\": \"Azqk280fM8Htjuv0cpGqkRWfFIBGfk2SgPK7pCpVMPFz\",\n    \"privKeyRaw\": \"dbrMVG1J4Zkub4Kymams8qRn3x+1Lyb3jDIL0rT7Fno=\",\n    \"pubKeyRawHex\": \"033aa4dbcd1f33c1ed8eebf47291aa91159f1480467e4d9280f2bba42a5530f173\",\n    \"privKeyRawHex\": \"75bacc546d49e1992e6f82b299a9acf2a467df1fb52f26f78c320bd2b4fb167a\"\n  }\n}\n"
  },
  {
    "path": "static_files/peerdas-node-keys/lodestar/node-key-file-15/peer-id.json",
    "content": "{\n  \"id\": \"16Uiu2HAmExfgihZZUjVkWB7UzDXzeaouTbYJzMPof8osaAku5R63\",\n  \"pubKey\": \"CAISIQMiPrlNAKDnY5SXgSaG7Pt/W23eqAo1sLbeyTNZoWmLBA==\",\n  \"privKey\": \"CAISINk6pP25wl8A5DX5zHGWke6movxFjZooBvop6Ao9+OGn\",\n  \"extra\": {\n    \"type\": \"Secp256k1\",\n    \"pubKeyRaw\": \"AyI+uU0AoOdjlJeBJobs+39bbd6oCjWwtt7JM1mhaYsE\",\n    \"privKeyRaw\": \"2Tqk/bnCXwDkNfnMcZaR7qai/EWNmigG+inoCj344ac=\",\n    \"pubKeyRawHex\": \"03223eb94d00a0e7639497812686ecfb7f5b6ddea80a35b0b6dec93359a1698b04\",\n    \"privKeyRawHex\": \"d93aa4fdb9c25f00e435f9cc719691eea6a2fc458d9a2806fa29e80a3df8e1a7\"\n  }\n}\n"
  },
  {
    "path": "static_files/peerdas-node-keys/lodestar/node-key-file-16/peer-id.json",
    "content": "{\n  \"id\": \"16Uiu2HAmTLuDwvw4UYvvVUp3tXuoNcY2uUqLsbYgpXtCpFHQgV9L\",\n  \"pubKey\": \"CAISIQPaPQ18msxgaHMK0euf6rHVDpV0GRk5LD9PqnrlrRbyWw==\",\n  \"privKey\": \"CAISILzeeN8yTvN0EZZO5z+t76Dju2y+dltce41nUPvmoQYI\",\n  \"extra\": {\n    \"type\": \"Secp256k1\",\n    \"pubKeyRaw\": \"A9o9DXyazGBocwrR65/qsdUOlXQZGTksP0+qeuWtFvJb\",\n    \"privKeyRaw\": \"vN543zJO83QRlk7nP63voOO7bL52W1x7jWdQ++ahBgg=\",\n    \"pubKeyRawHex\": \"03da3d0d7c9acc6068730ad1eb9feab1d50e95741919392c3f4faa7ae5ad16f25b\",\n    \"privKeyRawHex\": \"bcde78df324ef37411964ee73fadefa0e3bb6cbe765b5c7b8d6750fbe6a10608\"\n  }\n}\n"
  },
  {
    "path": "static_files/peerdas-node-keys/lodestar/node-key-file-2/peer-id.json",
    "content": "{\n  \"id\": \"16Uiu2HAmSuf5RZsQjixNzQD2RZEJnh8kmBrnbiAo9YJib2Um7Yos\",\n  \"pubKey\": \"CAISIQPTxYlUKcxIuP//tnZXCrJ7iq8funLyWfQM/3KPbRZvyg==\",\n  \"privKey\": \"CAISIOFWYUh3rb+sJ0EYo75Lfb/NbZlBJqt+dY3XqmiPjsDa\",\n  \"extra\": {\n    \"type\": \"Secp256k1\",\n    \"pubKeyRaw\": \"A9PFiVQpzEi4//+2dlcKsnuKrx+6cvJZ9Az/co9tFm/K\",\n    \"privKeyRaw\": \"4VZhSHetv6wnQRijvkt9v81tmUEmq351jdeqaI+OwNo=\",\n    \"pubKeyRawHex\": \"03d3c5895429cc48b8ffffb676570ab27b8aaf1fba72f259f40cff728f6d166fca\",\n    \"privKeyRawHex\": \"e156614877adbfac274118a3be4b7dbfcd6d994126ab7e758dd7aa688f8ec0da\"\n  }\n}\n"
  },
  {
    "path": "static_files/peerdas-node-keys/lodestar/node-key-file-3/peer-id.json",
    "content": "{\n  \"id\": \"16Uiu2HAmVbCUixsHjZHR7drtVVdJ99c3VrycgzpAEGTG3JoGRLrz\",\n  \"pubKey\": \"CAISIQP7nhFhJgETJbW7FtKL6K/L22GS0D88HlNcPXpyj+BFrw==\",\n  \"privKey\": \"CAISIJMrx8pvni84E1GBNMZJJxyyyPmPavJrPDVjTwAC0p3V\",\n  \"extra\": {\n    \"type\": \"Secp256k1\",\n    \"pubKeyRaw\": \"A/ueEWEmARMltbsW0ovor8vbYZLQPzweU1w9enKP4EWv\",\n    \"privKeyRaw\": \"kyvHym+eLzgTUYE0xkknHLLI+Y9q8ms8NWNPAALSndU=\",\n    \"pubKeyRawHex\": \"03fb9e116126011325b5bb16d28be8afcbdb6192d03f3c1e535c3d7a728fe045af\",\n    \"privKeyRawHex\": \"932bc7ca6f9e2f3813518134c649271cb2c8f98f6af26b3c35634f0002d29dd5\"\n  }\n}\n"
  },
  {
    "path": "static_files/peerdas-node-keys/lodestar/node-key-file-4/peer-id.json",
    "content": "{\n  \"id\": \"16Uiu2HAmSmEouaUqnsuvyphr2LgjkL641tsb6oKaXqxK5pwrYzrY\",\n  \"pubKey\": \"CAISIQPRnXNZFF01+BfXC5eD1rZfnVT67eQzjyupn61S2bSqpQ==\",\n  \"privKey\": \"CAISIG7KIcpPT1EtQXzFLxD98InjwBbjo0S0MO8SKUXha64s\",\n  \"extra\": {\n    \"type\": \"Secp256k1\",\n    \"pubKeyRaw\": \"A9Gdc1kUXTX4F9cLl4PWtl+dVPrt5DOPK6mfrVLZtKql\",\n    \"privKeyRaw\": \"bsohyk9PUS1BfMUvEP3wiePAFuOjRLQw7xIpReFrriw=\",\n    \"pubKeyRawHex\": \"03d19d7359145d35f817d70b9783d6b65f9d54faede4338f2ba99fad52d9b4aaa5\",\n    \"privKeyRawHex\": \"6eca21ca4f4f512d417cc52f10fdf089e3c016e3a344b430ef122945e16bae2c\"\n  }\n}\n"
  },
  {
    "path": "static_files/peerdas-node-keys/lodestar/node-key-file-5/peer-id.json",
    "content": "{\n  \"id\": \"16Uiu2HAm4Q9PnzpvGdDXBqb7Ug3d2ga8ymXoLz6kyCZfpZSQe6JJ\",\n  \"pubKey\": \"CAISIQKFVQSBeDTcHprjKSHQxIugs2gJQnyK9xtDzlV2Db/N9w==\",\n  \"privKey\": \"CAISIC4uxFR0vYqznqSlnIVbJVunpo+JYLk6pJSal2BkOd+b\",\n  \"extra\": {\n    \"type\": \"Secp256k1\",\n    \"pubKeyRaw\": \"AoVVBIF4NNwemuMpIdDEi6CzaAlCfIr3G0POVXYNv833\",\n    \"privKeyRaw\": \"Li7EVHS9irOepKWchVslW6emj4lguTqklJqXYGQ535s=\",\n    \"pubKeyRawHex\": \"02855504817834dc1e9ae32921d0c48ba0b36809427c8af71b43ce55760dbfcdf7\",\n    \"privKeyRawHex\": \"2e2ec45474bd8ab39ea4a59c855b255ba7a68f8960b93aa4949a97606439df9b\"\n  }\n}\n"
  },
  {
    "path": "static_files/peerdas-node-keys/lodestar/node-key-file-6/peer-id.json",
    "content": "{\n  \"id\": \"16Uiu2HAmHfYoYJ33fz7JX2uuFdn2WHfj6XCnQChDfhZsV4ZVdL3a\",\n  \"pubKey\": \"CAISIQNKbyD/bJ51rFEegj0kIH6+97Gxhxkk1g+d3KLzeWIkYQ==\",\n  \"privKey\": \"CAISIC6gLDufhUju6RwsLqRpBp3Vdd6eG8P0V/gH0rVWcyPp\",\n  \"extra\": {\n    \"type\": \"Secp256k1\",\n    \"pubKeyRaw\": \"A0pvIP9snnWsUR6CPSQgfr73sbGHGSTWD53covN5YiRh\",\n    \"privKeyRaw\": \"LqAsO5+FSO7pHCwupGkGndV13p4bw/RX+AfStVZzI+k=\",\n    \"pubKeyRawHex\": \"034a6f20ff6c9e75ac511e823d24207ebef7b1b1871924d60f9ddca2f379622461\",\n    \"privKeyRawHex\": \"2ea02c3b9f8548eee91c2c2ea469069dd575de9e1bc3f457f807d2b5567323e9\"\n  }\n}\n"
  },
  {
    "path": "static_files/peerdas-node-keys/lodestar/node-key-file-7/peer-id.json",
    "content": "{\n  \"id\": \"16Uiu2HAm19Mn5P9qbrnz721VVm2GBPTGe4Dz8DZY4BEhCgGs24z2\",\n  \"pubKey\": \"CAISIQJU+D9dsuljIYD5oVKkPuEywLm7Ex1Beg8bjz0PJuXxPw==\",\n  \"privKey\": \"CAISIMBw8fI8C9zy4MMY68xz0ESISE1YwBIP8zK/ekNff9oE\",\n  \"extra\": {\n    \"type\": \"Secp256k1\",\n    \"pubKeyRaw\": \"AlT4P12y6WMhgPmhUqQ+4TLAubsTHUF6DxuPPQ8m5fE/\",\n    \"privKeyRaw\": \"wHDx8jwL3PLgwxjrzHPQRIhITVjAEg/zMr96Q19/2gQ=\",\n    \"pubKeyRawHex\": \"0254f83f5db2e9632180f9a152a43ee132c0b9bb131d417a0f1b8f3d0f26e5f13f\",\n    \"privKeyRawHex\": \"c070f1f23c0bdcf2e0c318ebcc73d04488484d58c0120ff332bf7a435f7fda04\"\n  }\n}\n"
  },
  {
    "path": "static_files/peerdas-node-keys/lodestar/node-key-file-8/peer-id.json",
    "content": "{\n  \"id\": \"16Uiu2HAmM2A6cQi3Yhn1bM7sjuXn9a2uAAYNsiyAYf3g8ehfhsH8\",\n  \"pubKey\": \"CAISIQN8SbaZjE2WmeFMhYw6CrnMLuwCqo9zJS0ydaU/BLJoDw==\",\n  \"privKey\": \"CAISINkVSBN/jcOg5T0dUzSmvgQ2kPhPehMB23e0nCEXuegx\",\n  \"extra\": {\n    \"type\": \"Secp256k1\",\n    \"pubKeyRaw\": \"A3xJtpmMTZaZ4UyFjDoKucwu7AKqj3MlLTJ1pT8EsmgP\",\n    \"privKeyRaw\": \"2RVIE3+Nw6DlPR1TNKa+BDaQ+E96EwHbd7ScIRe56DE=\",\n    \"pubKeyRawHex\": \"037c49b6998c4d9699e14c858c3a0ab9cc2eec02aa8f73252d3275a53f04b2680f\",\n    \"privKeyRawHex\": \"d91548137f8dc3a0e53d1d5334a6be043690f84f7a1301db77b49c2117b9e831\"\n  }\n}\n"
  },
  {
    "path": "static_files/peerdas-node-keys/lodestar/node-key-file-9/peer-id.json",
    "content": "{\n  \"id\": \"16Uiu2HAkvBUSxSoKa8RXtPtgk714BnuVqGSFcfr4b177XvhZh2Jm\",\n  \"pubKey\": \"CAISIQILOIRGe9d0ZWHicTJPCXzeTIsckuBvc4x+UUHgNO7Sqg==\",\n  \"privKey\": \"CAISIAd8wc9am4jhR3hBkKS8rUR5RA91RWUGwrvamMQi3Im+\",\n  \"extra\": {\n    \"type\": \"Secp256k1\",\n    \"pubKeyRaw\": \"Ags4hEZ713RlYeJxMk8JfN5MixyS4G9zjH5RQeA07tKq\",\n    \"privKeyRaw\": \"B3zBz1qbiOFHeEGQpLytRHlED3VFZQbCu9qYxCLcib4=\",\n    \"pubKeyRawHex\": \"020b3884467bd7746561e271324f097cde4c8b1c92e06f738c7e5141e034eed2aa\",\n    \"privKeyRawHex\": \"077cc1cf5a9b88e147784190a4bcad4479440f75456506c2bbda98c422dc89be\"\n  }\n}\n"
  },
  {
    "path": "static_files/peerdas-node-keys/nimbus/node-key-file-1.json",
    "content": "{\n  \"crypto\": {\n    \"kdf\": {\n      \"function\": \"scrypt\",\n      \"params\": {\n        \"dklen\": 32,\n        \"n\": 262144,\n        \"p\": 1,\n        \"r\": 8,\n        \"salt\": \"7b8370c3da9d0496cae02b1c1932a4f6a01656b682795ab372d7103fcb7bc118\"\n      },\n      \"message\": \"\"\n    },\n    \"checksum\": {\n      \"function\": \"sha256\",\n      \"params\": {},\n      \"message\": \"9f62027092e0a585609510cc585d6fce119732ae802695ecee07c9fb52ac7bbd\"\n    },\n    \"cipher\": {\n      \"function\": \"aes-128-ctr\",\n      \"params\": {\n        \"iv\": \"152df55d6920c870587028577a20aa0b\"\n      },\n      \"message\": \"fa7c35dcd5beae7d57d5b5b0ece4bbeb4ba15fe12141d505e625bf8638028c6a840f6b86\"\n    }\n  },\n  \"pubkey\": \"080212210392c6bf88b9f3496de1fcb773564baad5e893f2463d4d1bdaa022642c63748c76\",\n  \"uuid\": \"5c904543-0065-4edf-af44-20d2fe487a2b\",\n  \"version\": 1\n}"
  },
  {
    "path": "static_files/peerdas-node-keys/nimbus/node-key-file-10.json",
    "content": "{\n  \"crypto\": {\n    \"kdf\": {\n      \"function\": \"scrypt\",\n      \"params\": {\n        \"dklen\": 32,\n        \"n\": 262144,\n        \"p\": 1,\n        \"r\": 8,\n        \"salt\": \"044b80bec29f40a6bdcdd89db2f242250ec1c0f235958fe8c6a2db282bc3c81f\"\n      },\n      \"message\": \"\"\n    },\n    \"checksum\": {\n      \"function\": \"sha256\",\n      \"params\": {},\n      \"message\": \"9e983d3c13b661af8fa23d0edd815eb711edfa18a42635d906219b191c58cde1\"\n    },\n    \"cipher\": {\n      \"function\": \"aes-128-ctr\",\n      \"params\": {\n        \"iv\": \"f4c6379dcb64658291be7b18dcc68407\"\n      },\n      \"message\": \"47a0124f07249cfac971be35d7ac71e72bc09f3eba55acaab54a1fa86c97365608148748\"\n    }\n  },\n  \"pubkey\": \"0802122102a84966ed8a3e2152dff1fdabf0aa8c2e85f74d4e6b707843d80e0b31ed525b11\",\n  \"uuid\": \"0003e251-2f74-4e0b-9e36-7e8307a8ca65\",\n  \"version\": 1\n}"
  },
  {
    "path": "static_files/peerdas-node-keys/nimbus/node-key-file-11.json",
    "content": "{\n  \"crypto\": {\n    \"kdf\": {\n      \"function\": \"scrypt\",\n      \"params\": {\n        \"dklen\": 32,\n        \"n\": 262144,\n        \"p\": 1,\n        \"r\": 8,\n        \"salt\": \"b7de475c6dd3c10f7e0e3da5013dcb7ce7c99763bb26c95022510c9558532ec2\"\n      },\n      \"message\": \"\"\n    },\n    \"checksum\": {\n      \"function\": \"sha256\",\n      \"params\": {},\n      \"message\": \"46544a7c1208d9eef5f363aef78622476876b67ad8014dba230cb8546ebab2cc\"\n    },\n    \"cipher\": {\n      \"function\": \"aes-128-ctr\",\n      \"params\": {\n        \"iv\": \"23a82f564df4a763e37d152fe216f62c\"\n      },\n      \"message\": \"3b4e024250adbc993f0b02c04b33bcb2de4d8adb4a605aa2e60bd5619b147495b6a07c77\"\n    }\n  },\n  \"pubkey\": \"0802122102457af2a150e9c9e53df8dd2fe1e3b5d4c8d76e6bbf8934547124ed51634bfea2\",\n  \"uuid\": \"616f6ae6-dd9f-4b17-8e08-c3b64c16a67d\",\n  \"version\": 1\n}"
  },
  {
    "path": "static_files/peerdas-node-keys/nimbus/node-key-file-12.json",
    "content": "{\n  \"crypto\": {\n    \"kdf\": {\n      \"function\": \"scrypt\",\n      \"params\": {\n        \"dklen\": 32,\n        \"n\": 262144,\n        \"p\": 1,\n        \"r\": 8,\n        \"salt\": \"dd5a17fcd2904e949ef82b0460127ced5a4b698a9f9a306bbe789a2219c3d9bf\"\n      },\n      \"message\": \"\"\n    },\n    \"checksum\": {\n      \"function\": \"sha256\",\n      \"params\": {},\n      \"message\": \"f763e983b3253032366b12aa7658fe86b2d4f5daae759b8dde827ce202a036d5\"\n    },\n    \"cipher\": {\n      \"function\": \"aes-128-ctr\",\n      \"params\": {\n        \"iv\": \"a4fa0630263fdde87136b8210bf0b08d\"\n      },\n      \"message\": \"9cb61f492d42735da03551f9427076fee648a57def2121b47a83b852eb87ee76e5f59ae1\"\n    }\n  },\n  \"pubkey\": \"080212210259b1083f29a220553e2e90ed1925f7f885eb0f8e5da0317f9eb9e537f639ceab\",\n  \"uuid\": \"54a4a197-3112-44e4-a9ab-63638c51bd77\",\n  \"version\": 1\n}"
  },
  {
    "path": "static_files/peerdas-node-keys/nimbus/node-key-file-13.json",
    "content": "{\n  \"crypto\": {\n    \"kdf\": {\n      \"function\": \"scrypt\",\n      \"params\": {\n        \"dklen\": 32,\n        \"n\": 262144,\n        \"p\": 1,\n        \"r\": 8,\n        \"salt\": \"6f0e62cecdd57416290d8484fe3de7af78e460926607f14b52dae732112f378b\"\n      },\n      \"message\": \"\"\n    },\n    \"checksum\": {\n      \"function\": \"sha256\",\n      \"params\": {},\n      \"message\": \"49b744e19fd7b146b610be0ccf8e797362c1f3c61767f379aaeb66dd49c63f00\"\n    },\n    \"cipher\": {\n      \"function\": \"aes-128-ctr\",\n      \"params\": {\n        \"iv\": \"26e6b9fd5f2a26ca4a76c8b33319444c\"\n      },\n      \"message\": \"3d839415b467b6eb1f31770cbf6de913771b92bd98e7199358a1068d3b0deb4dec49ec70\"\n    }\n  },\n  \"pubkey\": \"0802122102ffed18ccae47214fa7f22dd588a5281bb50132cdd7754e370811a0261b1b2d66\",\n  \"uuid\": \"c3001e59-8b15-40f6-8b8f-f08a201c866b\",\n  \"version\": 1\n}"
  },
  {
    "path": "static_files/peerdas-node-keys/nimbus/node-key-file-14.json",
    "content": "{\n  \"crypto\": {\n    \"kdf\": {\n      \"function\": \"scrypt\",\n      \"params\": {\n        \"dklen\": 32,\n        \"n\": 262144,\n        \"p\": 1,\n        \"r\": 8,\n        \"salt\": \"5d701478659b0bf0f1cb2d67d68a4e7e4147b0418d8fa94a4f76d5df4b435f6d\"\n      },\n      \"message\": \"\"\n    },\n    \"checksum\": {\n      \"function\": \"sha256\",\n      \"params\": {},\n      \"message\": \"e4bb5ed052f388e12297155849883d364b09a664f4eef4b0de88684290a565aa\"\n    },\n    \"cipher\": {\n      \"function\": \"aes-128-ctr\",\n      \"params\": {\n        \"iv\": \"c23e6c302647b579b68eccc03964e4dc\"\n      },\n      \"message\": \"f919c13a48d036eaa91adc98dc41d628444dc7b35c35df4fe57ae34d00f62f10a7a42cf2\"\n    }\n  },\n  \"pubkey\": \"08021221033aa4dbcd1f33c1ed8eebf47291aa91159f1480467e4d9280f2bba42a5530f173\",\n  \"uuid\": \"00df9b12-83e5-4419-aede-3df7841d9a7e\",\n  \"version\": 1\n}"
  },
  {
    "path": "static_files/peerdas-node-keys/nimbus/node-key-file-15.json",
    "content": "{\n  \"crypto\": {\n    \"kdf\": {\n      \"function\": \"scrypt\",\n      \"params\": {\n        \"dklen\": 32,\n        \"n\": 262144,\n        \"p\": 1,\n        \"r\": 8,\n        \"salt\": \"101d95f8116423ba1c0f58548d2e086204e3463554b1ede06835dec68a36ddb3\"\n      },\n      \"message\": \"\"\n    },\n    \"checksum\": {\n      \"function\": \"sha256\",\n      \"params\": {},\n      \"message\": \"9a647780f017b7ce707e878221918eabffb32f9d65e23db704880e720daa7fe2\"\n    },\n    \"cipher\": {\n      \"function\": \"aes-128-ctr\",\n      \"params\": {\n        \"iv\": \"b3742cf31e13d165eba6c48d213b2748\"\n      },\n      \"message\": \"e7d64cbce078edcd4675d625da75d9126ddcc9b536df08cd37aba4113092489208b356aa\"\n    }\n  },\n  \"pubkey\": \"0802122103223eb94d00a0e7639497812686ecfb7f5b6ddea80a35b0b6dec93359a1698b04\",\n  \"uuid\": \"3d259578-df77-48b7-b8d9-35bf460b67f2\",\n  \"version\": 1\n}"
  },
  {
    "path": "static_files/peerdas-node-keys/nimbus/node-key-file-16.json",
    "content": "{\n  \"crypto\": {\n    \"kdf\": {\n      \"function\": \"scrypt\",\n      \"params\": {\n        \"dklen\": 32,\n        \"n\": 262144,\n        \"p\": 1,\n        \"r\": 8,\n        \"salt\": \"8738625934defa579f66de42d24962af6df8274d514e509a378bfee96719b8cc\"\n      },\n      \"message\": \"\"\n    },\n    \"checksum\": {\n      \"function\": \"sha256\",\n      \"params\": {},\n      \"message\": \"7e181e613145012dcb0a17caa0b90129284087befa0f0c716e29bee38d3435ce\"\n    },\n    \"cipher\": {\n      \"function\": \"aes-128-ctr\",\n      \"params\": {\n        \"iv\": \"fcfaa909a821c10515939f5736c6254f\"\n      },\n      \"message\": \"cae253118ca2acacdba4c7260f36ed971f9e7dda467875cd54f1336e8d4252cbe26273c5\"\n    }\n  },\n  \"pubkey\": \"0802122103da3d0d7c9acc6068730ad1eb9feab1d50e95741919392c3f4faa7ae5ad16f25b\",\n  \"uuid\": \"e21f697d-746b-4523-b5ae-f57b718071c2\",\n  \"version\": 1\n}"
  },
  {
    "path": "static_files/peerdas-node-keys/nimbus/node-key-file-2.json",
    "content": "{\n  \"crypto\": {\n    \"kdf\": {\n      \"function\": \"scrypt\",\n      \"params\": {\n        \"dklen\": 32,\n        \"n\": 262144,\n        \"p\": 1,\n        \"r\": 8,\n        \"salt\": \"e3c3ed9e1020157ef45710b5ca3c62a3a96400081d4ea7af9860c1760553212b\"\n      },\n      \"message\": \"\"\n    },\n    \"checksum\": {\n      \"function\": \"sha256\",\n      \"params\": {},\n      \"message\": \"0ae701553d51228eb06fa338a7534ef61b5e5c07fcb07c162bbd305cfbaabdbb\"\n    },\n    \"cipher\": {\n      \"function\": \"aes-128-ctr\",\n      \"params\": {\n        \"iv\": \"1b058c52592660161d5473d2fa37ff12\"\n      },\n      \"message\": \"0ee80adf186933b7d99b473e9e087dd5c968708ad46e364343c603f5338451ae19fff9d4\"\n    }\n  },\n  \"pubkey\": \"0802122103d3c5895429cc48b8ffffb676570ab27b8aaf1fba72f259f40cff728f6d166fca\",\n  \"uuid\": \"b51ee50f-dc64-4fad-bdcf-5e76e1542cd0\",\n  \"version\": 1\n}"
  },
  {
    "path": "static_files/peerdas-node-keys/nimbus/node-key-file-3.json",
    "content": "{\n  \"crypto\": {\n    \"kdf\": {\n      \"function\": \"scrypt\",\n      \"params\": {\n        \"dklen\": 32,\n        \"n\": 262144,\n        \"p\": 1,\n        \"r\": 8,\n        \"salt\": \"66c80275a574c7ca93fd34b1c42cf1fa2b7b73b2ec516fd605a96dc7b38e6d70\"\n      },\n      \"message\": \"\"\n    },\n    \"checksum\": {\n      \"function\": \"sha256\",\n      \"params\": {},\n      \"message\": \"791fb49011ca91a9c4451136d27cfbd71ad13f708dbfec06b467ac0d6f9c2343\"\n    },\n    \"cipher\": {\n      \"function\": \"aes-128-ctr\",\n      \"params\": {\n        \"iv\": \"84651b9e50482b5ee456dd1a5ad9bcda\"\n      },\n      \"message\": \"dce3824a4b5ee18c15f8def16e3bd85811f40a3e12ff20d926d93243dcdab9ffccd88703\"\n    }\n  },\n  \"pubkey\": \"0802122103fb9e116126011325b5bb16d28be8afcbdb6192d03f3c1e535c3d7a728fe045af\",\n  \"uuid\": \"665f3fca-1171-41e0-b474-2c8e695b5b92\",\n  \"version\": 1\n}"
  },
  {
    "path": "static_files/peerdas-node-keys/nimbus/node-key-file-4.json",
    "content": "{\n  \"crypto\": {\n    \"kdf\": {\n      \"function\": \"scrypt\",\n      \"params\": {\n        \"dklen\": 32,\n        \"n\": 262144,\n        \"p\": 1,\n        \"r\": 8,\n        \"salt\": \"6f589382aef8f0560f9ec2d74bce5f67248ec5eabd2fc688fdb15e45f06b2a33\"\n      },\n      \"message\": \"\"\n    },\n    \"checksum\": {\n      \"function\": \"sha256\",\n      \"params\": {},\n      \"message\": \"9efab5afdc6691cfb2f2b4f2303e4ada42e2b7b503406f0431f557cd753e196b\"\n    },\n    \"cipher\": {\n      \"function\": \"aes-128-ctr\",\n      \"params\": {\n        \"iv\": \"818b331198ca15efaf2fa6186caee438\"\n      },\n      \"message\": \"e8d52cde56942b77b35cf91af4f82a1e64a8138f89a5e50a9a4c0b2ca52a61a889f8630d\"\n    }\n  },\n  \"pubkey\": \"0802122103d19d7359145d35f817d70b9783d6b65f9d54faede4338f2ba99fad52d9b4aaa5\",\n  \"uuid\": \"3481a233-d1a9-47f8-a67f-8b692ce82408\",\n  \"version\": 1\n}"
  },
  {
    "path": "static_files/peerdas-node-keys/nimbus/node-key-file-5.json",
    "content": "{\n  \"crypto\": {\n    \"kdf\": {\n      \"function\": \"scrypt\",\n      \"params\": {\n        \"dklen\": 32,\n        \"n\": 262144,\n        \"p\": 1,\n        \"r\": 8,\n        \"salt\": \"7b10970148692506094d745511010dd59479d427c85571fe7f967dfc65acf467\"\n      },\n      \"message\": \"\"\n    },\n    \"checksum\": {\n      \"function\": \"sha256\",\n      \"params\": {},\n      \"message\": \"99ae42e11eaaeac755826e54a5b4f96c8922966a3da0d4762f45d1f51f86e1f6\"\n    },\n    \"cipher\": {\n      \"function\": \"aes-128-ctr\",\n      \"params\": {\n        \"iv\": \"3503e0e49db00d48243f5772c85d3aee\"\n      },\n      \"message\": \"1e1e323ae5fae6b13d167503c3b435c5c3fc8aefb950bc5009b4c9644b0acf02d17c67e1\"\n    }\n  },\n  \"pubkey\": \"0802122102855504817834dc1e9ae32921d0c48ba0b36809427c8af71b43ce55760dbfcdf7\",\n  \"uuid\": \"f99a9439-8fa9-4cb9-80a4-e99047e97561\",\n  \"version\": 1\n}"
  },
  {
    "path": "static_files/peerdas-node-keys/nimbus/node-key-file-6.json",
    "content": "{\n  \"crypto\": {\n    \"kdf\": {\n      \"function\": \"scrypt\",\n      \"params\": {\n        \"dklen\": 32,\n        \"n\": 262144,\n        \"p\": 1,\n        \"r\": 8,\n        \"salt\": \"42bb42d4115cc23aac6bfd7148f2f318ed809900d59a3cecec43ac2651e80307\"\n      },\n      \"message\": \"\"\n    },\n    \"checksum\": {\n      \"function\": \"sha256\",\n      \"params\": {},\n      \"message\": \"19d3ba717088fe778a4d58f2e17d0fe18548c0fb9d4e7dd7900db31bf9359bf3\"\n    },\n    \"cipher\": {\n      \"function\": \"aes-128-ctr\",\n      \"params\": {\n        \"iv\": \"5147188214e768c2caf9376b6416c980\"\n      },\n      \"message\": \"d1dffec8c3d1a48b0491c40aed64563c05f3d257c35cb63aec68e62f900604e6145f2619\"\n    }\n  },\n  \"pubkey\": \"08021221034a6f20ff6c9e75ac511e823d24207ebef7b1b1871924d60f9ddca2f379622461\",\n  \"uuid\": \"ae84315a-cc3e-4122-b9a1-82015d1391d3\",\n  \"version\": 1\n}"
  },
  {
    "path": "static_files/peerdas-node-keys/nimbus/node-key-file-7.json",
    "content": "{\n  \"crypto\": {\n    \"kdf\": {\n      \"function\": \"scrypt\",\n      \"params\": {\n        \"dklen\": 32,\n        \"n\": 262144,\n        \"p\": 1,\n        \"r\": 8,\n        \"salt\": \"e8da012c76c104e19211702e44455d2cc5f8c981d4cd286e91670d50c674456b\"\n      },\n      \"message\": \"\"\n    },\n    \"checksum\": {\n      \"function\": \"sha256\",\n      \"params\": {},\n      \"message\": \"bec6b2a1da8c4bc703b604afd087a21eb46a8f0e4c91c9611a39b61b58fe9c24\"\n    },\n    \"cipher\": {\n      \"function\": \"aes-128-ctr\",\n      \"params\": {\n        \"iv\": \"c370fcc617bfc63242bfd29cf27fe798\"\n      },\n      \"message\": \"96b879925beca0e5a38eadb1c57ac220c32103e63867775ab341f68bc6e1af4048c0c72f\"\n    }\n  },\n  \"pubkey\": \"080212210254f83f5db2e9632180f9a152a43ee132c0b9bb131d417a0f1b8f3d0f26e5f13f\",\n  \"uuid\": \"88d3355a-5808-4253-95d2-41d0dd3e3bb5\",\n  \"version\": 1\n}"
  },
  {
    "path": "static_files/peerdas-node-keys/nimbus/node-key-file-8.json",
    "content": "{\n  \"crypto\": {\n    \"kdf\": {\n      \"function\": \"scrypt\",\n      \"params\": {\n        \"dklen\": 32,\n        \"n\": 262144,\n        \"p\": 1,\n        \"r\": 8,\n        \"salt\": \"bcf88d5328414f6994e9fafc1c9a2bb508cecaa43357ac17771b65046342d198\"\n      },\n      \"message\": \"\"\n    },\n    \"checksum\": {\n      \"function\": \"sha256\",\n      \"params\": {},\n      \"message\": \"e3d38e143ed4814b36bf1ef3c52993909700239d4b8f3240365c0a2523d755dc\"\n    },\n    \"cipher\": {\n      \"function\": \"aes-128-ctr\",\n      \"params\": {\n        \"iv\": \"a01872a21213457c9b304217b002af95\"\n      },\n      \"message\": \"a02cce0e809eb46fcf77c317d70b97f57b43493ee3c2819ba8c7152fbda36b57903301ab\"\n    }\n  },\n  \"pubkey\": \"08021221037c49b6998c4d9699e14c858c3a0ab9cc2eec02aa8f73252d3275a53f04b2680f\",\n  \"uuid\": \"b1018d31-8b21-45af-8b7b-6b18947453c3\",\n  \"version\": 1\n}"
  },
  {
    "path": "static_files/peerdas-node-keys/nimbus/node-key-file-9.json",
    "content": "{\n  \"crypto\": {\n    \"kdf\": {\n      \"function\": \"scrypt\",\n      \"params\": {\n        \"dklen\": 32,\n        \"n\": 262144,\n        \"p\": 1,\n        \"r\": 8,\n        \"salt\": \"b2c1dcf062af46ad0d461884702085714a3d0fb8b70f9a9c97fbcdcc87a0c6e8\"\n      },\n      \"message\": \"\"\n    },\n    \"checksum\": {\n      \"function\": \"sha256\",\n      \"params\": {},\n      \"message\": \"d3968abf2787862347fabfc8193074e821af2425007403bc167a76a2ee373528\"\n    },\n    \"cipher\": {\n      \"function\": \"aes-128-ctr\",\n      \"params\": {\n        \"iv\": \"985b00b8718fb134d28c3c6b0948b569\"\n      },\n      \"message\": \"319f14e553fdf067a534de1946ef001693f5599e2cd22c840df5a0738249da752fb3cf1c\"\n    }\n  },\n  \"pubkey\": \"08021221020b3884467bd7746561e271324f097cde4c8b1c92e06f738c7e5141e034eed2aa\",\n  \"uuid\": \"d59e5185-fecc-4685-a409-35b11e056291\",\n  \"version\": 1\n}"
  },
  {
    "path": "static_files/peerdas-node-keys/prysm/node-key-file-1",
    "content": "86e8ff81b315fc388b4eab77983fcd269f86d0c4cd5bf8bb18aef28dabb14c8d"
  },
  {
    "path": "static_files/peerdas-node-keys/prysm/node-key-file-10",
    "content": "5a3e557135e95cc053d914dd50b339f530961a9f9d724562923761809404a8a6"
  },
  {
    "path": "static_files/peerdas-node-keys/prysm/node-key-file-11",
    "content": "a10fffc2c6b70cbf101900e97f9a51c0a7ac1fdf0bdf839353658b2d5760c636"
  },
  {
    "path": "static_files/peerdas-node-keys/prysm/node-key-file-12",
    "content": "beb438d71fd9360d6f5dda3c42dd34cdc230fbe714292e7cb29ddf8fbccef299"
  },
  {
    "path": "static_files/peerdas-node-keys/prysm/node-key-file-13",
    "content": "735e133c4a0a68adb68301033ed157dd0385d3cfaa73ac4a1088c696eb0e4947"
  },
  {
    "path": "static_files/peerdas-node-keys/prysm/node-key-file-14",
    "content": "75bacc546d49e1992e6f82b299a9acf2a467df1fb52f26f78c320bd2b4fb167a"
  },
  {
    "path": "static_files/peerdas-node-keys/prysm/node-key-file-15",
    "content": "d93aa4fdb9c25f00e435f9cc719691eea6a2fc458d9a2806fa29e80a3df8e1a7"
  },
  {
    "path": "static_files/peerdas-node-keys/prysm/node-key-file-16",
    "content": "bcde78df324ef37411964ee73fadefa0e3bb6cbe765b5c7b8d6750fbe6a10608"
  },
  {
    "path": "static_files/peerdas-node-keys/prysm/node-key-file-2",
    "content": "e156614877adbfac274118a3be4b7dbfcd6d994126ab7e758dd7aa688f8ec0da"
  },
  {
    "path": "static_files/peerdas-node-keys/prysm/node-key-file-3",
    "content": "932bc7ca6f9e2f3813518134c649271cb2c8f98f6af26b3c35634f0002d29dd5"
  },
  {
    "path": "static_files/peerdas-node-keys/prysm/node-key-file-4",
    "content": "6eca21ca4f4f512d417cc52f10fdf089e3c016e3a344b430ef122945e16bae2c"
  },
  {
    "path": "static_files/peerdas-node-keys/prysm/node-key-file-5",
    "content": "2e2ec45474bd8ab39ea4a59c855b255ba7a68f8960b93aa4949a97606439df9b"
  },
  {
    "path": "static_files/peerdas-node-keys/prysm/node-key-file-6",
    "content": "2ea02c3b9f8548eee91c2c2ea469069dd575de9e1bc3f457f807d2b5567323e9"
  },
  {
    "path": "static_files/peerdas-node-keys/prysm/node-key-file-7",
    "content": "c070f1f23c0bdcf2e0c318ebcc73d04488484d58c0120ff332bf7a435f7fda04"
  },
  {
    "path": "static_files/peerdas-node-keys/prysm/node-key-file-8",
    "content": "d91548137f8dc3a0e53d1d5334a6be043690f84f7a1301db77b49c2117b9e831"
  },
  {
    "path": "static_files/peerdas-node-keys/prysm/node-key-file-9",
    "content": "077cc1cf5a9b88e147784190a4bcad4479440f75456506c2bbda98c422dc89be"
  },
  {
    "path": "static_files/peerdas-node-keys/teku/node-key-file-1",
    "content": "86e8ff81b315fc388b4eab77983fcd269f86d0c4cd5bf8bb18aef28dabb14c8d"
  },
  {
    "path": "static_files/peerdas-node-keys/teku/node-key-file-10",
    "content": "5a3e557135e95cc053d914dd50b339f530961a9f9d724562923761809404a8a6"
  },
  {
    "path": "static_files/peerdas-node-keys/teku/node-key-file-11",
    "content": "a10fffc2c6b70cbf101900e97f9a51c0a7ac1fdf0bdf839353658b2d5760c636"
  },
  {
    "path": "static_files/peerdas-node-keys/teku/node-key-file-12",
    "content": "beb438d71fd9360d6f5dda3c42dd34cdc230fbe714292e7cb29ddf8fbccef299"
  },
  {
    "path": "static_files/peerdas-node-keys/teku/node-key-file-13",
    "content": "735e133c4a0a68adb68301033ed157dd0385d3cfaa73ac4a1088c696eb0e4947"
  },
  {
    "path": "static_files/peerdas-node-keys/teku/node-key-file-14",
    "content": "75bacc546d49e1992e6f82b299a9acf2a467df1fb52f26f78c320bd2b4fb167a"
  },
  {
    "path": "static_files/peerdas-node-keys/teku/node-key-file-15",
    "content": "d93aa4fdb9c25f00e435f9cc719691eea6a2fc458d9a2806fa29e80a3df8e1a7"
  },
  {
    "path": "static_files/peerdas-node-keys/teku/node-key-file-16",
    "content": "bcde78df324ef37411964ee73fadefa0e3bb6cbe765b5c7b8d6750fbe6a10608"
  },
  {
    "path": "static_files/peerdas-node-keys/teku/node-key-file-2",
    "content": "e156614877adbfac274118a3be4b7dbfcd6d994126ab7e758dd7aa688f8ec0da"
  },
  {
    "path": "static_files/peerdas-node-keys/teku/node-key-file-3",
    "content": "932bc7ca6f9e2f3813518134c649271cb2c8f98f6af26b3c35634f0002d29dd5"
  },
  {
    "path": "static_files/peerdas-node-keys/teku/node-key-file-4",
    "content": "6eca21ca4f4f512d417cc52f10fdf089e3c016e3a344b430ef122945e16bae2c"
  },
  {
    "path": "static_files/peerdas-node-keys/teku/node-key-file-5",
    "content": "2e2ec45474bd8ab39ea4a59c855b255ba7a68f8960b93aa4949a97606439df9b"
  },
  {
    "path": "static_files/peerdas-node-keys/teku/node-key-file-6",
    "content": "2ea02c3b9f8548eee91c2c2ea469069dd575de9e1bc3f457f807d2b5567323e9"
  },
  {
    "path": "static_files/peerdas-node-keys/teku/node-key-file-7",
    "content": "c070f1f23c0bdcf2e0c318ebcc73d04488484d58c0120ff332bf7a435f7fda04"
  },
  {
    "path": "static_files/peerdas-node-keys/teku/node-key-file-8",
    "content": "d91548137f8dc3a0e53d1d5334a6be043690f84f7a1301db77b49c2117b9e831"
  },
  {
    "path": "static_files/peerdas-node-keys/teku/node-key-file-9",
    "content": "077cc1cf5a9b88e147784190a4bcad4479440f75456506c2bbda98c422dc89be"
  },
  {
    "path": "static_files/slashoor-config/config.yaml.tmpl",
    "content": "beacon:\n  endpoints:\n{{- range .BeaconEndpoints }}\n    - \"{{ . }}\"\n{{- end }}\n  timeout: {{ .BeaconTimeout }}\n\nindexer:\n  max_epochs_to_keep: {{ .MaxEpochsToKeep }}\n\nbackfill_slots: {{ .BackfillSlots }}\n\ndetector:\n  enabled: {{ .DetectorEnabled }}\n\nproposer:\n  enabled: {{ .ProposerEnabled }}\n\nsubmitter:\n  enabled: {{ .SubmitterEnabled }}\n  dry_run: {{ .SubmitterDryRun }}\n\ndora:\n  enabled: {{ .DoraEnabled }}\n{{- if .DoraURL }}\n  url: \"{{ .DoraURL }}\"\n{{- end }}\n  scan_on_startup: {{ .DoraScanOnStartup }}\n"
  },
  {
    "path": "static_files/spamoor-config/rpc-hosts.txt.tmpl",
    "content": "# spamoor rpc hosts file\n{{- range $host := .RPCHosts }}\n{{ $host }}\n{{- end }}\n"
  },
  {
    "path": "static_files/spamoor-config/startup-spammer.yaml.tmpl",
    "content": "{{- range $spammer := .StartupSpammer }}\n- {{ $spammer }}\n{{- end }}"
  },
  {
    "path": "static_files/tempo-config/tempo.yaml.tmpl",
    "content": "stream_over_http_enabled: true\n\nserver:\n  http_listen_port: {{ .HTTPPort }}\n\ndistributor:\n  receivers:\n    otlp:\n      protocols:\n        grpc:\n          endpoint: 0.0.0.0:{{ .OTLPGRPCPort }}\n        http:\n          endpoint: 0.0.0.0:{{ .OTLPHTTPPort }}\n\nstorage:\n  trace:\n    backend: local\n    wal:\n      path: /tmp/tempo/wal\n    local:\n      path: /tmp/tempo/traces\n"
  },
  {
    "path": "static_files/tracoor-config/config.yaml.tmpl",
    "content": "server:\n  addr: \":8081\"\n  metricsAddr: \":9091\"\n  pprofAddr: \":6060\"\n  gatewayAddr: \":{{ .ListenPortNum }}\"\n  preStopSleepSeconds: 1\n  ntpServer: time.google.com\n\n  persistence:\n    dsn: \"file:/tmp/tracoor.db\"\n    driver_name: sqlite\n\n  services:\n    indexer:\n      retention:\n        beaconStates: 30m\n        executionBlockTraces: 30m\n        beaconBlocks: 30m\n\nagents:\n{{- range $client := .ParticipantClientInfo }}\n  - name: \"{{ $client.Beacon.FullName }}\"\n    ethereum:\n      overrideNetworkName: \"{{ $client.Network }}\"\n      beacon:\n        nodeAddress: \"{{ $client.Beacon.Beacon_HTTP_URL }}\"\n      execution:\n        nodeAddress: \"{{ $client.Execution.Execution_HTTP_URL }}\"\n{{- end }}\n\nshared:\n  metricsAddr: \":9091\"\n  logging: \"debug\"\n  indexer:\n    address: 0.0.0.0:8081\n  store:\n    type: fs\n    config:\n      base_path: \"/data/tracoor\"\n"
  },
  {
    "path": "static_files/validator-ranges/config.yaml.tmpl",
    "content": "{{ range $data := .Data }}\n{{ $data.Range }}: {{ $data.ClientName }}\n{{ end }}"
  },
  {
    "path": "static_files/xatu-sentry-config/config.yaml.tmpl",
    "content": "logging: \"debug\"\nmetricsAddr: \":{{ .MetricsPort }}\"\n\nname: \"{{ .BeaconNodeName }}\"\n\nntpServer: time.google.com\n\nethereum:\n  beaconNodeAddress: \"{{ .BeaconNodeAddress }}\"\n  overrideNetworkName: \"{{ .EthereumNetworkName }}\"\n  beaconSubscriptions:\n  {{- range .BeaconSubscriptions }}\n  - \"{{ . }}\"\n  {{- end }}\n\nforkChoice:\n  enabled: false\n\n  onReOrgEvent:\n    enabled: false\n\n  interval:\n    enabled: false\n    every: 30s\n\n  at:\n    enabled: false\n    slotTimes:\n    - 4s\n\nattestationData:\n  enabled: false\n\n  allCommittees: false\n\n  interval:\n    enabled: false\n    every: 30s\n\n  at:\n    enabled: false\n    slotTimes:\n    - 4s\n\nbeaconCommittees:\n  enabled: true\n\nvalidatorBlock:\n  at:\n    enabled: true\n    slotTimes:\n    - 0.1s\n  enabled: true\n  interval:\n    enabled: false\n\nproposerDuty:\n  enabled: true\n\noutputs:\n- name: xatu-server\n  type: xatu\n  config:\n    address: \"{{ .XatuServerAddress }}\"\n    tls: {{ .XatuServerTLS }}\n    maxQueueSize: 51200\n    batchTimeout: 1s\n    exportTimeout: 10s\n    maxExportBatchSize: 256\n    {{- if .XatuServerHeaders }}\n    headers:\n    {{- range $key, $value := .XatuServerHeaders }}\n      {{ $key }}: \"{{ $value }}\"\n    {{- end }}\n    {{- end }}\n"
  },
  {
    "path": "static_files/zkboost-config/config.toml.tmpl",
    "content": "port = {{ .Port }}\nel_endpoint = \"{{ .ELEndpoint }}\"\nwitness_timeout_secs = {{ .WitnessTimeoutSecs }}\nproof_cache_size = {{ .ProofCacheSize }}\nwitness_cache_size = {{ .WitnessCacheSize }}\n\n[dashboard]\nenabled = {{ .DashboardEnabled }}\nretention = {{ .DashboardRetention }}\n{{ range $zkvm := .Zkvms }}\n[[zkvm]]\nkind = \"{{ $zkvm.Kind }}\"\nproof_type = \"{{ $zkvm.ProofType }}\"\nproof_timeout_secs = {{ $zkvm.ProofTimeoutSecs }}\n{{- if eq $zkvm.Kind \"ere\" }}\nendpoint = \"{{ $zkvm.Endpoint }}\"\n{{- end }}\n{{- if eq $zkvm.Kind \"mock\" }}\n{{- if eq $zkvm.MockProvingTimeKind \"constant\" }}\nmock_proving_time = { kind = \"constant\", ms = {{ $zkvm.MockProvingTimeConstantMs }} }\n{{- else if eq $zkvm.MockProvingTimeKind \"random\" }}\nmock_proving_time = { kind = \"random\", min_ms = {{ $zkvm.MockProvingTimeRandomMinMs }}, max_ms = {{ $zkvm.MockProvingTimeRandomMaxMs }} }\n{{- else if eq $zkvm.MockProvingTimeKind \"linear\" }}\nmock_proving_time = { kind = \"linear\", ms_per_mgas = {{ $zkvm.MockProvingTimeLinearMsPerMgas }} }\n{{- end }}\nmock_proof_size = {{ $zkvm.MockProofSize }}\nmock_failure = {{ $zkvm.MockFailure }}\n{{- end }}\n{{ end }}\n"
  },
  {
    "path": "version.txt",
    "content": "6.1.0\n"
  }
]