脉波开发者文档
  • 脉波开发者文档
  • 基础主題
    • 脉波简介
    • MAPO币
    • 全链去中心化应用
    • 全链应用与单链或多链应用的区别
    • 第三方信任跨链与点对点跨链方案区别
    • 比特币二层
      • brc-201
    • 预言机 Oracle
      • Supra: MAP Protocol 上的去中心化预言机
    • 帐户
    • 交易
    • 区块
    • MPT树
    • RLP编码
    • Gas费用
    • 消息跨链
    • 轻客户端
      • MAPO轻客户端
    • 全链开发组件层MOS
      • MOS接口和功能
      • MOS的部署
      • Messenger
    • 中继链(atlas)
      • 节点架构
        • 中继链(atlas)架构 - 区块和交易结构
        • 创世
          • 创世配置 - 介绍创世配置文件
          • 创世合约
            • ABI
              • Accounts
              • Election
              • EpochRewards
              • LockedGold
              • Validators
            • 地址
            • 部署
        • 预编译合约 - 支持的预编译合约
        • 协议
          • Proof of Stake
          • 共识
          • 选举
          • 奖励
          • 治理
      • 部署节点 - 包括公共RPC节点
        • 运行节点(中继链)
        • 归档节点(中继链)
        • 引导节点(中继链)
        • 验证节点 (中继链)
        • RPC节点(中继链)
      • Marker工具 - atlas的简易客户端工具
        • Genesis
        • Validator
        • Vote
        • Common
      • 搭建私有网络
      • 公共网络服务信息
        • 公共网络
      • 示例
        • 如何成为一个 Validator 并加入到 Atlas 网络中
        • 如何成为一个 Validator 并加入到 Atlas 网络中[高级]
    • Compass(maintainer,messenger)
      • Compass - 架构及模块说明
      • Compass配置参数
      • Compass环境与部署
      • Compass二次开发 - 基于compass定义自己的路由服务
  • MAPO技术堆栈
    • 堆栈
      • 接入的链
    • EVM兼容
      • 智能合约语言
      • 智能合约结构
      • 智能合约库
      • 编译智能合约
      • 测试智能合约
      • 部署智能合约
      • 可组合性
      • 智能合约安全性
      • 智能合约形式化验证
      • 开发框架
      • 开发网络
    • 实现跨链互通
      • EVM兼容链的跨链互通
        • 轻客户端验证
        • 轻客户端状态更新
        • MOS层
      • 非EVM兼容链的跨链互通
        • 轻客户端验证
        • 轻客户端状态更新
        • MOS层
    • 如何开发全链应用
    • 轻客户端信息
    • SDK/API - mapo支持的API
      • MOS接口
      • 轻客户端接口
      • 中继链RPC
        • json-rpc
          • atlas json rpc
          • atlas consensus rpc
        • javaScript sdk
        • go-sdk
      • 后端API
        • 浏览器API
        • 数据统计与分析API
  • 零知识证明(zk)
    • 零知识证明
Powered by GitBook
On this page
  • 什么是归档节点
  • 用途
  • 硬件要求
  • 运行归档节点
  1. 基础主題
  2. 中继链(atlas)
  3. 部署节点 - 包括公共RPC节点

归档节点(中继链)

归档节点是 atlas 客户端实例,配置用于构建所有历史状态的归档。 对于某些应用场景来说,它是很有用的,但可能比全节点更难运行。

什么是归档节点

为了理解归档节点的重要性,让我们澄清一下“状态”的概念。 atlas 可以被称为基于交易的状态机。它由执行交易并改变其状态的帐户和应用程序组成。 关于每个帐户和合约的信息等全局数据储存在一个名为“状态”的字典树数据库当中。包括:

  • 帐户余额和随机数

  • 合约代码和存储

  • 与共识相关的数据,例如质押存款合约

为了与网络交互,验证和产生新的区块, atlas 客户端必须跟上最新的变化(链的头部),从而显示最新的状态。 一个配置为全节点的客户端会验证并追踪网络的最新状态,但只缓存过去几个状态,例如与最后 128 个区块相关联的状态,这样它就可以处理链重组并提供对最近数据的快速访问。 最近的状态是所有客户端在验证传入交易和使用网络时需要的状态。

你可以把状态想象成给定区块的瞬时网络快照,而归档是历史回放。

历史状态可被安全修剪,因为它们对网络的运行不是必要条件,而且对于客户端来说,保留所有过时的数据没有意义。 在某个最近区块之前存在的状态(例如在头部之前 128 个 区块)实际上会被丢弃。 全节点只保留历史区块链数据(区块和交易)和偶尔的历史快照,它们可以用来根据请求重新生成较旧的状态。 在 EVM 中重新执行过往交易就可以做到这一点;当所需状态离最近的快照很远时,可能对计算要求很高。

然而,这意味着在全节点上访问历史状态会消耗大量计算资源。客户端可能需要执行从创世块开始的所有过往交易并计算一个历史状态。 归档节点不仅会储存最近的状态,而且还会储存在创建每个区块以后的每个历史状态,进而解决这个问题。它基本上是以更大的磁盘空间需求为代价。

需要注意的是,网络不依赖于归档节点来保留和提供所有历史数据。如上所述,所有历史中间状态都可以在全节点上派生出来。 任何全节点都会存储交易而且可重放交易以构建整个归档。

用途

像发送交易、部署合约、验证共识等常规使用方式不需要访问历史状态。用户不需要从一个归档节点来进行标准的网络交互。

状态归档的主要好处是快速访问关于历史状态的查询。 例如,归档节点会立即返回以下类似结果:

  • 帐户 0x1337…在区块 15537393 时的以太币余额是多少?

  • 合约 0x 中的代币 0x 在区块 1920000 时的余额是多少? 如上所述,一个全节点需要通过 EVM 执行来生成这些数据,这会消耗 CPU 并花费时间。 归档节点在磁盘上访问它们,并立即提供响应。 此功能对于基础设施的某些部分十分有用,例如:

  • 服务提供商,如区块浏览器

  • 研究人员

  • 安全分析师

  • 去中心化应用程序开发者

  • 审计和合规

还有一些免费服务也允许访问历史数据。由于运行一个归档节点的要求更高,这种访问通常是有限的,只适用于偶尔的访问。 如果你的项目需要不断地访问历史数据,你应该考虑自己运行一个。

硬件要求

始终确保满足客户端文档中给定模式的硬件要求。归档节点的最大要求是磁盘空间。此项要求从 3TB 到 12TB 不等。 虽然人们可能认为机械硬盘是更适合存储大量数据的解决方案,不过同步数据和持续地更新链头需要使用固态硬盘。SATA 硬盘足够好,但它应该拥有可靠的质量,至少是 TLC 类型的。硬盘可以安装在有足够插槽的台式电脑或服务器中。 这样的专用设备是运行高正常运行时间节点的理想选择。在笔记本上运行是完全可以实现的,代价是需要牺牲一定的便携性。

所有数据需要存放在一个卷中,因此必须对硬盘进行合并,例如采用 RAID0 方案或 LVM。 你也可以考虑使用 ZFS,因为它支持“写时复制”,从而确保数据正确地写入磁盘,而不会出现任何低级错误。

为了提高稳定性和安全性,防止发生意外的数据库损坏,你可以在系统支持时考虑使用 ECC 内存,尤其是在专业设置中。 内存大小通常建议与全节点相同,但更大的内存可以帮助加速同步。

在初始同步期间,归档模式下的客户端将执行自创世块以来的每笔交易。执行速度主要受 CPU 限制,所以更快的 CPU 可以帮助缩短初始同步时间。

运行归档节点

通过下面的命令运行归档节点:

atlas --datadir ./node --syncmode "full" --gcmode "archive"
Previous运行节点(中继链)Next引导节点(中继链)

Last updated 1 year ago