Vault Incentives and Rewards
Smart Vault Owners can decide to incentivize their users with arbitrary tokens, setting reward emission amount and duration so the rewards tokens are emitted over a specific period.
SPOOL Token incentives are a use-case of this mechanism, where the Spool DAO incentivizes some Smart Vaults with their SPOOL token.
SPOOL Token incentives for Smart Vaults are voted on using a custom UI component that integrates with SnapShot. (An external explainer on SnapShot can be found here).
DAO Members can distribute their voting power between vaults that reach the 1% TVR threshold. The amount of incentives a vault receives is calculated based on the vote (50%) and the profit the vault made relative to other vaults (50%).
The resulting amounts are then passed to the Smart Vault to be issued as a reward to the investors utilizing that particular Smart Vault.
Other incentives, as defined by the Vault Owners, can be in any ERC-20 Token and do not require voting through DAO governance.
Technical Breakdown
Smart Vault Admins can configure additional tokens to be emitted as rewards, however, the Spool DAO has the authority to blacklist reward tokens.
The authority of blacklisting is necessary in case a given ERC20 Token gridlocks a given Smart Vault.
In addition, once created reward emissions can be extended but not reduced. (In order to ensure users have a clear understanding of the terms they "farm yield" under.)
Rewards are configured on-chain but tracked off-chain. Each pre-determined cycle a new Merkle tree root will be added to RewardPool.sol.
Information on how many rewards users have accrued will be made available off-chain and users will be able to generate proofs.
When claiming the rewards users will be required to pass in the proof as well, which is verified by the smart contract against the claim in order to release the funds.
IRewardPool.addTreeRoot is used to add new cycles.
IRewardPool.claim is used to claim the rewards.
IRewardManager is used to configure rewards for a given vault.
RewardManager.extendRewardEmission is used to extend rewards.
RewardManager.removeReward is used to remove tokens.
Last updated