gmMITO
Auto-Compounding Governance Vault
ERC4626 Vault that accepts govMITO and issues gmMITO shares.


Basic Info
| Field | Value |
|---|---|
| Standard | ERC4626 |
| Underlying Asset | govMITO |
| Share Token | gmMITO |
| Withdrawal Wait | 14 days |
Mechanism
Share Calculation
Follows ERC4626 standard:
shares = assets × totalSupply / totalAssets
assets = shares × totalAssets / totalSupplytotalAssets: Total govMITO held by VaulttotalSupply: Total gmMITO issued
Deposit
- User deposits govMITO to Vault
- Vault mints gmMITO shares at current exchange rate
- Vault stakes received govMITO with validators
Example:
├─ Vault state: 1000 govMITO, 1000 gmMITO issued
├─ User deposits 100 govMITO
└─ User receives: 100 × 1000 / 1000 = 100 gmMITOClaiming Rewards (userMint)
Users/operators receive validator rewards as gmMITO:
- User calls
userMint(validators[], recipient) - gmMITO Vault claims user's govMITO rewards from
ValidatorRewardDistributor - Claimed govMITO deposited into Vault
- 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 govMITOWithdrawal (Withdraw/Redeem)
- User requests withdrawal (gmMITO burned)
- WithdrawalNFT minted (includes amount and maturity)
- Wait 14 days
- After maturity, burn NFT and receive govMITO
Validator Distribution
Vault distributes govMITO across multiple validators:
lastStakeValidatorIndex: Next validator index for stakinglastUnstakeValidatorIndex: 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
| Contract | Purpose |
|---|---|
GOV_MITO | Underlying asset (govMITO) |
REWARD_DISTRIBUTOR | Reward distributor |
VALIDATOR_STAKING | Staking contract |
VALIDATOR_MANAGER | Validator list management |
WITHDRAWAL_NFT | Withdrawal NFT contract |