12.1.概述
12.1.1.SPV轻节点
SPV项目是ChainMaker的SPV轻节点,主要有两种模式,
一种是spv
模式,该模式支持ChainMaker(v2.0.0)
和Fabric(v1.4.0+)
两种链类型,该模式下将同步区块头及部分其他数据并通过同步的数据实现交易有效性的验证;
另一种是light
模式,该模式仅支持ChainMaker(v2.0.0)
,该模式下将同步区块头以及同组织内的交易信息,并支持用户注册回调,在区块被提交至本地数据库后执行。
spv
模式下具有如下功能:
实现对多链的区块头及部分其他数据的同步,且可对外提供交易存在性及有效性证明。
可独立部署获取业务链的数据,并提供交易存在性及有效性证明服务。
可作为组件集成进其他模块,调用启动以获取业务链的数据,并提供交易存在性及有效性证明。
light
模式下具有如下功能:
实现对多链的区块及同组织内用户交易的同步功能。
可独立部署获取业务链的数据,并对外提供区块以及交易信息的查询功能,以及交易转发的功能。
可作为组件集成进其他模块,并支持用户注册回调,在区块被提交至本地数据库后执行。
快速部署和使用示例,请按如下链接内容进行:
部署使用文档
12.2.节点类型
节点类型 | 同步数据类型 | 是否参与共识 | 是否验证区块 | 是否执行交易 | 是否可接收执行类交易 | 是否可接收查询类交易 |
---|---|---|---|---|---|---|
共识节点 | 区块 | 是 | 是 | 是 | 是 | 是 |
同步节点 | 区块 | 否 | 是 | 是 | 是 | 是 |
SPV | 区块头 | 否 | 是 | 否 | 是 | 是 |
Light | 区块、同组织交易 | 否 | 是 | 否 | 是 | 是 |
12.3.设计思路
12.3.1.SPV轻节点模块设计
在SPV轻节点中,主要包含StateManager、ReqManager、BlockManager、Prover、Storage模块,各模块作用主要如下:
StateManager模块:状态管理模块,主要作用是订阅远端链最新区块、轮询远端链的最新区块高度。
ReqManager模块:请求管理模块,主要作用是请求spv未同步过来的区块、请求BlockManager模块验证不合法的区块。
BlockManager模块:区块管理模块,主要作用是验证区块有效性、并持久化有效区块的区块头和交易信息(若有)。
Prover模块:证明器模块,主要作用是对Client提供交易存在性和有效性证明服务(light模式下,只能验证同组织内的交易)。
Storage模块:存储模块,主要作用是存储同步的区块中的区块头及交易信息(若有)。
12.3.2.主要流程
12.3.2.1.SPV轻节点主要流程
SPV轻节点主要功能为同步区块头及同组织内的交易信息,并提供交易存在性和有效性证明,下图描述了主要功能的流程:
区块同步流程:
StateManager订阅远端业务链最新区块;
StateManager获取远端业务链最新区块;
2.1 若最新区块高度大于spv当前区块高度(currentHeight),则BlockManager处理该区块,否则丢弃;
2.2 BlockManager检验区块的有效性;
2.3 区块有效,存储区块头和区块中同组织内的交易信息(若有);
2.4 区块无效,通过ReqManager重新请求该高度区块;StateManager轮询远端链最新高度;
StateManager获取远端链最新高度;
4.1 若最新高度大于spv本地区块高度(localHeight),则ReqManager处理该高度信息,否则丢弃;
4.2 ReqManager请求相应高度的区块;
4.3 ReqManager获取到相应高度的区块,并交给BlockManager处理;
交易存在性和有效性验证流程: 5. Client提供TxValidationRequest,调用Prover中的ValidTransaction接口进行交易有效性证明;
5.1 Prover从本地通过TxKey获得交易Hash;
5.2 Prover调用SDK通过TxKey获得交易实体;
5.3 Prover比对TxValidationRequest中的交易信息和交易实体中的信息,以及交易Hash是否一致,判断交易存在性和有效性;
12. SPV轻节点 — chainmaker-docs v2.2.1 documentation