Skip to main content

warmup && cooldown

delegate后的stake不会立即effective。它们必须先经过一段warmup期。在此期间,部分 stake 被视为"effective",其余部分被视为"activating"。变更发生在epoch边界。

stake program将变化率限制为total network stake,这反映在stake program中config::warmup_rate (在当前实施中设置为每个时期 25%)。

// means that no more than RATE of current effective stake may be added or subtracted per
// epoch

pub const DEFAULT_WARMUP_COOLDOWN_RATE: f64 = 0.25;
pub const NEW_WARMUP_COOLDOWN_RATE: f64 = 0.09;

pub fn warmup_cooldown_rate(current_epoch: Epoch, new_rate_activation_epoch: Option<Epoch>) -> f64 {
if current_epoch < new_rate_activation_epoch.unwrap_or(u64::MAX) {
DEFAULT_WARMUP_COOLDOWN_RATE
} else {
NEW_WARMUP_COOLDOWN_RATE
}
}

每个epoch可以warmup的stake量取决于前一个ecpo的total effective stake、total activating stake以及 stake program's configured warmup rate。

cooldown的工作原理相同。一旦stake 被 deactivated,其中的一部分将被视为"effective",同时也被视为"deactivating"。随着stake的cool down,它将继续获得rewards并受到slashing,但它也可以被withdrawal。

Bootstrap stakes不需warmup。

rewards 是根据该epoch 的"effective" portion of the stake 支付的。

warmup 示例

考虑在第 N 个epoch activate了 1,000 个单一stake的情况,网络warmup rate为 20%,并且在第 N 个epoch 的quiescent total network stake为 2,000。

在epoch N+1 时,可供网络激活的数量为 400 (2000 的 20% ),而在epoch N,此示例stake是唯一activated的stake,因此有权使用所有可用的warmup room。

epocheffectiveactivatingtotal effectivetotal activating
N-12,0000
N01,0002,0001,000
N+14006002,400600
N+28801202,880120
N+3100003,0000

如果在epoch N 激活 2 个stake(X 和 Y ),则他们将按stake比例获得 20% 的一部分。在每个epoch,每个stake的 effective 和 activating 取决于前一个epoch的state。

epochX effX actY effY acttotal effectivetotal activating
N-12,000 0
N01,00002002,001,200
N+1333667671332,4800
N+2733267146542,321
N+310000200030

提取 withdraw

任何时候都只能withdraw 超过 effective + activating stake 的 Lamport。

这意味着在warmup期间,实际上不能提取任何stake。

在cooldown期间,可以提取超过effective stake的任何token (activating == 0 )。

由于获得的rewards会自动添加到stake中,因此通常只有在deactivation后才可以withdraw。