Author: Zefram Lou (zefram@88mph.app)
Specification
Currently, depositors are rewarded with MPH, which is vested over a fixed period of time regardless of how long the deposit period is. Most pools have a 270-day vest period, the Compound UNI pool has a 14-day vest period, and the Aave DAI pool has a 30-day vest period.
We propose that the vest period should equal the deposit period.
Argument for
88mph pools have been using 7-day reward vesting for most of their existence. During this time, it has been fairly easy for users to dump MPH on the market in the following way:
- Deposit a large sum of money into an 88mph pool for the maximum period (1 year). Because the deposit MPH reward is proportional to the deposit period, and is vested after 7 days regardless of the deposit period, this achieves the highest possible rate of receiving rewards.
- Keep enough of the MPH received to cover the MPH payback, and dump the rest on the market. This is what we expect a regular user (who intends to withdraw the deposit after it matures) would do in most cases.
- Alternatively, just dump all of the MPH received and wait until the price drops to buy back and withdraw the deposit early. This would effectively be shorting MPH.
This is clearly problematic for the long term growth of MPH. There are two potential ways to resolve this:
- Make the vest period a reasonably long time, such as 1 year
- This would be the easier option to implement, not needing any smart contract upgrades.
- Make the vest period equal the deposit period
- This option requires a smart contract upgrade, detailed in the required actions section.
While the first option is easier to implement, it also makes it more difficult for other protocols to integrate 88mph. For instance, Mushroom Finance is currently using the Compound UNI pool to earn interest, and their smart contract is making 14-day deposits to ensure the liquidity of their funds. If we made the vest period 1 year, smart contracts integrated with us would need to track vested MPH from a long time ago, rather than just assume that all MPH has been vested when a deposit is withdrawn. This makes things much more difficult for them. Therefore, the second option seems better in the long run.
Moreover, with the need to pay back part of the MPH received when a user withdraws their deposit, users who deposit for a short period of time will need to buy MPH from the market to withdraw their funds, which makes for a terrible user experience.
In addition, making the vest period equal the deposit period means the rate of reward is the same regardless of how long a deposit is locked for, removing the incentive for users to make deposits with maximum periods.
Argument against
Having a short vest period makes it more attractive for users to deposit, which would lead to more TVL and more revenue generated for MPH holders. Prolonging the vest period would hurt the TVL growth.
Required actions
The MPHMinter
and MPHIssuanceModel01
contracts currently used for minting MPH rewards only support a fixed vest period for each pool. Therefore, they need to be upgraded, which involves:
- Deploying the modified contracts.
- Calling
MPHMinter::setMPHTokenOwner()
on the currentMPHMinter
to set the owner of the MPH token contract to the newMPHMinter
. - Calling
DInterest::setMPHMinter()
on each pool with the newMPHMinter
.
The modified MPHMinter
and MPHIssuanceModel02
contracts are available here: