Proof-of-Contribution
Contribution Dimensions#
Every node's contribution is scored across four dimensions:
Dimension
Measured by
Weight
Uptime
Validator challenges + availability proofs
35%
Performance
Execution quality, latency, throughput vs. declared SLA
25%
Volume
Total verified units delivered (compute-seconds, GB stored, GB relayed)
25%
Reliability
Consistency over time; penalized for spikes and gaps
15%
contribution_score =
(uptime_score × 0.35) +
(performance_score × 0.25) +
(volume_score × 0.25) +
(reliability_score × 0.15)
All inputs to this formula come from validator-verified receipts. Self-reported data is not accepted. A node that submits fake receipts (detected by validators) receives a zero score for the affected period plus reputation penalties.
Scoring Period (MVP defaults — subject to governance)#
Parameter
Value
Epoch length
7 days
Score finalization
24 hours after epoch close
Dispute window
48 hours from score publication
Distribution
After dispute window closes
Scores for a completed epoch are immutable after the dispute window. No retroactive adjustment is possible once distribution has occurred.
Rail A Distribution#
Rail A is a finite allocation of protocol resources distributed to nodes with verified contribution above the minimum threshold. Key properties:
-
Finite total — the Rail A allocation is fixed at launch; it does not inflate
-
Declining rate — distribution per epoch decreases over time on a predetermined schedule
-
Performance-weighted — share is proportional to contribution_score within the epoch
-
No passive component — a node that is offline for an epoch receives zero Rail A for that epoch
node_rail_a_share =
(node_contribution_score / total_network_contribution_score)
× epoch_rail_a_allocation
The declining schedule means early participants who deliver verified service receive proportionally more than later participants — rewarding the risk of early infrastructure investment. The reward is always tied to verified delivery, never to holding. Rail A Eligibility per Epoch To be eligible for Rail A distribution, a node must:
-
Be registered and active for the full epoch
-
Achieve uptime score ≥ 85% for the epoch (MVP default — subject to governance)
-
Pass at least one validator challenge during the epoch
-
Have no active fraud investigation
-
Have no pending slashing from the validator network Nodes that fall below the eligibility threshold in a given epoch receive zero Rail A for that epoch. There is no partial distribution below threshold.
Governance Weight#
Governance weight is a separate accumulation from Rail A distribution. It accrues to operators based on verified contribution history, independent of whether Rail A is still active.
// Accumulation each epoch
governance_weight += (contribution_score_this_epoch × epoch_weight_multiplier)
// Decay each epoch
governance_weight ×= (1 - decay_rate_per_epoch)
The decay rate means governance weight requires ongoing contribution to maintain. An operator who stops contributing sees their governance weight decay to zero over time. Governance influence cannot be banked indefinitely. Key properties:
-
Non-transferable — governance weight is bound to the node identity
-
Non-purchasable — buying $GAO tokens does not grant governance weight
-
Contribution-only — only verified infrastructure delivery accumulates weight
-
Decaying — ongoing participation required to maintain influence
Contribution Leaderboard#
The protocol maintains a public, real-time contribution leaderboard:
GET /v1/depin/leaderboard?type=compute|storage|bandwidth|all&period=7d|30d|90d
{
"period": "7d",
"type": "all",
"nodes": [
{
"node_id": "node.operator.gao",
"contribution_score": 94.2,
"rank": 1,
"uptime": 99.8,
"volume_units": 1420000,
"governance_weight": 847.3
}
]
}
The leaderboard is read-only and public. It is computed from validator-verified receipts — operators cannot self-report into it.
Verification Audit Trail#
Every contribution score is backed by an auditable trail. The following is an illustrative example:
Contribution score — epoch_0042 / node.operator.gao: ← illustrative example
Validator receipts: 14,203 verified receipts
Challenge results: 12 challenges issued, 12 passed
Uptime proofs: 168 hourly proofs submitted, 165 accepted
Volume total: 94,200 CPU-seconds verified
Score: 94.2 / 100
Merkle root: 0xABC... (anchored on-chain)
Epoch scores are Merkle-anchored on-chain. Any party can independently verify any node's score for any epoch using the public Merkle proof system.
PoC Protocol Invariants (not subject to governance change)#
ID
Invariant
DEP-INV01
No compensation released without a quorum-verified receipt
DEP-INV02
No single validator can unilaterally approve or block a receipt
DEP-INV03
All challenge randomness is on-chain verifiable; no party can predict challenge timing
DEP-INV04
Governance weight is bound to node identity; non-transferable, non-purchasable
DEP-INV05
Rail A scoring inputs are validator-verified only; self-reported data not accepted
DEP-INV06
Epoch scores are Merkle-anchored on-chain; immutable after the dispute window
See validator-spec.md for how receipts are verified. See node-operator-guide.md for registration and how to participate.