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
- 质押管理
- Indicies
-
智能合约
- Contract
-
辅助
- Support
- 用来实现各个其它的模块
- Metadata
- 从其它模块生成所有的元数据
- Support
模块组成
- 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;还会加入一些自定义的类型
网友评论