Skip to content

Solana clustering: proposed approach #173

Description

@josephinney

@LadyChristina following up on the clustering you mentioned for Solana after my PR is merged. Here's the approach I'd like to confirm with you before building it.

Goal:

  • A clusters/solana.json plus a map_from_known_clusters override in SolanaMapping, so validators run by the same entity (e.g. Kraken 1 + Kraken 2) count as one.

Three decisions:

  1. Keyed by vote account (not the reward address Cardano uses), since in Solana the identity account can rotate but the vote account is permanent, as we previously discussed.

  2. Homepage-driven grouping. The Solana Config program only gives us name and homepage, so a shared homepage domain groups validators while name only corroborates and never groups alone. Since homepage comes from the on-chain Config program, it is publicly verifiable. Chains of matches are merged transitively (via union-find), so A-B and B-C become one cluster (A, B, C) rather than two. Every validator gets an entry, including the ones that group with no one (singletons), so the lookup always resolves.

  3. Generated in this repo: a solana_preprocessing/ script mirroring cardano_preprocessing/, which consumes identifiers/solana.json and emits clusters/solana.json, with tests alongside.

Example:

Input (identifiers/solana.json, keyed by vote account):

{
  "VoteAcc_A": { "name": "Kraken 1", "homepage": "https://kraken.com/" },
  "VoteAcc_B": { "name": "Kraken 2", "homepage": "https://kraken.com/" },
  "VoteAcc_C": { "name": "Solo Node", "homepage": "https://solonode.io" }
}

Output (clusters/solana.json):

{
  "VoteAcc_A": { "cluster": "Kraken", "validator": "Kraken 1", "source": ["homepage"] },
  "VoteAcc_B": { "cluster": "Kraken", "validator": "Kraken 2", "source": ["homepage"] },
  "VoteAcc_C": { "cluster": "Solo Node", "validator": "Solo Node", "source": ["singleton"] }
}

Same cluster/source shape as Cardano, with validator in place of pool and source limited to the signals we have (homepage, name, singleton).

I'd deliver as one follow-up PR:

  • the preprocessing script
  • the generated clusters/solana.json file
  • mapping override and tests.

Does this look right to you? Glad to adjust anything before I start.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions