模块化实体 runtime 聚合框架(FRAME)是一组模块(称为 pallet)和支持库,可简化 runtime 开发。pallet 是 FRAME 中的单个模块,承载特定领域的逻辑。

FRAME 提供了一些与 Substrate Primitives 交互的帮助程序模块,这些模块提供了与核心客户端的接口。

概览

下图显示了FRAME及其支持库的体系结构概述:

frame-arch

Pallets

使用 FRAME 进行构建时,Substrate  runtime 由几个较小的组件(称为 pallet)组成。一个 Pallet 包含一组类型、存储项目和功能,这些功能定义了 runtime 的一组功能。

系统库

系统库为你的区块链提供了基础的类型、存储和功能。所有其他 pallet 都依赖系统库作为 Substrate  runtime 的基础。

系统库定义了 Substrate  runtime 的所有核心类型,例如:

  • 起源
  • 区块数
  • 帐户 ID
  • Hash
  • 区块头
  • 版本

等等...

它还具有许多对系统至关重要的存储项目,例如:

  • Account Nonce
  • 区块 Hash
  • 区块数
  • 事件
  • 等等...

最后,它定义了许多底层函数,这些函数可以访问你的区块链存储,验证外部信息的起源等等。

执行模块

Executive pallet(执行模块)充当 runtime 的业务流程层。它在 runtime 将传入的外部调用分派到各个 pallet。

支持库

FRAME 支持库是 Rust 宏、类型、特征和函数的集合,这些简化了 Substrate pallet 的开发。

支持宏在编译时进行扩展,以生成 runtime 使用的代码,并减少 pallet 最常见组件的样板代码。

Runtime

runtime 库将所有这些组件和 pallet 组合在一起。它定义了 runtime 包含的 pallet,并将它们配置为一起工作以构成最终的 runtime 。当调用 runtime 时,它将使用  Executive pallet 将这些调用派遣到各个 pallet。

预制模块

一些 pallet 具有足够的通用性,可以在许多区块链中重复使用。任何人都可以自由编写和共享有用的 pallet。 Substrate 提供了一系列常用的 pallet。让我们来探索它们。

资产

资产(Asset) pallet 是用于处理可替换资产的简单、安全的模块。

资源

Aura

Aura pallet 通过管理离线报告扩展了 Aura 共识。

资源

权限发现

core/authority-discovery 使用权限发现(Authority Discovery)pallet 来检索当前权限集合、了解其自身的权限 ID,以及签署和验证与其他权限之间的消息。

Source

Authorship

Authorship pallet 跟踪区块的当前作者和最近的叔区块。

Source

BABE

BABE pallet 通过从 VRF 输出中收集链上的随机性并管理 epoch 过渡来扩展 BABE 共识。

Source

余额

余额(Balance)pallet 提供用于处理帐户和余额的功能。

Source

集体

通过集体(Collective) pallet,一组帐户 ID 可以通过来自专门来源的调度调用来告知其集体的情绪。

Source

合约

合约(Contract)pallet 为 runtime 提供了部署和执行 WebAssembly 智能合同的功能。

Source

民主

民主 pallet 提供了处理一般利益相关者投票管理的民主系统。

Source

选举 Phragmen

Phragmen Elections pallet 是一个基于 sequential phragmen 的选举模块。

Source

选举

选举(Election) pallet 是用于对集体进行股权加权成员选择的选举模块。

Source

EVM

EVM pallet 是用于 Substrate 的以太坊虚拟机(EVM)执行模块。

Source

示例

示例(Example) pallet 是一个简单的 pallet 示例,展示了大多数 pallet 共有的概念、API 和结构。

Source

最终性追踪器

最终性追踪器(Finality Tracker)pallet 追踪区块作者所感知的最后一个最终确定(finalized)的区块。

Source

通用资产

通用资产(Generic Asset)pallet 提供了用于处理帐户和资产余额的功能。

Source

GRANDPA

GRANDPA pallet 通过管理为本机代码准备的 GRANDPA 权限扩展了 GRANDPA 共识。

Source

“我在线”

“我在线(I'm Online)” pallet 允许验证人在每个新会话中散布一次 “心跳(heartbeat)” 交易,以表明该节点处于在线状态。

Source

索引

索引(Indices)pallet 为新创建的帐户分配索引。索引是地址的缩写形式。

Source

成员资格

成员资格(Membership)pallet 允许控制一组 “AccountId” 的成员资格,这对于管理集体成员资格很有用。

Source

违规

违规(Offences)pallet 会追踪被报告的违规行为。

Source

Randomness Collective Flip

Randomity Collective Flip pallet 提供了一个 random 函数,来基于来自先前 81 个块的块散列生成低影响度的随机值。

Source

计分池

计分池(Scored Pool)pallet 维护着计分的成员池,其中得分最高的实体成为成员。

Source

Session

Session pallet 允许验证人管理其 session 密钥,提供更改 session 长度的功能,并处理 session 轮换。

Source

Staking

Staking(质押)pallet 用于管理网络维护者质押的资金。

Source

Sudo

Sudo pallet 允许单个帐户(称为 “sudo密钥”)执行需要 Root 来源的可调度功能,或指定一个新帐户将其替换为 sudo 密钥。

Source

时间戳

时间戳(Timestamp)pallet 提供了获取和设置链上时间的功能。

Source

交易付款

交易付款(Transaction Payment)pallet 提供了计算派遣前交易费用的基本逻辑。

Source

财政部

财政部(Treasury)pallet 提供了一个可由系统中的利益相关者管理的资金 “储备库”,并提供了从该储备库提出支出建议的结构。

Source

下一步

了解更多

示例

参考资料