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
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
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.