EOS虚拟机:高性能区块链WebAssembly解释器

1 年多前 · 原创文章
EOS虚拟机:高性能区块链WebAssembly解释器

在华盛顿特区举行的#B1June活动中,与EOSIO™相关的公告侧重于提高平台的性能和安全性。从与WebAuthn等Web标准的集成到EOS虚拟机(EOS VM)的宣布,EOSIO的下一个主要版本EOSIO 2将进一步实现我们大规模采用区块链应用的目标。在EOS VM开发者预览版本仍然在发展,而不是用于在生产环境中使用。随着我们逐步发布EOS VM稳定版,我们很高兴能够提供专为区块链而设计的高性能WebAssembly解释器。

由区块链工程师为区块链应用程序构建

随着EOSIO区块链技术的日益普及,支持区块链应用程序的安全确定性执行所需的性能已经超过了设计用于与浏览器接口的传统WebAssembly引擎的容量。在过去的一年中,我们测试了Binaryen和WABT等现有解释器的性能,这些解释器非常适合它们的用途,但是当应用于区块链时,存在无限内存分配,扩展加载时间和堆栈溢出等问题,导致整体性能下降和可靠性。单线程性能,共享资源跟踪以及对本机代码的低开销调用对区块链性能至关重要。考虑到这些原则,EOS VM从头开始设计,以满足区块链应用的特定需求。

EOSIO 1.0最初于2018年6月与Binaryen解释器一起发布,截至9月,我们发布了EOSIO 1.3,支持WABT,性能提升2 。随着计划于今年晚些时候发布的EOSIO 2,我们预计EOS VM的性能将提高6倍,使得EOSIO 2中的WebAssembly执行速度比一年前发布的EOSIO快12倍。虽然我们对性能的这种改进感到兴奋,因为这是开发人员预览版本,但我们的内部基准尚未指示真实场景,并且正在进行进一步的开发。

我们将EOS VM构建为专门用于区块链应用程序的高性能解释器,但其对低延迟和其他性能效率的关注将使其成为许多WebAssembly用例的有竞争力的替代方案。

EOS虚拟机的高性能属性

EOS VM在设计时考虑了以下属性:

  • 极快的执行力
  • 极快的解析/加载
  • 高效的时间限制执行
  • 确定性执行
  • C ++ / Header Only集成
  • 高度可扩展的设计

确定性执行以避免共识失败

区块链应用程序需要确定性执行才能正常运行; 给定的输入必须始终产生相同的输出。在使用传统的WebAssembly解释器时,非确定性操作(其值从一个状态变为另一个状态的那些操作)可能会延迟影响所有用户和构建在其上的应用程序的共识。通过EOS VM,我们设计了一个环境,允许硬件支持的浮点运算和基于软件的浮点运算。使用基于软件的浮点(“softfloat”)允许浮点运算的真正确定性执行。由于这些内置于系统中,因此尽可能减轻“软浮动”操作的开销。对于不需要位级确定性的用例,

有效的时间限制执行来管理资源

有效的资源管理是构建高性能区块链应用程序的关键。区块链网络的各方具有在网络用户之间共享的有限资源集。这使得区块链应用程序在其分配的规范中高效运行变得更加重要。

EOS VM实现了两个新工具,允许开发人员通过跟踪WebAssembly运行时执行来更好地管理资源分配。第一个是对已执行并在预设阈值处暂停的WebAssembly指令数的内置检查。这将创建对开始执行但未能在设定的时间范围内正常完成的进程的检查。第二个是外部“观察者”,它将在预设的时间后停止执行,停止可能挂起并且无法正常退出的进程。

为现实世界区块链开发而牢固建造

WebAssembly旨在在浏览器环境中运行不受信任的代码,其中可能发生的最糟糕的是挂起的浏览器选项卡。在区块链的情况下,挂起的交易可以使链条停止,因此整体后果更加严重。

开发是一个容易出错,破解修复的过程,需要调试和不断思考角落。因此,有时程序员可能遇到检查和验证问题。EOS VM的基本数据类型包括内置保护,如果许多角落案例遭到攻击,它们会触发并自动终止执行。

为了保护内存,我们构建了一个保护分页机制,利用CPU和核心操作系统安全性来进行沙箱内存操作。这种机制允许更通用地部署本机代码功能,而不会由于与常见编程错误(例如无限递归和阵列访问)相关的内存溢出而导致机器崩溃的风险。

EOS VM中内置的分配器足够模块化,可满足特定于应用程序的需求,而无需创建内存密集型结构来支持它们,因为分配器不“拥有”它们使用的内存。同步这些分配器的生命周期不需要复制它们,允许根据需要进行WebAssembly模块的上下文无关集成,而不会造成任何性能损失。

轻松集成的C ++ / Header集成

EOS-VM可以以不具有外部或预编译依赖关系的方式使用; 它只是一个标头实现。这意味着构成EOS VM库的所有宏函数和类对头文件中的编译器都是可见的。这允许编译器在集成代码库的上下文中更积极地优化EOS VM,因为它具有可用的所有功能/方法定义。在此配置中,集成到项目中可以像将EOS VM目录添加到项目的包含路径一样简单。

基于高度可扩展的组件设计

对EOS VM进行划分并创建自包含组件使系统能够高度适应使用新定义的逻辑以及先前定义的组件的自定义后端工具。此外,通过遵循简单的编码程序,可以相对容易地构建新的扩展,允许一系列强大的工具能够根据需要出现分析,调试等。

扩大区块链技术的未来

在过去的一年中,EOSIO不断发展,我们的重点是与社区一起,继续为EOSIO创建更强大的工具包和库,使其成为世界上性能最高,利用率最高的区块链平台之一。最终,区块链技术的采用将由应用程序驱动,这些应用程序向最终用户和企业展示区块链的好处。随着EOS VM的性能提升,与所有EOSIO版本一样,我们努力创建工具,帮助开发人员实现更大目标。我们将继续与社区合作,改进和发展EOSIO,以支持这些努力。

EOS VM开发者预览版尚未发布,开源的。有关完整的版权声明,请参阅许可证。如果有兴趣为EOS VM做出贡献,请查看Github上的发行说明中提到的贡献指南行为准则

柚子(EOS)