Skip to main content

Isolated Stake

Isolated stake is a validator-specific staking position inside shMonad. Instead of joining the pooled shMON vault, you choose a specific validator and receive validator-specific shares called vShares.

This is different from shMON. shMON is pooled across the validator set. Isolated stake is economically separated from pooled shMON and tracks one validator's isolated assets, rewards, and exits.

info

Most users should use shMON unless they specifically want validator-specific exposure. Isolated stake is more specialized and has different liquidity and exit behavior.

Key Facts at a Glance​

Position typeValidator-specific vShares, not pooled shMON.
Deposit targetOne active validator.
Minimum depositMust meet the protocol's minimum validator deposit.
RewardsAttributed to the isolated position for that validator, not pooled shMON.
LiquidityNot an ERC-20 token. Use isolated unstake and completion flows.
Risk profileDirect validator exposure instead of pooled validator-set exposure.

How Isolated Stake Works​

  1. Choose a validator: You deposit MON for a specific active validator.
  2. Receive vShares: The protocol mints validator-specific vShares based on that validator's isolated equity.
  3. Stake is delegated: The MON is delegated through Monad's staking precompile for that validator.
  4. Rewards stay isolated: Rewards attributed to the isolated position increase that validator's isolated equity.
  5. Exit separately: You burn vShares into an isolated unstake request, then complete once the isolated assets are available.

Newly added validators may not accept isolated deposits immediately. The validator must first complete a shMonad validator accounting roll so reward snapshots are ready.

Isolated Stake vs shMON​

FeatureshMONIsolated Stake
ExposurePooled validator setOne validator
TokenERC-20 shMONValidator-specific vShares
TransferableYesNo standard ERC-20 transfer
RewardsPooled into shMON exchange rateAttributed to validator-local isolated equity
UnstakingAtomic or traditional shMON unstakingIsolated unstake flow
Best forGeneral liquid stakingValidator-specific strategies

Unstaking Isolated Stake​

When you request an isolated unstake:

  • Your vShares are burned immediately.
  • The MON amount is fixed at request time.
  • The request becomes a validator-specific payable amount.
  • Later rewards belong to remaining vShare holders, not to already-requested exits.
  • Completion may be immediate if the validator has enough isolated idle assets.
  • Otherwise, the request waits for the validator-specific isolated withdrawal process.

Only one native isolated withdrawal can be pending for a validator at a time. Multiple users can have isolated exit requests, but validator-side withdrawal processing is serialized for that validator.

Multiple requests from the same account for the same validator merge into one request, retaining the combined MON amount and the latest required completion epoch.

Completion normally pays the fixed request amount. A final request may settle with a shortfall of less than 1 gwei when no isolated shares or stake remain and only native staking dust prevents full settlement. The CompleteUnstakeIsolated event records the amount actually paid, and IsolatedRedemptionDustWrittenOff records any dust adjustment.

Deactivated Validators​

If a validator is deactivated, isolated stake does not automatically move to another validator. Instead, the isolated position unwinds for that validator.

Once the validator's isolated assets are fully idle and no senior isolated unstake requests remain, holders can claim deactivated isolated shares directly.

For Integrations​

The main isolated-stake entrypoints are on ShMonad:

interface IShMonadIsolatedStake {
function depositIsolated(uint64 validatorId, uint256 assets, address receiver)
external
payable
returns (uint256 vShares);

function previewDepositIsolated(uint64 validatorId, uint256 assets)
external
view
returns (uint256 vShares);

function previewRedeemIsolated(uint64 validatorId, uint256 vShares)
external
view
returns (uint256 assets);

function balanceOfIsolated(uint64 validatorId, address account)
external
view
returns (uint256 vShares);

function totalSupplyIsolated(uint64 validatorId)
external
view
returns (uint256 totalVShares);

function requestUnstakeIsolated(uint64 validatorId, uint256 vShares)
external
returns (uint64 completionEpoch);

function completeUnstakeIsolated(uint64 validatorId) external;

function completeUnstakeIsolatedFor(uint64 validatorId, address account)
external
returns (uint256 amountMon);

function claimDeactivatedIsolated(uint64 validatorId, uint256 vShares, address receiver)
external
returns (uint256 amountMon);

function claimDeactivatedIsolatedFor(uint64 validatorId, uint256 vShares, address account)
external
returns (uint256 amountMon);
}

Useful views for reconciliation:

interface IShMonadIsolatedViews {
function getIsolatedTotals()
external
view
returns (
uint128 totalAssets,
uint128 liquidAssets,
uint128 idleAssets,
uint128 totalAssetsLast,
uint128 liquidAssetsLast
);

function getIsolatedValidatorState(uint64 validatorId)
external
view
returns (
uint120 activeStake,
uint120 pendingStake,
uint120 pendingUnstake,
uint120 queuedRestake,
uint120 queuedUnstake,
uint120 idleAssets,
uint120 redemptionsPayable,
uint120 snapshotPooledStake,
uint120 snapshotIsolatedStake,
uint8 pooledWithdrawalCursor,
uint8 isolatedWithdrawalCursor,
uint8 isolatedWithdrawalId,
bool isolatedWithdrawalPending
);

function getIsolatedUnstakeRequest(address account, uint64 validatorId)
external
view
returns (uint128 amountMon, uint64 completionEpoch);

function getIsolatedUnstakeRequestCount(uint64 validatorId)
external
view
returns (uint32 requestCount);
}

Integration notes:

  • previewDepositIsolated can return zero; a state-changing deposit that would mint zero vShares reverts.
  • previewRedeemIsolated is a value quote, not a complete admissibility check for every request constraint.
  • A partial isolated unstake must leave either zero remaining isolated shares or a remaining position worth at least the minimum validator deposit.
  • Anyone can call completeUnstakeIsolatedFor or claimDeactivatedIsolatedFor once settlement is available. These functions always pay the original owner, even if that owner planned to choose a different receiver through claimDeactivatedIsolated.
  • A contract receiving vShares must be able to transfer native MON from its own balance. Permissionless finalizers can force-send MON if a normal transfer fails; a payable receive function alone is not enough to recover those funds later.
  • Index DepositIsolated, RequestUnstakeIsolated, CompleteUnstakeIsolated, ClaimDeactivatedIsolated, IsolatedRedemptionDustWrittenOff, ValidatorIsolatedWithdrawalRequested, ValidatorIsolatedWithdrawalCompleted, and IsolatedRewardsQueued events.