Skip to content

mMITOs

Safe Staking Vault with 1:1 Exchange Rate

Staking Vault that accepts tMITO and issues mMITOs tokens 1:1.

mMITOsmMITOs

Basic Info

FieldValue
StandardERC20 (not ERC4626)
Underlying AssettMITO
TokenmMITOs
Exchange RateFixed 1:1
Withdrawal Wait7 days
Slashing ExposureNone (principal safe)

Mechanism

Difference from mMITOc

mMITOcmMITOs
StandardERC4626ERC20
Exchange RateVariableFixed 1:1
SlashingPrincipal lossPrincipal safe
Underlying AssetWMITOtMITO

Staking

function stake(address validator, uint256 amount) external
  1. User specifies validator and tMITO amount
  2. Vault delegates tMITO to TMITO_STAKING
  3. Mints equal amount of mMITOs to user
stake(validatorA, 100 tMITO)
→ validatorStake[validatorA] += 100
→ totalStaked += 100
→ mint(user, 100 mMITOs)

Reward Distribution

Reward flow:

ValidatorStaking → ValidatorRewardDistributor → gmMITO Vault → gmMITO to user

Users call gmMITO.userMint(validators[], recipient) to claim rewards.

mMITOs Vault also has internal reward tracking structure:

struct RewardState {
  uint256 rewardPerShareStored;
  mapping(address => uint256) userRewardPerSharePaid;
  mapping(address => uint256) rewards;
}

Reward calculation:

earned = balanceOf(user) × (rewardPerShareStored - userRewardPerSharePaid[user])

Unstaking (requestUnstake)

function requestUnstake(address validator, uint256 amount) external
  1. User specifies validator and amount
  2. mMITOs burned
  3. WithdrawalNFT minted
  4. Unstaking requested to TMITO_STAKING

Claim Withdrawals

function claimWithdrawals(uint256[] tokenIds, address validator) external
  1. Verify 7 days passed
  2. Burn WithdrawalNFT
  3. Transfer tMITO to user

State Variables

struct Storage {
  uint32 withdrawalPeriod;
  uint16 maxClaimsPerTx;
  StakingState stakingState;
  RewardState rewardState;
}
 
struct StakingState {
  uint256 totalStaked;  // Total staked tMITO
  mapping(address validator => uint256) validatorStake;  // Stake per validator
}

Validator Selection

Users choose validators when staking:

  • Check each validator's commission rate and uptime
  • Validator performance affects rewards (principal unaffected)

Integrated Contracts

ContractPurpose
TMITOUnderlying asset (tMITO)
WMITOUsed for reward claims
GM_MITOReward token (gmMITO)
VALIDATOR_MANAGERValidator list
TMITO_STAKINGActual staking execution
REWARD_DISTRIBUTORReward distribution
WITHDRAWAL_NFTWithdrawal NFT

Risks