2024年7月9日星期二

W3F 研究科学家提交「解绑队列」RFC,将大大降低 DOT 的解绑期!

加入 PolkaWorld 社区,共建 Web 3.0!

这份 RFC 提议为锁定在中继链上的质押代币(DOT/KSM)引入一种灵活的解绑机制,旨在提高用户便利性,同时不影响系统安全性。https://github.com/polkadot-fellows/RFCs/pull/97


在 Polkadot 中,当代币被质押时,它们被锁定以确保 Polkadot 能够惩罚那些行为不端的验证者。这种惩罚机制被称为"削减"(slashing),即扣除部分质押代币,以维护网络的安全和稳定。如果改变了质押代币的锁定期(即解绑期),我们也需要确保 Polkadot 仍然有能力削减足够数量的代币来遏制验证者的不当行为。这意味着并非所有质押的代币都可以立即解绑,但我们仍可以允许部分代币快速解绑


新机制通过排队处理新的解绑请求,并根据队列的大小(即等待解绑的请求数量)来调整解绑时间。这种方法将显著减少用户的平均解绑时间。当队列相对空闲时,请求的执行时间最少为 2 天。如果排队请求的总额(按质押量计算)超过某个阈值,解绑时间最长为 28 天。在这两个极端值(2 天和 28 天)之间的情况,解绑时间会根据队列的大小按比例调整。新机制的解绑时间不会超过当前固定的 28 天。


注意:我们的提议仅关注质押产生的锁定,其他锁定(如治理)保持不变。此外,新机制和 FastUnstake 功能也不同。FastUnstake 功能是一种现有的功能,专门针对那些长时间未获得质押奖励的代币,允许用户立即解绑这些代币。而新机制是为一般的解绑请求设计的,通过动态调整解绑时间来提高效率。


为了评估其有效性和稳定性,我们建议先在 Kusama 上实施和测试该模型,然后再考虑将其集成到 Polkadot 中,并对参数进行适当调整。但本文的讨论是基于 Polkadot 的!



动机


在所有权益证明(Proof-of-Stake)协议中,Polkadot 的解绑期是最长的,因为安全是最重要的目标。与其他协议相比,质押在 Polkadot 上仍具吸引力,因为其质押年化收益率(APY)高于平均水平。然而,长时间的解绑期影响了用户参与的积极性,这阻碍了希望为网络安全做出贡献的潜在参与者。


由于解绑期过长,执行一些基本任务会变得更加昂贵和困难,例如重组/整合其 stash 账户或更新其私钥等。那些需要更高流动性的用户也会因为无法快速解绑代币而受到限制,从而减少他们参与质押的意愿。


由于长时间的解绑期和高回报率的结合,导致了流动性质押的兴起。流动性质押指的是平行链或中心化交易所允许用户在 28 天的解绑期结束前获得质押代币,这些代币可以是原始的 DOT/KSM 代币,也可以是衍生代币。如果参与流动性质押的代币数量较少,流动性质押是无害的。然而,如果涉及大量 DOT 代币,可能会导致少数实体控制大量验证者,从而引发中心化的问题(详见流动性质押的威胁讨论:https://dexola.medium.com/is-ethereum-about-to-get-crushed-by-liquid-staking-30652df9ec46)。这也增加了网络被攻击的风险。


PolkaWorld 注:但这里需要说明的是,在 Polkadot 生态中,目前 Bifrost 作为最大的 DOT Liquid Staking 协议已经从机制上避免了这个问题,首先 Bifrost 协议限制了 DOT 质押上限不超过 DOT 总质押量的 33%,避免对 Polkadot 共识安全产生隐患,同时 Bifrost DOT 质押直接在中继链完成,并对验证人通过算法筛选 + 治理干预的双重机制进行,不会出现传统 Liquid Staking 协议存在的验证人选择中心化的问题。


这个新机制在保持足够安全的同时,将大大提高 Polkadot 的竞争力



Polkadot 为什么要设置 28 天解绑期?


Polkadot 设置 28 天解绑期的原因,这是为了防止长时间范围攻击(LRA),即当超过 1/3 的验证者勾结时,用户可能会被误导信任已不再活跃的验证者,从而同步到恶意的区块链分叉上。通过使用不超过 28 天的可信检查点来缓解 LRA,新节点从检查点开始同步,并寻找由 2/3 验证者签名的区块最终性证明。如果在当前 28 天的解绑期内检测到 LRA,就可以发现超过 1/3 验证者的不当行为。


简单的一个解释,比如有些守卫(验证者)负责保护城堡(区块链),如果有三分之一的守卫叛变,他们可能会欺骗人们(用户),让他们相信城堡还是安全的,但其实已经有坏人控制了部分城堡。为了防止这种情况发生,我们设立了一个规则,所有守卫每隔 28 天必须报告一次他们的情况,这样就可以发现那些叛变的守卫。所以,28 天的规则是为了确保城堡不被坏人控制,而新的快速解绑的规则让用户能更快拿回钱,同时不影响安全。



如何减少解锁期?


当用户(提名者或验证者)决定解绑其代币时,这些代币不会立即可用。相反,它们会进入解绑队列。以下说明展示了队列的工作原理。


假设用户想解绑其部分质押,表示为 new_unbonding_stake。我们还设定了一个变量 max_unstake,max_unstake 变量的作用是限制在特定时间内可以提前解绑的代币数量。具体来说,它跟踪允许在少于 28 个时期(在 Polkadot 上为 28 天,在 Kusama 上为 7 天)内解绑的质押数量。这个变量确保了即使在快速解绑机制下,也不会有过多的代币同时被解锁,从而维持网络的稳定性和安全性。


为了计算 max_unstake,我们记录每个时期中用于支持 1/3 验证者的最低质押量。我们存储过去 28 个时期的数据,并将这些数据中的最小值设为 min_lowest_third_stake。max_unstake 通过 MIN_SLASHABLE_SHARE 乘以 min_lowest_third_stake 计算得出。此外,我们还可以使用 UPPER_BOUND 和 LOWER_BOUND 作为变量来调整队列中的解绑时间。


任何时候我们都会存储 back_of_unbonding_queue_block_number,表示所有现有解绑者解绑时的区块号。


假设用户想解绑部分质押,即 new_unbonding_stake,并在任意区块号 current_block 提出请求。那么:


unbonding_time_delta = new_unbonding_stake / max_unstake * UPPER_BOUND


在不低于 current_block + LOWER_BOUND 或超过 current_block + UPPER_BOUND 的条件下,该数值需要加到 back_of_unbonding_queue_block_number 上。


back_of_unbonding_queue_block_number = max(current_block_number, back_of_unbonding_queue_block_number) + unbonding_time_delta


这决定了用户解绑代币的区块号,确保其在 LOWER_BOUND 和 UPPER_BOUND 的范围内


unbonding_block_number = min(UPPER_BOUND, max(back_of_unbonding_queue_block_number - current_block_number, LOWER_BOUND)) + current_block_number


最终,用户的代币在 unbonding_block_number 区块解绑。



建议参数


有一些常数需要外部设置。它们可以讨论,但我们提出以下建议:


  • MIN_SLASHABLE_SHARE:1/2 - 这是任何时候支持最低 1/3 验证者的质押比例。它在安全性和解绑时间之间提供了折衷。半数是一个合理的选择。这里有足够的质押可以削减,同时允许较短的平均解绑时间。


  • LOWER_BOUND:28800 个区块(或 2 个时期):此值表示任何质押的最短解绑时间为 2 天。


  • UPPER_BOUND:403200 个区块(或 28 个时期):此值表示用户面临的最长解绑时间。等于当前的解绑时间,大家应该都比较熟悉这个时间了。



重新质押


选择解绑的用户可能希望取消其请求并重新质押。这不会带来安全损失,但上述方案可能意味着大量解绑增加了队列中其他用户的解绑时间。然而,当大量质押重新质押时,队列中后来的参与者前移,能够比原预计更快解绑。不过,这需要用户额外的外部输入。


因此,我们应该将 unbonding_time_delta 与解绑账户一起存储。如果其在仍然解绑时重新质押,那么此值应从 back_of_unbonding_queue_block_number 中减去。因此,解绑和重新质押不会影响此数字。请注意,我们必须存储 unbonding_time_delta,因为在后续时期 max_unstake 可能会改变,我们无法重新计算它。



模拟分析


我们可以使用提议的解绑队列计算方法和推荐参数,来模拟 Polkadot 历史上的解绑队列情况。我们选择按每日进行分析,而不是按每个区块进行分析。


为了模拟解绑队列,我们需要以下数据:


  • 每日最低三分之一验证者支持的总质押量与每日总质押量的比率,这个比率决定了 max_unstake 的值。

  • 每日和新解绑的代币总和。


由于NPoS(Nominated Proof of Stake)算法,第一个数值(最低三分之一验证者支持的总质押量与每日总质押量的比率)只有小幅波动。因此,我们使用一个常数(0.287)作为这个比率的近似值,这个常数是通过对多个实际周期进行抽样确定的。


此外,我们特别感谢 Parity 的数据团队,因为他们的数据基础设施帮助我们进行了这些分析。下图绘制了上述统计数据。



上述图表将两个指标合并为一个图表:


  • 解绑数量:随着时间推移,每日和新解绑代币的数量按 28 天的 y 轴进行缩放。具体来说,它的标准化公式为 daily_unbonded / max(daily_unbonded) * 28。

  • 解绑天数:根据每日解绑历史,计算每日预期的解绑天数。


我们可以观察到,只有在广泛且/或集中解绑的情况下,历史解绑才会触发超过 LOWER_BOUND 的解绑时间。整个时间序列的平均解绑时间约为 2.67 天。然而,我们可以看到,在大规模解绑事件中,解绑时间会增加。在最大事件中,我们达到了 28 天的上限。这让我们确信它足够灵敏,并且将 UPPER_BOUND 与历史上最大的解绑匹配是有意义的。


影响解绑情况的主要参数是 max_unstake。其关系显而易见:减少 max_unstake 会使解绑队列变得更敏感,即在解绑事件中队列会更快、更明显地增加。考虑到这些事件在历史上主要与平行链拍卖有关,我们可以假设,在没有重大系统性事件的情况下,用户将会经历大幅减少的解绑时间。可以使用此仓库重现或更改分析参数。https://github.com/jonasW3F/unbonding_queue_analysis



缺点


1. 较低的 LRA 安全性:毫无疑问,理论上针对长时间范围攻击(LRA)的安全性有所降低。但是,正如我们所论述的那样,这种攻击的成本仍然足够高,足以起到威慑作用,而且这种攻击仍然是理论性的。在这里,收益超过了成本。


2. 大户的恶意干扰:大持有者可能会假装解绑大量代币,以防止其他用户提前退出网络。然而,这样做的成本很高,因为持有者会失去质押奖励。队列影响越大,成本就越高。无论如何,需要注意的是,UPPER_BOUND 仍然是 28 天,这意味着提名者的解绑期不会比当前更长。攻击者没有足够的收益来承受这样的成本。


3. 托管人和流动性质押提供商的挑战:改变解绑时间,尤其是使其灵活化,提供质押衍生品的团队可能会需要重新思考和重新设计他们的产品。


  • PolkaWorld Telegram 群:

    https://t.me/+z7BUktDraU1mNWE1

  • PolkaWorld Youtube 频道:

    https://www.youtube.com/c/PolkaWorld

  • PolkaWorld Twitter:

    @polkaworld_org


更多内容


Polkadot 推出新的 Ledger 应用!在一个应用程序中安全管理整个波卡生态中的数字资产!

回顾波卡这一周,查看 Drama 事件当事人如何回应!

Hydration:充满原生创新的波卡 DEX 龙头

关注 PolkaWorld

发现 Web 3.0 时代新机遇


点个 "在看" 再走吧!

没有评论:

发表评论