Substrate之旅3:Substrate是什么

Substrate 是从Polkadot 孵化出来的项目。它是一个用来搭建区块链的通用框架,具有以下特点:

  1. 可扩展。
  2. 模块化。
  3. 开源。

Substrate的框架与组件

框架

在这里插入图片描述

其中:

  1. P2P: libp2p网络协议,Substrate基于该协议实现了一个不带任何假设的,点对点对等网络,所以它不会成为你基于Substrate扩展的障碍:
    在这里插入图片描述

  2. NativeRuntime:节点发现、交易池、区块和交易gossip,共识,返回RPC call。

  3. Storage存储:RocksDB。

  4. RPC(远程过程调用),支持:

  • HTTP
  • WebSocket

核心组件

数据库

  1. 采用简单的键值对方式的存储。
  2. 实现了一个改进版Patricia Merkle tree (trie),以支持轻量级客户端对Substrate链的访问。
  3. Substrate没有对该数据库中存储数据的内容与结构,作出任何假设,所以它也不会成为你基于Substrate实现某些扩展的障碍。

网络连接

它的扩展性在框架部分已讲了。

共识

  1. Substrate将区块的生成过程(BABE)和区块的终结过程(GRANDPA)区分开来。

  2. Substrate只会假定一笔交易所具有的权重,以及一组用于创建从属关系图表的先决条件标签,其余地全权交给用户定制交易;Substrate将根据这些权重和标签,自动为接收到的交易理顺从属关系,确保交易的顺序:
    在这里插入图片描述

  3. Substrate内建了多种共识引擎:

  • 工作量证明(PoW);
  • Aura(Authority Round);
  • Polkadot共识。
  1. 你不仅在基于Substrate构建自己的区块链时,可以配置你想要的共识机制,还可以在区块链运行中,修改或更新共识引擎。

Substrate运行时

Substrate是一个运行时环境,用来维护Substrate区块链上的状态转换。

SRML

Substrate运行时采用了组件模块化的设计思想:

  1. 内建的模块;
  2. 我们也可以定制模块

这些模块的集合,将构成Substrate运行时模块库SRML(Substrate Runtime Module Library )。我们先看运行时框架:
在这里插入图片描述

其中:

  1. 系统模块(System Module):提供底层基本的API和工具集,定义了Runtime的核心类型、外部事件等等。
  2. 运行时模块(Runtime Module):多个托盘(Pallets)小模块。
  3. 执行模块(Executive Module):充当运行时的业务流程层,将传入的外部调用分派给运行时中的各个模块负责运行时执行。
  4. 运行时(Runtime):管理托盘,接受api调用。
  5. 支持宏(Support Macros):
  • 帮助开发自定义模块;
  • 允许开发人员声明自定义存储、具有公共 API 的模块和事件。

再具体来看Substrate的SRML:
在这里插入图片描述

其中内建的模块有:

  1. 余额模块(Balances)。
  2. 民主模块(Democracy)。
  3. 质押模块(Staking)。
  4. 合约模块(Contract)等。

这种模块化的设计,可以让我们可以很容易地组拼出,自己想要的区块链网络。

无分叉的在线更新

Substrate有个设计初衷:支持区块链在线更新,以满足区块链的多样化需求。

但SRML模块的更新缺省是会导致区块共识难以达成:一般分布式网络,节点的更新不会一致,因此节点之间存在着版本的差异,也就存在着处理逻辑的不一样,进而导致下图的分叉:
在这里插入图片描述
Substrate采用了一个巧妙的办法,来解决这个问题:让Substrate的运行代码,成为区块链上共享账本存储的数据,因此任何一个节点运行的都是最新版本的逻辑。
在这里插入图片描述

其实,包含了共识部分讲的共识引擎升级或更新,正是基于这个机制:从SRML中选取合适的共识引擎,提交Substrate区块链,新的共识引擎上链确认后,将负责之后区块的共识验证。

猜你喜欢

转载自blog.csdn.net/DongAoTony/article/details/125526216