Fully On-Chain Stake Allocation
shMonad's validator selection and stake allocation system operates entirely on-chain. There are no off-chain bots, no governance votes on individual validators, and no manual intervention required.
How On-Chain Allocation Works
Every epoch, the protocol automatically:
- Measures validator performance: Tracks staking yield and non-staking revenue in separate buckets
- Calculates allocations: Uses a deterministic formula to decide how much stake each validator should receive
- Snapshots the round: Caches the active-set denominator and scoring parameters before validator-by-validator changes begin
- Executes changes: Automatically adds or removes stake from each validator to match targets
- Adjusts for availability: Accounts for validators that are joining, leaving, unavailable, or constrained by unstake capacity
All of this happens deterministically -anyone can verify the exact allocation by reading the contract state and applying the same formula.
What Changed in v1.2
v1.2 makes allocation more explicit and harder to game:
- Split revenue signals: Staking yield and non-staking revenue are tracked separately for allocation.
- Deadbanded staking yield: A configurable floor filters out most yield a validator is expected to earn simply because it already has stake.
- Non-staking revenue multiplier: MEV, priority-fee donations, and other boost-style revenue receive a configurable multiplier in allocation scoring.
- Turnover routing: Incentive-alignment turnover is tracked separately from user withdrawal demand.
- Round snapshots: Allocation parameters and totals are cached before validator cranking, so all validators in the same round use the same denominator.
The Permissionless Execution System
The allocation calculations don't happen automatically with each block. Instead, anyone can call the "crank" function to process the next epoch's accounting:
- Global crank: Processes overall protocol state and calculates total amounts to stake or unstake
- Validator cranks: Process each individual validator's allocation changes
This permissionless system means:
- Anyone can execute the cranks (no special privileges required)
- The timing of when cranks execute doesn't change scoring parameters for an already-snapshotted round
- If
crank()returnsfalse, more crank work remains; if it returnstrue, that pass is complete
Verifiable by Anyone
Because everything happens on-chain:
- You can read the smart contract to understand the allocation formula
- You can query current and historical allocations at any time
- You can verify that allocations match the formula
- You can see exactly which validators are receiving stake and why
This transparency is fundamental to shMonad's design. The protocol doesn't require trust in off-chain processes or central authorities -all operations can be independently verified.
This fully on-chain approach is enabled by Monad's high-performance execution environment, which makes on-chain stake allocation computationally feasible.
Benefits for Users
On-chain allocation provides several advantages:
Capital Efficiency: In-flight capital (such as unpaid MEV revenue) can be used to bridge gaps between staking and unstaking operations
No governance attacks: Malicious actors can't manipulate governance to direct stake to their preferred validators
Immediate response: The system adapts to validator performance changes automatically each epoch
Censorship resistance: No central party can block specific validators from receiving stake
Predictability: The deterministic formula means you can predict future allocations based on current performance data