Documentation
Reward Rotation
Reward rotation is the mechanism that distributes different reward weights to different tiers in each epoch, while ensuring that over any complete four-epoch cycle, every tier receives the same total weight. It is the core fairness guarantee of ERC-5D.
The problem rotation solves
A naive reward system would give certain NFT tiers permanently higher reward rates. This creates a permanent advantage for early minters or buyers who happen to receive high-rate assignments. It also creates secondary market price pressure for higher-rate NFTs independent of the underlying token, which is undesirable in a system designed around fungible parity.
Rotation eliminates this problem. By cycling the weights across tiers on a fixed schedule, no tier holds a permanent advantage. A Tier IV NFT earns weight 3 in one epoch and weight 0 in another, while a Tier I NFT earns weight 0 in one epoch and weight 3 in another. Across any complete cycle, the totals are identical.
The weight vector
The four weights in the rotation are: 0, 1, 2, and 3. These are relative integer weights, not fixed absolute percentages. Each weight is assigned to exactly one tier per epoch. The assignment shifts by one position each epoch using the formula: slot(t, e) = (t - 1 + 4 - e mod 4) mod 4, where t is the tier index (1-4) and e is the epoch index. The sum of all four weights is 6, so each tier accumulates a total weight of 6 over a complete four-epoch cycle.
A weight of 0 means a tier earns nothing in that particular epoch. This is not a penalty. It is the phase where that tier's weight is zero. In the following epoch, the same tier will earn weight 1, then 2, then 3, and the cycle repeats. Every tier experiences a zero-weight epoch exactly once per four-epoch cycle by design.
Rotation schedule
The current epoch's phase is determined by epochIndex modulo 4. The following table shows the relative weight assigned to each tier in each phase. Note that this is a simplified representation. The actual phase offset may differ based on the epoch anchor set at treasury initialization.
| Phase | Tier I | Tier II | Tier III | Tier IV |
|---|---|---|---|---|
| mod 4 = 0 | 0 | 1 | 2 | 3 |
| mod 4 = 1 | 3 | 0 | 1 | 2 |
| mod 4 = 2 | 2 | 3 | 0 | 1 |
| mod 4 = 3 | 1 | 2 | 3 | 0 |
| Cycle sum | 6 | 6 | 6 | 6 |
Weights apply to both the ETH stream and the PAWN stream simultaneously. Weight sum per Pawn across a complete 4-epoch cycle: 0 + 1 + 2 + 3 = 6, identical for every tier.
Mathematical parity
Consider a holder with one Pawn of any tier, across four consecutive epochs that constitute a full cycle. Their total accumulated weight is:
This sum is the same for Tier I, Tier II, Tier III, and Tier IV. The order in which the weights apply differs by tier. Each tier's sequence is a different rotation of the same four values, but the total is invariant.
A holder who joins mid-cycle will receive a partial cycle. Their partial reward reflects whichever phases have occurred during their holding period. Over a long holding horizon, this initial offset averages out.
On-chain implementation
The rotation is computed purely from epochIndex and the tier value using the deterministic formula slot(t, e) = (t - 1 + 4 - e mod 4) mod 4. No additional on-chain state is required to determine the current weight for any tier. The contract derives it at distribution time. This means the rotation is predictable, verifiable, and auditable without any historical data. There are no keepers, no randomness oracles, and no off-chain schedulers. Everything is a pure function of block time and mint index.