Inputs
The calculation draws on several sources:| Source | Parameter | Role |
|---|---|---|
| Operator setting | stake | Fixed stake amount (TON). When set, overrides percentage-based calculation. |
| Operator setting | stakePercent | Percentage of balance to stake. Defaults to 100 when unset. |
| Wallet state | balance | Current TON balance of the staking account (validator wallet, pool, or controller). |
| Validator console | Active validator count | Number of validators currently running on this node. Determines whether the node is new or already participating. |
| On-chain config #17 | minStake | Network minimum stake. Submissions below this value are rejected by the elector. |
| On-chain config #17 | maxStake | Network maximum stake. Submissions above this value are clamped. |
| Node configuration | Staking mode | Whether the node uses a nominator pool, single nominator pool, liquid staking controller, or direct staking. |
stake and stakePercent with the set command:
get stake or get stakePercent.
How the priority cascade works
MyTonCtrl evaluates stake sources in a fixed priority order. The first rule that produces a value wins; later rules are skipped.Priority 1: Saved fixed stake
If the operator previously ranset stake <VALUE>, MyTonCtrl uses that stored amount directly. No additional fee reserve is subtracted at this stage; the value passes straight to the validation guards.
Priority 2: Nominator pool mode
When the node operates through a standard nominator pool (not a single nominator pool), MyTonCtrl sets:Priority 3: Liquid staking controller mode
When the node uses a liquid staking controller, MyTonCtrl sets:Priority 4: Percentage-based calculation (default)
If none of the above rules produce a value, MyTonCtrl falls back to percentage-based calculation usingstakePercent. This is the most common path for single nominator pools and direct staking.
The logic depends on whether the node already has active validators:
-
New validator (no active validators):
The balance is halved. This solves a cold-start problem: on the first election, the elector locks the entire stake for a full validation round. By staking only half, the node keeps the other half available for the next election, which opens before the current round ends. Without halving, a new validator would be locked out of alternating rounds. Exception: if halving produces a value below
minStake, MyTonCtrl abandons the halving and stakes the full percentage instead. Participating in one round is better than being rejected by the elector for staking too little. -
Existing validator (active validators present):
No halving is needed. The returning stake from the previous round replenishes the balance in time for the next election. Fee deduction at 100%: when
stakePercentis exactly100, MyTonCtrl subtracts 20 TON from the result to prevent draining the wallet completely. At lower percentages, the non-staked remainder covers fees implicitly.
Validation guards
After the stake amount is determined, three sequential checks run regardless of which priority rule produced the value:| Check | Condition | Action |
|---|---|---|
| Maximum stake | stake > maxStake | Clamps stake down to maxStake. Logs a warning. Election entry continues. |
| Minimum stake | stake < minStake | Raises an error. Election entry is aborted. |
| Insufficient balance | stake > balance | Raises an error. Election entry is aborted. |
Safety reserves by mode
Each staking mode reserves a different amount for transaction fees:| Mode | Reserve (TON) | Reason |
|---|---|---|
| Saved fixed stake | 0 | The stored value is used as-is; only validation guards apply. |
| Nominator pool | 20 | Multiple messages for pool lifecycle operations. |
| Liquid staking controller | 50 | Complex multi-step DeFi transactions. |
| Percentage at 100% (default mode) | 20 | General safety margin when no non-staked remainder exists. |
Examples
New validator with 800,000 TON balance
Settings:stakePercent = 99, no fixed stake, single nominator pool mode.
- No saved fixed stake, not a standard nominator pool, not a controller.
- Falls through to percentage-based calculation (Priority 4).
- No active validators detected (new node): halving applies.
stake = 800,000 * 99 / 100 / 2 = 396,000.396,000 > minStake(300,000): halving is kept.- Result: 396,000 TON is submitted. The remaining balance covers the next election.
Returning validator with 1,600,000 TON balance
Settings:stakePercent = 99, single nominator pool mode, already validating.
- Falls through to percentage-based calculation.
- Active validators present: no halving.
stake = 1,600,000 * 99 / 100 = 1,584,000.- Result: 1,584,000 TON is submitted.
New validator with exactly 600,100 TON (near minimum)
Settings:stakePercent = 100, single nominator pool mode.
- Falls through to percentage-based calculation.
- No active validators: halving would give
600,100 / 2 = 300,050. 300,050 > minStake(300,000): halving is kept.stakePercent == 100: 20 TON fee deduction applies:300,050 - 20 = 300,030.- Result: 300,030 TON is submitted.
New validator with exactly 500,000 TON (halving would go below minimum)
Settings:stakePercent = 100, single nominator pool mode.
- Falls through to percentage-based calculation.
- No active validators: halving would give
500,000 / 2 = 250,000. 250,000 < minStake(300,000): halving is abandoned.- Full percentage is used:
500,000. stakePercent == 100: 20 TON fee deduction:500,000 - 20 = 499,980.- Result: 499,980 TON is submitted.
Nominator pool with 2,000,000 TON balance
Settings: standard nominator pool mode (not single nominator).- Pool mode detected (Priority 2).
stake = 2,000,000 - 20 = 1,999,980.- Result: 1,999,980 TON is submitted.
See also
- Staking overview — comparison of staking solutions and minimum requirements.
- Run a validator — step-by-step guide for setting optimal stake.
- MyTonCtrl settings — full list of configurable parameters including
stakeandstakePercent. - Single nominator pools — recommended staking contract for large holders.