概述
Substrate 是从Polkadot 孵化出来的项目。它是一个用来搭建区块链的通用框架,具有以下特点:
- 可扩展。
- 模块化。
- 开源。
Substrate的框架与组件
框架
其中:
-
P2P: libp2p网络协议,Substrate基于该协议实现了一个不带任何假设的,点对点对等网络,所以它不会成为你基于Substrate扩展的障碍:
-
NativeRuntime:节点发现、交易池、区块和交易gossip,共识,返回RPC call。
-
Storage存储:RocksDB。
-
RPC(远程过程调用),支持:
- HTTP
- WebSocket
核心组件
数据库
- 采用简单的键值对方式的存储。
- 实现了一个改进版Patricia Merkle tree (trie),以支持轻量级客户端对Substrate链的访问。
- Substrate没有对该数据库中存储数据的内容与结构,作出任何假设,所以它也不会成为你基于Substrate实现某些扩展的障碍。
网络连接
它的扩展性在框架部分已讲了。
共识
-
Substrate将区块的生成过程(BABE)和区块的终结过程(GRANDPA)区分开来。
-
Substrate只会假定一笔交易所具有的权重,以及一组用于创建从属关系图表的先决条件标签,其余地全权交给用户定制交易;Substrate将根据这些权重和标签,自动为接收到的交易理顺从属关系,确保交易的顺序:
-
Substrate内建了多种共识引擎:
- 工作量证明(PoW);
- Aura(Authority Round);
- Polkadot共识。
- 你不仅在基于Substrate构建自己的区块链时,可以配置你想要的共识机制,还可以在区块链运行中,修改或更新共识引擎。
Substrate运行时
Substrate是一个运行时环境,用来维护Substrate区块链上的状态转换。
SRML
Substrate运行时采用了组件模块化的设计思想:
- 内建的模块;
- 我们也可以定制模块
这些模块的集合,将构成Substrate运行时模块库SRML(Substrate Runtime Module Library )。我们先看运行时框架:
其中:
- 系统模块(System Module):提供底层基本的API和工具集,定义了Runtime的核心类型、外部事件等等。
- 运行时模块(Runtime Module):多个托盘(Pallets)小模块。
- 执行模块(Executive Module):充当运行时的业务流程层,将传入的外部调用分派给运行时中的各个模块负责运行时执行。
- 运行时(Runtime):管理托盘,接受api调用。
- 支持宏(Support Macros):
- 帮助开发自定义模块;
- 允许开发人员声明自定义存储、具有公共 API 的模块和事件。
再具体来看Substrate的SRML:
其中内建的模块有:
- 余额模块(Balances)。
- 民主模块(Democracy)。
- 质押模块(Staking)。
- 合约模块(Contract)等。
这种模块化的设计,可以让我们可以很容易地组拼出,自己想要的区块链网络。
无分叉的在线更新
Substrate有个设计初衷:支持区块链在线更新,以满足区块链的多样化需求。
但SRML模块的更新缺省是会导致区块共识难以达成:一般分布式网络,节点的更新不会一致,因此节点之间存在着版本的差异,也就存在着处理逻辑的不一样,进而导致下图的分叉:
Substrate采用了一个巧妙的办法,来解决这个问题:让Substrate的运行代码,成为区块链上共享账本存储的数据,因此任何一个节点运行的都是最新版本的逻辑。
其实,包含了共识部分
讲的共识引擎升级或更新,正是基于这个机制:从SRML中选取合适的共识引擎,提交Substrate区块链,新的共识引擎上链确认后,将负责之后区块的共识验证。
最后
以上就是友好美女为你收集整理的Substrate之旅3:Substrate是什么Substrate的框架与组件Substrate运行时的全部内容,希望文章能够帮你解决Substrate之旅3:Substrate是什么Substrate的框架与组件Substrate运行时所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复