5 个版本 (主要破坏性更新)
4.0.0 | 2024 年 7 月 18 日 |
---|---|
3.0.0 | 2024 年 7 月 12 日 |
2.0.0 | 2024 年 6 月 21 日 |
1.0.0 | 2024 年 5 月 23 日 |
0.0.0 | 2024 年 5 月 15 日 |
#256 in 魔法豆
每月下载量 2,505
在 7 个 crate 中使用(直接使用 3 个)
2MB
37K SLoC
委托质押模块
本模块实现了sp_staking::DelegationInterface
,为delegators
和agents
提供委托功能。它旨在与StakingInterface
一起使用,并依赖于Config::CoreStaking
提供基本的委托功能。
目前,它没有暴露任何可调用的函数,但设计有未来暴露它们的愿景,以便任何外部账户、链下实体或xcm MultiLocation
(如 parachain 或智能合约)都可以使用。
关键术语
- 代理:接受其他账户的委托并代表他们进行委托资金质押的账户。有时也称为
Delegatee
。 - 委托人:将资金委托给
agent
的账户,并授权他们使用这些资金进行质押。 - 代理账本:一个数据结构,用于存储有关
agent
的重要信息,例如他们接收到的总委托、对他们的任何惩罚等。 - 委托:一个数据结构,存储了
delegator
委托给agent
的资金数量。
目标
直接在质押模块上进行提名扩展性不佳。为了解决这个问题,创建了提名池,将委托人的资金汇集到一个账户中,然后进行质押。但这有一个非常关键的局限性,即资金从委托人账户移动到池账户,因此委托人失去了对资金的控制权,无法用于其他目的,如治理。本模块旨在通过将质押模块扩展到支持一个新的基本功能:将资金委托给agent
进行质押,来解决这个问题。然后,代理可以代表委托人将委托的资金质押到Config::CoreStaking
。
提款管理
代理解押不管理委托人连续提款的顺序。这取决于此模块的消费者来实现,即如何让委托人从Config::CoreStaking
提取不可解押的资金。
奖励和惩罚
本模块不强制执行任何特定的奖励或惩罚应用策略。这由agent
账户决定如何应用奖励和惩罚。
这重要地允许此模块的客户构建自己的奖励/惩罚策略。例如,一个agent
账户可以选择先对奖励池进行惩罚,然后再对委托人进行惩罚。或者部分奖励可以进入一个保险基金,可以用来弥补任何潜在的惩罚。目标是最终允许外国MultiLocations(智能合约或另一条链上的模块)构建自己的类似NominationPools
的池化质押解决方案。
核心功能
- 允许账户接收委派。请参阅
Pallet::register_agent
。 - 将资金委派给
代理
账户。请参阅Pallet::delegate_to_agent
。 - 从
代理
账户释放委派资金给委托人
。请参阅Pallet::release_delegation
。 - 将
提名人
账户迁移到代理
账户。请参阅Pallet::migrate_to_agent
。在《迁移》部分有更详细的解释。 - 将未认领的委派资金从
代理
迁移到委托人。当提名人迁移到代理时,资金将存放在代理账户中。此功能允许委托人从代理账户中领取其资金份额。请参阅Pallet::migrate_delegation
。
懒式削减
直接提名人在抵押 pallet 中无法很好地扩展的原因之一是所有提名人同时被削减。这是昂贵的,并且需要受限制的操作。
本 pallet 实现了懒式削减机制。对代理
的任何削减都将其记录在其AgentLedger
中,作为待处理的削减。由于实际金额持有在多个委托人
账户中,此 pallet 无法知道如何应用削减。这是代理
的职责,逐个委托人地应用削减。抵押 pallet 确保待处理的削减不超过抵押金额,并会在所有待处理的削减清零之前冻结进一步的提现。
此 pallet 的用户可以使用DelegationInterface::delegator_slash来应用削减。
从提名人到代理的迁移
更多详情这里。
提名池与委派抵押
本 pallet 不是提名池的替代品,而是在抵押 pallet 之外增加了新的原语,提名池可以使用它来支持基于委派的抵押。它可以看作是提名池相关抵押 pallet 的扩展。技术上,这些更改也可以在那些 pallet 中进行,但那将意味着重大的重构和高度可能引入回归的风险。采用这种方法,我们可以保持现有的 pallet 最小化更改,并引入一个可选用于提名池的新 pallet。愿景是以可配置的方式构建它,使得运行时可以选择是否使用此 pallet。
话虽如此,以下是以下两者之间的主要区别
无委派支持的提名池
- 从委托人将资金转移到池账户,并且
- 作为直接提名人从池账户抵押。
有委派支持的提名池
- 从委托人将资金委派到池账户,并且
- 作为抵押 pallet 上的
代理
账户从池账户抵押。
区别在于,在第二种方法中,委派资金将锁定在用户的账户中,使他们能够参与允许使用持有
资金的用例,例如参与治理投票。
提名池仍然在池管理、奖励分配、懒惰削减等方面承担所有繁重的工作,因此不应被这个组件所替代。
局限性
- 奖励不能自动复利。
- 削减是懒惰的,因此可能会出现一段时间,账户可以使用资金进行诸如治理投票等操作,尽管它们应该被削减。
依赖关系
~17–32MB
~533K SLoC