Substrate FRAME 是什么?
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 社区