khala-parachain源码解析(1)-runtime相关依赖汇总

再三考虑,还是先看下khala-parachain的源码,一个是想通过代码层了解khala的业务运行机制,另一个也是通过该项目,真正了解一个基于substrate的项目是如何实现的。

1. 概述

  1. khala-parachain 项目是负责pha的节点部分,用来同步数据以及上层应用的实现(入质押池的实现,委员会、质押人等逻辑)。
    具体的mining逻辑不在该项目中,暂不考虑这部分内容。
  2. 该项目也是基于substrate-node-template 模板来实现的,用的比较早的模板,但整体内容基本一致
  3. runtime模块中,集成了各个需要的依赖,也是项目运行的核心部分
  4. 本文主要讲解runtime中使用到了哪些依赖(如pallet等),通过该内容,对khala-parachain 的整体结构有个全局的了解,以这个作为切入点,也是一个比较好的选择

2. 依赖讲解

项目的runtime目录中,有khalaphalarhala等等。这里我们主要关注khala,也就是文件runtime/khala/src/lib.rs
该文件中,集成了所需要的各个pallet,包括自定义的、substrate内置的、以及引用的第三方的。
具体用到了哪些依赖,也可以前往:runtime/khala/Cargo.toml[dependencies]查看

2.1 substrate相关依赖

  1. sp-std
    宏:
    if_std:只有std启用的时候,才能使用该代码块
    map:创建一个map
    vec:创建一个vec

  2. sp-api
    宏:
    decl_runtime_apis:用于声明api traits
    impl_runtime_apis:用于实现api traits

  3. sp-io

  4. sp-version
    宏:
    create_apis_vec:创建api声明的集合
    create_runtime_str:用于创建RuntimeString常量
    runtime_version:用作接受运行库的版本声明并生成具有等效内容的自定义WebAssembly节的属性。

  5. sp-runtime
    宏:
    bounded_btree_map:从给定的数据创建btree map
    bounded_vec:从给定的数据创建btree vec
    impl_opaque_keys:实现OpaqueKeys来描述数据结构
    parameter_types:用于创建实现了Get trait的类型

  6. sp-core
    宏:

    • map:初始化key value
    • RuntimeDebug:调试运行时
  7. sp-session
    session核心

  8. sp-offchain
    用于支持链下操作

  9. sp-block-builder
    块构建

  10. sp-transaction-pool
    交易池的实现

  11. sp-inherents
    固有的外在性是内在地添加到每个块中的外在性。但是,由运行时实现决定是要求每个块的固有函数还是使其可选。固有函数主要用于将数据从块生产者传递到运行时。因此,固有项需要一些在客户端运行的部分和一些在运行时端运行的部分。构造固有项时,固有项所需的任何数据都将作为固有数据从客户端传递到运行时。

  12. sp-consensus-aura
    aura底层

  13. frame-support
    该依赖提供了许多重要的声明、derive、attribute-like、function-like等
    如下几个重要宏需要掌握:

    • construct_runtime! 用于从已实现的pallet中构造其运行时
    • match_types! 用于创建实现了Contains trait的类型,类似于matches!
    • parameter_types! 用于创建实现了Get trait的类型
  14. frame-executive
    通过在运行时将传入的函数调用发送到适当的托盘来编排它们。

  15. frame-system
    官方解释的看不懂,简单说就是pallet的底层,运行时的根基。其中也包含了一些重要的crate,如:sp_core、sp_runtime等

  16. frame-system-rpc-runtime-api
    此 API 应由要使用添加系统访问方法的自定义 RPC 扩展的节点的运行时导入和实现。

  17. frame-system-benchmarking

  18. frame-benchmarking
    具体说不来,总之是用于runtime测试

  19. frame-try-runtime
    用于测试运行时升级的执行。

  20. pallet-aura
    aura共识,用于创建块

  21. pallet-authorship
    跟踪当前签名块以及最近的uncles块

  22. pallet-session
    允许验证器管理其会话密钥,提供更改会话长度的功能,并处理会话轮换。

  23. pallet-balances
    提供处理帐户和余额的功能。

  24. pallet-randomness-collective-flip
    提供可在测试中使用的随机函数,并基于前81个块的块散列生成低影响随机值。建议主要在测试等低安全性情况下使用此托盘作为随机性来源(不建议生产环境使用)。

  25. pallet-timestamp
    提供获取和设置链上时间的功能。

  26. pallet-transaction-paymentpallet-transaction-payment-rpc-runtime-api
    提供计算调度前交易费用的基本逻辑,以及对应的api

  27. pallet-utility
    无状态托盘,带有用于调度管理的助手,无需重新验证。

  28. pallet-multisig
    启用多重签名

  29. pallet-proxy
    允许帐户向其他帐户授予从其签名的来源调度呼叫类型的权限。

  30. pallet-scheduler
    显示调度调度在指定的块编号或指定的时间段发生的功能。这些调度可以命名或匿名,也可以取消。

  31. pallet-collective
    允许一组帐户ID通过来自特定来源的调度来表达他们的集体感受。

  32. pallet-membership
    允许控制一组AccountId的成员身份,这对于管理集体成员身份很有用。

  33. pallet-treasury
    提供可由系统中的利益相关者管理的资金储备,以及从该储备中提出支出建议的结构。

  34. pallet-bounties
    管理完成指定工作或实现指定目标的奖励。用于奖励
    该pallet需要依赖pallet-treasury

  35. pallet-child-bounties
    奖励可以拆分成更小的,需要依赖pallet-treasurypallet-bounties

  36. pallet-lottery
    配置tickets,使网络参与者能够购买tickets。

  37. pallet-vesting
    在帐户的锁定余额上放置线性曲线。该模块确保有一个锁定机制,以防止余额因交易费支付以外的任何原因低于未行权金额。

  38. pallet-identity
    启用允许从指定来源添加多个注册器的联合命名系统。登记员可以设定提供身份验证服务的费用。

  39. pallet-democracy
    提供一个民主系统,用于处理一般利益相关者投票的管理。

  40. pallet-elections-phragmen
    提供基于phragmen 模型的选举

  41. pallet-tips
    小费,该pallet依赖于pallet-treasury

  42. pallet-preimage
    允许用户和运行时在链上存储哈希的preimage。其他pallet可用于存储和管理大字节 Blob。

  43. pallet-assets
    提供用于处理可替代资产的简单而安全的方法。这个应该是nft用到
    一个简单、安全的模块,用于处理可替代资产。
    资产模块提供固定供应的可替代资产类别的资产管理功能,包括:
    资产发行(铸币)
    资产转让
    资产冻结
    资产销毁(焚烧)
    委托资产转让(“批准API”)

  44. pallet-uniques
    一个简单、安全的模块,用于处理不可替代的内容。

2.2 cumulus相关依赖

cumulus 项目:

  1. 接口文档:cumulus-doc
  2. Cumulus是 Substrate 的扩展,它可以轻松地将任何 Substrate 构建的运行时变成与 Polkadot 兼容的平行链。
  3. Cumulus Consensus 是遵循 Polkadot 中继链(即平行链)的 Substrate 共识引擎。这会在内部运行一个 Polkadot 节点,并指示客户端和同步算法遵循、最终确定和视为正确的链。

2.2.1 依赖

  1. pallet-collator-selection
    用于管理平行链中的整理器的pallet。“整理器选择”托盘管理平行链的归类器。排序规则不是一项安全活动,并且此托盘不实现任何博弈论机制来满足所选集合的BFT安全假设。
    整理器:平行链块生产者。

  2. cumulus-pallet-aura-ext
    aura的扩展,该pallet扩展了基板AuRa托盘,使其与平行链兼容。

  3. cumulus-pallet-parachain-system
    底层,包括:
    引入平行链验证数据
    引入传入的向下和横向消息并分派它们
    与中继链协调升级
    平行链输出的通信,例如发送的消息,升级信号等。

  4. cumulus-pallet-session-benchmarking
    测试

  5. cumulus-primitives-core
    核心

  6. cumulus-primitives-timestamp
    提供应在平行链的验证阶段使用的固有数据提供程序。它将用于创建固有数据,并将用于检查平行链块内的固有物(在本例中为固有时间戳)。由于我们无法访问运行时中的任何时钟,因此时间戳始终作为运行时的固有时间传递。为了在验证块时检查这一点,我们将使用中继链插槽。由于中继链插槽是从时间戳派生的,因此我们可以通过将其与插槽持续时间混合来轻松地将其转换回时间戳。通过将中继链槽派生的时间戳与时间戳进行比较,我们可以确保平行链时间戳是合理的。

  7. cumulus-primitives-utility

  8. cumulus-pallet-dmp-queue

  9. cumulus-pallet-xcmp-queue

  10. cumulus-pallet-xcm

2.3 polkadot相关依赖

  1. polkadot-parachain
    波卡平行链所需要的依赖,定义用于创建或验证平行链的基元类型。

  2. polkadot-runtime-common
    runtime代码

  3. xcm
    跨共识消息格式数据结构。

  4. xcm-builder
    用户配置xcm的类型和帮助

  5. xcm-executor
    用于配置执行程序的各种trait

  6. pallet-xcm
    用于处理 XCM 消息的 pallet

2.4 rmrk相关依赖

rmrk为波卡生态的元宇宙NFT解决方案:

  1. pallet-rmrk-core

  2. pallet-rmrk-equip

  3. pallet-rmrk-market

  4. rmrk-traits

  5. pallet-rmrk-rpc-runtime-api

2.5 自定义的pallet等依赖

  1. assets-registry

  2. pallet-parachain-info

  3. phala-pallets

  4. pallet-mq-runtime-api

  5. subbridge-pallets

  6. pallet-phala-world

3. 总结

本文编辑完毕

Donate
  • Copyright: Copyright is owned by the author. For commercial reprints, please contact the author for authorization. For non-commercial reprints, please indicate the source.
  • Copyrights © 2017-2023 Jason
  • Visitors: | Views:

谢谢打赏~

微信