查看原文
其他

Substrate FRAME 是什么?

Dan Forbes PolkaWorld 2020-11-11


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

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

概览

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

FRAME 架构

Pallets

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

系统库

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

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

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

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

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

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

执行模块

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

支持库

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

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

Runtime

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

预制模块

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

资产

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

  • 文档[4]
  • 资源[5]

Aura

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

  • 文档[6]
  • 资源[7]

权限发现

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

  • 文档[8]
  • 资源[9]

Authorship

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

  • 文档[10]
  • 资源[11]

BABE

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

  • 文档[12]
  • 资源[13]

余额

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

  • 文档[14]
  • 资源[15]

集体

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

  • 文档[16]
  • 资源[17]

合约

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

  • 文档[18]
  • 资源[19]

民主

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

  • 文档[20]
  • 资源[21]

选举 Phragmen

Elections Phragmen pallet 是一个基于 Sequential Phragmén 的选举模块。

  • 文档[22]
  • 资源[23]

选举

选举(Election) pallet 是对集体成员资格进行权益加权(stake-weighted)选举的模块。

  • 文档[24]
  • 资源[25]

EVM

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

  • 文档[27]
  • 资源[28]

示例

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

  • 文档[29]
  • 资源[30]

最终性追踪器

最终性追踪器(Finality Tracker)pallet 追踪出块者注意到的最后一个最终(finalized)区块。

  • 文档[31]
  • 资源[32]

通用资产

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

  • 文档[33]
  • 资源[34]

GRANDPA

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

  • 文档[35]
  • 资源[36]

“我在线”

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

  • Docs[37]
  • Source[38]

索引

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

  • 文档[39]
  • 资源[40]

成员资格

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

  • 文档[41]
  • 资源[42]

违规

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

  • 文档[43]
  • 资源[44]

Randomness Collective Flip

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

  • 文档[45]
  • 资源[46]

计分池

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

  • 文档[47]
  • 资源[48]

Session

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

  • 文档[49]
  • 资源[50]

Staking

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

  • 文档[51]
  • 资源[52]

Sudo

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

  • 文档[53]
  • 资源[54]

时间戳

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

  • 文档[55]
  • 资源[56]

交易付款

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

  • 文档[57]
  • 资源[58]

财政部

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

  • 文档[59]
  • 资源[60]

下一步

了解更多

  • 学习怎样开发定制化 Substrate pallet[61]

示例

  • 跟随 向你的 Substrate runtime 增添 pallet 教程[62]进行学习。

参考资料

  • Visit the reference docs for the System library[63].

  • Visit the reference docs for the Executive pallet[64].

  • Visit the reference docs for the FRAME support library[65].

  • 访问系统库[66]的参考文档。

  • 访问 Executive pallet[67] 的参考文档。

  • 访问 FRAME 支持库[68]的参考文档。

参考资料

[1]

系统库: https://substrate.dev/rustdocs/master/frame_system/index.html

[2]

Executive pallet: https://substrate.dev/rustdocs/master/frame_executive/index.html

[3]

FRAME 支持库: https://substrate.dev/rustdocs/master/frame_support/index.html

[4]

文档: https://substrate.dev/rustdocs/master/pallet_assets/index.html

[5]

资源: https://github.com/paritytech/substrate/blob/master/frame/assets/src/lib.rs

[6]

文档: https://substrate.dev/rustdocs/master/pallet_aura/index.html

[7]

资源: https://github.com/paritytech/substrate/blob/master/frame/aura/src/lib.rs

[8]

文档: https://substrate.dev/rustdocs/master/pallet_authority_discovery/index.html

[9]

资源: https://github.com/paritytech/substrate/blob/master/frame/authority-discovery/src/lib.rs

[10]

文档: https://substrate.dev/rustdocs/master/pallet_authorship/index.html

[11]

资源: https://github.com/paritytech/substrate/blob/master/frame/authorship/src/lib.rs

[12]

文档: https://substrate.dev/rustdocs/master/pallet_babe/index.html

[13]

资源: https://github.com/paritytech/substrate/blob/master/frame/babe/src/lib.rs

[14]

文档: https://substrate.dev/rustdocs/master/pallet_balances/index.html

[15]

资源: https://github.com/paritytech/substrate/blob/master/frame/balances/src/lib.rs

[16]

文档: https://substrate.dev/rustdocs/master/pallet_collective/index.html

[17]

资源: https://github.com/paritytech/substrate/blob/master/frame/collective/src/lib.rs

[18]

文档: https://substrate.dev/rustdocs/master/pallet_contracts/index.html

[19]

资源: https://github.com/paritytech/substrate/blob/master/frame/contracts/src/lib.rs

[20]

文档: https://substrate.dev/rustdocs/master/pallet_democracy/index.html

[21]

资源: https://github.com/paritytech/substrate/blob/master/frame/democracy/src/lib.rs

[22]

文档: https://substrate.dev/rustdocs/master/pallet_elections_phragmen/index.html

[23]

资源: https://github.com/paritytech/substrate/blob/master/frame/elections-phragmen/src/lib.rs

[24]

文档: https://substrate.dev/rustdocs/master/pallet_elections/index.html

[25]

资源: https://github.com/paritytech/substrate/blob/master/frame/elections/src/lib.rs

[26]

以太坊: https://en.wikipedia.org/wiki/Ethereum

[27]

文档: https://substrate.dev/rustdocs/master/pallet_evm/index.html

[28]

资源: https://github.com/paritytech/substrate/blob/master/frame/evm/src/lib.rs

[29]

文档: https://substrate.dev/rustdocs/master/pallet_example/index.html

[30]

资源: https://github.com/paritytech/substrate/blob/master/frame/example/src/lib.rs

[31]

文档: https://substrate.dev/rustdocs/master/pallet_finality_tracker/index.html

[32]

资源: https://github.com/paritytech/substrate/blob/master/frame/finality-tracker/src/lib.rs

[33]

文档: https://substrate.dev/rustdocs/master/pallet_generic_asset/index.html

[34]

资源: https://github.com/paritytech/substrate/blob/master/frame/generic-asset/src/lib.rs

[35]

文档: https://substrate.dev/rustdocs/master/pallet_grandpa/index.html

[36]

资源: https://github.com/paritytech/substrate/blob/master/frame/grandpa/src/lib.rs

[37]

Docs: https://substrate.dev/rustdocs/master/pallet_im_online/index.html

[38]

Source: https://github.com/paritytech/substrate/blob/master/frame/im-online/src/lib.rs

[39]

文档: https://substrate.dev/rustdocs/master/pallet_indices/index.html

[40]

资源: https://github.com/paritytech/substrate/blob/master/frame/indices/src/lib.rs

[41]

文档: https://substrate.dev/rustdocs/master/pallet_membership/index.html

[42]

资源: https://github.com/paritytech/substrate/blob/master/frame/membership/src/lib.rs

[43]

文档: https://substrate.dev/rustdocs/master/pallet_offences/index.html

[44]

资源: https://github.com/paritytech/substrate/blob/master/frame/offences/src/lib.rs

[45]

文档: https://substrate.dev/rustdocs/master/pallet_randomness_collective_flip/index.html

[46]

资源: https://github.com/paritytech/substrate/blob/master/frame/randomness-collective-flip/src/lib.rs

[47]

文档: https://substrate.dev/rustdocs/master/pallet_scored_pool/index.html

[48]

资源: https://github.com/paritytech/substrate/blob/master/frame/scored-pool/src/lib.rs

[49]

文档: https://substrate.dev/rustdocs/master/pallet_session/index.html

[50]

资源: https://github.com/paritytech/substrate/blob/master/frame/session/src/lib.rs

[51]

文档: https://substrate.dev/rustdocs/master/pallet_staking/index.html

[52]

资源: https://github.com/paritytech/substrate/blob/master/frame/staking/src/lib.rs

[53]

文档: https://substrate.dev/rustdocs/master/pallet_sudo/index.html

[54]

资源: https://github.com/paritytech/substrate/blob/master/frame/sudo/src/lib.rs

[55]

文档: https://substrate.dev/rustdocs/master/pallet_timestamp/index.html

[56]

资源: https://github.com/paritytech/substrate/blob/master/frame/timestamp/src/lib.rs

[57]

文档: https://substrate.dev/rustdocs/master/pallet_transaction_payment/index.html

[58]

资源: https://github.com/paritytech/substrate/blob/master/frame/transaction-payment/src/lib.rs

[59]

文档: https://substrate.dev/rustdocs/master/pallet_treasury/index.html

[60]

资源: https://github.com/paritytech/substrate/blob/master/frame/treasury/src/lib.rs

[61]

开发定制化 Substrate pallet: https://substrate.dev/docs/en/development/module/

[62]

向你的 Substrate runtime 增添 pallet 教程: https://substrate.dev/docs/en/tutorials/adding-a-module-to-your-runtime

[63]

System library: https://substrate.dev/rustdocs/master/frame_system/index.html

[64]

Executive pallet: https://substrate.dev/rustdocs/master/frame_executive/index.html

[65]

FRAME support library: https://substrate.dev/rustdocs/master/frame_support/index.html

[66]

系统库: https://substrate.dev/rustdocs/master/frame_system/index.html

[67]

Executive pallet: https://substrate.dev/rustdocs/master/frame_executive/index.html

[68]

FRAME 支持库: https://substrate.dev/rustdocs/master/frame_support/index.html


原文:https://substrate.dev/docs/en/conceptual/runtime/frame

翻译:PolkaWorld 社区

更多 Substrte 文档:

波卡平行链开发套件(PDK):轻松创建兼容波卡的平行链

教程|编写一个 Substrate 模块

在 Substrate 中为你的 runtime 添加合约模块


扫码关注公众号,回复 “1” 加入波卡群

关注 PolkaWorld

发现 Web 3.0 时代新机遇


点个 “在看” 再走吧!

    您可能也对以下帖子感兴趣

    文章有问题?点此查看未经处理的缓存