Skip to main content

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:

  1. Measures validator performance: Tracks staking yield and non-staking revenue in separate buckets
  2. Calculates allocations: Uses a deterministic formula to decide how much stake each validator should receive
  3. Snapshots the round: Caches the active-set denominator and scoring parameters before validator-by-validator changes begin
  4. Executes changes: Automatically adds or removes stake from each validator to match targets
  5. 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() returns false, more crank work remains; if it returns true, 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