jwl
jwl
前面几篇文章介绍了利用块链基质开发区网络的过程,本文开始从理论上介绍基质框架的各个方面的知识。
底物客户
基底客户端是运行基于基底的区域块链节点的应用程序,由以下组件组成:
存储:键值存储机制,数据库使用RocksDB;
运行时逻辑:运行时代码被编译成Wasm并在块链, 无分叉区;升级
对等网络:使用libp2p网络协议栈;
共识引擎:内置PoS共识的插件式可定制共识协议;
RPC:提供HTTP和WebSocket RPC服务;
遥测:通过嵌入式普罗米修斯服务器公开遥测指标;
基板的层级架构
基板的层级架构具有很高的灵活性,基板可以通过以下三种方式使用:
基底节点
基底框架
基质核心
上一篇文章介绍了如何启动一个基底节点,它是由基底-节点-模板启动的。基板节点可以创建具有基本功能的块链区。
基底框架(Substrate FRAME)是模块化实体聚合运行时聚合的框架,也称为运行时层。Substrate支持的定制基本发生在这一层。您可以修改本级块链区的运营逻辑,如通证系统、转让费、封锁时间、治理模式、连锁升级逻辑、房贷运营等。
基板核心可以忽略整个FRAME系统,从头开始设计实现运行时逻辑,这是最难使用的基板方法,也提供了最大的创新自由度。
基板节点、基板框架和基板核心的比较如下:
右边的技术更自由,左边的开发更简单。
基于底层的块链区域开发主要是底层框架层的开发,即运行时逻辑。
衬底的链上逻辑代码被编译成两个结果:
原型二进制文件(本机二进制)
网络程序集文件(wasm)
基底将同时在本机和wasm链中存储运行时逻辑代码。如果两种格式的逻辑相同,就会运行原生版本,速度更快。
块结构和外部
基底(traitsp _ runtime : traits 33603360块)中块的构造函数如下:
fn新(
报头:自:报头,
extrinsics: Vec
)-自我
它由一个块标题和一组外部。
块头(trait sp _ runtime :3360 trait s 33603360 header)的构造函数如下:
fn新(
数字:自身:数字,
ext insics _ root : Self : hash,
state _ root : Self : hash,
parent _ has : Self : hash,
摘要:摘要
)-自我
包括的字段有:区块高度、外部根哈希,链状态、根哈希,母区块哈希和摘要。
trait sp _ runtime : trait s :外部构造函数如下:
fn新(
_call: Self:Call,
_签名_数据:选项
)-选项
Extrinsics指的是将被添加到块中的来自链外的信息,可分为:
固有信息:由块创建者插入到块中的未签名信息将不会被广播到区域块链网络;
交易:交易分为已签字交易和未签字交易;
ext insics在当前块打包中执行,每个ext insics是在运行时定义的,extrinsics _ root是由这组ext insics计算的信息摘要,由哈希算法执行。