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 = false and block height matches network head
  • Total health checks — number of checks performed

Formula:

Uptime Score = passed / total

Range: 0.00 - 1.00

Example: Stable Node

Health checks (24h)5,760 (every 15 seconds)
Passed checks5,750
Failed checks10 (planned restart for update)
Uptime Score0.998 (99.8%)

Example: Unstable Node

Health checks (24h)5,760
Passed checks3,456
IssuesFrequent crashes, sync issues, unplanned restarts
Uptime Score0.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

Correctness is binary. If any test fails, the node receives a score of 0. Partial correctness is not acceptable for blockchain data.

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 fails

Range: 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 latency25ms
Network max latency300ms
This node40ms
Calculation1 - (40-25)/(300-25) = 1 - 0.055
Latency Score0.945

Example: Slow Node

Network min latency25ms
Network max latency300ms
This node250ms
Calculation1 - (250-25)/(300-25) = 1 - 0.818
Latency Score0.182

1.4 Combined Node Score

Combines the three metrics into a single score per node.

Scoring Weights

Correctness (40%) + Uptime (30%) + Latency (30%) = Node Score
MetricWeightJustification
Correctness40%Most important — incorrect data is unacceptable
Uptime30%Must be available for clients
Latency30%Speed affects user experience

Formula:

Node Score = 0.40 × Correctness + 0.30 × Uptime + 0.30 × Latency

Example: Excellent Node

Correctness1.00
Uptime0.998
Latency0.945
Calculation0.40×1.00 + 0.30×0.998 + 0.30×0.945
Node Score0.983

Example: Problematic Node

Correctness0.00 (failed a test)
Uptime0.60
Latency0.182
Calculation0.40×0.00 + 0.30×0.60 + 0.30×0.182
Node Score0.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

RegionNodesPercentageMultiplier
Europe1560%0.56
US832%1.04
Asia28%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 region

Example: Diversified Miner

Miner has 3 nodes in 3 different regions (all Node Score = 0.90):

Node EU0.90 × 1/1 = 0.90
Node US0.90 × 1/1 = 0.90
Node AS0.90 × 1/1 = 0.90
Total2.70

Example: Spam in One Region

Miner has 3 nodes, all in Europe (all Node Score = 0.90):

First node0.90 × 1/1 = 0.90
Second node0.90 × 1/2 = 0.45
Third node0.90 × 1/3 = 0.30
Total1.65 (instead of 2.70)

Anti-Spam Protection

The third node contributes only 33% of its value. Diversification is always better than concentration.

2.3 Regional Score

Combines node contributions with the regional multiplier for each region.

Formula:

Regional Score = Sum of contributions with diminishing × Regional Multiplier

Example Comparison

ScenarioCalculationRegional Score
1 node in Asia (0.90)0.90 × 2.001.80
3 nodes in Europe (0.90 each)1.65 × 0.560.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 CoveredDiversity Bonus
1 region1.00 (no bonus)
2 regions1.10 (+10%)
3 regions1.20 (+20%)

Global Coverage Rewarded

Miners with nodes in all 3 regions (EU, US, Asia) receive a 20% bonus on their total score.

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 Bonus

Example: 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
Subtotal3.17
Diversity Bonus1.20 (3 regions)
Raw Miner Score3.80

Example: Non-Strategic Miner

4 nodes EU (0.95 each)0.95 + 0.475 + 0.317 + 0.238 = 1.98
Regional Score EU1.98 × 0.56 = 1.11
Diversity Bonus1.00 (1 region)
Raw Miner Score1.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 Score

Where α (alpha) = 0.1

  • 10% from new score
  • 90% from previous score
  • Changes propagate gradually over ~20-30 epochs

Example: Stable Performance

EpochRaw ScoreEMA Score
13.803.80 (first epoch)
23.753.795
33.823.798

Example: Sudden Drop Cushioned

Previous EMA3.80
New Raw (problem epoch)1.50
Calculation0.1 × 1.50 + 0.9 × 3.80
New EMA3.57 (not 1.50)

Recovery Friendly

If performance returns to normal, the score recovers. But if problems continue, the score will gradually decrease.

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 Scores

Example: Network with 4 Miners

MinerEMA ScoreCalculationFinal Weight
A3.803.80 / 8.5044.7%
B2.502.50 / 8.5029.4%
C1.501.50 / 8.5017.6%
D0.700.70 / 8.508.2%
Total8.50100%

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 × Latency

Step 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 Multiplier

Step 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 = 3

Step 5: Calculate Raw Miner Score

RAW MINER SCORE = (Regional Score EU + Regional Score US + Regional Score AS) × Diversity Bonus

Step 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 Score

Step 7: Calculate Final Weight

WEIGHT = EMA Score / Sum of all EMA Scores in network

Complete 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

NodeCalculationNode Score
Node 1 EU0.40×1 + 0.30×0.99 + 0.30×0.850.952
Node 2 EU0.40×1 + 0.30×0.95 + 0.30×0.800.925
Node 3 AS0.40×1 + 0.30×0.98 + 0.30×0.700.904

Step 2: Contributions with Diminishing (EU sorted by score)

Node 1 (best)0.952 × 1/1 = 0.952
Node 20.925 × 1/2 = 0.463
Total EU1.415
Node 3 (only in AS)0.904 × 1/1 = 0.904
Total AS0.904

Step 3: Regional Scores

Regional Score EU1.415 × 0.56 = 0.79
Regional Score AS0.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

Strategic geographic distribution beats raw node count. Quality and diversity are rewarded over quantity in a single location.