✔️ MCCP 17: Add Vesper vaMUSD dial

Simple Summary

It is proposed to add a dial in the Emission Controller for Vesper Finance’s vaMUSD Pool.

Abstract

Vesper Finance is a DeFi super app that makes DeFi more accessible and easier to use. It offers well-audited products that simplify digital asset growth and deliver new opportunities for exposure to emerging DeFi projects and communities. The platform’s native token, VSP, incentivizes participation, facilitates governance and catalyzes user contribution.

Vesper is creating a vaMUSD pool. The initial strategy will reflect a Curve-Convex strategy: deposits are converted to mUSD-CRV liquidity and staked on Convex, with rewards auto compounding on behalf of the user.

The dial would then allow MTA Governors to direct emissions towards this Pool. Vesper Finance additionally will support this pool with VSP rewards.

Motivation

mStable users can access yield opportunities without high gas costs or active management required to realize and compound rewards. Additional VSP + MTA rewards make this a worthwhile yield opportunity for mStable holders.

This pool will create another source of demand for mUSD outside mStable’s Save. Increasing the yield for Save, while also making liquidity in the Convex/Curve Pool more capital efficient and less complex for users.

In addition, this collaboration would strengthen the partnership between mStable and Vesper Finance that could yield more opportunities in the future. Allowing mStable products to be more widely used in the DeFi ecosystem.

Specification

A new instance of the contract BasicRewardsForwarder will be deployed on Ethereum mainnet with the following parameters:

  • nexus = 0xAFcE80b19A8cE13DEc0739a1aaB7A028d6845Eb3 (Nexus contract)
  • rewardsToken = 0xa3BeD4E1c75D00fa6f4E5E6922DB7261B5E9AcD2 (MTA Deployed address)

And initialized with:

  • emissionsController = 0xBa69e6FC7Df49a3b75b565068Fb91ff2d9d91780 (Emissions Controller deployed address)
  • endRecipient = 0x968d6024e32d30a7334Ffc5373CcD97a3d199E94 (Vesper vaMUSD Rewards Contract)

This contract receives the MTA from the Emissions Controller and forwards it to the staking contract controlled by Vesper.

This contract will then be added to the Emissions Controller as a dial:

  • Emissions Controller (0xBa69e6FC7Df49a3b75b565068Fb91ff2d9d91780)
    • addDial (address recipient, uint8 cap, bool notify)
    • recipient = New deployed instance of BasicRewardsForwarder as specified above
    • uint8 cap = 0 uncapped (only used for MTA staking contracts to cap)
    • notify = true will call the function to notify and process the MTA rewards upon disperse

Copyright

Copyright and related rights waived via CC0.

1 Like

Good to see this coming through!

A question on the technicality: the BasicRewardForwarder will send the MTA to the set address once per week when we distribute the MTA. Does the receiving smart contract has a function to recognize the new balance and start streaming to staked users? How is the contract working?

As previously stated, highly in support of this

Hey mate, appreciate the support!

Architecture is as follows: endRecipient is a rewards contract tethered to the mUSD pool. It pools vaMUSD balances and streams rewards according to those balances. Contract can take in any erc20 token. Admin can set up rewards stream for a variable token balance and length of time and contract supports multiple streams. VSP is streamed monthly, and will additionally stream MTA rewards weekly in tandem

Sounds good, so you will be calling a function weekly after we send the MTA and that will distribute over the 7 days. Sounds good, let’s progress with this MCCP

To clarify further, the MTA gets transferred to this address: 0x963a9593C9fb4dE39C94452d3De437E8Ab1F7074

You then call sweepERC20(address mta) and this will send it to the pool address, which is set to 0x83c608b3997db00b5c6d93746785857cd22d4495

How does it work from then?

Correction (confirmed by engineering)

MTA gets transferred to this address: 0x968d6024e32d30a7334Ffc5373CcD97a3d199E94

  1. anyone can send token to that contract
  2. Governor one-time approves new token
  3. Governor initiates and renews stream using notifyRewardAmount(rewardToken, amount, period)

Governor will up a weekly stream as MTA rewards enter the contract

Thanks for the update! Now I can follow the steps. The contract looks somewhat familiar, I think we had a similar starting point.

Updated this section of the initial post above with the new address:

Waiting for any more comments on this proposal and then we could proceed to a vote.

I support this dial.

This proposal is now live on Snapshot, and Meta Governors have until this Friday to cast their vote!

This vote has resolved almost unanimously in favour!

From here on, I’ll always keep you updated in these threads on when the proposed changes have been successfully implemented! :sunglasses:

gm everyone,

The Vesper Dial has been successfully implemented into our Emissions Controller :partying_face:

1 Like

Thanks a lot @mZeroNine @dimsome
It seems the dial already received some votes. Happy to see this coming to fruition