2022 年 9 月 21 日星期三,EOS 区块生产者将通过执行 Mandel 3.1 的协调共识升级,开始开辟一条通往自主发展的新道路。

任何运行节点的人都必须在9月21日之前升级其节点,才能继续与网络同步。

Mandel 3.1 版本的协调共识升级包括由网络共识为指导的优先事项。 在此版本中,EOSIO 网络联盟正式用 EOS 网络基金会 (ENF) 核心开发团队,取代了之前不专注工作的 EOSIO 开发人员。 这种解放实现了跨链合作,并将网络推向未来。

Mandel 升级代表网络拥有了自己的代码库。

作为网络的守护者,EOS 上的区块生产者承担着稳定网络升级的责任。 然而,随着共识升级的到来 ,网络中的所有节点都需要更新

过去几周,有许多人一直在参与测试Mandel 3.1,EOS网络基金会工程团队也定期推送候选版本。相关测试仍在继续,因为开发人员正在对Mandel 3.1和相关软件进行最后的润色,预计在未来几天发布。

与之前的 EOSIO 1.8 版本一样,Mandel 3.1 需要区块生产者和其他网络参与者之间的协调,以确保网络共识升级的顺利进行。 软件发布后,节点运营商必须验证先决条件,删除过时的插件,并在更新二进制文件之前更改配置设置。

本文档提供了一个升级清单,以促进节点升级过程并避免中断操作。某些特定步骤可能因现有节点配置而有所不同,但这些基本步骤适用于大多数节点。

开发人员可以填写一份调查表(调查问题),以帮助确定最常用的API节点,并帮助确定资源的优先次序。

当EOS网络基金会发布了最终版本,节点运营商就可以升级到Mandel。最新的版本可从GitHub获取。

升级规划:

  • 在出块节点上执行这些步骤之前,请确保有一个可以尝试这些步骤的测试服务器。
  • 使用受支持的操作系统之一(Ubuntu 18.04、20.04、22.04),您可以在新服务器上安装 Mandel 3.1 或升级现有服务器,该说明假设您正在进行升级。
  • 决定您是使用预建的二进制文件还是自己编译二进制文件
  • 确保节点未配置 Mandel 3.1 中不再可用的插件(如 GitHub 版本中所述的弃用部分)。

使用这些插件的节点必须在激活前调整其解决方案,最好立即进行:

  • History v1 “history_plugin” + “history_api_plugin”
  • MongoDB “mongo_db_plugin

运营商可以将其解决方案迁移到HyperionChronicle等服务上。

此时,如果要用快照升级2.0(非2.1)节点,可以继续准备升级

  • EOSIO 2.1 使用了与 Mandel 不兼容的状态历史插件 (SHiP) 文件和 block.log 文件。 来自 2.1 的 SHiP 文件始终与 3.1 不兼容。 但是,如果节点从早期版本的 EOSIO 升级,block.log 文件可能是兼容的。
  • Mandel 3.1 基于 EOSIO 2.0,因此从 EOSIO 2.0 升级节点非常简单。

如果您使用的是 EOSIO 2.1,您可能还需要进行其他工作:

  • 2.1 不保存 block.log 文件或状态历史的节点是最容易升级的。 只需从快照启动节点。
  • 对于保留block.log文件但不保留状态历史的2.1节点,block.log文件的版本很重要。如果你的block.log是在EOSIO 2.1之前创建的,block.log文件与3.1兼容,您可以从快照开始,而不需要删除现有的block log。
    • 如果您使用的是 EOSIO 2.0,则您的block log是兼容的。
    • 如果您使用的是 EOSIO 2.1,您的block log可能兼容也可能不兼容。 需要删除不兼容的 block.log 文件。 要确定您的 block.log 文件是否兼容,请对您的节点使用以下命令:

      apt install bsdextrautils
      hexdump <nodeos data directory>/blocks/blocks.log | head


      (The <nodeos data directory> 将是将是 nodeos 存储区块链数据的 “data” 目录,例如, “.local/share/eosio/nodeos/data”)

      输出中的第二个数字(顶行,左起第二列)对应 block.log 版本。 0001、0002 或 0003 都正常。 0004 来自 EOSIO 2.1,不兼容。

      0000000 0003 8000 6a7f 017e e473 5a38 0827 d7e6
      0000010 8804 fb34 07c1 2f9f b1ab 3c7b 5b12 6a14


      输出继续。除了字体加粗部分外,其他内容将有所不同。
  • 如果您的节点正在运行 EOSIO 2.0 ,并且需要保留区块和状态历史记录,您可以使用快照进行升级。
  • 如果您的节点正在运行 EOSIO 2.1 ,并且需要保留状态历史记录,则您需要回放您的block log或从网络重新同步。 回放速度更快,因为它节省了网络开销。
    • 如果您有兼容版本的 block.log,您可以回放您的block.log。 见上文(2.2),回放可能需要数周时间。
    • 如果您的 block log不兼容,您需要从网络上的另一个节点重新同步。 您可以从 2.0 或 2.1 同步,并且重新同步会创建兼容的 block.log 文件。 重新同步可能需要数周时间。 重新同步时,block.log 和状态历史记录会一起创建。如果您想下载 2.0 block.log 文件,请联系EOS Support 获得帮助。

图1,运行2.1的节点根据其配置必须采取的步骤表

(黄色和红色突出显示的单元格代表可能需要数周时间才能完成的步骤)

如果您对升级过程有任何疑问,请联系 EOS Support获取帮助。

为节点升级做准备

  • 下载预建的二进制文件来安装Mandel。希望自己构建Mandel的操作者可以在readme中找到说明。
  • 如果需要安装二进制文件的话,在安装之前,请确保您拥有兼容的快照。
    • 如果您正在运行 EOSIO 2.0(但不是 EOSIO 2.1),您可以使用以下命令从本地节点内生成快照:

      curl -X POST http://127.0.0.1:8888/v1/producer/create_snapshot

      要执行快照,必须使用配置选项 plugin = eosio::producer_api_plugin启动节点

      确保您的节点在启用 producer_api_plugin 时不向公众公开,因为它仅适用于管理员。
  • 一些配置选项已经改变,如果存在无效的配置选项,节点将无法启动。
    • Reversible Block数据库的配置已被删除,操作者应该从config.ini和其他脚本中删除这些参数。
      • reversible-blocks-db-size-mb 
      • reversible-blocks-db-guard-size-mb 
      • fix-reversible-blocks 
      • import-reversible-blocks
      • export-reversible-blocks
    • 节点2.1 中的Block log拆分功能已被删除并更改为log block轮换。 删除以下参数:
      • blocks-log-stride
      • max-retained-block-files
      • blocks-archive-dir

        并将其替换为:block-log-retain-blocks 

当前运行 EOSIO 2.1 的所有节点都应删除状态历史记录。

从数据目录中,用以下方法删除/state-history目录中的文件
rm <nodeos data directory>/state-history/*

  • 所有拥有2.1中的block log 0004版本的节点都应该删除Block log。 
    • 从数据目录中,用以下方法删除/blocks目录中的文件
      rm <nodeos data directory>/blocks/*
      rm <nodeos data directory>/blocks/reversible/*

以下为使用快照安装。需要为SHiP或block log回放交易的节点操作者应知悉,回放可能需要数周时间才能完成。

提高block.log文件重新同步速度的注意事项(适用于2.1节点):

默认情况下,节点一次同步 100 个区块。 您可以使用 –sync-fetch-span 选项加速重新同步,该选项会更改一次同步的块数。 且该选项对于大部分为空的区块特别有效。 操作者反馈称该数字设置可高达 5000。重新同步完成后,您应该将此数字设置回 100。

此外,在重新同步时,节点会向所有对等节点请求相同批次的块。 这会减慢重新同步过程,并且对于受信任的对等节点来说通常是不必要的。 您可以选择与部分对等节点而不是所有对等接单同步,这样可以避免重复数据,从而加快同步速度。 如果您有信心,您甚至可以选择一个最近的对等节点进行同步。 从位于同一数据中心的单个对等节点进行同步,速度是最快的。

如果您使用其中一种方法来提高同步速度,请确保之后将选项恢复为默认设置以避免意外情况。

更新二进制文件

在出块服务器上重复这些步骤之前,请先在一台测试服务器上执行这些步骤。

  • 从一个新的 Ubuntu 节点开始,或者通过停止节点并删除旧的二进制文件来更新现有节点。 要删除旧的二进制文件,通常可以使用:
    dpkg --remove <old-pkg-name>
  • 删除状态文件。 要删除此目录中的文件,您可以使用:
    rm <nodeos data directory>/state/*
  • 更新二进制文件:
    • 从 GitHub 发布页面下载最新的 Ubuntu 二进制文件。
    • 打开终端窗口并运行 dpkg -i filename.deb,将 filename.deb 替换为下载的 Ubuntu 软件包的文件名。
  • 使用快照启动节点。

完成这些步骤后,节点就可以在9月21日激活协议了。

系统合约和应用

在Mandel安装后,节点操作者已准备好让区块生产者激活新功能。在激活后的某个时间点,区块链生产者可以更新系统合约。

Mandel的新功能带来了强大的用户体验改进。然而,用户不能立即使用这些工具,因为当开发者更新他们的应用程序以利用新功能时,可能会出现一个时间差。

第一批使用 Mandel 新功能的应用程序,最有可能是 Trust EVM 合约和非常受欢迎的钱包。 其他应用程序将需要一些时间,将新的 Mandel 功能纳入其工作流程。 虽然软件开发工具包 (SDK) 的发布将加速 Mandel 功能的可用性,但采用仍需要时间。

补充说明

区块生产者同时激活 Mandel 3.1 中的所有新功能。 尽管不太可能出现问题,但这些变化可能会影响智能合约和 dApp。 开发人员可以使用 Jungle4 等公共测试网,来确保他们的 dApp 继续按预期工作。 开发人员还可以使用这些测试网络来测试新的 Mandel 功能。

合约开发工具包 (CDT) 已升级,使用此工具的人需要注意一些小的命名更改:

  • CDT 3.1改变了它的二进制文件的名称,用 “cdt “代替了 “eosio “的前缀,如cdt-cpp代替了eosio-cpp。
  • 对于 CMake 项目,使用 find_package(cdt) 而不再使用 find_package(eosio.cdt)。

下一个新版本可能会包括更多的命名更改。

结语

EOS 网络直接开发并资助了 Mandel 3.1 升级,并敞开怀抱接受开发者和运营商的建议。该版本代表了基于 EOSIO 代码库的链的发展新时代,并且在深陷于疏于管理且前景不可预测的泥沼多年之后,EOS重新迈出了坚实的一步。在EOS网络基金会的关注和指导下,在区块生产者的认可和共识下,EOS终于掌握了自己的命运。


关于EOS网络

EOS 网络直接开发并资助了 Mandel 3.1 升级,并敞开怀抱接受开发者和运营商的建议。该版本代表了基于 EOSIO 代码库的链的发展新时代,并且在深陷于疏于管理且前景不可预测的泥沼多年之后,EOS重新迈出了坚实的一步。在EOS网络基金会的关注和指导下,在区块生产者的认可和共识下,EOS终于掌握了自己的命运。

EOS网络基金会

EOS网络基金会是一个非营利性的组织,旨在倾听社区声音、传达社区意愿并扶持社区优质项目发展,成为EOS社区的信息共享桥梁,并为EOS生态提供资金、技术、运营、未来规划、生态构建等关键基础设施支持,进一步发挥EOS作为世界速度最快的治理型区块链的全部潜力。