归档节点(中继链)
归档节点是 atlas 客户端实例,配置用于构建所有历史状态的归档。 对于某些应用场景来说,它是很有用的,但可能比全节点更难运行。
什么是归档节点
为了理解归档节点的重要性,让我们澄清一下“状态”的概念。 atlas 可以被称为基于交易的状态机。它由执行交易并改变其状态的帐户和应用程序组成。 关于每个帐户和合约的信息等全局数据储存在一个名为“状态”的字典树数据库当中。包括:
帐户余额和随机数
合约代码和存储
与共识相关的数据,例如质押存款合约
为了与网络交互,验证和产生新的区块, atlas 客户端必须跟上最新的变化(链的头部),从而显示最新的状态。 一个配置为全节点的客户端会验证并追踪网络的最新状态,但只缓存过去几个状态,例如与最后 128 个区块相关联的状态,这样它就可以处理链重组并提供对最近数据的快速访问。 最近的状态是所有客户端在验证传入交易和使用网络时需要的状态。
你可以把状态想象成给定区块的瞬时网络快照,而归档是历史回放。
历史状态可被安全修剪,因为它们对网络的运行不是必要条件,而且对于客户端来说,保留所有过时的数据没有意义。 在某个最近区块之前存在的状态(例如在头部之前 128 个 区块)实际上会被丢弃。 全节点只保留历史区块链数据(区块和交易)和偶尔的历史快照,它们可以用来根据请求重新生成较旧的状态。 在 EVM 中重新执行过往交易就可以做到这一点;当所需状态离最近的快照很远时,可能对计算要求很高。
然而,这意味着在全节点上访问历史状态会消耗大量计算资源。客户端可能需要执行从创世块开始的所有过往交易并计算一个历史状态。 归档节点不仅会储存最近的状态,而且还会储存在创建每个区块以后的每个历史状态,进而解决这个问题。它基本上是以更大的磁盘空间需求为代价。
需要注意的是,网络不依赖于归档节点来保留和提供所有历史数据。如上所述,所有历史中间状态都可以在全节点上派生出来。 任何全节点都会存储交易而且可重放交易以构建整个归档。
用途
像发送交易、部署合约、验证共识等常规使用方式不需要访问历史状态。用户不需要从一个归档节点来进行标准的网络交互。
状态归档的主要好处是快速访问关于历史状态的查询。 例如,归档节点会立即返回以下类似结果:
帐户 0x1337…在区块 15537393 时的以太币余额是多少?
合约 0x 中的代币 0x 在区块 1920000 时的余额是多少? 如上所述,一个全节点需要通过 EVM 执行来生成这些数据,这会消耗 CPU 并花费时间。 归档节点在磁盘上访问它们,并立即提供响应。 此功能对于基础设施的某些部分十分有用,例如:
服务提供商,如区块浏览器
研究人员
安全分析师
去中心化应用程序开发者
审计和合规
还有一些免费服务也允许访问历史数据。由于运行一个归档节点的要求更高,这种访问通常是有限的,只适用于偶尔的访问。 如果你的项目需要不断地访问历史数据,你应该考虑自己运行一个。
硬件要求
始终确保满足客户端文档中给定模式的硬件要求。归档节点的最大要求是磁盘空间。此项要求从 3TB 到 12TB 不等。 虽然人们可能认为机械硬盘是更适合存储大量数据的解决方案,不过同步数据和持续地更新链头需要使用固态硬盘。SATA 硬盘足够好,但它应该拥有可靠的质量,至少是 TLC 类型的。硬盘可以安装在有足够插槽的台式电脑或服务器中。 这样的专用设备是运行高正常运行时间节点的理想选择。在笔记本上运行是完全可以实现的,代价是需要牺牲一定的便携性。
所有数据需要存放在一个卷中,因此必须对硬盘进行合并,例如采用 RAID0 方案或 LVM。 你也可以考虑使用 ZFS,因为它支持“写时复制”,从而确保数据正确地写入磁盘,而不会出现任何低级错误。
为了提高稳定性和安全性,防止发生意外的数据库损坏,你可以在系统支持时考虑使用 ECC 内存,尤其是在专业设置中。 内存大小通常建议与全节点相同,但更大的内存可以帮助加速同步。
在初始同步期间,归档模式下的客户端将执行自创世块以来的每笔交易。执行速度主要受 CPU 限制,所以更快的 CPU 可以帮助缩短初始同步时间。
运行归档节点
通过下面的命令运行归档节点:
Last updated