Substrate - 3 运行时开发 - 3.1 FRAME

3.1 FRAME

模块化实体运行时聚合框架 (FRAME) 是一组简化运行时开发的模块和支持库。在Substrate中,这些模块叫做Pallets,每个都托管特定域的逻辑以包含在链的运行时中

FRAME也提供了一些帮助模块与重要的Substrate Primitives进行交互,它们提供了与核心用户接口

下面的图展示了FRAME架构的总览和它支持的库

FRAME Architecture

Pallets

当用FRAME构建时,Substrate运行时由几个叫做pallets的组件组成。一个pallet包含一组类型、存储项和功能。它们为运行时定义了一组特性和功能

FRAME Runtime

小建议:

如果你想使用Substrate runtime development,我们建议你使用我们的教程creating your first Substrate chain

FRAME 不仅提供了一个常用的Substrate pallet库,还提供了一个构建自定义域pallet的框架,让运行时工程师可以根据他们的目标用例灵活的定义运行时的行为,每个pallet都有自己的离散逻辑,可以修改链状态转换函数的特性和功能

举个例子,the Balances pallet,包含在FRAME中,能够为你的链定义加密货币功能。更具体地说,它定义:

-用来追踪用户拥有token的存储项目

-用户转移和管理这些tokens的函数

-可以让其它pallets使用这些tokens和它们能力的API

-允许当用户余发生变化时可以让其它pallets触发函数调用的hook

Substrate运行时工程师可以通过编写自己的pallet和封装它们的区块链(通过组合个性化的pallet和已经存在的FRAME pallets或者Substrate类似的模块)为他们的区块链定义个性化的逻辑。下面的文件将会展示如何操作:

Skeleton of a pallet

一个FRAME pallet由七个部分组成

  1. Imports and Dependencies
  2. Declaration of the Pallet type
  3. Runtime Configuration Trait
  4. Runtime Storage
  5. Runtime Events
  6. Hooks
  7. Extrinsics

下面是一个例子

// 1. Imports and Dependencies
pub use pallet::*;
#[frame_support::pallet]
pub mod pallet {
    use frame_support::pallet_prelude::*;
    use frame_system::pallet_prelude::*;

    // 2. Declaration of the Pallet type
    // This is a placeholder to implement traits and methods.
    #[pallet::pallet]
    #[pallet::generate_store(pub(super) trait Store)]
    #[pallet::generate_storage_info]
    pub struct Pallet<T>(_);

    // 3. Runtime Configuration Trait
    // All types and constants go here.
    // Use #[pallet::constant] and #[pallet::extra_constants]
    // to pass in values to metadata.
    #[pallet::config]
    pub trait Config: frame_system::Config { ... }

    // 4. Runtime Storage
    // Use to declare storage items.
    #[pallet::storage]
    #[pallet::getter(fn something)]
    pub MyStorage<T: Config> = StorageValue<_, u32>;

    // 5. Runtime Events
    // Can stringify event types to metadata.
    #[pallet::event]
    #[pallet::generate_deposit(pub(super) fn deposit_event)]
    pub enum Event<T: Config> { ... }

    // 6. Hooks
    // Define some logic that should be executed
    // regularly in some context, for e.g. on_initialize.
    #[pallet::hooks]
    impl<T: Config> Hooks<BlockNumberFor<T>> for Pallet<T> { ... }

    // 7. Extrinsics
    // Functions that are callable from outside the runtime.
    #[pallet::call]
    impl<T:Config> Pallet<T> { ... }

}

注意:

Pallets按需组成,这在基本的架构之上为运行时工程师提供了更大灵活性。参考 the Substrate Runtime Macros 了解添加功能至FRAME pallet

System crate

The FRAME System crate frame_system<

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值