显示软件包…

1 个稳定版本

2.0.0 2021 年 4 月 4 日

#11#session-keys

Download history 45/week @ 2024-04-08 62/week @ 2024-04-15 63/week @ 2024-04-22 54/week @ 2024-04-29 62/week @ 2024-05-06 64/week @ 2024-05-13 45/week @ 2024-05-20 48/week @ 2024-05-27 41/week @ 2024-06-03 48/week @ 2024-06-10 43/week @ 2024-06-17 68/week @ 2024-06-24 29/week @ 2024-07-08 74/week @ 2024-07-15 54/week @ 2024-07-22

170 每月下载量
用于 22 个软件包11 个直接使用)

Apache-2.0

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