ArchiveReader使用手册

1. 功能描述

ArchiveReader是一个独立的二进制,其主要功能包括两个方面:

  1. 将hyperchain上归档的数据重新restore到线上

  2. 提供状态证明功能

2. 使用方式

2.1 归档数据restore

在部署方面, 相比于hyperchain,ArchvieReader二进制只需要一份配置文件即可启动。而配置文件可以完全复用hyperchain的配置。

在使用方面, ArchiveReader的核心功能为线下数据restore和通过api接口查询restore到线上的数据,因此使用ArchiveReader需要首先准备线下数据,线下数据的来源即为hyperchain上归档以后的线下目录下的内容,具体的,一份合法的线下数据内容如下图所示:

image0

上图为一个hyperchain-2.7.0归档过3次的节点的data/archive目录下的数据,其中的红色框圈起来的数据,是需要手动拷贝到ArchvieReader的namespaces/global/data/archive目录下的数据。即一个合法的ArchiveReader节点在启动前应该准备好如下的目录结构:

image1

至此,ArchiveReader的线下数据准备完成,下面可以进行restore操作:首先 启动ArchiveReader,然后可以看到其namespaces/global/data目录下的结构为:

image2

archive目录下新增了archive.record文件和genesis.meta文件。public目录下的结构和普通的vp节点的public目录下结构相同。

接下来, 用户就可以通过命令进行restore操作了 ,ArchiveReader上提供了restore的API,curl命令为:

curl localhost:8081 --data '[{"jsonrpc": "2.0", "id": 0, "method": "archive_restore", "params": ["0xf48816b2aaac6461be86b6256bf438de", true], "namespace": "global"}]'

接口说明:

接口名称

archive_restore

参数说明

名称

类型

含义

filterID

string

预期恢 复的区块范 围对应的sn apshot标识

shouldSync

bool

是否同 步的等待返 回(true为 同步等待)

返回值

如果第二个参数true, 则接口返回true即表示restore完成;

如果为false,则需要通过archiv e_queryArchive接口获得结果;查询请 求为:如果成功,可以看到如下结果:

当归档成功后,ArchiveReader的线上数据库中会有这一段数据,如图所示:

image3

此时用户可以使用ArchiveReader暴露的读取数据的接口进行数据访问。

restore的使用限制条件!!!

  1. 整体上,ArchiveReader要求按照区块号 从小到大 的顺序 连续 进行restore,比如线下有多份归档数据(分别对应:0-15,15-20,20-40),那么用户需要按照先0-15,再15-20,最后20-40的顺序进行restore。过程中 不能出现 区块号的断档。

  2. 如果当前ArchiveReader没有任何数据,ArchiveReader并不要求一定要从0号开始restore,即上述的场景下,用户可以按照先15-20,再20-40的顺序进行restore,这样也是合法的。但是后续 不再允许 restore[0-15]了。

2.2 状态证明

参考《状态证明使用手册》

2.3 ArchiveReader支持接口

接口类型

接口名称

接口描述

交易接口

tx_getTransactionByHash

根据交 易哈希值查询交易详情

tx_ getTransactionByBlockHashAndIndex

根据区块哈 希及索引查询交易详情

tx_ge tTransactionByBlockNumberAndIndex

根据区块号及 索引信息查询交易详情

tx_getTransactionsCount

根据区块号及 索引信息查询交易详情

tx_getTxAvgTimeByBlockNumber

查询指定区 块中交易平均处理时间

tx_getTransactionReceipt

查询指定交易回执信息

tx_getBlockTransactionCountByHash

根据区块 哈希查询区块交易数量

tx _getBlockTransactionCountByNumber

根据区 块号查询区块交易数量

tx_getTransactionsVersion

查询 平台当前的交易版本号

tx_getTransactionsWithLimit

查询指定区块区间 的交易(可用于分页)

tx_getTransactionsByTimeWithLimit

查询指定时间区间内 的交易(可用于分页)

tx_getTransactionsByExtraID

查询 extraId为指定值的交易

tx_getTransactionsByFilter

查 询符合过滤条件的交易

t x_getInvalidTransactionsWithLimit

查询指定区块区 间的非法交易(可分页)

tx _getInvalidTransactionByBlockHash

查询非法交易列表(by block hash)

tx_g etInvalidTransactionByBlockNumber

查询非法交易列表(by block number)

tx_getInvalidTransactionsCount

查 询链上所有非法交易量

区块接口

block_latestBlock

获取最新区块

block_getBlockByHash

根据区块 的哈希值返回区块信息

block_getBlockByNumber

根 据区块号返回区块信息

bloc k_getAvgGenerateTimeByBlockNumber

根据区块区间计算 出区块的平均生成时间

block_getGenesisBlock

查询创世区块号

block_getChainHeight

查询最新区块号

block_getBlocksWithLimit

查询指定区块区间的所 有区块(可用于分页)