Skip to main content
MyTonCtrl automatically calculates the stake amount before submitting an election entry. The calculation balances operator preferences, staking mode, network-imposed limits, and fee reserves to produce a single integer value (in TON) sent to the elector contract.

Inputs

The calculation draws on several sources:
SourceParameterRole
Operator settingstakeFixed stake amount (TON). When set, overrides percentage-based calculation.
Operator settingstakePercentPercentage of balance to stake. Defaults to 100 when unset.
Wallet statebalanceCurrent TON balance of the staking account (validator wallet, pool, or controller).
Validator consoleActive validator countNumber of validators currently running on this node. Determines whether the node is new or already participating.
On-chain config #17minStakeNetwork minimum stake. Submissions below this value are rejected by the elector.
On-chain config #17maxStakeNetwork maximum stake. Submissions above this value are clamped.
Node configurationStaking modeWhether the node uses a nominator pool, single nominator pool, liquid staking controller, or direct staking.
Configure stake and stakePercent with the set command:
set stake 500000
set stakePercent 99
Retrieve current values with 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 ran set 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:
stake = balance - 20
The 20 TON reserve covers the higher fee overhead of pool operations (deploy, process, and distribute messages).

Priority 3: Liquid staking controller mode

When the node uses a liquid staking controller, MyTonCtrl sets:
stake = balance - 50
The 50 TON reserve is the largest of all modes. Liquid staking controllers perform complex multi-step transactions (minting, burning, and balance adjustments), requiring a bigger fee cushion.

Priority 4: Percentage-based calculation (default)

If none of the above rules produce a value, MyTonCtrl falls back to percentage-based calculation using stakePercent. 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):
    stake = balance * stakePercent / 100 / 2
    
    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):
    stake = balance * stakePercent / 100
    
    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 stakePercent is exactly 100, 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:
CheckConditionAction
Maximum stakestake > maxStakeClamps stake down to maxStake. Logs a warning. Election entry continues.
Minimum stakestake < minStakeRaises an error. Election entry is aborted.
Insufficient balancestake > balanceRaises an error. Election entry is aborted.
The asymmetry is intentional. Exceeding the maximum is recoverable — MyTonCtrl clamps and continues. Falling below the minimum or exceeding the available balance would waste transaction fees on a doomed submission, so MyTonCtrl aborts instead.

Safety reserves by mode

Each staking mode reserves a different amount for transaction fees:
ModeReserve (TON)Reason
Saved fixed stake0The stored value is used as-is; only validation guards apply.
Nominator pool20Multiple messages for pool lifecycle operations.
Liquid staking controller50Complex multi-step DeFi transactions.
Percentage at 100% (default mode)20General 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.
  1. No saved fixed stake, not a standard nominator pool, not a controller.
  2. Falls through to percentage-based calculation (Priority 4).
  3. No active validators detected (new node): halving applies.
  4. stake = 800,000 * 99 / 100 / 2 = 396,000.
  5. 396,000 > minStake (300,000): halving is kept.
  6. 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.
  1. Falls through to percentage-based calculation.
  2. Active validators present: no halving.
  3. stake = 1,600,000 * 99 / 100 = 1,584,000.
  4. Result: 1,584,000 TON is submitted.

New validator with exactly 600,100 TON (near minimum)

Settings: stakePercent = 100, single nominator pool mode.
  1. Falls through to percentage-based calculation.
  2. No active validators: halving would give 600,100 / 2 = 300,050.
  3. 300,050 > minStake (300,000): halving is kept.
  4. stakePercent == 100: 20 TON fee deduction applies: 300,050 - 20 = 300,030.
  5. 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.
  1. Falls through to percentage-based calculation.
  2. No active validators: halving would give 500,000 / 2 = 250,000.
  3. 250,000 < minStake (300,000): halving is abandoned.
  4. Full percentage is used: 500,000.
  5. stakePercent == 100: 20 TON fee deduction: 500,000 - 20 = 499,980.
  6. Result: 499,980 TON is submitted.

Nominator pool with 2,000,000 TON balance

Settings: standard nominator pool mode (not single nominator).
  1. Pool mode detected (Priority 2).
  2. stake = 2,000,000 - 20 = 1,999,980.
  3. Result: 1,999,980 TON is submitted.

See also