Rewards and epochs

Rewards accrue continuously, but lock eligibility is organized by epochs.

Ark uses lazy accounting. The frontend can show pending rewards at any time, but the chain only updates stored balances when someone interacts.

Reward Lanes

27,200TEST base reward budget
52,800TEST locked reward budget
200 daysgenesis stream duration

The genesis reward pool is 80,000 TEST. It is streamed over 200 days, with 34% assigned to boarded positions and 66% assigned to locks. Fee routes can also add more rewards.

Base Rewards For Boarded Positions

Boarded positions earn TEST through a global reward-per-boarded-token index: rewardPerActiveBoarded. Each position stores the index it has already been paid against.

pending = accrued[position]
        + activeBoardedAmount[position]
        * (rewardPerActiveBoarded - paid[position])
        / 1e18

Before boarding, exiting, claiming, or compounding changes a position, the Vault syncs the global index and settles the affected position. This prevents a new boarder from receiving rewards that accrued before they boarded.

Locked Rewards

Locks can earn two assets: TEST and WETH-accounted rewards. WETH-accounted rewards are normally paid as native ETH. If the receiver rejects native ETH, the Vault falls back to WETH.

TEST rewards

The locked TEST stream and ARK-denominated fee routes update rewardPerLocked.

ETH rewards

WETH hook-fee routes update rewardPerLockedWeth, then pay as native ETH by default.

A lock is active for rewards only between its scheduled start epoch and its maturity epoch. Once it matures, rewards are capped at the maturity snapshot and no longer increase.

What Epochs Do

An epoch is not a once-per-day reward payment. Rewards stream through indexes over time. Epochs are used by the lock system to group activation and maturity boundaries so the contract can account for locks without looping over every lock on every block.

timeline
  title Lock reward timeline
  Lock created : amount enters activeTotalLocked
  Next epoch : amount enters rewardActiveTotalLocked
  During lock : TEST and WETH indexes accrue
  Maturity epoch : reward indexes are snapshotted
  Unlock : principal plus settled rewards return
          
Current TEST deployment: 40-minute locks and 1-minute maturity epochs. Standard ARK parameter set: 40-day locks and 1-day maturity epochs.

Claim, Compound, Or Unlock

Claiming is useful before a position or lock is finished. It harvests pending rewards while leaving principal in place. For a fully mature lock, unlocking already pays the principal and any remaining rewards, so a separate claim is usually unnecessary.

Locked compounding is intentionally limited to immature locks. compoundLocked creates a new lock from pending TEST rewards. After maturity, the lock has stopped earning, so the protocol expects the user to unlock instead.

Clear Examples

Boarded Position

A user boards 100 TEST. Later the position shows 100 TEST boarded and 4 TEST pending. Claim sends the 4 TEST to the wallet. Compound adds the 4 TEST into the same boarded position. Exit handles the 100 TEST principal, net of any active exit fee, and also pays any settled pending rewards.

Lock

A user locks 100 TEST. The lock receives lTEST and a lock NFT. It earns from the locked reward lane until maturity. Before maturity, the user can claim or compound TEST rewards. At maturity, unlock returns principal plus remaining TEST and ETH/WETH rewards.