Substrate介绍: 架构一览

Substrate架构一览

包含

  • BABE/Grandpa 混合共识机制
    • BABE出块,高效率的出块,最快2秒一个块
    • Grandpa大量高效率确认区块,一次可以确认多个
  • 通用交易池
    • 很少需要定制
  • Metadata元数据系统
    • 包含了runtime模块中的所有信息
  • SRML(Substrate Runtime Module Library)
    • Substrate提供的各个模块的实现

Runtime

Runtime架构

数据结构的定义

  • Block Header区块头
  • Block
  • Extrinsic 外部消息,区块链外面来的消息
    • Transaction 用户交易
    • Inherent 固有消息,没有签名,无法被签名,如由timestamp设置的当前区块的时间,其它验证人签名同意后就可以;或者验证人掉线的消息,下一个验证人说我来出块,其它也证人签名同意也可以

Runtime API接口

如果用别的语言实现Substrate的runtime,就要实现所有的这些接口。

  • version
  • execute_block
    • 执行区块
  • initialize_block
  • metadata
  • apply_extrinsic
  • finalize_block
  • inherent_extrinsics
  • check_inherents
    • 验证合法
  • random_seed
    • 拿到一个伪随机数
    • 可以用VRF验证
  • validate_transaction
    • 验证交易是否合法
  • slot_duration
    • 出块时间
  • offchain_worker
    • 脱链worker的实现
  • authorities
    • 拿到当前所有验证人

SRML

Support Macros

  • Substrate大量使用了Rust的Macro来实现各种功能

Executive Module

  • Runtime API大部分都是在这里实现的

  • 调用了其它SRML或者custom的模块

  • 核心模块

    • Executive
    • System
  • 共识机制

    • Aura(目前的出块),2.0会实现BABE
    • Finality Tracker
    • Grandpa
    • Session
  • 自治管理

    • Consensus
    • Council
    • Democracy
    • Sudo(测试时候比较有用,主网上线没有这个模块)
  • 时间

    • Timestamp
  • 资金账户管理

    • Indicies
      • 分为正常地址和短地址
    • Balances
    • Staking
      • 质押管理
  • 智能合约

    • Contract
  • 辅助

    • Support
      • 用来实现各个其它的模块
    • Metadata
      • 从其它模块生成所有的元数据

模块组成

  • Trait
    • 定义相关类型
  • decl_event
    • 定义事件
  • decl_storage
    • 定义存储数据
  • decl_module
    • 包括了dispatchable method 可以外部调用的函数
    • on_initialize / on_finalize 区块初始/结束接口

文档

项目文件结构简介

Cargo.toml
Cargo.lock  // cargo update 可以升级
build.rs    // 额外的编译的命令
scripts/init.sh // 初始化编译
src/ // 所有的源码,从main开始
    cli.rs 主要功能在cli.rs中实现
    service.ts  把各个组件结合在一起
    chain_spec.rs   build-spec使用这个文件来生成
runtime 引入各个模块,组成一个runtime
    src/lib.rs  最常用的就是construct_runtime! 这个macro;还会加入一些自定义的类型
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容