# Rewards formulas

Storage Node staking rewards follow the same base formula as validators:

$$
f(x) = x \* e^{2 pi i \xi x}
$$

Where:

* **t** = time in years since network launch
* **a** = total $VOLA staked in the network
* **b** = total circulating supply of $VOLA

> 💡 Unlike validators, Storage Node staking rewards have no maximum stake cap. The more you stake, the more you earn from this stream — subject to the network's total staking ratio.

***

#### Revenue Multiplier

For a period of time after network launch, the chain adds a bonus on top of storage fee revenue earned by nodes. This multiplier is governed by:

`[MATH BLOCK]`

2×(0.95×e−0.08t+0.1×e−0.003t)2 \times (0.95 \times e^{-0.08t} + 0.1 \times e^{-0.003t})2×(0.95×e−0.08t+0.1×e−0.003t)

Where **t** = time in years since network launch.

The total revenue earned by a node in any given period is therefore:

`[CODE BLOCK]`

```
total_revenue = storage_fee_earned + (revenue_multiplier × storage_fee_earned)
```

`[TABLE BLOCK]`

| Year    | Approximate Multiplier |
| ------- | ---------------------- |
| Year 1  | \~2.0x                 |
| Year 2  | \~1.6x                 |
| Year 3  | \~1.3x                 |
| Year 5  | \~0.9x                 |
| Year 10 | \~0.4x                 |

> 💡 **Early operators benefit most.** The revenue multiplier is highest at launch and decays over time. Operators who join early and maintain strong uptime will earn significantly more per unit of storage than those who join later.

***

### DOP Score & Its Impact on Rewards

Your DOP score is the single most important performance metric for a Storage Node. It affects your utility score, your node weight, and your slashing factor — all of which directly determine your share of the reward pool.

`[TABLE BLOCK]`

| Metric                     | How It's Calculated                     | Impact on Rewards                                                             |
| -------------------------- | --------------------------------------- | ----------------------------------------------------------------------------- |
| **DOP Score (D)**          | P/T per epoch                           | Directly multiplied into utility score                                        |
| **Historical DOP (Dhist)** | (1-α) × Dhist.prev + α × Dcurr, α = 20% | Used to calculate slashing factor R                                           |
| **Slashing Factor (R)**    | 1 / (1 + e^(-33(avg-0.83)))             | Multiplied into utility score — approaches 0 for consistently poor performers |

`[EXPANDABLE BLOCK]`

**How DOP Score is calculated in detail**

At each checkpoint (≈ 1 day), the chain publishes random values corresponding to specific chunks of files stored across the network. Your node must:

1. Listen for the random challenge values
2. Locate the corresponding file chunks
3. Generate a Merkle proof of each chunk's inclusion in the file
4. Submit the proof to the DOP pallet within the checkpoint window

Your DOP score for the epoch is: **D = P / T** where P = number of valid proofs submitted and T = total number of challenges issued.

Your historical DOP score is then updated: **Dhist = (1 - 0.20) × Dhist.prev + 0.20 × Dcurr**

This means your current epoch carries 20% weight and your historical performance carries 80%. A single missed checkpoint won't ruin your score — but sustained underperformance will progressively reduce your rewards.

***

### Reward Payout Flow

Here's how rewards move from the network to your wallet each epoch:

`[STEPPER BLOCK]`

**Step 1 — Epoch Ends** At the end of each epoch (≈ 5 days), the score oracle submits aggregated per-node performance scores to the chain via `dopVerification.submitScores`. Scores sum to 1.0 across all active nodes.

**Step 2 — Payout Triggered** Anyone can trigger `storageStaking.payoutNode` for a given node — this is permissionless. The call distributes that epoch's revenue to the operator and delegator reward pools according to the node's current delegation parameters.

**Step 3 — Operator Claims** The node operator calls `storageStaking.claimOperatorRewards` to move their accumulated rewards from the reward pool to their free balance.

**Step 4 — Delegators Claim** Delegators call `storageStaking.claimStakeRewards` to claim their share of rewards. This can be done at any time after `payoutNode` has run for the relevant epoch.

***

### Reward Summary

`[TABLE BLOCK]`

|                        | Validation Node            | Storage Node                            |
| ---------------------- | -------------------------- | --------------------------------------- |
| **Primary Revenue**    | Transaction fees           | Storage fee revenue                     |
| **Secondary Revenue**  | Staking rewards            | Staking rewards + Revenue multiplier    |
| **Reward Period**      | Per era ≈ 7 hours          | Per epoch ≈ 5 days                      |
| **Performance Impact** | Uptime & block production  | DOP score, utilisation, slashing factor |
| **Payout Trigger**     | `payoutStakers`            | `payoutNode` (permissionless)           |
| **Claim Extrinsic**    | Automatic to payee         | `claimOperatorRewards`                  |
| **Delegation**         | :red\_circle:Not supported | ✅ Shared with delegators                |

***

### What's Next?

`[CARDS BLOCK — 3 cards]`

**Delegated Staking** *How to open your node to delegators or delegate your $VOLA to earn rewards without running hardware.* → Delegated Staking

**Node Staking Requirements** *Full staking mechanics, formulas, and how to unbond.* → Node Staking

**Hardware Requirements** *Make sure your infrastructure is optimised to maximise your DOP score and rewards.* → Hardware Requirements

{% hint style="info" %}

#### Important Note:

Nuvola Drive users are not exposed to these ineractions and do not need to interact with Vola in any manner. Nuvola Drive is a user to Vola Network and abstracts and handles all these interactions on behalf of the users.
{% endhint %}


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://wp.vola.network/docs/vola-node-economy/staking-and-delegation/rewards-formulas.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
