深度历史班
## 概述
标准观察小组的一个变体是保留区块链的非删节历史,并允许人们查询过去任意块的账户状态。这样的设置被称为 深史观察小队 。
深度历史设置能够解决历史帐户(状态)查询,即回答以下问题:
5 月 4 日爱丽丝的余额是多少?
GET http://squad:8080/address/erd1qyu5wthldzr8wx5c9ucg8kjagg0jfs53s8nr3zpz3hypefsdd8ssycr6th?blockNonce=9250000
注
目前,API 客户端必须执行从期望时间戳到块随机数的转换。在未来的版本中,API 将直接支持基于时间戳的查询。
十月一日时
UTK / WEGLD
流动性池里有多少 UTK?
GET http://squad:8080/address/erd1qqqqqqqqqqqqqpgq0lzzvt2faev4upyf586tg38s84d7zsaj2jpsglugga/key/726573657276650000000a55544b2d326638306539?blockNonce=11410000
在上面的例子中,密钥726573657276650000000a55544b2d326638306539
被解码为reserve\x00\x00\x00\nUTK-2f80e9
。
公共实例
注
截至 2022 年 10 月,一个公共的深度历史班还不可用。实例正在准备中,应该会在 2022 年 11 月准备好。
内部实例
深入历史小组可以在内部建立,就像常规观察小组一样。然而,存储需求可能会随着时间的推移而增加——我们将在单独的章节中解决这个问题。
由于深度历史小队的每个观察者都必须有一个非删减的历史,他们的非常规数据库必须提前下载或重建。
下载非修剪数据库
注
截至 2022 年 10 月,一个为 mainnet 和 devnet 提供非删减数据库的公共知识库正在建设中。这个存储库将采取数字海洋(S3 兼容)空间的形式。一旦存储库准备好了,就可以通过db-archive-scripts下载数据了——文档会随之而来。
重建非修剪数据库
下载非删除历史的另一种方法是在本地重建它(在您自己的基础设施上)。
在底层,重建过程依赖于 import-db 特性,该特性允许我们重新处理以前处理过的块——同时,出于我们的目的,我们还将保留完整的、未删减的历史。出于我们的目的,import-db
过程需要一个目标数据库(放在文件夹node-workdir/db
中)和一个源数据库(通常放在文件夹node-workdir/import-db/db
中)。
接下来,为了给观察者重建历史,我们需要两个数据库档案:一个旧档案和一个新档案。为了重建整个小队的历史,需要4 x 2
档案(下载)。
下载必要的文件和解压它们被封装在一个叫做重建引导的步骤中。
自举
首先,选择一个空文件夹作为小队实例的工作空间(工作目录)——例如,~/deep-history-workspace
。
之后,仿照 default.reconstruction.json
准备一个名为reconstruction.json
的配置文件,保存在所选的工作区。对于字段oldestArchive
和newestArchive
,使用指向Elrond公共档案馆的 URL(可通过请求获得)。下面例子中的 URL 仅仅是占位符。
// ~/deep-history-workspace/reconstruction.json
{
"networks": {
"devnet": {
"shards": {
"0": {
"oldestArchive": "https://.../shard-0/2022-October-15.tar",
"newestArchive": "https://.../shard-0/2022-October-25.tar"
},
"1": {
"oldestArchive": "https://.../shard-1/2022-October-15.tar",
"newestArchive": "https://.../shard-1/2022-October-25.tar"
},
"2": {
"oldestArchive": "https://.../shard-2/2022-October-15.tar",
"newestArchive": "https://.../shard-2/2022-October-25.tar"
},
"metachain": {
"oldestArchive": "https://.../shard-metachain/2022-October-15.tar",
"newestArchive": "https://.../shard-metachain/2022-October-25.tar"
}
}
}
}
}
上面,我们选择了(作为一个例子)这样一种方式来重建 10 月 15 日和 10 月 25 日之间的历史(大约 10 天,大约 120 个devnet时期)。
现在,引导重建如下:
# Download the docker-compose configuration
wget https://github.com/ElrondNetwork/deep-history/blob/main/docker-compose.yml
# Run the "bootstrap" Docker service
DEEP_HISTORY_WORKSPACE=${HOME}/deep-history-workspace DOCKER_USER=$(id -u):$(id -g) docker compose \
--file ./docker-compose.yml \
--profile bootstrap \
--project-name deep-history-reconstruction up --detach
如果您喜欢在当前 shell 中等待,直到引导程序完成,可以省略--detach
标志。
注
下载并解压存档文件可能需要一段时间。
开始重建
一旦引导步骤准备就绪,您就可以继续运行重建容器了。下面的例子如果对于 devnet :
# Download the docker-compose configuration (skip this step if performed before)
wget https://github.com/ElrondNetwork/deep-history/blob/main/docker-compose.yml
# Possible profiles: reconstruction-devnet, reconstruction-devnet-0, reconstruction-devnet-1, reconstruction-devnet-2, reconstruction-devnet-metachain
DEEP_HISTORY_WORKSPACE=${HOME}/deep-history-workspace DOCKER_USER=$(id -u):$(id -g) docker compose \
--file ./docker-compose.yml \
--profile reconstruction-devnet \
--project-name deep-history-reconstruction up --detach
注
重建(使用 import-db under the hood,如前所述)需要很长时间——取决于机器的资源(CPU &内存)和所选档案之间的距离。
一旦容器完成了重建(对于一个碎片),它将关闭。一旦构建项目 deep-history-reconstruction
的所有容器都停止了,重建就准备好了,你就可以开始组队了(下一部分)。
首发阵容
可以使用 docker-compose 启动小队,如下所示(该示例针对 devnet ):
# Download the docker-compose configuration (skip this step if performed before)
wget https://github.com/ElrondNetwork/deep-history/blob/main/docker-compose.yml
# Possible profiles: squad-devnet, squad-devnet-0, squad-devnet-1, squad-devnet-2, squad-devnet-metachain, squad-devnet-proxy
DEEP_HISTORY_WORKSPACE=${HOME}/deep-history-workspace DOCKER_USER=$(id -u):$(id -g) docker compose \
--file ./docker-compose.yml \
--profile squad-devnet \
--project-name deep-history-squad-devnet up --detach
恭喜你,你已经建立了一个深度历史观察小组!网关应该准备好解决历史账户(状态)查询。
搬运入库要求
警告
本节中的文档是初步的,可能会更改。