本文介绍了 TrueBlocks Services Architecture,该架构包含多个服务,用于区块链数据的抓取、监控、IPFS存储、控制和API接口。
在之前的一篇文章 Mist II — Nerds 的复仇 中,我们讨论了 Khedra,以及如果它成为最初的 Mist 浏览器的一部分,这个命运多舛的软件可能会有更好的工作机会。
在这份简短的(AI 辅助的)文档中,我们概述了我们系统的一个组件,该组件促进了这项工作的 “用长时间运行的进程监视链顶” 方面。我们将其称为 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 的快速数据检索能力。
主要特点:
2. 监视器服务 ( service_monitor.go
)
目的: 提供区块链地址监视,具有自动更改检测和可配置的数据提取。此服务持续监视系统中的所有现有监视器,检测跟踪地址何时出现新交易,并根据每个地址的配置自动提取和缓存指定的数据类型。像 Mist II 这样的前端桌面应用程序可以使用此服务来保持其后端数据 “新鲜”。
主要特点:
chifra list — count
来检测跟踪地址的新外观提取的数据类型:
配置选项:
ExtractLogs
提取并缓存事件日志ExtractTraces
提取并缓存跟踪ExtractTransactions
提取并缓存交易ExtractReceipts
提取并缓存回执ExtractBalances
提取并缓存余额快照Articulate
将说明应用于提取的数据CacheResults
启用自动缓存有关详细文档,请参阅 [MONITOR_SERVICE]。
3. IPFS 服务 ( service_ipfs.go
)
目的: 管理 IPFS 守护程序,用于在 TrueBlocks 网络中分布式存储和检索区块链索引数据。此服务支持索引区块的去中心化共享,允许用户下载预先计算的索引数据,而不是从头开始构建,从而显着减少了初始同步时间。
主要特点:
~/.ipfs/config
读取 IPFS 配置4. 控制服务 ( service_control.go
)
目的: 提供 HTTP REST API,用于 TrueBlocks 服务生态系统的服务管理和运行时控制。此服务使管理员和监视系统能够暂停、恢复和查询单个服务的状态,而无需直接访问底层进程或配置文件。
主要特点:
5. API 服务 ( service_api.go
)
目的: 运行 TrueBlocks API 守护程序,该守护程序提供 RESTful HTTP 端点,作为远程访问区块链数据的备用接口。此服务适用于必须在远程计算机上运行抓取器和监视器的情况,模仿 SDK 和命令行 chifra
工具的所有功能,但使用远程 API 会显着降低 TrueBlocks 本地流式数据架构的速度优势。
主要特点:
DaemonBytes
函数抓取报告 ( service_scraper_report.go
)
跟踪区块链同步状态
报告以下指标:
这些服务主要由以下对象使用:
khedra/app/action_daemon.go
) — 主要协调器运行抓取器、监视器、api 和 IPFS 服务// 创建服务
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()
控制服务提供 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 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!