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.
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 type | Validator-specific vShares, not pooled shMON. |
| Deposit target | One active validator. |
| Minimum deposit | Must meet the protocol's minimum validator deposit. |
| Rewards | Attributed to the isolated position for that validator, not pooled shMON. |
| Liquidity | Not an ERC-20 token. Use isolated unstake and completion flows. |
| Risk profile | Direct validator exposure instead of pooled validator-set exposure. |
How Isolated Stake Works
- Choose a validator: You deposit MON for a specific active validator.
- Receive vShares: The protocol mints validator-specific vShares based on that validator's isolated equity.
- Stake is delegated: The MON is delegated through Monad's staking precompile for that validator.
- Rewards stay isolated: Rewards attributed to the isolated position increase that validator's isolated equity.
- 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
| Feature | shMON | Isolated Stake |
|---|---|---|
| Exposure | Pooled validator set | One validator |
| Token | ERC-20 shMON | Validator-specific vShares |
| Transferable | Yes | No standard ERC-20 transfer |
| Rewards | Pooled into shMON exchange rate | Attributed to validator-local isolated equity |
| Unstaking | Atomic or traditional shMON unstaking | Isolated unstake flow |
| Best for | General liquid staking | Validator-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:
previewDepositIsolatedcan return zero; a state-changing deposit that would mint zero vShares reverts.previewRedeemIsolatedis 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
completeUnstakeIsolatedFororclaimDeactivatedIsolatedForonce settlement is available. These functions always pay the original owner, even if that owner planned to choose a different receiver throughclaimDeactivatedIsolated. - 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, andIsolatedRewardsQueuedevents.