FlareWatch, her P-Chain validatörüne 9 boyut üzerinde 0–100 arası bir bileşik puan atar. Matematik deterministiktir, girdiler halkadaki açık verilerdir [Flare Explorer] [FSE] [Flaremetrics], ve ağdaki her validatöre aynı algoritma uygulanır — FlareWatch'ın kendi validatör düğümü de dahil olmak üzere, özel muamele yapılmaksızın bu tam fonksiyonla puanlandırılır. Bu sayfa her boyutu ve eşiği belgeleyerek operatörlerin ve staker'ların puanın tam olarak nasıl hesaplandığını ve her değerin neden seçildiğini görmesini sağlar. Buradaki her iddia zincir üstü veya yukarı akış kaynağına geri bağlanır — Kaynaklar ve referanslar'ı altta bölümüne bakın.
staking modu'nda gördüğünüz (FLR'yi P-Chain validatörüne VRM + MIRROR ödülleri için devredilerek). delegasyon modu'nda gösterilen FTSO sağlayıcı puanı (WFLR'yi FTSO veri sağlayıcılarına devredilerek) veri sağlayıcı performansına odaklanan ayrı bir 13 boyutlu algoritma kullanır — doğruluk, V2 protokol katılımı, vb. Bunlar zincir üstü rolleri ve ödülleri ayrı olan, ayrı puanlanan farklı roller. Delegasyon tarafı için FTSO Sağlayıcı Puanı Metodolojisi'ne bakın.Staking tablosundaki APY, delegatörün aldığı tüm oranıdır — bir sayı, zihinsel matematik yok. Flare'in ödül-betikleri üzerinden ölçülmüştür (formül değil gerçek ödemeler), validatörün ücretinden net, ve her epoch'ta gerçek ödüllerle hareket eder. FlareWatch'ta her yerde APY, ücretinden sonra anlamına gelir ve APY, ücretinden önce anlamına gelir.
Flare Systems Explorer ile karşılaştırılıyor mu? FSE ve diğer explorer'lar sadece delegasyon oranını gösterir — MIRROR'u eklemezler — böylece Toplam APY'miz herhangi bir MIRROR-aktif validatör'de daha yüksek okunur (fark tam olarak yukarıdaki MIRROR satırıdır). Her iki şekil de aynı ödül-betikleri verilerinden ~8-epoch trailing ortalamasıdır, bu nedenle validatörün mid-window ücret değişikliği, her iki sitede de güncel ücret anlık görüntüsü ile window üzerinden yaşlanana kadar gecikir.
İki başka şekil, APY tooltip'te görünür ve değildir delegatörün oranı: teorik temel (ağ brüt APY × (1 − ücret), sadece staking — yeterli ölçülen geçmiş var olana kadar fallback olarak kullanılır) ve operatörün kendi-tahvil verimi (kendi stake geri dönüşü, ücret tarafından ampliye — operatör metriği, sizin kazandığınız değil).
Puanlama için: Net Verim boyutu sadece VRM delegasyon oranını puanlar ve MIRROR kendi boyutunda puanlanır — bu nedenle MIRROR, görüntülenen Toplam APY'ye dahil edilmiş olsa bile hiçbir zaman çift sayılmaz.
| 90+ | Üst kademe — operatörlerin ilk ~%10–20'si. Tipik profil: tam yığın validatör + FTSO + FDC, düşük uçlu ücret, MIRROR-aktif, tutarlı FIP-10 güvenilirliği, sağlıklı delegatör tabanı, anlamlı öz-tahvil. Hiçbir boyut gerekli değildir — operatörler çoğu kategoride gücü yığarak Üst kademeye ulaşır. |
| 80–89 | Güçlü — çoğu önemli kıyaslama karşılanır; üst kademenin bir veya iki boyut altında. |
| 70–79 | İyi — tüm taban ölçütlerini karşılar; önemli açık yok. |
| 60–69 | Kabul edilebilir — kullanılabilir ancak ayırıcı değil. |
| <60 | Medyan altında — bir veya daha fazla boyutta önemli açıklar. Matematiksel gerçek, kalite yargısı değil. |
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 20scoreAPR = 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
// 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
// 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)
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
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
// 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)// 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
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
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)
// 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)delegationFee, selfBond, delegatedStake ve FTSO puanını (bir veri sağlayıcısıysanız) not edin.generated-files/reward-epoch-N/nodes-data.json altında. NodeID'nizin kaç epoch'ta uptimeEligible: true olduğunu sayın. Bu oran Çalışma Süresi boyutu çarpanınızı yönlendirir.RewardClaimed olaylarını claimType=3 ile nodeID'nize referans vererek arayın. Yakın zaman yoksa, MIRROR-inaktif olarak görüneceksiniz.GET /api/validators/{nodeID}/score-breakdown'ı isabet ettirerek kalıcı bölmeyi alın — her boyutun değeri, onu üreten algoritma sürümü ve son puan geçmişi — JSON olarak. UI'daki puan-bölme paneli aynı kaynaktan okur.// 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)services/validators/scoring.ts dosyasında uygulanmıştır. Uygulamayı doğrudan incelemek isteyenler (yukarıdaki metni ve formülleri okumak yerine) veya kendi kullanımları için çatallak isteyenler — erişim istemek için [email protected] adresine e-posta gönderebilirler. Gerçek talep varsa dosyayı bağımsız bir açık kaynaklı paket olarak yayınlayacağız./api/cron/refresh-validators adresindeki cron, her etkin doğrulayıcının puanını her 5 dakikada yeniden hesaplar. Girdiler (P-Chain RPC okumaları, Flaremetrics, FSE, reward-scripts) her çalıştırmada yeniden alınır.Flare, doğrulayıcı hissesini kesmiyor. Doğrulayıcı kötü davranışı için tüm ceza mekanizması ödül kaybı artı FIP-10 passes sistemidir. İkili imzalama kesimi yok, çifte harcama kesimi yok, izlemesi gereken hisse yok etme olayı yok. FIP-10 minimum koşullarında başarısız olan doğrulayıcılar bu epok'un ödüllerini kaybeder (sıfır geçişte tam kaybetme, aksi takdirde başarısız oldukları protokol başına bir geçiş kaybetme); sahip oldukları anapara dokunulmaz.
Bu, puanın "kesme geçmişi" boyutuna sahip olmadığı anlamına gelir — izlenecek böyle bir geçmiş yoktur. BIZ izleyin EDİYORUZ her minimum başarısızlığın sonucu: doğrulayıcı bu epok'ta sıfır kazandı, bu epochsIncluded / epochsObserved içinde yakalanır. 2026-05-14 tarihindeki v4.2 güncellemesi, puanın güvenilirlik çarpanını tüm FIP-10 minimums setinde bu oranı kullanacak şekilde genişletti (uptime, FSP imzalama, FTSO gönderim oranı, FDC katılımı), bu nedenle herhangi bir minimum'da başarısız olan bir doğrulayıcı, hangi eksen başarısız olursa olsun Uptime boyutunda orantılı olarak cezalandırılır.
FIP-10 minimum eşikleri, dev.flare.network/network/fsp/rewarding adresinden alınan: staking %80 uptime + 1M FLR aktif self-bond gerektirir; FTSO anchor feeds, tahminleri fikir birliği medyanının %0.5 içinde %80 turunda gerektirir; FTSO blok-gecikmesi feeds, beklenen güncellemelerin %80'ini göndermek gerektirir; FDC, oylama turlarının %60'ına katılmayı gerektirir. %80 uptime + 1M self-bond tabanını karşılayan ancak 3M / 15M kazanç eşiklerinin altında olan doğrulayıcılar yine de ödül alırlar ancak geçiş biriktiremezler — bu kartın passEligibility: "at-risk" sınıflandırması aracılığıyla ortaya çıkan gri bölge.