Scoring Model
FlameWire uses a multi-factor scoring system to evaluate miner performance and distribute ALPHA emissions fairly. This document explains every component of the scoring algorithm.
Part 1: Node Score
Each node receives an individual score based on three metrics: correctness, uptime, and latency.
1.1 Uptime Score
Measures how reliable and available the node is. A node that goes offline frequently or falls out of sync cannot serve clients.
Data required:
- Passed health checks — node responded with
is_syncing = falseand block height matches network head - Total health checks — number of checks performed
Formula:
Uptime Score = passed / totalRange: 0.00 - 1.00
Example: Stable Node
| Health checks (24h) | 5,760 (every 15 seconds) |
| Passed checks | 5,750 |
| Failed checks | 10 (planned restart for update) |
| Uptime Score | 0.998 (99.8%) |
Example: Unstable Node
| Health checks (24h) | 5,760 |
| Passed checks | 3,456 |
| Issues | Frequent crashes, sync issues, unplanned restarts |
| Uptime Score | 0.60 (60%) |
1.2 Correctness Score
Verifies that the node returns correct data. A node with incorrect data is dangerous — it can cause financial losses for clients. Any error means total failure.
Zero Tolerance
Data required:
- Correctness tests performed (extrinsic and hash comparisons)
- Result: all correct or not
Formula:
Correctness Score = 1 if all tests pass, 0 if any test failsRange: 0 or 1 (binary)
Example: Correct Node
Validator tests 3 extrinsics (old, middle, recent):
- Extrinsic block 1,000,000: hash correct ✓
- Extrinsic block 3,500,000: hash correct ✓
- Extrinsic block 5,000,000: hash correct ✓
Correctness Score: 1.00
Example: Corrupt Node
Validator tests 3 extrinsics:
- Extrinsic block 1,000,000: hash correct ✓
- Extrinsic block 3,500,000: hash incorrect ✗
- Extrinsic block 5,000,000: hash correct ✓
Correctness Score: 0.00 — Could be incomplete archive, corrupted database, or fraud attempt.
1.3 Latency Score
Measures response speed compared to other nodes in the network. For an RPC provider, speed is critical for user experience.
Data required:
- Current node latency (ms)
- Minimum latency in network (ms)
- Maximum latency in network (ms)
Formula:
Latency Score = 1 - (node_latency - min_latency) / (max_latency - min_latency)Range: 0.00 - 1.00
Special cases:
- Fastest node: Latency Score = 1.00
- Slowest node: Latency Score = 0.00
- All nodes same latency: Latency Score = 1.00 for all
Example: Fast Node
| Network min latency | 25ms |
| Network max latency | 300ms |
| This node | 40ms |
| Calculation | 1 - (40-25)/(300-25) = 1 - 0.055 |
| Latency Score | 0.945 |
Example: Slow Node
| Network min latency | 25ms |
| Network max latency | 300ms |
| This node | 250ms |
| Calculation | 1 - (250-25)/(300-25) = 1 - 0.818 |
| Latency Score | 0.182 |
1.4 Combined Node Score
Combines the three metrics into a single score per node.
Scoring Weights
| Metric | Weight | Justification |
|---|---|---|
| Correctness | 40% | Most important — incorrect data is unacceptable |
| Uptime | 30% | Must be available for clients |
| Latency | 30% | Speed affects user experience |
Formula:
Node Score = 0.40 × Correctness + 0.30 × Uptime + 0.30 × LatencyExample: Excellent Node
| Correctness | 1.00 |
| Uptime | 0.998 |
| Latency | 0.945 |
| Calculation | 0.40×1.00 + 0.30×0.998 + 0.30×0.945 |
| Node Score | 0.983 |
Example: Problematic Node
| Correctness | 0.00 (failed a test) |
| Uptime | 0.60 |
| Latency | 0.182 |
| Calculation | 0.40×0.00 + 0.30×0.60 + 0.30×0.182 |
| Node Score | 0.235 |
Part 2: Regional Factors
2.1 Regional Multiplier
Encourages balanced geographic distribution. Nodes in regions with few nodes are worth more because they help the network be more robust globally.
Data required:
- Number of nodes in each region
- Total number of nodes in network
Formula:
Regional Multiplier = min(2.0, max(0.5, 33.33% / actual_percent%))Range: 0.50 - 2.00
Limits explained:
- Minimum 0.5: Even if a region is very saturated, you don't lose more than half the value
- Maximum 2.0: Even if a region is very empty, you don't gain more than double
Example: Node in Rare Region
| Region | Nodes | Percentage | Multiplier |
|---|---|---|---|
| Europe | 15 | 60% | 0.56 |
| US | 8 | 32% | 1.04 |
| Asia | 2 | 8% | 2.00 (capped from 4.16) |
A node in Asia is worth double! The network desperately needs nodes there.
2.2 Diminishing Returns
Prevents node spam in a single region. Each additional node added by the same miner in the same region contributes less and less.
Formula:
Node N Contribution = Node Score × (1 / N)
where N = which node number for this miner in this regionExample: Diversified Miner
Miner has 3 nodes in 3 different regions (all Node Score = 0.90):
| Node EU | 0.90 × 1/1 = 0.90 |
| Node US | 0.90 × 1/1 = 0.90 |
| Node AS | 0.90 × 1/1 = 0.90 |
| Total | 2.70 |
Example: Spam in One Region
Miner has 3 nodes, all in Europe (all Node Score = 0.90):
| First node | 0.90 × 1/1 = 0.90 |
| Second node | 0.90 × 1/2 = 0.45 |
| Third node | 0.90 × 1/3 = 0.30 |
| Total | 1.65 (instead of 2.70) |
Anti-Spam Protection
2.3 Regional Score
Combines node contributions with the regional multiplier for each region.
Formula:
Regional Score = Sum of contributions with diminishing × Regional MultiplierExample Comparison
| Scenario | Calculation | Regional Score |
|---|---|---|
| 1 node in Asia (0.90) | 0.90 × 2.00 | 1.80 |
| 3 nodes in Europe (0.90 each) | 1.65 × 0.56 | 0.92 |
3 nodes in Europe are worth less than 1 node in Asia!
Part 3: Diversity Bonus
Rewards miners who cover multiple geographic regions. A global network needs presence in all zones.
| Regions Covered | Diversity Bonus |
|---|---|
| 1 region | 1.00 (no bonus) |
| 2 regions | 1.10 (+10%) |
| 3 regions | 1.20 (+20%) |
Global Coverage Rewarded
Part 4: Raw Miner Score
Calculates the miner's total score before smoothing.
Formula:
Raw Miner Score = (Regional Score EU + Regional Score US + Regional Score AS) × Diversity BonusExample: Strategic Miner
| 1 node EU (0.95) | 0.95 × 0.56 = 0.53 |
| 1 node US (0.90) | 0.90 × 1.04 = 0.94 |
| 1 node Asia (0.85) | 0.85 × 2.00 = 1.70 |
| Subtotal | 3.17 |
| Diversity Bonus | 1.20 (3 regions) |
| Raw Miner Score | 3.80 |
Example: Non-Strategic Miner
| 4 nodes EU (0.95 each) | 0.95 + 0.475 + 0.317 + 0.238 = 1.98 |
| Regional Score EU | 1.98 × 0.56 = 1.11 |
| Diversity Bonus | 1.00 (1 region) |
| Raw Miner Score | 1.11 |
With 4 nodes, this miner earns less than the strategic miner with 3 nodes!
Part 5: EMA Smoothing
Prevents sudden score jumps. Protects good miners from temporary bad luck and prevents manipulation through intermittent performance.
Formula:
EMA Score = α × Raw Score + (1 - α) × Previous EMA ScoreWhere α (alpha) = 0.1
- 10% from new score
- 90% from previous score
- Changes propagate gradually over ~20-30 epochs
Example: Stable Performance
| Epoch | Raw Score | EMA Score |
|---|---|---|
| 1 | 3.80 | 3.80 (first epoch) |
| 2 | 3.75 | 3.795 |
| 3 | 3.82 | 3.798 |
Example: Sudden Drop Cushioned
| Previous EMA | 3.80 |
| New Raw (problem epoch) | 1.50 |
| Calculation | 0.1 × 1.50 + 0.9 × 3.80 |
| New EMA | 3.57 (not 1.50) |
Recovery Friendly
Part 6: Final Weight
Transforms scores into percentages that sum to 100%. These become the weights set on blockchain.
Formula:
Weight = EMA Score / Sum of all EMA ScoresExample: Network with 4 Miners
| Miner | EMA Score | Calculation | Final Weight |
|---|---|---|---|
| A | 3.80 | 3.80 / 8.50 | 44.7% |
| B | 2.50 | 2.50 / 8.50 | 29.4% |
| C | 1.50 | 1.50 / 8.50 | 17.6% |
| D | 0.70 | 0.70 / 8.50 | 8.2% |
| Total | 8.50 | 100% |
Complete Formula Summary
Step 1: Calculate Node Score
Uptime Score = passed / total
Correctness Score = 1 if all tests pass, 0 otherwise
Latency Score = 1 - (node_latency - min) / (max - min)
NODE SCORE = 0.40 × Correctness + 0.30 × Uptime + 0.30 × LatencyStep 2: Calculate Regional Multipliers
For each region:
actual_percent = region_nodes / total_nodes
multiplier = 33.33% / actual_percent
REGIONAL MULTIPLIER = min(2.0, max(0.5, multiplier))Step 3: Calculate Contributions per Miner per Region
For each miner, for each region:
For each node (sorted by Node Score descending):
CONTRIBUTION = Node Score × (1 / N)
where N = node number in this region
REGIONAL SCORE = Sum of contributions × Regional MultiplierStep 4: Calculate Diversity Bonus
regions_covered = number of regions where miner has at least 1 node
DIVERSITY BONUS =
1.00 if regions = 1
1.10 if regions = 2
1.20 if regions = 3Step 5: Calculate Raw Miner Score
RAW MINER SCORE = (Regional Score EU + Regional Score US + Regional Score AS) × Diversity BonusStep 6: Apply EMA Smoothing
If first epoch for miner:
EMA SCORE = Raw Miner Score
Else:
EMA SCORE = 0.1 × Raw Miner Score + 0.9 × Previous EMA ScoreStep 7: Calculate Final Weight
WEIGHT = EMA Score / Sum of all EMA Scores in networkComplete End-to-End Example
Network situation:
- Total nodes: 20
- Europe: 12 nodes (60%) → Multiplier: 0.56
- US: 6 nodes (30%) → Multiplier: 1.11
- Asia: 2 nodes (10%) → Multiplier: 2.00
Miner X has:
- Node 1 in EU: Uptime=0.99, Correctness=1, Latency=0.85
- Node 2 in EU: Uptime=0.95, Correctness=1, Latency=0.80
- Node 3 in Asia: Uptime=0.98, Correctness=1, Latency=0.70
Step 1: Node Scores
| Node | Calculation | Node Score |
|---|---|---|
| Node 1 EU | 0.40×1 + 0.30×0.99 + 0.30×0.85 | 0.952 |
| Node 2 EU | 0.40×1 + 0.30×0.95 + 0.30×0.80 | 0.925 |
| Node 3 AS | 0.40×1 + 0.30×0.98 + 0.30×0.70 | 0.904 |
Step 2: Contributions with Diminishing (EU sorted by score)
| Node 1 (best) | 0.952 × 1/1 = 0.952 |
| Node 2 | 0.925 × 1/2 = 0.463 |
| Total EU | 1.415 |
| Node 3 (only in AS) | 0.904 × 1/1 = 0.904 |
| Total AS | 0.904 |
Step 3: Regional Scores
| Regional Score EU | 1.415 × 0.56 = 0.79 |
| Regional Score AS | 0.904 × 2.00 = 1.81 |
Step 4: Diversity Bonus
Miner has nodes in 2 regions (EU and AS) → 1.10
Step 5: Raw Miner Score
Raw = (0.79 + 0 + 1.81) × 1.10 = 2.60 × 1.10 = 2.86
Step 6: EMA
Previous EMA was 2.50:
EMA = 0.1 × 2.86 + 0.9 × 2.50 = 0.286 + 2.25 = 2.54
Step 7: Final Weight
If sum of all EMAs in network is 15.00:
Weight Miner X = 2.54 / 15.00 = 16.9%
Key Takeaway