Skip to content

gmMITO

Auto-Compounding Governance Vault

ERC4626 Vault that accepts govMITO and issues gmMITO shares.

gmMITOgmMITO

Basic Info

FieldValue
StandardERC4626
Underlying AssetgovMITO
Share TokengmMITO
Withdrawal Wait14 days

Mechanism

Share Calculation

Follows ERC4626 standard:

shares = assets × totalSupply / totalAssets
 
assets = shares × totalAssets / totalSupply
  • totalAssets: Total govMITO held by Vault
  • totalSupply: Total gmMITO issued

Deposit

  1. User deposits govMITO to Vault
  2. Vault mints gmMITO shares at current exchange rate
  3. Vault stakes received govMITO with validators
Example:
├─ Vault state: 1000 govMITO, 1000 gmMITO issued
├─ User deposits 100 govMITO
└─ User receives: 100 × 1000 / 1000 = 100 gmMITO

Claiming Rewards (userMint)

Users/operators receive validator rewards as gmMITO:

  1. User calls userMint(validators[], recipient)
  2. gmMITO Vault claims user's govMITO rewards from ValidatorRewardDistributor
  3. Claimed govMITO deposited into Vault
  4. gmMITO minted to user for that amount

Reward sources:

  • User/operator staking rewards
  • Vault's own govMITO staking rewards

Compounding

The Vault itself earns staking rewards:

Anyone calls compound()

Permissionless function - anyone can trigger it.

Vault claims staking rewards

Rewards collected from validators.

govMITO added to Vault

Claimed rewards deposited into Vault.

No additional gmMITO minted

Key: totalAssets increases, totalSupply unchanged → exchange rate rises

Example:
├─ Before compound: 1000 govMITO, 1000 gmMITO → 1 gmMITO = 1 govMITO
├─ Vault receives 50 govMITO rewards
└─ After compound: 1050 govMITO, 1000 gmMITO → 1 gmMITO = 1.05 govMITO

Withdrawal (Withdraw/Redeem)

  1. User requests withdrawal (gmMITO burned)
  2. WithdrawalNFT minted (includes amount and maturity)
  3. Wait 14 days
  4. After maturity, burn NFT and receive govMITO

Validator Distribution

Vault distributes govMITO across multiple validators:

  • lastStakeValidatorIndex: Next validator index for staking
  • lastUnstakeValidatorIndex: Next validator index for unstaking

Round-robin distribution across validators.

State Variables

struct Storage {
  uint32 withdrawalPeriod;      // Withdrawal wait period (seconds)
  uint16 maxClaimsPerTx;        // Max claims per transaction
  uint128 totalPendingWithdrawal; // Total pending withdrawal amount
  uint8 lastStakeValidatorIndex;
  uint8 lastUnstakeValidatorIndex;
}

Integrated Contracts

ContractPurpose
GOV_MITOUnderlying asset (govMITO)
REWARD_DISTRIBUTORReward distributor
VALIDATOR_STAKINGStaking contract
VALIDATOR_MANAGERValidator list management
WITHDRAWAL_NFTWithdrawal NFT contract

Risks