使用 TrueBlocks SDK 持续监听链数据

  • tjayrush
  • 发布于 14小时前
  • 阅读 123

本文介绍了 TrueBlocks Services Architecture,该架构包含多个服务,用于区块链数据的抓取、监控、IPFS存储、控制和API接口。

使用TrueBlocks 如何毫不费力地监视区块链

在之前的一篇文章 Mist II — Nerds 的复仇 中,我们讨论了 Khedra,以及如果它成为最初的 Mist 浏览器的一部分,这个命运多舛的软件可能会有更好的工作机会。

在这份简短的(AI 辅助的)文档中,我们概述了我们系统的一个组件,该组件促进了这项工作的 “用长时间运行的进程监视链顶” 方面。我们将其称为 TrueBlocks 服务架构。本文是对它的描述。

TrueBlocks 服务架构

在我们的 TrueBlocks Core 代码中(位于 https://github.com/TrueBlocks/trueblocks-core ),有一个名为 SDK 的子模块:https://github.com/TrueBlocks/trueblocks-sdk

SDK 的一部分称为 TrueBlocks 服务架构 (./sdk/services)。它是名为 Khedra 的软件程序的基础,在上面提到的文章中有详细描述。

以下是主要组件:

核心服务框架

1. 服务接口 ( service.go )

定义了所有服务都必须实现的 Servicer 接口:

  • Name() — 服务标识符
  • Initialize() — 设置逻辑
  • Process(chan bool) — 主服务循环
  • Cleanup() — 优雅关闭
  • Logger() — 日志记录接口

2. 扩展接口

  • Pauser — 可以暂停/取消暂停的服务
  • ChildManager — 管理子进程的服务

3. 服务管理器 ( service_manager.go )

  • 协调多个服务
  • 通过信号管理处理优雅关闭
  • 支持跨所有服务的暂停/取消暂停操作
  • 提供带有等待组的并发清理

单个服务

1. 抓取服务 ( service_scraper.go )

目的: 持续抓取区块链数据并维护 Unchained Index,该索引支持跨整个区块链历史记录的快速查询。此服务监视区块链上的新区块,处理交易、收据、日志和跟踪,并更新本地索引结构,从而支持 TrueBlocks 的快速数据检索能力。

主要特点:

  • 支持多种初始化模式:“none”、“blooms”、“all”
  • 具有可配置目标的多链支持
  • 可暂停操作
  • 可配置的睡眠间隔和批量大小
  • 报告抓取进度(落后区块数、暂存区块数、最终确定区块数)
  • 处理 “已赶上” 检测(在头部区块的 28+4 个区块内)

2. 监视器服务 ( service_monitor.go )

目的: 提供区块链地址监视,具有自动更改检测和可配置的数据提取。此服务持续监视系统中的所有现有监视器,检测跟踪地址何时出现新交易,并根据每个地址的配置自动提取和缓存指定的数据类型。像 Mist II 这样的前端桌面应用程序可以使用此服务来保持其后端数据 “新鲜”。

主要特点:

  • 持续监视: 自动发现和监视所有现有的地址监视器
  • 更改检测: 使用 SDK 版本的 chifra list — count 来检测跟踪地址的新外观
  • 基于通道的处理: 用于处理检测到的更改的异步管道
  • 可配置的数据提取: 每个地址的日志、跟踪、交易、收据和余额的配置,或任意组合
  • 自动缓存: 提取的数据会自动缓存到 TrueBlocks 缓存系统
  • 批量处理: 有效地批量检查多个地址(默认值:每个批次 200 个)
  • 线程安全: 具有适当互斥锁保护的并发安全设计
  • 可暂停操作: 可以暂停和恢复,而不会丢失状态

提取的数据类型:

  • 具有可选说明的事件日志
  • 交易跟踪
  • 交易详情
  • 交易收据
  • 余额快照
  • 已对账的损益表

配置选项:

  • ExtractLogs 提取并缓存事件日志
  • ExtractTraces 提取并缓存跟踪
  • ExtractTransactions 提取并缓存交易
  • ExtractReceipts 提取并缓存回执
  • ExtractBalances 提取并缓存余额快照
  • Articulate 将说明应用于提取的数据
  • CacheResults 启用自动缓存

有关详细文档,请参阅 [MONITOR_SERVICE]。

3. IPFS 服务 ( service_ipfs.go )

目的: 管理 IPFS 守护程序,用于在 TrueBlocks 网络中分布式存储和检索区块链索引数据。此服务支持索引区块的去中心化共享,允许用户下载预先计算的索引数据,而不是从头开始构建,从而显着减少了初始同步时间。

主要特点:

  • 检测 IPFS 是否已在运行
  • 如果需要,启动 IPFS 守护程序
  • ~/.ipfs/config 读取 IPFS 配置
  • 从多地址格式中提取 Api 端口
  • 通过超时进行优雅的进程管理

4. 控制服务 ( service_control.go )

目的: 提供 HTTP REST API,用于 TrueBlocks 服务生态系统的服务管理和运行时控制。此服务使管理员和监视系统能够暂停、恢复和查询单个服务的状态,而无需直接访问底层进程或配置文件。

主要特点:

  • /status 或 /isPaused — 检查服务状态
  • /pause — 暂停服务
  • /unpause — 恢复服务
  • JSON 响应
  • 查找可用的控制端口(8338、8337、8336、8335)

5. API 服务 ( service_api.go )

目的: 运行 TrueBlocks API 守护程序,该守护程序提供 RESTful HTTP 端点,作为远程访问区块链数据的备用接口。此服务适用于必须在远程计算机上运行抓取器和监视器的情况,模仿 SDK 和命令行 chifra 工具的所有功能,但使用远程 API 会显着降低 TrueBlocks 本地流式数据架构的速度优势。

主要特点:

  • 自动查找可用端口(8080、8088、9090、9099)
  • 使用 TrueBlocks SDK DaemonBytes 函数
  • 处理基于上下文的取消
  • 提供用于区块链数据的 HTTP API 端点

服务协调

抓取报告 ( service_scraper_report.go )

跟踪区块链同步状态

报告以下指标:

  • 头部区块编号
  • 落后区块数(未成熟、暂存、最终确定)
  • 处理批量大小
  • 时间戳

集成点

这些服务主要由以下对象使用:

  1. Khedra 守护程序 ( khedra/app/action_daemon.go) — 主要协调器运行抓取器、监视器、api 和 IPFS 服务
  2. 测试运行器 (src/dev_tools/testRunner/main.go) — 用于启动 API 进行测试的测试基础设施

服务生命周期

  1. 初始化: 每个服务都会设置其依赖项和配置
  2. 流程: 服务使用基于上下文的取消运行其主循环
  3. 就绪信号: 服务在准备好处理请求时发出信号
  4. 优雅关闭: 服务在终止信号时清理资源
  5. 暂停/恢复: 兼容的服务可以通过控制器 api 在操作期间暂停和恢复

关键设计模式

  • 基于接口的设计,以实现可扩展性
  • 基于上下文的取消,以实现干净的关闭
  • 信号处理,用于优雅的流程管理
  • 端口发现,以避免冲突
  • 结构化日志记录 与 slog
  • 使用 goroutine 进行并发执行以提高速度
  • 使用适当清理的错误处理 (标准 GoLang)

使用示例

// 创建服务
apiSvc := NewApiService(logger)
scraperSvc := NewScrapeService(logger, “download”, “all”, []string{“mainnet”}, 13, 2000)
controlSvc := NewControlService(logger)

// 创建服务管理器
services := []Servicer{apiSvc, scraperSvc, controlSvc}
manager := NewServiceManager(services, logger)

// 启动所有服务
manager.StartAllServices()
manager.HandleSignals()

API 端点

控制服务提供 REST 端点用于运行时管理:

  • GET /status?name=<service_name> — 获取特定服务或所有服务的状态
  • POST /pause?name=<service_name> — 暂停特定服务或所有可暂停服务
  • POST /unpause?name=<service_name> — 恢复特定服务或所有已暂停服务

有关包括所有可用端点、请求/响应格式和使用示例在内的完整 API 文档,请参阅 TrueBlocks API 文档

架构优势

此架构为将 TrueBlocks 作为分布式系统运行提供了坚实的基础,该系统具有多个协调的服务来处理区块链索引、API 服务和数据管理的不同方面。

欢迎你的支持

TrueBlocks 由个人资金和以太坊基金会的赠款(2018 年、2022 年、2024 年)、Optimism Retro PGF(2022 年、2023 年)、Moloch DAO(2021 年)、Filecoin/IPFS(2021 年)、ConsenSys(2019 年)以及我们慷慨的 GitCoin 捐助者资助。

如果你喜欢这篇文章并希望支持我们的工作,请使用 ETH 或任何代币捐赠给我们的 GitCoin grant。如果你是 Optimism 徽章持有者,请在未来的 Retro 轮次中投票支持我们的项目。或者直接通过 trueblocks.eth 或 0xf503017d7baf7fbc0fff7492b751025c6a78179b 向我们发送小费。

  • 原文链接: tjayrush.medium.com/true...
  • 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
点赞 0
收藏 0
分享
本文参与登链社区写作激励计划 ,好文好收益,欢迎正在阅读的你也加入。

0 条评论

请先 登录 后评论
tjayrush
tjayrush
江湖只有他的大名,没有他的介绍。