Méthodologie du score de validateur

Version de l'algorithme : v4.8 · Dernière mise à jour : 2026-08-19

FlareWatch attribue à chaque validateur P-Chain un score composite de 0–100 réparti sur 9 dimensions. Les calculs sont déterministes, les entrées proviennent de données publiques de la blockchain [Flare Explorer] [FSE] [Flaremetrics], et le même algorithme s'applique à chaque validateur du réseau — y compris le nœud validateur de FlareWatch, qui est noté par cette fonction exacte sans traitement spécial. Cette page documente chaque dimension et seuil afin que les opérateurs et les stakers puissent voir exactement comment le score est calculé et pourquoi chaque valeur a été choisie. Chaque affirmation ici renvoie à sa source primaire on-chain ou upstream — voir Sources et références en bas.

Périmètre : cette page documente le score de validateur — ce que vous voyez en mode staking sur la page des validateurs (délégation de FLR à un validateur P-Chain pour les récompenses VRM + MIRROR). Le score du fournisseur FTSO affiché en mode délégation (délégation de WFLR aux fournisseurs de données FTSO) utilise un algorithme distinct à 13 dimensions axé sur la performance des fournisseurs de données — précision, participation au protocole V2, etc. Ce sont des rôles on-chain distincts avec des récompenses distinctes, notés séparément. Voir Méthodologie du score du fournisseur FTSO pour le côté délégation.
Pas d'équivalent SGB : cette notation s'applique uniquement aux validateurs P-Chain de Flare. L'ensemble des validateurs P-Chain de Songbird est limité aux entités approuvées par la Flare Foundation, la délégation P-Chain au détail SGB est rare et l'onglet staking est FLR uniquement. Il n'y a pas de bascule FLR / SGB en mode staking. Pour la délégation FTSO sur SGB, voir Méthodologie du score du fournisseur FTSO, qui couvre les deux chaînes.
Comment nous calculons l'APY — ce que vous gagnez réellement

methodology.aprCard.p1

Total APR = Staking rewards (VRM) + MIRROR (FTSO-inflation share)
  • Récompenses de staking (VRM) — la part nette d'un délégateur dans les récompenses de validation = Σ paiement du délégateur ÷ Σ délégué (répartition propre à Flare ; les frais sont déjà déduits). Parce que Flare paie proportionnellement à la mise, c'est à peu près uniforme dans tout le réseau et diffère principalement par les frais — des frais moins élevés signifient un taux de délégation plus élevé.
  • MIRROR — la part de votre mise de l'inflation FTSO, payée en plus, uniquement sur les validateurs exécutant une pile FTSO active. Elle varie selon la participation FTSO du validateur et est mesurée sur les époque les plus récentes.

Comparaison avec Flare Systems Explorer ? FSE et d'autres explorateurs affichent le taux de délégation uniquement — ils n'ajoutent pas MIRROR — donc notre APY total affiche des valeurs plus élevées sur n'importe quel validateur MIRROR-actif (l'écart est exactement la ligne MIRROR ci-dessus). Les deux chiffres sont des moyennes mobiles ~8-epoch à partir des mêmes données de scripts de récompense, donc un changement de frais mi-fenêtre d'un validateur est en retard sur un snapshot de frais actuels sur l'un ou l'autre site jusqu'à ce qu'il vieillit à travers la fenêtre.

Deux autres chiffres apparaissent dans l'infobulle APY et ne sont pas le taux du délégateur : la référence théorique (APY brut du réseau × (1 − frais), staking uniquement — utilisée comme secours avant qu'assez d'historique mesuré existe), et le rendement de l'auto-obligation de l'opérateur (le rendement de sa propre mise, amplifié par la capture des frais — une métrique opérateur, pas ce que vous gagnez).

Pour le score : la dimension Rendement net score le taux de délégation VRM uniquement, et MIRROR est scoré dans sa propre dimension — donc MIRROR n'est jamais double-compté, même bien qu'il soit inclus dans l'APY total affiché.

Bandes de score
90+Top tier — top ~10–20% des opérateurs. Profil typique : validateur full-stack + FTSO + FDC, frais bas, MIRROR-actif, fiabilité FIP-10 constante, base de délégateurs saine, auto-obligation significative. Aucune dimension unique n'est requise — les opérateurs atteignent le Top tier en accumulant la force sur la plupart des catégories.
80–89Strong — répond à la plupart des critères clés ; une ou deux dimensions en deçà du top tier.
70–79Good — répond à tous les critères de base ; pas de lacunes majeures.
60–69Acceptable — utilisable mais non différencié.
<60Below median — lacunes significatives dans une ou plusieurs dimensions. Fait mathématique, pas un jugement de qualité.
Dimensions (somme à 100)
Uptime20 pts max
Quoi : Combinaison du uptime RPC P-Chain instantané ET du ratio d'éligibilité uptime FIP-10 historique sur les époque de récompense récentes.
Comment : Courbe RPC : ≥ 99,5 % → 17 à 20. 99–99,5 % → 13–17. 95–99 % → 4–13. 90–95 % → 0–4. < 90 % → 0. Le résultat est ensuite multiplié par uptimeReliability (epochsIncluded / epochsObserved sur les 8 dernières époques de récompense d'après les données publiques des reward-scripts — l'ensemble complet des minimums FIP-10 depuis v4.2, pas seulement la disponibilité RPC). v3.9 a corrigé une discontinuité perverse exactement à 95 % où passer de 94,99 → 95,00 de disponibilité perdait 4 points.
if (uptime >= 99.5)   raw = 17 + (uptime - 99.5) * 6
else if (uptime >= 99) raw = 13 + (uptime - 99)   * 8
else if (uptime >= 95) raw = 4 + (uptime - 95) * 2.25    // v3.9: was (u - 95) * 3.25 starting at 0
else                   raw = max(0, uptime - 90) * 0.8   // 90 → 0, 95 → 4 (continuity)
raw = clamp(raw, 0, 20)

reliability = epochsIncluded / epochsObserved   // last ~8 epochs · v4.2: the
                                                // FULL FIP-10 minimums set
                                                // (uptime + FSP + FTSO + FDC),
                                                // not RPC-uptime alone

score = raw * clamp(reliability, 0, 1)                 // dimension max 20
Pourquoi : Avant v3.4, cette dimension était essentiellement morte — 92,9% des validateurs actifs ont 100% de uptime RPC, donc la courbe notait tout le monde pareil. Le ratio de fiabilité est un vrai signal de série chronologique : un validateur qui n'a pas respecté les conditions minimales FIP-10 dans 3 des 8 époque récentes a un score de fiabilité de 62,5%, indépendamment de ce que le RPC instantané rapporte actuellement. Plus strict que le plancher de protocole FIP-10 de 80% exprès. Les données d'éligibilité par époque sont publiées par la Flare Foundation dans son repo des scripts de récompense.
Net Yield18 pts max
Quoi : Le taux de récompense de staking net des frais (VRM) qu'un délégateur reçoit, ancré à la médiane du réseau.
Comment : scoreAPR = taux DELEGATION mesuré net (delegationAPY : Σ delegatorRewardAmount / Σ délégué, à partir des scripts de récompense de la Flare Foundation, dernières ~8 époque) quand disponible, sinon baseAPR théorique = brut × (1 − frais). Score = (scoreAPR / medianAPR) ancré : ratio 0,6 → 0 pts, 1,0 (médiane) → 12 pts, 1,2 → 18 pts. IMPORTANT : cette dimension note le taux VRM (récompense-validation) UNIQUEMENT — MIRROR est noté séparément dans la dimension Participation MIRROR, donc il n'est pas compté deux fois ici. L'APR 'Total' affiché (VRM + MIRROR) est un nombre orientation délégateur, pas l'entrée Net Yield.
scoreAPR = delegationAPY > 0 ? delegationAPY : baseAPR   // VRM, net of fee
medianAPR = median(scoreAPR across all validators)
cappedAPR = min(scoreAPR, 25)                  // APY_DISPLAY_CAP

if (medianAPR > 0):
  ratio = cappedAPR / medianAPR
  score = clamp(((ratio - 0.6) / 0.6) * 18, 0, 18)
else:
  score = min(18, (cappedAPR / 8) * 18)        // fallback: BASE_APY = 8
Pourquoi : Les deux côtés du ratio sont le taux de DELEGATION NET (delegationAPY mesuré vs brut théorique×(1−frais)), donc la comparaison est comme-pour-comme — plus gonflé par 1/(1−frais) comme c'était le cas quand l'entrée était un taux brut pré-frais (le bug 'doublage' d'~2×). Parce que Flare paie les récompenses de validation proportionnellement à la mise, le taux de délégation VRM est à peu près uniforme dans tout le réseau et varie principalement par frais — donc cette dimension reflète principalement la compétitivité des frais et la fiabilité de livraison (un validateur qui manque des époque en livre moins). MIRROR (qui varie selon la participation FTSO) est délibérément conservé dans sa propre dimension pour éviter le double comptage.
Raisonnabilité des frais7 pts max
Quoi : Protection contre l'extraction au-delà du plancher de frais du protocole, lisse par segments linéaires.
Comment : Ancrage = max(frais actifs minimum observés, plancher de frais validateur du protocole — 20% depuis la fourche dure Granite, 2026-07-14). Tout frais égal ou inférieur à l'ancrage → 7 pts complets. Au-delà, une rampe linéaire avec des pentes de plus en plus abruptes sur les 20 points de frais suivants (ancrage+5 → 6, ancrage+10 → 4,5, ancrage+15 → 2,5, ancrage+20 → 0) : les petits dépassements sont à peine pénalisés, l'extraction est sévèrement punie. Avant Granite, l'ancrage était un absolu de 5% ; le serrage du plancher signifie qu'aucun opérateur n'est jamais pénalisé pour facturer le minimum légal.
// anchor = max(observed minimum active fee, 20% protocol floor)
d = fee - anchor                                  // distance above market best
if (d <= 0)       score = 7                       // at/below best available
else if (d <= 5)  score = 7   - d * 0.2           //  0 → 5 over: 7 → 6
else if (d <= 10) score = 6   - (d - 5)  * 0.3    //  5 → 10 over: 6 → 4.5
else if (d <= 15) score = 4.5 - (d - 10) * 0.4    // 10 → 15 over: 4.5 → 2.5
else if (d <= 20) score = 2.5 - (d - 15) * 0.5    // 15 → 20 over: 2.5 → 0
else              score = 0
// fees > anchor+20 saturate at 0/7 — the v4.5 extreme-fee
// penalty below takes over from there
Pourquoi : Le rendement net tient déjà compte des frais par pourcentage en termes livrés ; cette dimension signale uniquement les opérateurs facturant matériellement au-dessus de ce que le protocole et le marché autorisent. Une fois que tous les frais se situent au plancher appliqué de 20%, chacun obtient les notes maximales ici et la dimension cesse de différencier — par conception : un chiffre que personne ne peut sous-coter ne peut différencier personne.
Qualité de l'opérateur12 pts max
Quoi : Prend le plus élevé de deux signaux indépendants : ligne de base de vérification (confiance d'identité) et performance opérationnelle dérivée de FTSO.
Comment : Ligne de base de vérification : tier curé (+7) atteint de deux façons — entrée KNOWN_VALIDATORS vérifiée manuellement OU promotion automatique via comportement objectif (v3.10 : 90+ jours observés ET 25+ délégateurs agrégés d'opérateur ET pas actuellement en retrait ET auto-obligation ≥ plancher FIP-10). Nom découvert automatiquement à partir de Flaremetrics ou FSE → +3. Non vérifié → 0. Dérivé FTSO : interpolation linéaire score FTSO 50 → 4 pts jusqu'à score FTSO 100 → 12 pts (en dessous de 50 étages à 4). Le score final est max(vérification, dérivé FTSO) — la participation FTSO ne peut qu'aider, jamais faire de mal.
// Verification baseline (v3.10 hybrid)
isCurated = (in KNOWN_VALIDATORS) OR (
  daysObserved >= 90 AND
  operatorDelegatorCount >= 25 AND
  retention30d >= -15% AND
  selfBondFLR >= 1_000_000
)

if (isCurated)                       verification = 7
else if (name auto-discovered)      verification = 3
else                                verification = 0

// FTSO-derived (only when ftsoOperatorScore is a number)
clamped = clamp(ftsoOperatorScore, 50, 100)
ftsoDerived = 4 + (clamped - 50) * (8/50)   // FTSO 50 → 4, FTSO 100 → 12

// Final score
score = max(verification, ftsoDerived)
Pourquoi : Récompense les opérateurs qui exécutent une pile complète (validateur + FTSO + FDC) sans pénaliser les opérateurs de confiance qui participent au FTSO avec un score de niveau moyen. La logique max() v3.8 empêche explicitement l'incitation perverse de « abandonner FTSO pour améliorer votre score FlareWatch ». Le tier auto-découvert (+3) ferme la falaise précédente 7→0 qui affectait les opérateurs enregistrés avec Flaremetrics ou FSE mais pas encore manuellement curés.
Participation MIRROR12 pts max
Quoi : Si le nodeID du validateur livre réellement la part d'inflation FTSO aux stakers — à la fois la fraction qui atteint les délégataires (passthrough de commission) et, depuis v4.6, le montant livré par rapport au champ.
Comment : Actif → 10 × (1 − commission/100). En pause → 5 × passthrough. Inactif (aucun signal de participation nulle part) → 0. Pas de données (validateur genuinely non observé) → 5 × passthrough. v3.6 a élargi le signal 'actif' pour inclure à la fois les événements RewardClaimed(claimType=3) on-chain ET les allocations claimType=3 dans le JSON Merkle FSP canonique — l'un ou l'autre suffit. Cela capture les validateurs dont le MIRROR a été alloué mais pas encore réclamé on-chain (p. ex., les fournisseurs auto-délégataires dont le chemin de règlement ne déclenche pas l'événement de réclamation standard). v4.6 bonus de magnitude (max +2, plafond de dimension 12) : pour les validateurs miroir-actifs uniquement, clamp((mirrorAPY / networkMedianMirrorAPY − 1.2) × 5, 0, 2) — crédit pour livrer un taux MIRROR supérieur à la médiane (net de commission) aux délégataires. Ancré au taux médian du réseau, donc neutre en taille : un petit validateur livrant un taux élevé gagne le même crédit qu'un grand.
passthrough = max(0, 1 - fee / 100)

if (mirrorStatus == "active")    base = 10 * passthrough
else if (mirrorStatus == "paused")   base = 5 * passthrough
else if (mirrorStatus == "inactive") base = 0
else                                 base = 5 * passthrough  // no data yet

// v4.6 — capped, median-anchored bonus for delivered MIRROR yield.
// Only mirror-active validators paying ABOVE 1.2x the network median
// delivered rate (mirrorAPY, net of fee) earn it; size-neutral.
ratio = mirrorAPY / networkMedianMirrorAPY
bonus = clamp((ratio - 1.2) * 5, 0, 2)   // active only, else 0
score = base + bonus                     // dimension max 12
Pourquoi : MIRROR se distribue automatiquement aux stakers sur les validateurs participant à FSP. Un validateur à 100 % de commission qui est 'actif' livre 0 $ aux délégataires ; le score reflète ce que les délégataires reçoivent réellement, pas simplement le statut du drapeau côté protocole. Le bonus de magnitude v4.6 comble un point aveugle : le passthrough seul mesurait la FRACTION atteignant les délégataires mais pas le MONTANT, donc un validateur payant un taux MIRROR livré beaucoup plus élevé ne gagnait aucun crédit supplémentaire pour cela. C'est désormais le cas — plafonné, et seulement au-dessus de la médiane du réseau.
Profil de Capacité7 pts max
Quoi : Fonction tente culminant à une utilisation bien dimensionnée.
Comment : 0% utilisé → 1,75. Rampe linéaire jusqu'à 7 à 70% utilisé. Rampe linéaire vers le bas jusqu'à 5,25 à 100% (plafonné). Redimensionné en v3.7 de 8 → 7 pour financer les nouvelles composantes de trajectoire Trust.
utilization = clamp(1 - freeSpaceFLR / maxDelegationFLR, 0, 1)

if (utilization <= 0.70):
  score = 1.75 + (utilization / 0.70) * 5.25     // 1.75 → 7 ramp
else:
  score = 7 - ((utilization - 0.70) / 0.30) * 1.75 // 7 → 5.25 ramp
Pourquoi : Être aux délégations maximales FIP-10 est un signal POSITIF d'attractivité — prouvé digne de confiance par suffisamment de délégants pour se remplir. La v2 notait les validateurs plafonnés 0/5 ; la v3 corrige cela. Bien dimensionné (prouvé attractif ET a de la place) obtient le pic. La v3.7 a réduit le plafond de dimension 8 → 7 pour que le point libéré puisse financer les nouvelles composantes de trajectoire retention + self-bond de Trust.
Confiance Communautaire11 pts max
Quoi : Multi-signal : nombre de délégants + santé de la distribution des stakes + longévité + engagement du self-bond de l'opérateur (proportionnel et absolu) + rétention 30 jours + trajectoire du self-bond + agrégation d'opérateur multi-nœud.
Comment : Signal de décompte (max 6, OPERATOR-AGGREGATED v3.7) : délégants [5, 500] mis à l'échelle logarithmique → [0, 6], sommés sur tous les nœuds connus d'un opérateur. Ajustement de concentration (±1) : stake moyen retail-friendly (<500K FLR) → +1, concentré en baleines (>50M FLR moy) → −1. Bonus de longévité (max +1, immunisé contre effacement v3.6) : +0,5 à 30 jours observés, +1 à 90+ jours — revient à récompenser la présence de l'époque des scripts si le premier KV observé a été effacé. Self-bond mise en jeu (max +2 / min −1, BI-AXIAL v4.7) : crédité par le MEILLEUR de la part proportionnelle OU de la taille absolue — proportionnel ≥10% → +2 / 5–10% → +1, et absolu = min(1, selfBond ÷ 20M) × 2 saturant au bond top-décile du réseau ; le signal prend le max des deux, toujours plafonné à +2. Plancher sub-FIP-10 (<1M FLR) → −1. Rétention (max ±0,5, NOUVEAU v3.7) : FLR délégué +10% sur 30 jours → +0,5, −15% → −0,5. Trajectoire du self-bond (max ±0,5, NOUVEAU v3.7) : self-bond de l'opérateur +20% sur 30 jours → +0,5, −10% → −0,5.
// Count signal (max 6)
if (delegatorCount <= 5)        countScore = 0
else if (delegatorCount >= 500) countScore = 6
else  countScore = clamp(log(delegatorCount / 5) / log(100) * 6, 0, 6)

// Concentration adjustment (-1 to +1) — skip if <3 delegators
avgFLR = delegatedFLR / delegatorCount
if (avgFLR < 500_000)        concentrationAdj = +1
else if (avgFLR < 5_000_000)   concentrationAdj = +0.5
else if (avgFLR > 50_000_000)  concentrationAdj = -1
else if (avgFLR > 20_000_000)  concentrationAdj = -0.5
else                           concentrationAdj = 0

// Longevity bonus (0 to +1)
daysObserved = (now - firstObservedAtMs) / 86400000
if (daysObserved >= 90)      longevityBonus = +1
else if (daysObserved >= 30) longevityBonus = +0.5
else                         longevityBonus = 0

// Self-bond alignment (-1 to +2, two-axis since v4.7)
if (selfBondFLR < 1_000_000)   selfBondAdj = -1              // hollow-operator floor
else:
  ratio        = selfBondFLR / totalStake                   // totalStake = selfBond + delegated
  proportional = ratio >= 0.10 ? +2 : ratio >= 0.05 ? +1 : 0
  absolute     = min(1, selfBondFLR / 20_000_000) * 2        // saturates at top-decile bond
  selfBondAdj  = max(proportional, absolute)                 // the better of the two axes

// Retention (-0.5 to +0.5, v3.7) — skip if no 30-day baseline yet
delta = (delegatedFLR - delegatedFLR30dAgo) / delegatedFLR30dAgo
if (delta >= +0.10)      retentionAdj = +0.5
else if (delta <= -0.15) retentionAdj = -0.5
else                     retentionAdj = 0

// Self-bond trajectory (-0.5 to +0.5, v3.7) — skip if no baseline
sbDelta = (selfBondFLR - selfBondFLR30dAgo) / selfBondFLR30dAgo
if (sbDelta >= +0.20)      selfBondTrajectoryAdj = +0.5
else if (sbDelta <= -0.10) selfBondTrajectoryAdj = -0.5
else                       selfBondTrajectoryAdj = 0

score = clamp(countScore + concentrationAdj + longevityBonus + selfBondAdj
            + retentionAdj + selfBondTrajectoryAdj, 0, 11)
Pourquoi : Le self-bond mise en jeu est un vrai signal d'équité que nous manquions — un validateur avec 10% du stake total en self-bond a des incitations nettement plus alignées qu'un fonctionnant au minimum FIP-10. v4.7 le rend bi-axial : lire le self-bond seulement comme un ratio pénalisait les opérateurs qui avaient mis en place un grand stake absolu puis attiré une délégation, ce qui dilue le ratio sans réduire l'engagement réel — un self-bond de 20M à un ratio dilué obtenait le même score qu'un bond <2M à ce ratio. Le signal crédite désormais le MEILLEUR de la part proportionnelle ou de la taille absolue, le côté absolu saturant à un bond top-réseau pour que la taille ne puisse pas simplement acheter du score, correspondant à la façon dont le score de fournisseur FTSO traite déjà le self-bond ; le plafond de +2 est inchangé, donc les opérateurs importants engagés peuvent maintenant l'atteindre mais le plafond n'a pas bougé. La longévité récompense les antécédents éprouvés sans pénaliser les nouveaux venus (petit bonus en haut, pas de pénalité en bas). Le risque de concentration importe pour les délégants — un validateur avec 1 baleine à 50M FLR est structurellement différent de 50 retail à 1M chacun. Les deux signaux de trajectoire v3.7 récompensent la croissance organique et l'engagement croissant de l'opérateur. Le plafond combiné est 11 (relevé de 10 en v3.7 pour les financer), aucun signal ne domine.
Fiabilité de Livraison10 pts max
Quoi : Ratio du taux de délégation nette réellement livré (VRM) par rapport à la baseline théorique, avec une pénalité de variance pour les paiements incohérents. Les deux côtés sont nets de frais, donc le ratio mesure la livraison réelle — pas les frais.
Comment : Ratio de livraison par morceaux linéaires : 100%+ → 10, 95% → 8, 90% → 6, 85% → 4, 80% → 2, <80% → rampe linéaire vers 0. Pénalité de variance : coefficient de variation × 0,5, plafonné à −30%. L'amortisseur de confiance se mélange vers le neutre 5 quand la taille de l'échantillon < 3 épocas. La v3.9 a linéarisé les seuils précédemment groupés — les falaises de limite jusqu'à 2 points sont maintenant lisses.
// Time-weighted rate is computed upstream from per-epoch
// reward-scripts data with decay = 0.85 per epoch back.
r = deliveryRatio   // capped at 1.0

if (r >= 1.00)      base = 10
else if (r >= 0.97) base = 9  + (r - 0.97) * (1 / 0.03)   // 0.97 → 9, 1.00 → 10
else if (r >= 0.95) base = 8  + (r - 0.95) * (1 / 0.02)   // 0.95 → 8, 0.97 → 9
else if (r >= 0.90) base = 6  + (r - 0.90) * (2 / 0.05)   // 0.90 → 6, 0.95 → 8
else if (r >= 0.85) base = 4  + (r - 0.85) * (2 / 0.05)   // 0.85 → 4, 0.90 → 6
else if (r >= 0.80) base = 2  + (r - 0.80) * (2 / 0.05)   // 0.80 → 2, 0.85 → 4
else                base = max(0, r * 2.5)                 // 0 → 0, 0.80 → 2

// Variance penalty (CoV = std-dev / mean across per-epoch rates)
variancePenalty = min(0.30, coefficientOfVariation * 0.5)
score = base * (1 - variancePenalty)

// Sample-size confidence dampener for < 3 epochs
if (totalStakesCompleted < 3):
  confidence = totalStakesCompleted / 3
  score = 5 + (score - 5) * confidence
Pourquoi : Promis vs. livré est le signal de responsabilité le plus direct pour les stakers. La v3.3 a ajouté deux raffinements : (1) le ratio principal utilise une moyenne pondérée exponentiellement dans le temps (les épocas récentes comptent plus), donc un validateur qui livrait bien auparavant mais a glissé récemment est correctement pénalisé ; (2) la pénalité de variance distingue les livreurs cohérents à 95% des livreurs oscillants autour de 95%, puisque ces derniers portent plus de risque pour les stakers qui se soucient d'un rendement prévisible.
Temps Restant5 pts max
Quoi : Jours avant la fin de la mise du validateur sur la P-Chain.
Comment : < 14 jours → 0 (essentiellement indisponible sous FIP-10). 14-30j → linéaire 0→2. 30-60j → linéaire 2→3. 60-120j → linéaire 3→5. 120j+ → 5. La v3.9 a linéarisé les seuils précédemment groupés — les falaises de limite (par ex. 13,99j → 0, 14j → 2) sont maintenant lisses.
daysLeft = (endTimeMs - now) / 86_400_000

if (daysLeft < 14)       score = 0
else if (daysLeft < 30)  score = 0 + (daysLeft - 14) * (2 / 16)    // 14 → 0, 30 → 2
else if (daysLeft < 60)  score = 2 + (daysLeft - 30) * (1 / 30)    // 30 → 2, 60 → 3
else if (daysLeft < 120) score = 3 + (daysLeft - 60) * (2 / 60)    // 60 → 3, 120 → 5
else                     score = 5
Pourquoi : Signal pratique — déléguer à un validateur avec 7 jours restants est une proposition différente que 1 an. La v3.2 a resserré le bas : les validateurs à moins de 14 jours de la fin de mise ne peuvent pas accepter de nouvelles délégations (le verrouillage minimum FIP-10 est 14 jours), donc ils sont effectivement unstakeable. Score = 0 distingue « unstakeable en ce moment » de « en train de se terminer bientôt ».
Pénalité de Panne Active (v4.3)(déduction) pts max
Quoi : Déduction plate superposée aux dimensions positives quand un validateur manque plusieurs épocas de récompense consécutives. Distinct du multiplicateur de fiabilité Uptime symétrique — capture les pannes actives, pas les défaillances chroniques.
Comment : Regardez le préfixe !eligible contigu du validateur dans le dossier cache:fsp-validator-participation (liste des épocas newest-first de la nodes-data.json publique des reward-scripts). 0–1 manques consécutifs → 0 pts (dans la variance / manque transient unique). 2 consécutifs → −3 pts (panne en développement). 3 consécutifs → −6 pts (soutenu — inattention de l'opérateur). 4+ consécutifs → −10 pts (panne prolongée active). Le score composite est limité à 0 après la déduction.
consecutiveMisses = 0
for entry in participation.recent (newest-first):
  if entry.eligible: break
  consecutiveMisses++

if consecutiveMisses < 2:  penalty = 0
elif consecutiveMisses == 2: penalty = 3
elif consecutiveMisses == 3: penalty = 6
else:                        penalty = 10                  // 4+

score = max(0, positiveDimensionsSum - penalty)
Pourquoi : Le modèle pré-v4.3 s'appuyait entièrement sur le multiplicateur uptimeReliability symétrique — 5 manques dispersés sur 24 épocas coûtaient autant que 5 manques consécutifs. Opérationnellement, ce sont des signaux très différents. Les manques dispersés disent aux délégants une défaillance chronique ; une série dit au validateur qu'il est cassé EN CE MOMENT. L'incident Luganodes le 2026-05-14 — plusieurs épocas manquées consécutives pendant que les délégants s'engageaient activement millions de FLR — était le cas spécifique que la release v4.3 adresse : surfacer le signal panne-active avec un impact de score plus net pour que les délégants puissent éviter une défaillance en vol avant de s'engager. La courbe par étapes évite la surréaction aux manques transients uniques (courant) tout en signalant fortement les séries soutenues (rares et conséquentes).
Pénalité Extreme-Fee (v4.5)(jusqu'à −75 % du score) pts max
Quoi : Déduction proportionnelle pour les frais dépassant la plage de la dimension Frais. La dimension Frais atteint son minimum de 0/7 une fois que les frais dépassent l'ancre de 20 points — au-delà de cela, le score composite cessait auparavant de réagir aux frais, ce qui signifiait qu'un validateur avec 100 % de frais (dont les délégants ne conservent rien) pouvait encore obtenir un score dans les 40 sur des dimensions insensibles aux frais comme le temps d'activité et MIRROR.
Comment : Zéro à un taux de frais de 50 % ou moins — la dimension Frais couvre déjà cette plage, il n'y a donc pas de double-comptage. Au-dessus de 50 %, la déduction augmente linéairement avec les frais, atteignant 75 % du score positif du validateur à un taux de frais de 100 %. Elle s'adapte au score lui-même, de sorte qu'un nœud privé soigné et un nœud négligé se retrouvent tous les deux à leur juste place : au bas d'un classement présenté aux délégants.
// v4.5 — fees beyond the Fee dimension's range (anchor+20)
if fee <= 50:  penalty = 0
else:          fraction = min(1, (fee - 50) / 50) * 0.75
               penalty  = positiveDimensionsSum * fraction

// fee 50% → no change · 75% → −37.5% of score · 100% → −75%
score = max(0, positiveDimensionsSum - outagePenalty - penalty)
Pourquoi : Ceci est un score pour les délégants. Un validateur qui conserve chaque récompense qu'il gagne pour ses délégants n'est pas un candidat à la délégation, quelle que soit la qualité de son temps d'activité — le score doit le dire sans ambiguïté. Fonction pure des frais on-chain, appliquée identiquement à chaque nœud, y compris le nôtre.
Comment obtenir 100/100 — un playbook validateur
Le cycle d'audit qui a produit la v4.0 a été spécifiquement conçu pour que maxer chaque dimension vous rend genuinely un meilleur validateur pour vos délégants. Améliorer votre score n'est pas jouer le système — c'est le système fonctionnant comme prévu. Voici le playbook explicite, par dimension.
Uptime — 20 pts. Maintenez ≥99,5% de disponibilité RPC en continu ET passez les conditions minimales FIP-10 dans chaque époque de récompense (ne manquez pas les révélations, atteignez la livraison médiane). Les deux signaux sont multipliés — 100% RPC × 7/8 épocas éligibles = 17,5/20, pas 20. Pourquoi cela s'aligne avec les délégants : chaque époque où vous échouez FIP-10, vos délégants perdent leurs récompenses pour cette époque.
Rendement net — 18 pts. Fournir ≥1,2× l'APY médian du réseau à vos délégateurs (post-frais). Meilleure approche : frais bas + admissibilité FIP-10 complète pour que les délégateurs reçoivent leur part complète. Pourquoi c'est aligné : c'est littéralement le montant en dollars atteignant le délégateur après votre part.
Raisonnabilité des Frais — 7 pts. Depuis la fourche dure Granite, le protocole applique un frais de délégation minimum de 20%, et tout frais égal ou inférieur à l'ancrage de notation (le plus élevé du minimum de marché observé et de ce plancher) obtient les 7 points complets. Facturer au-delà coûte des points selon une rampe accélérée — ancrage+10 → 4,5 pts, ancrage+20 → 0. Pourquoi cela s'aligne : le plancher a éliminé la concurrence sur les frais, donc cette dimension ne protège désormais que les délégataires de l'extraction au-delà du minimum légal ; votre vrai avantage réside dans le rendement net livré.
Qualité de l'Opérateur — 12 pts. Meilleur chemin : enregistrez-vous en tant que fournisseur de données FTSO et exécutez une pile de qualité supérieure (FTSO + FDC + signature) — votre score FlareWatch Operator Quality provient alors de votre score FTSO, avec max à FTSO 100. Alternative si vous êtes staking-only : maintenez la baseline de vérification +7 soit en qualifiant pour l'auto-promotion v3.10 (90+ jours observés, 25+ délégants, retention non déclinante, self-bond conforme FIP-10) soit en étant ajouté à KNOWN_VALIDATORS en tant qu'infrastructure institutionnelle (fast-track manuel). Le score prend max(vérification, dérivé FTSO) — la participation ne peut jamais nuire. Pourquoi cela s'aligne : les opérateurs full-stack fournissent plus de valeur écosystème ; la baseline de vérification donne aux délégants un signal d'identité plus clair.
Participation MIRROR — 10 pts. Soumettez les données de prix FSP consistemment, atteignez les minimums par époque du protocole (enregistré dans votre politique de signature, seuil de réclamation atteint, aucun manque de révélation). Facturez des frais modérés — le score est multiplié par (1 − frais/100), donc même un validateur 100%-frais parfaitement MIRROR-actif score 0 parce que zéro MIRROR atteint les délégants. Pourquoi cela s'aligne : MIRROR est la part de vos délégants de l'inflation FTSO. Frais plus bas = plus leur atteint.
Profil de Capacité — 7 pts. Ciblez ~70% d'utilisation (bien dimensionné : prouvé attractif ET a de la place pour les nouveaux délégants). Les validateurs vides score 1,75 ; les validateurs plafonnés score 5,25. Pourquoi cela s'aligne : les nouveaux délégants lisant le score veulent savoir qu'ils peuvent réellement déléguer ; bien dimensionné signale à la fois la preuve sociale et la disponibilité.
Confiance Communautaire — 11 pts. Six composantes à maximiser :
  • Construisez jusqu'à 500+ délégants agrégés par opérateur (signal de compte max : +6 pts).
  • Maintenez une stake moyenne friendly aux détails < 500K FLR par délégant (bonus de concentration : +1).
  • Restez sur le réseau ≥ 90 jours pour le bonus de longévité (+1) — wipe-immune via présence reward-scripts.
  • Détenir un important self-bond — soit ≥ 10% proportionnellement, soit un stake absolu au sommet du réseau (~20M FLR), selon ce qui donne le meilleur score (bonus d'alignement : +2).
  • Augmentez le FLR délégué total de ≥ 10% sur 30 jours (retention : +0,5).
  • Augmentez l'auto-délégation de ≥ 20 % sur 30 jours (trajectoire : +0,5).
Pourquoi cela s'aligne : chaque composant récompense un comportement que les délégants veulent — skin-in-the-game de l'opérateur, croissance organique, longévité, participation large de la communauté. Les opérateurs multi-nœuds sont agrégés pour les signaux de décompte + concentration (v3.7).
Fiabilité de livraison — 10 pts. Payez les délégants ce que votre APY estimé promet (ratio de livraison 1,00). Minimisez la variance par époque — les paiements prévisibles battent la même moyenne avec une propagation élevée (pénalité de variance jusqu'à −30 %). Constituez un échantillon de 8+ époques pour une confiance de pondération complète. Pourquoi cela s'aligne : livrez-vous sur la promesse que vous avez faite, de manière cohérente ? C'est le signal de responsabilité le plus direct qui soit.
Temps restant — 5 pts. Maintenez votre date de fin de participation ≥ 120 jours. Renouvelez bien avant l'expiration ; ne la laissez pas glisser dans la bande < 14 jours (vous ne pouvez pas accepter de nouvelles délégations en vertu de FIP-10 une fois que vous êtes dans les 14 jours). Pourquoi cela s'aligne : un engagement plus long signale aux délégants que vous êtes là pour le long terme.
Signaux temporels que vous ne pouvez pas contourner : bonus de longévité (90 jours observés), niveau auto-curation (90 jours + 25 délégants + rétention non déclinante + auto-délégation conforme à FIP-10), signal de rétention (30 jours d'historique de délégation), taille de l'échantillon de livraison (8 époques de récompense). La bonne nouvelle : maintenir les AUTRES comportements accumule automatiquement ces critères au fil du temps.
La fenêtre de lissage importe à court terme : le score affiché est une moyenne mobile pondérée exponentiellement des 4 derniers snapshots cron (0,5 / 0,3 / 0,15 / 0,05), donc même un 100 parfait sur les entrées prend ~20 minutes de runs cron parfaits consécutifs pour se refléter complètement. Les entrées parfaites en régime permanent = 100 ; les améliorations transitoires sont lissées. Les pénalités de changement soudain (sauts de frais, baisse d'auto-délégation, crashes d'uptime) peuvent également réduire jusqu'à 10 pts pendant quelques cycles cron après détection.
En résumé : chaque dimension est honnête sur ce qu'elle mesure. Si votre validateur est à 100/100, le score dit aussi à vos délégants qu'ils obtiennent la meilleure version d'un validateur sur le réseau — c'est l'intention du design.
Comment vérifier votre propre score
Chaque score du tableau des validateurs est reproductible à partir de données publiques. Si vous êtes un opérateur et que les mathématiques ici ne correspondent pas au score que vous voyez, le bon geste est de le vérifier vous-même avant de supposer que nous avons fait une erreur.
La vérification la plus rapide s'exécute automatiquement. Développez la ligne de score de n'importe quel validateur et le panneau « Vérifié dans votre navigateur » recalcule ce score localement — la fonction de scoring exacte que le cron utilise, sur les entrées exactes qu'il a utilisées, sans appel retour à notre serveur. Parce que chaque validateur est noté par une fonction identique qui n'a aucun terme pour l'identité du nœud, c'est aussi comment quiconque peut confirmer que notre propre nœud ne gagne aucun avantage caché. La procédure manuelle ci-dessous fait la même chose à la main :
  1. Recherchez les statistiques publiques de votre validateur sur flaremetrics.io (recherchez par le nom de votre opérateur ou collez votre adresse de délégation). Notez votre delegationFee, selfBond, delegatedStake, et score FTSO (si vous êtes aussi un fournisseur de données).
  2. Vérifiez votre éligibilité FIP-10 pour chacune des 8 dernières époques de récompense sur github.com/flare-foundation/reward-scripts sous generated-files/reward-epoch-N/nodes-data.json. Comptez combien d'époques votre nodeID avait uptimeEligible: true. Ce ratio détermine le multiplicateur de votre dimension Uptime.
  3. Vérifiez votre participation MIRROR sur le contrat V2 RewardManager via flare-explorer.flare.network. Recherchez les événements RewardClaimed avec claimType=3 référençant votre nodeID. S'il n'y en a pas récemment, vous s'afficherez comme MIRROR-inactif.
  4. Branchez vos entrées dans les formules ci-dessus. Le bloc de code de chaque dimension vous dit exactement quelle arithmétique exécuter. Additionnez les dimensions, limitez à 100, et vous avez votre score calculé par cron brut.
  5. Comparez à votre score affiché. Le score affiché inclut la moyenne mobile exponentielle de v3.5 sur les 4 derniers snapshots cron (pondération actuelle 0,5, précédent 0,3, etc.) — donc le score calculé d'une seule exécution sera légèrement différent de celui affiché. Le panneau de répartition des scores sur chaque ligne de validateur montre les valeurs de dimension persistantes qui ont contribué.
  6. Si les mathématiques ne s'ajoutent pas, envoyez un email à [email protected] avec votre nodeID, les entrées que vous avez utilisées, et le score que vous avez calculé. Nous répondrons, et si nous avons fait une erreur nous la corrigerons publiquement.
Accès programmatique : pour tout validateur actif, frappez GET /api/validators/{nodeID}/score-breakdown pour récupérer la répartition persistante — la valeur de chaque dimension, la version d'algorithme qui l'a produite, et l'historique de score récent — en JSON. Le panneau de répartition des scores dans l'interface utilisateur lit de la même source.
Préoccupations courantes des opérateurs
Je suis à 100 % d'uptime RPC — pourquoi mon score Uptime est-il en dessous de 20/20 ?
La dimension Uptime multiplie la sortie de la courbe RPC par votre ratio d'éligibilité d'époque (epochsIncluded / epochsObserved sur les 8 dernières époques de récompense — l'ensemble complet des minimums FIP-10 depuis v4.2, pas seulement la disponibilité RPC). Si vous avez échoué les conditions minimales FIP-10 dans l'une de ces époques — même brièvement — votre ratio de fiabilité descend sous 1,0 et votre score Uptime s'ajuste proportionnellement. Avant v3.4, la dimension attribuait 20 à chaque validateur avec 100 % de disponibilité RPC indépendamment de l'éligibilité historique. Désormais elle différencie.
Je fournis MIRROR — pourquoi FlareWatch m'affiche-t-il comme MIRROR-inactif ?
À partir de v3.6, la participation MIRROR est détectée à partir de DEUX sources canoniques : événements RewardClaimed(claimType=3) on-chain sur le V2 RewardManager, ET allocations claimType=3 dans le JSON Merkle FSP officiel (les données de distribution de récompenses publiées). Un nodeID apparaissant dans l'une ou l'autre source compte comme actif. Avant v3.6, nous utilisions le flux on-chain comme signal unique, ce qui produisait des faux négatifs pour les fournisseurs auto-délégants dont MIRROR est réglé via un chemin de réclamation non standard. Aussi corrigé dans v3.6 : un bug de format de clé où ~95 validateurs avaient leurs entrées mirror-stats écrites sous hex20 (forme bytes20 du nodeID) par l'indexeur on-chain quand ils n'étaient pas encore dans notre liste de noms curée — tandis que chaque recherche d'interface utilisateur était basée sur le NodeID cb58. Ces entrées existaient et étaient correctes ; elles n'étaient juste pas visibles à la couche d'affichage. La recherche normalise maintenant les deux formats dans chaque consommateur (tableau des validateurs, panneau de répartition des scores, API publique mirror-stats, carte Positions de staking de la page Yield, panneau des fournisseurs FTSO). Si votre nodeID affiche toujours inactif après le balayage v3.6, causes possibles : (a) votre nodeID n'est en fait pas inscrit dans votre politique de signature FSP pour cette époque, (b) nous sommes entre les publications d'époque (les données Merkle se mettent à jour par époque, ~3,5 jours). Envoyez-nous un email avec votre nodeID et nous vérifierons les deux sources canoniques.
Mon score a baissé de 10 points du jour au lendemain — qu'est-ce qui a changé ?
L'une des trois choses : (1) la détection de changement soudain de v3.5 a signalé un saut de frais, une baisse d'auto-délégation, ou un crash d'uptime sur votre nodeID — une pénalité de 10 pts s'applique à l'exécution où nous la détectons et décroît sur les 3 exécutions suivantes à mesure que le nouvel état se stabilise ; (2) la fenêtre de lissage a incorporé un snapshot plus ancien qui a tiré votre moyenne vers le bas ; (3) nous avons livré un bump de version d'algorithme (visible dans le champ algorithmVersion de votre dossier — voir la carte Versions ci-dessous). Le panneau de répartition des scores affiche les valeurs de dimension actuelles ; comparez avec vos exécutions antérieures.
Pourquoi un validateur à frais élevés score-t-il inférieur à un validateur à frais bas avec tout le reste similaire ?
La dimension Rendement Net (18 pts max) est sensible aux frais — un validateur à 0% de frais fournit ~1,25× l'APY médian du réseau, marquant près du maximum ; un validateur à 20% de frais fournit ~80% de la médiane, marquant moins. De plus, la Raisonnabilité des Frais (7 pts) est linéaire par morceaux depuis la v3.9 (pas de buckets) : ≤5% obtient les 7 pts complets, puis la courbe descend avec des pentes croissantes — 10% → 6, 15% → 4,5, 20% → 2,5, 25%+ → 0 (donc par ex. un frais de 16% marque ~4,1, pas une valeur de bucket fixe). Donc une différence de 5 pts de frais se traduit par ~5-8 pts de différence de score. C'est intentionnel — les délégataires se soucient directement des frais.
Je suis un tout nouveau validateur sans score FTSO. Pourquoi ma Qualité d'opérateur n'est que 7/12 ?
La Qualité d'opérateur (12 pts max) récompense les opérateurs full-stack — les validateurs qui exécutent aussi une pile complète de fournisseur de données FTSO (FTSO + FDC + signature). Si vous êtes uniquement staking, le baseline +7 est atteignable de deux façons : (1) inclusion manuelle dans notre liste KNOWN_VALIDATORS — accès rapide institutionnel pour les opérateurs d'infrastructure de confiance (Ankr, InfStones, Kiln, etc.) ; (2) auto-promotion v3.10 basée sur le comportement objectif — 90+ jours observés ET 25+ délégants agrégés d'opérateur ET rétention non déclinante ET auto-délégation conforme à FIP-10. L'auto-promotion est entièrement automatique, aucun email nécessaire. Si vous ne remplissez pas encore les critères auto-, vous commencez à +3 (niveau auto-découvert, nécessite un profil d'entité Flaremetrics ou FSE) et augmentez vers +7 à mesure que votre dossier s'accumule. Pour accélérer : enregistrez-vous en tant que fournisseur de données FTSO et exécutez les protocoles V2 — votre score provient alors de la branche dérivée FTSO avec un maximum de 12 à FTSO 100. v3.8 : la participation FTSO ne peut qu'aider, jamais faire du mal — si votre score FTSO est en dessous du baseline de vérification, vous conservez le baseline.
J'ai un logo mais mon nom s'affiche comme un NodeID tronqué. Pourquoi ?
Votre entité d'opérateur existe dans Flaremetrics (c'est pourquoi nous avons un logo pour vous) mais votre profil de fournisseur n'a pas de champ 'name' défini. Nous ne fabriquons pas de noms. Définissez votre profile.name sur Flaremetrics ou dans le registre d'entité de Flare Systems Explorer, et nous le récupérerons à la prochaine exécution cron. Alternativement, envoyez-nous une réclamation vérifiable (par exemple, un message signé de votre adresse de délégation) et nous vous ajouterons à KNOWN_VALIDATORS manuellement.
Mon validateur est aux délégations max de FIP-10. Pourquoi le score de Capacité ne s'affiche pas 7/7 ?
La Capacité est une fonction tente culminant à 70 % d'utilisation (7 pts), ramenant à 5,25 pts à 100 %. Le sommet n'est pas 100 % — être à capacité signifie que les délégants ne peuvent pas ajouter plus de participation même s'ils le veulent, ce qui est un signal neutre à légèrement négatif pour les nouveaux délégants lisant le tableau. Avant v3, nous notions les validateurs à capacité 0/5 (pénalité pour succès) ; v3 a corrigé cela à une valeur à capacité neutre, et v3.7 a redimensionné toute la dimension de 8 → 7 max (libérant un point pour les signaux de trajectoire Trust), donc aujourd'hui à capacité le score est 5,25/7. Les validateurs bien dimensionnés (prouvés attrayants ET avec place pour grandir, pic à 70 % utilisés) obtiennent les 7 complets.
Je suis un opérateur réel mais je ne suis pas du tout sur la liste des validateurs. Qu'en est-il ?
La liste des validateurs est construite à partir du résultat getCurrentValidators du RPC P-Chain actif. Si vous n'y êtes pas, vous êtes soit pas actuellement actif sur P-Chain, votre participation a juste expiré, ou il y a un problème de RPC P-Chain de notre côté. Le cron s'exécute toutes les 5 minutes — vous devriez apparaître dans 1-2 cycles après l'activation de votre participation. Si vous êtes en direct depuis une heure et ne vous voyez toujours pas, envoyez-nous un email avec votre nodeID.
Puis-je faire appel de mon score ou demander une révision manuelle ?
Oui. Envoyez un email à [email protected] avec votre nodeID et une préoccupation spécifique. Nous répondons à chaque opérateur. Choses sur lesquelles nous agirons : ajouts KNOWN_VALIDATORS, corrections de classification MIRROR, corrections de logo/nom, erreurs mathématiques spécifiques aux dimensions. Choses sur lesquelles nous n'agirons pas : demandes de relever manuellement un score en dehors de l'algorithme, demandes d'exclure ou de déclasser un concurrent.
Ce que nous ferons et ne ferons pas
Pour éliminer l'ambiguïté sur la façon dont nous exploitons le score, voici des engagements explicites. Si nous violons jamais l'un de ces engagements, documentez-le et envoyez un email à [email protected] — nous le corrigerons publiquement.
✓
Nous n'accepterons pas de paiement pour des scores plus élevés, un placement sponsorisé, ou un traitement favorable de quelque sorte. Le score est calculé de manière déterministe à partir de données de chaîne publiques.
✓
Nous ne coderons pas manuellement de bumps par validateur. Il n'y a aucune ligne « X reçoit +5 parce que nous l'aimons » n'importe où dans le code. Le même algorithme s'applique à chaque validateur incluant le nœud de FlareWatch lui-même, qui est noté par cette fonction exacte.
✓
Nous n'exclurons pas les validateurs du tableau pour des raisons non publiques. La liste provient directement du RPC P-Chain actif et notre affichage inclut tous les validateurs actifs. Les ajouts curés à KNOWN_VALIDATORS ne font que remplir les noms d'affichage — ils ne bloquent pas la visibilité.
✓
Nous publierons les modifications d'algorithme. Chaque changement de version (v3 → v3.1 → v3.2 → ...) est documenté dans la carte Versions de cette page avec la logique et ce qui a changé. Les modifications majeures reçoivent une entrée de changelog supplémentaire visible depuis la page de changelog de l'application.
✓
Nous répondrons aux emails des opérateurs. Chaque opérateur qui envoie un email à [email protected] avec une préoccupation substantielle concernant son score reçoit une réponse réelle dans quelques jours ouvrables.
✓
Nous corrigerons publiquement nos erreurs. Si nous découvrons un bug dans l'algorithme, une erreur de source de données ou une lacune méthodologique, nous livrons un correctif et le documentons. Nous ne reclassons pas silencieusement.
✗
Nous ne partagerons pas le contenu des emails publiquement sans la permission de l'expéditeur, ni n'utiliserons les emails des opérateurs à d'autres fins que la conversation de score qui les a produits.
✗
Nous ne partagerons pas nos plans futurs pour un changement d'algorithme avec certains opérateurs à l'avance — chaque version est mise en direct pour tout le monde simultanément.
Limitations — ce que ce score est, et ce qu'il n'est pas
Un score composite est un résumé utile, non une vérité objective. Le nôtre est transparent, versionné, appliqué de manière identique à chaque validateur — y compris le nôtre — et re-dérivable à partir des entrées publiées directement dans votre navigateur. Mais il encode toujours un jugement éditorial, et nous préférons vous montrer exactement où plutôt que d'impliquer une précision que la méthode n'a pas.
Les poids des dimensions sont notre jugement. L'uptime vaut 20 points et les frais valent 7 parce que nous avons décidé que la fiabilité compte plus pour la plupart des délégants que quelques points de frais — non parce qu'une formule l'a prouvé. Des personnes raisonnables pondéreraient différemment. Les poids sont fixes et publics, vous pouvez donc voir précisément ce que nous avons choisi et les re-pondérer mentalement à partir de la ventilation.
Net Yield est un résultat, pas une vertu. Il mesure ce qu'un délégant gagne réellement, ancré à la médiane du réseau — il est donc partiellement façonné par des choses en dehors du contrôle d'un opérateur (inflation du réseau, combien de délégation ils ont attirée) et il change quand le reste du terrain change. Un opérateur discipliné facturant des frais justes mais plus élevés peut avoir un score plus faible ici tout en étant excellent. Lisez-le comme « combien gagnerais-je », non pas « à quel point cet opérateur est-il bon ».
Les dimensions liées à FTSO favorisent les opérateurs full-stack. La participation MIRROR et une partie de la Qualité de l'opérateur récompensent les validateurs qui exploitent également une stack de fournisseur de données FTSO haut de gamme. C'est intentionnel — en tant que délégant vous gagnez véritablement plus, via MIRROR, d'un validateur actif FTSO — mais cela signifie qu'un pur validateur de staking uniquement et excellent ne peut pas atteindre le tout haut de ce classement. Si vous êtes staking-only par choix, pondérez ces dimensions à la baisse pour vous.
Le modèle est additif. Les dimensions s'ajoutent, une force peut compenser une faiblesse — un uptime superbe peut porter des frais plus élevés à un score respectable. Les défaillances véritablement disqualifiantes (manquement aux minimums FIP-10, frais prédateurs) sont bloquées séparément pour ne pas pouvoir être complètement masquées — un validateur manquant les minimums à chaque époque ou facturant des frais de 100 % se classe près du bas indépendamment de ses autres dimensions — mais le cœur est une somme pondérée, pas un système de veto.
Un nombre cache neuf jugements. Le chiffre unique 0-100 est un point de départ, non un verdict. Deux validateurs distants d'un point ne sont pas significativement différents. Ouvrez la ventilation et pondérez les dimensions qui vous importent — le nombre existe pour rendre cette comparaison plus rapide, non pas pour la remplacer.
Nous changeons la méthode rarement, et en public. Chaque changement est livré avec un bump de version, une justification écrite, et une comparaison avant-après au niveau du terrain, pour que vous puissiez auditer ce qui a changé et pourquoi. Quand notre audit automatisé interne détecte une discordance dans nos chiffres — comme c'est le cas — nous la corrigeons et le disons.
Score final (comment les dimensions se combinent)
Les 9 dimensions se somment directement, puis la déduction de streak de panne active v4.3 est soustraite. Le total plafonne à 100 et descend à 0. Le lissage sur les snapshots cron récents (v3.5) et toute pénalité de changement soudain sont ensuite appliqués au chiffre final.
// Step 1 — Raw composite (sum of dimensions, minus the two penalties)
positive = uptime + netYield + fee + operatorQuality
         + mirror + capacity + trust + delivery + timeRemaining

// Penalties (see the two penalty cards above):
// v4.3 active-outage streak — 0-1 missed epochs → 0, 2 → 3, 3 → 6, 4+ → 10
// v4.5 extreme fee (>50%)   — positive × min(1, (fee - 50) / 50) × 0.75
raw = clamp(positive - streakPenalty - extremeFeePenalty, 0, 100)

// Step 2 — Smooth across recent cron snapshots (v3.5)
// Weights: current 0.5, prev1 0.3, prev2 0.15, prev3 0.05
smoothed = 0.5*raw + 0.3*prev1 + 0.15*prev2 + 0.05*prev3

// Step 3 — Apply sudden-change penalty if flagged this run
// Triggers: fee +50% or +5pt jump, self-bond -20% drop, uptime -5% crash
// Magnitude: -10 pts on detection, decays -7, -4, -1 over 3 runs
suddenPenalty = -10 if any flag triggered else (decaying remainder)

// Step 4 — Final score
score = clamp(smoothed + suddenPenalty, 0, 100)
Sources de données (chaque entrée est publique)
Flare P-Chain RPC : liste des validateurs, uptime, auto-obligation, stake délégué, frais, heure de fin, nombre de délégués.
V2 RewardManager (événements claimType=3) : distribution MIRROR réclamée on-chain par NodeID de validateur. Filtrée strictement sur le type 3 — pas de confusion avec VRM, délégation FTSO ou récompenses DIRECT.
FSP Merkle JSON (allocations claimType=3) : registre publié canonique de qui est dû MIRROR par époque (les mêmes données que l'outil de signature de Flare lit). Ajouté dans v3.6 comme deuxième source faisant autorité — capture les validateurs dont le MIRROR est alloué mais pas encore réclamé on-chain.
Flare Systems Explorer (FSE) : registre d'entité validateur, noms d'affichage, logos, drapeaux de participation au protocole FTSO V2.
Données du fournisseur Flaremetrics : score FTSO, taux de récompense, précision, fonctionnalités V2, liaison entité-vers-nodeID.
Scripts de récompense Flare (GitHub) : APY livré par validateur pour les N époque de récompense les plus récentes. Pilote la dimension de livraison.
Curation FlareWatch : carte KNOWN_VALIDATORS (~110 entrées). Noms + référence de qualité d'opérateur pour les opérateurs d'infrastructure de confiance.
Ce qui n'est PAS dans le score
• Auto-promotion ou placement payant. Aucun opérateur ne peut payer ou parrainer un score plus élevé.
• Augmentations spécifiques au validateur codées à la main. Pas de lignes « X obtient +5 parce que nous l'aimons » nulle part dans le code. Le même algorithme s'applique à chaque validateur, y compris le propre nœud de FlareWatch, qui est noté par cette fonction exacte.
• Qualité infrastructurelle subjective. Nous n'essayons pas d'évaluer les SLA de disponibilité, la distribution géographique ou les spécifications matérielles. Si vous voulez affirmer une qualité de grade infrastructure, exécutez un stack FTSO + FDC supérieur et la dimension Qualité de l'opérateur le reflètera.
• Blocages ou engagements envers FlareWatch. Pas de notation favorable pour les stakers utilisant FlareWatch par rapport à un autre outil.
Retours des opérateurs
Quelque chose ne va pas dans le score de votre validateur ? Envoyez un email à [email protected] avec votre NodeID et votre préoccupation. Nous répondons à chaque opérateur. Demandes courantes sur lesquelles nous agirons :
  • Ajouter votre opérateur à KNOWN_VALIDATORS (avec vérification).
  • Examiner votre classification MIRROR-inactive si vous pensez qu'elle est erronée.
  • Corrections de logo/nom d'affichage.
  • Critique générale de l'algorithme.
Sources et références
Chaque entrée du score provient de sources publiques et vérifiables de l'écosystème Flare. Quiconque peut vérifier nos affirmations par rapport à ces sources primaires et reproduire les mathématiques à partir de données brutes. Si vous repérez une discordance entre cette page et ce que les sources en amont disent, envoyez un email à [email protected] et nous le corrigerons.
Docs de protocole faisant autorité. Couvre FTSO V2, FSP, validation P-Chain, FAssets et le reste de la pile Flare.
Portail de gouvernance Flare (FIPs) ↗https://proposals.flare.network
Flare Improvement Proposals — la source unique de vérité pour FIP-05 (facteur de délégation), FIP-10 (conditions minimales de validateur : plancher d'auto-obligation de 1M FLR, plancher de disponibilité de 80%, verrou minimum de 14 jours) et toutes les autres règles citées sur cette page.
Flare Systems Explorer (FSE) ↗https://flare-systems-explorer.flare.network
Registre officiel exploité par Flare des fournisseurs de données FTSO, adresses d'entité, liaisons NodeID P-Chain et drapeaux de conditions minimales FIP-10. Source principale pour nos données de qualité d'opérateur et de fiabilité.
Flaremetrics ↗https://flaremetrics.io
Fournisseur de métriques indépendant de l'écosystème Flare. Source de notation des fournisseurs FTSO, taux de récompense, métriques de précision, drapeaux de participation au protocole V2 et mappages d'adresses validateur-à-entité. Nous consommons leur API REST publique.
Dépôt de scripts de récompense Flare Foundation ↗https://github.com/flare-foundation/reward-scripts
JSON publié par époque de récompense par la Flare Foundation montrant l'éligibilité par validateur, l'éligibilité de disponibilité et les récompenses livrées. Pilote la dimension Fiabilité de livraison et le ratio d'éligibilité d'époque v3.4 pour la disponibilité.
Explorateur de blocs Flare ↗https://flare-explorer.flare.network
Navigateur en lecture seule de tous les états on-chain. Permet à quiconque de vérifier les événements RewardClaimed du V2 RewardManager (claimType=3 pour MIRROR), les totaux de stake des validateurs, les changements de frais, et le reste.
Flare Portal (staking) ↗https://portal.flare.network/staking
Interface de staking officielle. Source faisant autorité pour les montants actuels de self-bond / stake délégué et les délais de fin des validateurs qui alimentent les lectures RPC P-Chain que nous utilisons.
Flaremetrics public API (fournisseurs FTSO) ↗https://api.flaremetrics.io/api/v1/ftso/providers?limit=200
Le point de terminaison exact que notre cron consomme, renvoyant les profils d'entités, les scores FTSO, les frais et les nodeIds en format hexadécimal. N'importe qui peut y accéder directement.
Flaremetrics public API (enregistrements de nœuds) ↗https://api.flaremetrics.io/api/v1/node-registrations?limit=500
Table de conversion NodeID hexadécimal → cb58. Nous paginnons ceci pour construire la recherche entité-vers-NodeID qui pilote chaque consommateur au format cb58.
Aucune donnée privée, aucun modèle propriétaire. L'algorithme de scoring est implémenté dans services/validators/scoring.ts dans la base de code FlareWatch. Les opérateurs ou chercheurs qui veulent inspecter l'implémentation directement (plutôt que de lire la prose + formules ci-dessus) — ou qui veulent la forker pour leur propre utilisation — peuvent envoyer un email à [email protected] pour demander l'accès. Nous publierons le fichier comme package open-source autonome s'il y a une réelle demande.
Comment les scores se mettent à jour
Le cron à /api/cron/refresh-validators recalcule le score de chaque validateur actif toutes les 5 minutes. Les entrées (lectures RPC P-Chain, Flaremetrics, FSE, scripts de récompenses) sont récupérées à nouveau à chaque exécution.
v3.5 a ajouté un lissage sur les 4 derniers snapshots du cron (poids : 0,5 / 0,3 / 0,15 / 0,05), de sorte que le score affiché ne fluctue pas sur le bruit d'entrée transitoire. Le score calculé brut par le cron est toujours persisté pour les futurs calculs de lissage, et le panneau de décomposition des scores affiche la valeur actuelle de chaque dimension afin que vous puissiez voir ce qui a changé.
La version de l'algorithme est horodatée sur chaque enregistrement de score mis en cache. Lorsque nous expédions une nouvelle version, chaque score reçoit la nouvelle étiquette. La carte Versions ci-dessous documente chaque changement.
Modèle de pénalité de Flare

Flare ne réduit pas le stake des validateurs. Tout le mécanisme de pénalité pour le mauvais comportement des validateurs est la confiscation des récompenses plus le système de passes FIP-10. Il n'y a pas de slash pour double signature, pas de slash pour équivoque, pas d'événement de destruction de stake que nous ayons besoin de suivre. Les validateurs qui ne respectent pas les conditions minimales de FIP-10 perdent les récompenses de cette époque (confiscation complète s'ils ont zéro pass, sinon ils perdent un pass par protocole qu'ils ont manqué) ; leur capital mis en jeu reste intact.

Cela signifie que le score n'a pas de dimension « historique de slashing » — il n'y a pas d'historique de ce type à suivre. Ce que nous SUIVONS, c'est la conséquence de chaque manquement minimum : le validateur a gagné zéro cette époque, ce qui est capturé dans epochsIncluded / epochsObserved. La mise à jour v4.2 du 14/05/2026 a élargi le multiplicateur de fiabilité du score pour utiliser ce ratio dans tout l'ensemble des minimums FIP-10 (disponibilité, signature FSP, taux de soumission FTSO, participation FDC) de sorte qu'un validateur échouant à tout minimum est pénalisé proportionnellement dans la dimension Disponibilité quel que soit l'axe échoué.

Seuils minimums FIP-10, provenant de dev.flare.network/network/fsp/rewarding : le staking nécessite 80 % de disponibilité + 1M FLR de self-bond actif ; les feeds d'ancrage FTSO nécessitent des estimations dans les 0,5 % de la médiane de consensus dans 80 % des tours ; les feeds de latence de bloc FTSO nécessitent de soumettre 80 % des mises à jour attendues ; FDC nécessite de participer à 60 % des tours de vote. Les validateurs qui respectent le plancher de 80 % de disponibilité + 1M de self-bond mais en dessous des seuils de gains de 3M / 15M reçoivent toujours des récompenses mais ne peuvent pas accumuler de passes — la zone grise mise en avant via la classification passEligibility: "at-risk" de cette carte.

Versions
v4.8 (2026-09-17) — Epochs de récompense annualisés à leur durée réelle. Chaque taux de validateur mesuré (APR livré, délégation, MIRROR, rendement de l'auto-obligation de l'opérateur) a été annualisé avec une epoch de récompense de 3,19 jours, une valeur ajoutée le 2026-04-04 et décrite comme mesurée à partir des horodatages de bloc bien que rien ne l'ait mesurée. Les epochs de récompense Flare durent exactement 3,5 jours — la méthode rewardEpochDurationSeconds de FlareSystemsManager retourne 302 400 et chaque démarrage d'epoch on-chain est espacé de 3,500 jours — ainsi chaque taux mesuré a lu environ 9,7 % trop élevé pendant cinq mois et demi, y compris le nôtre. La durée est maintenant lue à partir de ce contrat. Chaque APR mesuré chute du même facteur, 3,19 ÷ 3,5 (médiane réseau 9,08 % → 8,28 % ; FlareWatch 8,17 % → 7,45 %). Scores : seule la Fiabilité de Livraison évolue, car elle compare le taux mesuré avec le taux théorique pour les frais du validateur. Le côté gonflé avait placé 91 % des validateurs au plafond de 1,0, c'est-à-dire apparemment payant plus que possible ; avec la véritable durée d'epoch, le ratio livré-théorique médian est 0,990. Simulé sur les 168 validateurs avec données mesurées avant expédition : médiane −0,32 points, 146 perdent moins de 1 point, 13 livrant déjà en dessous de leur taux implicite à partir des frais perdent 2–3,5. Le recours de longévité Community Trust convertit les epochs en jours avec la même durée et est également corrigé ; il ne déplace aucun score, car il voit au maximum 8 epochs (28 jours), en dessous de son palier de 30 jours de toute façon. Les attestations de performance signées utilisaient la même durée erronée ; la spécification de recalcul est révisée à rev.3 et rev.2 est conservée verbatim avec l'erreur divulguée.
v4.7 (2026-08-19) — Self-bond bi-axial dans la dimension Community Trust. Trust crédite le self-bond de l'opérateur seulement comme un RATIO (propre bond ÷ stake total), donc un grand self-bond dilué par délégation obtenait le même score qu'un minuscule bond à ce ratio — le score était aveugle au capital réel engagé. Sur le réseau actif, 61 des 178 validateurs détenaient ≥10M self-bond avec un ratio <10%, donc un tiers du champ était sous-crédité. v4.7 crédite le self-bond par le MEILLEUR de la part proportionnelle (≥10% → +2, 5–10% → +1, inchangé) OU de la taille absolue (min(1, selfBond ÷ 20M) × 2, saturant au bond P-chain top-décile du réseau), prenant le max et plafonant toujours le sous-signal à +2 — le plafond Trust (11) et le plafond composite (100) restent inchangés, et le plancher creux sub-FIP-10 (<1M FLR → −1) est inchangé. Reproduit le self-bond bi-axial que le score de fournisseur FTSO utilise déjà. Avant/après du champ complet sur les 178 validateurs, archivé avant déploiement : 58 remontent, aucun ne descend, aucun score n'augmente de plus d'un point, et le haut du classement reste inchangé. Notre propre nœud remonte d'un point (83 → 84) selon la même règle que tout autre opérateur bien capitalisé — aucun terme ne nous nomme.
v4.6 (2026-08-13) — bonus de magnitude livrée MIRROR. La dimension MIRROR avait l'habitude de noter seulement le passthrough (la fraction de MIRROR qui atteint les délégataires, = 1 − commission) et l'état de participation — elle était aveugle au MONTANT livré. Un validateur payant un taux MIRROR livré beaucoup plus élevé (mirrorAPY, net de commission) que le champ ne gagnait aucun crédit pour cela, donc un nœud rendement-réellement-plus-élevé pouvait se classer en dessous d'un rendement-inférieur sur les dimensions de rendement. v4.6 ajoute un petit bonus plafonné et ancré à la médiane : pour les validateurs miroir-actifs uniquement, clamp((mirrorAPY / networkMedianMirrorAPY − 1.2) × 5, 0, 2). Seule la livraison au-dessus de 1,2 × le taux médian du réseau la gagne, et elle plafonne à +2, relevant le plafond de la dimension MIRROR de 10 à 12 (le composite est toujours plafonné à 100). Il est ancré au taux médian du RÉSEAU, pas au volume, donc il est neutre en taille par construction : sur le champ actif le bonus corrèle NÉGATIVEMENT avec l'auto-bond (il favorise les petits validateurs livrant des taux élevés, pas les grands). Un avant/après sur le champ entier sur tous les validateurs actifs a été archivé avant déploiement — la plupart des validateurs ne bougent pas, et le haut du classement est inchangé. La même formule s'applique à chaque validateur, y compris notre propre nœud.
v4.5 (2026-07-16) — Pénalité de viabilité pour frais extrêmes. La dimension Fee Reasonableness sature à 0/7 une fois qu'un frais dépasse l'ancrage de marché + 20 points (~40 % post-Granite) ; de là jusqu'à un frais de 100 %, le composite a cessé de réagir aux frais, donc un validateur à frais de 100 % — où les délégataires ne gagnent RIEN — marquait encore dans les 40 sur ses dimensions insensibles aux frais. Sur un score orienté vers les délégataires, ce résultat est quasi disqualifiant, pas au milieu du classement. v4.5 ajoute une pénalité composite appliquée en fraction du total des dimensions positives : zéro à ou sous 50 % de frais (pas de double-comptage dans la plage que la dimension Fee prix déjà), puis augmentant linéairement jusqu'à 75 % du score à 100 % de frais. Un nœud à 100 % de frais atteint environ 10/100 — toujours listé et classé, clairement pas un candidat de délégation. C'est une fonction pure du frais on-chain, identique pour chaque validateur, y compris le nôtre.
v4.4 (2026-07-11) — Ancrage de frais sensible au plancher Granite. La fourche dure Granite (Flare, 2026-07-14) applique un frais de délégation validateur minimum de 20%. L'ancrage de Raisonnabilité des Frais devient max(frais actifs minimum observés, plancher du protocole) : tout frais égal ou inférieur au minimum légal obtient les notes maximales, et seuls les frais au-delà sont pénalisés, par distance. Justification : avec le grandfathering des enjeux en vol non spécifié en amont, l'ancrage à une relique grandfathered de 2% (ou 0% pré-fourche) aurait noté les opérateurs conformes au protocole à 20% comme quasi-extractifs — et aurait double-compté un delta de frais que le rendement net valorise déjà en termes livrés. Aucune autre dimension n'a changé. Quand toute la cohorte atteint le plancher, la dimension attribue les notes maximales uniformément — les frais arrêtent de compter une fois que personne ne peut en faire la concurrence.
v4.3 (2026-05-14) — Pénalité de panne active ajoutée en tant que déduction post-dimension forfaitaire. Le multiplicateur uptimeReliability existant est symétrique — 5 manques dispersés sur 24 époques coûtent le même que 5 manques consécutifs — mais opérationnellement ce sont des signaux très différents : les manques dispersés signifient une fragilité chronique, une séquence signifie que le validateur est cassé EN CE MOMENT. v4.3 lit la séquence contiguë d'époques !eligible à la tête de l'historique récent de participation du validateur et déduit 0 pts pour 0–1 manques consécutifs (variance normale / manque transitoire unique), 3 pts à 2 (panne en développement), 6 pts à 3 (panne soutenue), et 10 pts à 4+ (panne prolongée active), avec le composé plafonné à 0. Superposé à — non remplaçant — le multiplicateur de fiabilité, car les deux capturent des risques différents. Déclencheur : l'incident de classe Luganodes le 2026-05-14, où plusieurs époques récentes ont manqué de suite tandis que les délégateurs s'engageaient activement sur le stake ; le signal de séquence permet aux délégateurs de voir une défaillance en cours avant de s'engager. Les pénalités s'affichent comme leur propre section dans le panneau de décomposition des scores afin que les 9 dimensions positives totalisent toujours 100.
v4.2 (2026-05-14) — DEUX corrections connexes, expédiées ensemble en réponse à une correction publique de AU (@aucc_official) sur le score de Luganodes. (1) Le calcul deliveredAPY multiplie maintenant le taux par époque de gain par `epochsIncluded / epochsObserved` afin que l'APR affiché reflète le taux EFFECTIF qu'un délégateur reçoit réellement sur la fenêtre d'observation — y compris les époques à zéro gain quand un validateur échoue les minimums FIP-10. L'implémentation antérieure faisait la moyenne uniquement sur les époques de gain et affichait aux validateurs leur taux d'époque bonne, masquant les manquements minimums. (2) Le multiplicateur de fiabilité de la dimension Disponibilité s'est élargi de seul uptime (epochsUptimeEligible / epochsObserved) à l'ensemble des minimums FIP-10 (epochsIncluded / epochsObserved). Un validateur avec 100 % de disponibilité RPC qui échoue la signature FSP ou le taux de soumission FTSO prend maintenant un coup proportionnel sur la dimension Disponibilité quel que soit le minimum qu'il a manqué. Effet net sur Luganodes spécifiquement : deliveredAPY baisse de 10,86 % à ~5,43 % (correspondant à la réalité de demi-paiement réel), la fiabilité uptime baisse de 1,0 à 0,5, le score baisse matériellement. La même correction s'applique à chaque validateur avec `epochsIncluded < epochsObserved` — sur l'ensemble du réseau cela met en avant les écarts de qualité de participation réels qui étaient auparavant cachés.
v4.1 (2026-05-14) — La dimension Net Yield a basculé de l'APR théorique (formule : gross_APR × (1 − frais)) à l'APY livré MESURÉ à partir des scripts de récompenses de la Fondation Flare, avec fallback théorique par validateur uniquement quand aucun historique de mesure n'existe. Déclencheur : la réduction d'inflation de FIP-16 (5 % → 3 %) est entrée en vigueur le 2026-05-14, et le dénominateur de stake éligible de la formule théorique a dévié de la réalité on-chain de sorte que l'APR théorique sous-déclarait les rendements livrés d'environ 2× sur l'ensemble du réseau. Le basculement vers mesuré-d'abord réaligne l'entrée du score avec ce que les stakeurs reçoivent réellement. L'ancre networkMedianAPR a également été recalculée en utilisant la même méthodologie mesuré-d'abord afin que la comparaison de ratio reste cohérente des deux côtés — les scores devraient être à peu près stables (un validateur à la médiane du réseau score toujours ~12/18, etc.), juste basés sur les taux livrés réels plutôt que la sortie de formule.
v4.0 (2026-05-11) — Version majeure. Le cycle v3.7-v3.10 constitue cumulativement une réécriture structurelle du système de scoring, suffisamment importante pour justifier le changement. Résumé : deux dimensions ont eu leurs plafonds modifiés (Trust 10→11, Capacity 8→7) ; la formule d'Operator Quality a été réécrite en max(verification, FTSO-derived) afin que la participation ne puisse pas nuire ; les quatre dimensions restantes avec buckets (Uptime, Fee, Delivery, Time Remaining) ont été linéarisées pour éliminer les falaises de limite ; trois nouveaux composants de score ont été ajoutés (30-day delegation retention, 30-day self-bond trajectory, auto-promotion to curated tier) ; l'agrégation d'opérateur multi-nœud a été introduite pour Trust count + concentration ; la longévité est maintenant immune à la suppression via epoch presence de reward-scripts ; et deux incitations perverses ont été éliminées (la pénalité de participation FTSO d'Operator Quality et la falaise inversée-V de 95 % de Uptime). Chaque entrée du score est maintenant vérifiable de l'extérieur — aucune décision éditoriale n'est déterminante. Les validateurs peuvent gagner le score de baseline d'opérateur de +7 curated par le biais d'un comportement observable (90+ jours observés, 25+ délégateurs, retention non décroissante, self-bond conforme FIP-10), pas besoin d'email au team. Voir les entrées v3.7-v3.10 ci-dessous pour les changements granulaires qui composent cette version.
v3.10 (2026-05-11) — Fermé le dernier écart curatif du score. Le score de baseline d'opérateur de +7 curated sur Operator Quality nécessitait auparavant une inclusion manuelle dans notre liste KNOWN_VALIDATORS, qui était la seule décision éditoriale significative restante après le cycle d'audit v3.7-v3.9. v3.10 ajoute un chemin d'auto-promotion objectif : tout validateur avec 90+ jours d'observation FlareWatch, 25+ délégateurs agrégés par opérateur, retention non décroissante (baisse sur 30 jours ≤ 15%), et self-bond conforme FIP-10 se qualifie automatiquement pour le score de baseline de +7 — aucun examen manuel nécessaire. KNOWN_VALIDATORS reste comme une voie rapide pour les opérateurs institutionnels qui n'ont pas encore accumulé la fenêtre de 90 jours (pensez à une entrée Ankr ou Kiln du jour du lancement), mais le cas typique est maintenant entièrement automatisé. Les quatre critères sont dérivés on-chain ou près on-chain (nombre de délégateurs, retention, self-bond) plus notre propre horodatage d'observation — rien de subjectif, pas de gating email-le-team. Effet net : un validateur peut gagner le tier +7 par le biais du comportement seul. La plupart des opérateurs établis sur le réseau respectent déjà les critères aujourd'hui.
v3.9 (2026-05-11) — Nettoyage de falaise de limite dans les quatre dimensions restantes avec buckets, après audit de chaque partie du score pour l'équité. Corrections : (1) une falaise inversée-V perverse dans la courbe Uptime à 95 % — aller de 94,99 % → 95,00 % uptime perdait 4 points (la branche 95-99 % a commencé à 0 au lieu de correspondre au max de 4 de la branche inférieure). Même forme d'incitation négative que nous venons de corriger dans Operator Quality (v3.8). (2) Seuils Fee Reasonableness linéarisés — pré-v3.9, une augmentation de frais de 0,01 % à travers une limite de bucket pouvait perdre jusqu'à 2,5 points. Maintenant linéaire par morceaux avec des pentes de plus en plus abruptes qui préservent les valeurs de bucket aux limites (frais bas à peine pénalisés, frais extractifs fortement punis). (3) Seuils deliveryRatio de Delivery Reliability linéarisés — même pattern, jusqu'à 2 points de falaises éliminées. (4) Seuils de bucket Time Remaining linéarisés — falaises plus petites (max 2 points à la limite de 14 jours) mais toujours présentes dans une petite dimension ; maintenant lisse. Net Yield, MIRROR Participation, et Capacity Profile ont été auditées et confirmées comme équitables en l'état (déjà linéaires/continues). Plafond total inchangé à 100. Aucune régression de score par design ; les seuls validateurs dont les scores bougent sont ceux qui se trouvaient assis exactement sur une limite de bucket antérieure.
v3.8 (2026-05-11) — La dimension Operator Quality a été auditée et réécrite après un examen d'équité. Trois corrections expédiées ensemble. (1) Éliminé une incitation perverse — un opérateur connu avec un score FTSO de mi-niveau (p.ex. 50) marquait 4 pts, mais le même opérateur abandonnant complètement FTSO marquait 7 pts. Sous v3.8 le score est max(verification baseline, FTSO-derived), afin que la participation FTSO puisse uniquement aider, jamais nuire. (2) Introduit un tier verification intermédiaire — les opérateurs avec des noms auto-découverts depuis Flaremetrics ou FSE (mais pas encore dans la carte curated KNOWN_VALIDATORS) obtiennent +3 au lieu de 0, adoucissant la falaise antérieure de 7→0. (3) Affiche les deux signaux dans le détail de décomposition quand verification gagne sur un score FTSO bas (p.ex. « Curated operator · FTSO 45 ») afin que les opérateurs comprennent exactement d'où vient leur score. Le plafond de 12 pts est inchangé ; aucun rééquilibrage nécessaire car les changements élargissent uniquement la distribution du score au bas (récompensant la verification partielle) sans modifier le haut.
v3.7 (2026-05-11) — La dimension Community Trust a été auditée et développée après un examen d'équité d'opérateur. Trois additions : (1) Agrégation d'opérateur multi-nœud — les opérateurs exécutant plusieurs nœuds P-Chain (AU, FlareBus, Aureus Ox, Kiln, etc.) ont maintenant leur nombre de délégateurs et leur stake total agrégés pour les signaux Trust count + concentration, afin qu'ils ne soient pas pénalisés de distribuer la même base de délégateurs sur plusieurs nœuds. (2) Signal de retention de délégation sur 30 jours (±0,5 pt) — distingue les validateurs croissants / stables / rétrécis en utilisant une comparaison de fenêtre glissante. La dimension Trust snapshot-only ne pouvait pas les distinguer pré-v3.7. (3) Trajectoire de self-bond sur 30 jours (±0,5 pt) — récompense les opérateurs qui augmentent leur self-bond au fil du temps, pénalise ceux qui se délieraient silencieusement. Distinct de la pénalité de changement soudain qui ne capture que les grandes chutes uniques. Plafond rééquilibré : Trust 10 → 11, Capacity 8 → 7. Corrections de bugs de l'audit : (a) self-bond zéro prend maintenant correctement la pénalité sub-FIP-10 (auparavant une porte `selfBondFLR > 0` laissait le self-bond exactement 0 échapper à la −1). (b) les ratios de petit self-bond entre le plancher FIP-10 et 5% affichent maintenant le pourcentage réel dans le panneau de décomposition pour que les opérateurs voient ce qui ferme l'écart aux tiers +1 / +2. (c) le bonus de longévité est maintenant immune à la suppression — tombe sur epoch presence de reward-scripts quand first-observed KV est artificiellement frais.
v3.6 (2026-05-11) — Deux corrections à la détection MIRROR, expédiées ensemble. (a) La détection lit maintenant depuis deux sources canoniques : les événements RewardClaimed(claimType=3) on-chain du V2 RewardManager ET les allocations claimType=3 dans le JSON Merkle FSP officiel (les mêmes données que l'outil de signature propre de Flare consomme). L'un ou l'autre signal est suffisant — capture les validateurs dont le MIRROR a été alloué mais pas encore revendiqué on-chain. (b) Le cross-check contre le Merkle a révélé un bug de format de clé distinct : validators:mirror-stats avait des clés NodeID mixtes hex20/cb58 (l'indexeur on-chain écrivait hex quand un validateur n'était pas encore dans notre liste de noms curatée), tandis que chaque consommateur d'UI recherchait uniquement par cb58 — donc ~95 validateurs' status étaient invisibles à l'affichage. La recherche normalise maintenant les deux formats sur la table des validateurs, le panneau de décomposition des scores, l'API publique mirror-stats, la page Yield carte Staking Positions, et le panneau fournisseurs FTSO. Les validateurs affectés ont vu leurs dimensions MIRROR Participation + Operator Quality et le score global FlareWatch augmenter de 9-10 points au prochain cycle du cron. Découvert via un rapport du fournisseur FTSO (FlareBus, 2026-05-11) — crédit et merci. Leurs retours ont matériellement amélioré la vue de chaque délégateur sur le réseau, pas seulement leurs propres scores.
v3.5 (2026-05-09) — Net Yield est maintenant ancré par médiane contre l'APR du réseau (un validateur à la médiane marque 12/18, les meilleurs performeurs atteignent 18, le bas du quartile baisse à 0). La dimension Trust a absorbé l'alignement self-bond comme quatrième composant (le self-bond proportionnel récompense le skin-in-the-game ; le plancher sub-FIP-10 prend une petite pénalité). Le nouveau badge « NEW Xd » affiche les validateurs que FlareWatch n'a observés que depuis <30 jours afin que les stakeurs puissent voir quand l'historique est mince.
v3.4 (2026-05-09) — La dimension Uptime mélange maintenant l'uptime RPC instantanée avec le ratio époque-eligibilité FIP-10 historique. Pré-v3.4 la dimension était non-discriminante (92,9 % des validateurs avaient 100 % de uptime RPC). Le ratio de fiabilité est dérivé de epochsUptimeEligible / epochsObserved sur les 8 dernières époques de reward-scripts — un signal de série temporelle qui différencie significativement les validateurs qui échouent occasionnellement les conditions minimales FIP-10 de ceux qui ne le font pas.
v3.3 (2026-05-09) — La dimension Delivery utilise maintenant la moyenne pondérée exponentiellement sur le temps (les époques récentes comptent plus, constante de décroissance 0,85) et applique une pénalité de variance (coefficient de variation × 0,5, plafonné à −30 %). Calculé à partir des données par époque de reward-scripts — la taille de l'échantillon passe à travers comme l'amortisseur de confiance existant.
v3.2 (2026-05-09) — Community Trust multi-signal (count + concentration + longevity) ; suivi first-observed-by-FlareWatch persisté dans KV pour le bonus de longévité ; cas limite de fin de stake (les validateurs à moins de 14 jours de l'expiry marquent 0 sur Time Remaining puisqu'ils ne peuvent pas accepter de nouvelles délégations sous FIP-10) ; la page de méthodologie rendue publique ; le canal de retours des opérateurs mis en avant ; la version de l'algorithme horodatée sur chaque enregistrement de score en cache.
v3.1 (2026-05-09) — Câblage de la dimension Delivery depuis les données de reward-scripts ; lissage d'Operator Quality (interpolation linéaire), Capacity (fonction tente), et Trust (échelle log) ; reclassification FSP-known + zero claimType=3 comme MIRROR « inactive » au lieu de « no data » ; persistence serverside de scoreBreakdown afin que le client ne recalcule pas sans entrées complètes.
v3 (2026-05-09) — Remplacement du bonus d'identité binaire par Operator Quality continue. Ajout de MIRROR Participation comme dimension dédiée avec passage de frais. Rendu de la capacité plafonnée neutre au lieu d'une pénalité de 0 pt. Suppression de la double-compte APY/frais via Net Yield. Recalibrage des bandes (Top tier 90+, Strong/Good/Acceptable/Below median).
v2 (pré-2026-05-09) — Score original à 8 dimensions (Uptime / APY / Fee / Identity / Capacity / Trust / Time / Delivery). Retiré en raison de la double-compte APY/Fee, pénalité d'identité binaire, pénalité de capacité plafonnée, pas de dimension MIRROR. Documenté pour référence historique.
FlareWatch FTSO delegation addresses. Flare (chainId 14): 0x973B899Fe1422efDdeBE1d54E9A6487a70966aC5. Songbird (chainId 19): 0xaf4eF2A0Ecf8d914Db6b721D3eb79C46CA612796.