显示软件包…
1 个稳定版本
2.0.0 | 2021 年 4 月 4 日 |
---|
#11 在 #session-keys
170 每月下载量
用于 22 个软件包(11 个直接使用)
1.5MB
26K SLoC
会话模块
会话模块允许验证者管理他们的会话密钥,提供更改会话长度的函数,并处理会话轮换。
概述
术语
- 会话:会话是一段具有恒定验证者集的时间。验证者只能在会话变更时加入或退出验证者集。它以区块数量衡量。结束会话的区块由
ShouldEndSession
特质确定。当会话结束时,可以通过OnSessionEnding
实现来选择新的验证者集。 - 会话密钥:会话密钥实际上是几个一起保存的密钥,为网络权威/验证者在履行职责时提供所需的各项签名功能。
- 验证者 ID:每个账户都有一个相关的验证者 ID。对于某些简单的委托系统,这可能与账户 ID 相同。对于使用储备/控制器模型的委托系统,验证者 ID 将是控制器的储备账户 ID。
- 会话密钥配置过程:会话密钥使用
set_keys
设置,用于下一个会话之后的会话。它们存储在NextKeys
中,这是调用者的ValidatorId
与提供的会话密钥之间的映射。set_keys
允许用户在当选为验证者之前设置其会话密钥。由于它使用ensure_signed
,这是一个检查原始来源是否为签名账户的公共调用,因此存储在NextKeys
中的原始账户 ID 可能不一定与区块作者或验证者相关联。一旦账户余额为零,就会删除账户的会话密钥。 - 会话长度:此 noble 不假定每个会话的长度。相反,它依赖于
ShouldEndSession
的实现来规定新会话的开始。此 noble 提供了PeriodicSessions
结构,用于简单的周期性会话。 - 会话轮换配置:配置为“正常”(可奖励的会话,其中应用奖励)或“异常”(可扣除)会话轮换。
- 会话轮换过程:在每一块的开始,
on_initialize
函数查询提供的ShouldEndSession
的实现。如果会话需要结束,则从存储中取出新激活的验证者 ID 和会话密钥,并将它们传递给SessionHandler
。由SessionManager::new_session
提供的验证者集及其对应的会话密钥,这些密钥可能在前一个会话期间通过set_keys
注册,将被写入存储,并在一个会话后传递给SessionHandler
。
目标
会话贵族旨在实现以下目标
- 为即将到来的会话设置验证者集的会话密钥。
- 控制会话的长度。
- 配置和切换正常或异常会话轮换。
接口
可调用函数
set_keys
- 为即将到来的会话设置验证者的会话密钥。
公共函数
rotate_session
- 切换到下一个会话。注册新的授权集。为下一个会话轮换排队更改。disable_index
- 通过索引禁用验证者。disable
- 通过验证者 ID 禁用验证者
用法
FABRIC 的示例
抵押贵族使用会话贵族来获取验证者集。
use noble_session as session;
fn validators<T: noble_session::Config>() -> Vec<<T as noble_session::Config>::ValidatorId> {
<noble_session::Module<T>>::validators()
}
相关模块
许可证:Apache-2.0
依赖关系
~4–13MB
~171K SLoC