Cryptonews

NeoGo v0.119.0 以 Gorgon 硬分叉准备就绪为目标,修复了 41 个虚拟机差异

Source
CryptoNewsTrend
Published
NeoGo v0.119.0 以 Gorgon 硬分叉准备就绪为目标,修复了 41 个虚拟机差异

Neo SPCC 发布了 NeoGo v0.119.0“Yawl”,引入了在即将到来的 Gorgon 硬分叉时激活的协议更改,解决了 NeoGo 和 C# 参考节点之间的 41 个主网交易差异,并为节点运营商提供了性能优化。该版本与 C# Node v3.9.2 兼容,并且不需要数据库重新同步。

此次更新发布之际,Neo 的基础设施团队正在为网络的下一个硬分叉 Gorgon 做准备。 Neo 理事会于 4 月投票决定推迟拟议的执行费用削减,转而等待 Gorgon 的动态操作码定价模型,Neo SPCC 设计该模型的目的是使标准交易的成本显着降低,同时使恶意交易的成本成倍增加。硬分叉尚未设定部署日期。

Gorgon 协议变更

v0.119.0 中的一些行为更改仅在 Gorgon 激活时才会生效。其中包括更严格地处理 CryptoLib 和 System.Crypto 操作中的无效加密签名参数,这现在将触发 FAULT 而不是默默地继续。该版本还添加了针对 SHR 和 SHL VM 指令的缺失操作数检查以及针对 HASKEY 的索引边界检查,从而使 NeoGo 的行为与预期的 Gorgon 规范保持一致。

合约管理的更改也包括在内——合约管理缓存现在在合约被销毁之前更新,合约账户在合约销毁之前被阻止,两者在 Gorgon 都有效。

虚拟机兼容性修复

v0.119.0 解决了 NeoGo 和 C# 参考节点产生不同故障结果的 41 个主网事务。这些差异意味着两种实现以不同的方式处理某些合约——这是多客户端网络的可靠性问题。

修复包括更正 System.Contract.CallNative 异步回调的处理、合约调用期间的方法返回值类型验证,以及 PACKMAP、SETITEM 和 SYSCALL 参数解析的多个引用计数更正。一些虚拟机恐慌也得到了解决,包括结构字段访问崩溃以及当给定的块索引超出当前高度时 Ledger 的 getBlock 的错误响应 - NeoGo 现在返回 null,与 C# 节点的行为匹配。

stackitem.Map 的底层实现也经过了重新设计,从 C# 参考实现移植到使用有序结构。

性能改进

新的 DirectRelay RPC 选项支持将事务直接广播到对等点,而不是通过标准队列进行 sendrawtransaction 调用。在四月下旬主网上激活三秒区块时间后,该功能尤其重要,更快的传播会产生更大的影响。 Neo SPCC 指出,尽管实际情况可能有所不同,但综合网络测试显示改进甚微。

Mempool 操作进行了微优化,在常见的相同费用场景下,时间和分配减少了 24%。通过 P2P 层的共识消息传递也得到了改进,BoltDB 升级到了分配优化版本以降低内存压力。

运营更新

运行 systemd 的节点操作员现在可以使用 sd_notify 集成,通过 READY、RELOADING 和 STOPPING 信号启用适当的 Type=notify 服务单元。由于 NeoFS 存储节点遇到 WebSocket 客户端限制,添加了针对活动 WebSocket 连接的新 Prometheus 指标。

四个现有的 Prometheus 指标在没有过渡期的情况下被重命名 - current_state_height、current_block_height、current_persisted_height 和 current_header_height 失去了“current_”前缀。操作员需要相应地更新仪表板和警报。

对于开发人员来说,actor.ErrExecFailed 错误类型已被弃用,取而代之的是 neorpc.FaultException,需要在检查执行失败的应用程序中进行迁移。

展望未来

NeoGo v0.119.0 使 Go 客户端更接近 Gorgon 就绪状态,同时加强了与 C# 参考实现的一致性。 Gorgon 硬分叉仍然没有预定日期,动态操作码定价已经在 NeoGo 端实现,并等待在 C# 节点中完成。之前的 NeoGo 报道可以在 NNT 关于 v0.118.0 的文章中找到。

完整的发行说明可以在以下链接中找到:https://github.com/nspcc-dev/neo-go/releases/tag/v0.119.0

NeoGo v0.119.0 以 Gorgon 硬分叉准备就绪为目标,修复了 41 个虚拟机差异