USDM Token

The USDM token is an ERC20 rebasing token, with a redemption value pegged at 1:1 for primary customers. Like other fiat-backed stablecoins, we expect a 1:~1 in secondary market price, driven by arbitrage opportunities.
For more details about rights related to USDM, please visit Rights of USDM holders.

USDM contract overview

USDM is built on top of the Open Zeppelin ERC20 canonical implementation, adding rebasing dynamics to the contract, following the same pattern as Lido's stETH.
When a rebase occurs, the token supply is increased algorithmically, based on the rewardMultiplier set by Mountain Protocol (the rewardMultiplier loosely follows the Secured Overnight Financing Rate, SOFR, passing through yield from the assets held in the USDM Reserves to users).
balanceOf(account) = shares[account] * rewardMultiplier
shares - map of user account shares. Every time USDM is minted or burnt, it is converted to shares and added/deducted and assigned to user's balance.
rewardMultiplier - is the sum of daily addRewardMultiplier, accruing yield daily for users.

Rebasing example

If a user purchased 100 USDM when the rewardMultiplier was 1.00, that user would receive 100 shares of USDM. If the average APY for the year stayed constant at 5%, that user would now have 105 USDM. Below is an example of the USDM balances, shares, and rewardMultiplier:
Time
USDM (balanceOf)
Shares
rewardsMultiplier
Day 0
100
100
1
Day 365
105
100
1.05
If this user wanted to redeem 100 of the 105 USDM, they could transfer 100 USDM to their Mountain Protocol account, via the Platform.
Under the hood, the contract will transfer 100/1.05 = 95.238 shares
In this example, the user will receive $100 for their 100 USDM and keep 5 USDM.

How the rewardMultiplier works

The rewardMultiplier variable is updated daily, at or around 12pm UTC, by calling the addRewardMultiplier function applying the daily yield, changing the value of the rewardMultiplier.
Below is an example of how the rewardMultiplier and the addRewardMultiplier work together (note that USDM contract runs on an 18-digit standard, but those have been simplified for this example). The rewardMultiplier starts at one and is increased by the addRewardMultiplier function on a daily basis.
The column shows the value of the rewardMultiplier sent to the addRewardMultiplier function and the resulting ongoing state of rewardMultiplier.
Day
rewardMultiplier
addRewardMultiplier
0
1
0.000080986
1
1.000080986
0.000080993
2
1.000161979
0.000081000
3
1.000242979
0.000081006
4
1.000323985
0.000081012
5
1.000404997
6
...

Other notable function mentions

  • transfer: The transfer function works like any other ERC20. Note that the transferred amount will be USDM, not shares. This will match the user expected behavior, by sending balanceOf and not Shares.
  • rewardMultiplier: Allows developers to read the cumulative yield accrued since the beginning of the contract. Note that past does not predict future. The Secured Overnight Funding Rate is usually a better proxy to USDM yield than historic values.
  • totalShares: This function returns the total number of shares in circulation. Note that this number will be different from the total USDM in circulation, as this does not account for the yield component embedded in the rewardMultiplier.
  • totalSupply: This function returns the total number of USDM in circulation. totalSupply is calculated by applying the rewardMultiplier to the totalShares.

Dependencies

The USDM contract builds on top of widely used battle-tested components:
  • IERC20Upgradeable.sol
  • OwnableUpgradeable.sol
  • AccessControlUpgradeable.sol
  • PausableUpgradeable.sol
  • SafeMathUpgradeable.sol
  • UUPSUpgradeable.sol
  • CountersUpgradeable.sol
  • EIP712Upgradeable.sol
  • IERC20PermitUpgradeable.sol
  • ECDSAUpgradeable.sol

wUSDM

Rebasing tokens have known integration challenges with protocols that assume constant balanceOf for tokens (such as Uniswap, 1Inch and Sushiswap). This can lead to daily rewards being captured by players other than the USDM holders in protocols. The stETH issuer, Lido, has documented this phenomenon here.
To solve this problem, and ensure USDM holders have full compatibility with DeFi without giving up their rewards, the Mountain Protocol team will build a wrapper on USDM which will be called wUSDM. Such wrapper will be very similar to Lido's wstETH, a product that is already familiar to the digital asset ecosystem.
This wrapper has not yet being published, beware of scammers attempting to create fake impersonations of USDM or wUSDM. Always refer to documentation for the accurate contract addresses.