Arbitrum 最近的更新以 Stylus VM 升级为特色,并拥有多项增强功能:
这些改进源于集成 WASM,WASM 以其在云原生环境中的众多优势而闻名。有关 WASM 角色的更多详细信息将在后续章节中介绍。
Arbitrum 已将 WASM 引入其链中,但这并不是第一个这样做的平台。 Polkadot 之前允许创建 WASM 智能合约。它为此提供了两种语言:一种类似于嵌入式 DSL 的汇编脚本和一种受 Rust 启发的语言,称为 ink!
同样,Cosmos 利用 CosmWasm 来执行智能合约。开发人员可以在这里使用 Rust 编写智能合约。
在探讨区块链与 WASM 的亲和力之前,我们先回顾一下 Cosmos 和 Polkadot 选择 WASM 的理由。
Cosmos 宣扬 WASM 具有以下优势:
Polkadot 的 WASM 运行时展示了以下功能:
Polkadot、Cosmos 和 Arbitrum 共享 WASM 带来的一些好处。然而,Arbitrum 有独特的产品以及 Cosmos 的具体细节,我们将在稍后讨论。
让我们深入研究一下 WASM 是什么及其背后的动机。
WebAssembly (WASM) 是一种二进制指令格式。它使代码能够以与本机应用程序相当的速度执行,特别是在 Web 浏览器中。作为 C 和 Rust 等语言的编译目标,它针对速度、效率和安全性进行了优化。 WASM 显着提高了 Web 性能并扩展了 Web 功能。
WASM 与 Web 紧密相连,因为它在浏览器等 JavaScript 环境中运行。在这些环境中,开发人员可以完全访问 WASM API 以及完整的 Web API 支持。该控件允许开发人员微调 Web 交互。
WASM 的概念围绕着一次编写代码即可在任何地方运行的理想。
2016 年,程序经常通过领域特定语言 (DSL) 引入新功能。创建 DSL 需要平衡维护、效率和安全性。业界寻求一种在不影响这些方面的情况下跨众多服务器部署功能的方法。
我们仔细研究了各种解决方案,每个解决方案都有自己的挑战:
WASM 作为一种解决方案应运而生。 WASM 编译器的开发开始了,到 2018 年,跨各种架构和设备的通用代码兼容性的概念得到了扩展。与 Java 不同,其目标不是在安全性上妥协。
2019年引入组件模型,提升了WASM模块的跨语言互操作性。例如,这项创新使得能够创建适用于不同语言的通用 HTTP 库,以创新方式解决复杂问题。
WASM 拥有一系列令人印象深刻的功能:
WASM 社区正在积极增强跨不同编程语言的集成和性能。
探索 WASM 的潜力及其在区块链中的使用让我们回到了 Arbitrum Stylus 的局限性。
以下是 Stylus 操作方式的简化分解:
ArbWasm
预编译的compileProgram
方法,字节码经过安全性、gas 计量的检测,并编译成针对验证器硬件定制的本机代码。此步骤对于增强性能和安全性至关重要。
看似额外的第三步实际上至关重要。将 WASM 代码转换为本机机器代码可加快执行速度。此外,这个添加的编译阶段有助于防止“编译炸弹”。
“编译炸弹”是一种恶意代码,旨在在编译期间耗尽系统资源,从而可能导致编译器崩溃或停止运行。这是一种拒绝服务攻击,旨在阻碍软件开发过程。
Stylus 扩大了 Arbitrum 的开发者社区,将 C++ 和 Rust 纳入其中。然而,它尚未涵盖当今最流行的开发者社区。它有助于在浏览器中执行智能合约,但尚不支持 JavaScript 和 Python。
有些项目处于早期阶段,试图将 Python 和 JavaScript 桥接到 WASM。但是,由于垃圾收集和性能问题的复杂性,这些还没有准备好广泛采用。
Stylus 目前通过其 SDK 支持 C/C++ 和 Rust。这些 SDK 与各自语言的工具兼容。它们还允许集成第三方库,例如本机密码学。主要限制是与这些库相关的天然气成本。
Rust SDK 正处于初级阶段,缺乏一些功能。 C SDK 不支持使用 ABI 导出函数。此外,这两个 SDK 都不支持使用修饰符。
截至目前,Stylus 还没有本地测试环境。鼓励开发人员在 SDK 内进行测试。测试网是在 Stylus 上运行智能合约的唯一选择。不过,测试网尚未实现智能合约验证。
目前正在开展将各种 ERC 代币和平台(例如Uniswap V2 )移植到 Stylus 的工作。
在特定领域语言 (DSL)、嵌入式 DSL (eDSL) 或通用编程语言之间进行选择具有挑战性。开发人员必须权衡“接近金属”进行控制的好处与更高级别抽象提供的易用性,这可能会限制灵活性。
创建新的 DSL 需要时间来开发其工具链和生态系统。 eDSL 作为通用编程语言的子集,保持相同的语义和语法。它允许开发人员使用现有的语言和工具,这可以简化学习过程。 eDSL 还提供与通用代码更好的互操作性。例如,适用于 JavaScript 或 Python 的 eDSL 对于吸引最大的开发者社区具有战略意义。
一般的编程语言都需要使用SDK来进行开发。这增加了工具的层次,增加了冗长,并降低了表达能力。它还可能导致冗长的 API 调用和复杂的对象操作。
选择正确的语言并制作 eDSL 可能是一个理想的折衷方案。它可以吸引来自流行社区的开发人员并提供用户友好的工具。目前的数据显示,以太坊社区仍然是加密货币开发商中最大的。然而,像 Polkadot、Cosmos 和 Solana 这样使用 Rust 进行智能合约的生态系统也吸引了大量开发者,并且正在经历快速增长。
WASM 有潜力显着提高执行速度并减少包大小。尽管 Stylus 尚未部署到主网,但其他网络的基准测试可以作为有用的参考。
这些基准测试表明,执行时间可以减少 4 到 8 倍,编译大小可能减半。
Stylus 对合约大小有限制,未压缩时约为 128KB。这种限制使得将非常大的智能合约从 Solidity 等语言迁移到 Stylus 具有挑战性。这种限制在 Stylus 代码库中很明显:
// arbos/programs/programs.go const MaxWasmSize = 128 * 1024 // Maximum WASM size allowed const initialFreePages = 2 // Number of initial free pages const initialPageGas = 1000 // Gas cost for an initial page const initialPageRamp = 620674314 // Adjusts for a target size cost const initialPageLimit = 128 // Maximum number of pages allowed const initialInkPrice = 10000 // Ink price per EVM gas const initialCallScalar = 8 // Scalar for call cost
值得注意的是,WASM 在启动和关闭时会产生一些开销。对于非常轻量级的操作,EVM 可能比 WASM 更具成本效益。
EVM 和 WASM 使用相同的存储槽和状态树。 Stylus 通过在 WASM 中实现 EVM API 来实现与 EVM 的互操作性。这种集成利用了 WASM 中广泛采用的主机 I/O 模式。下面是 WASM 支持的 EVM API 的完整列表,表明了全面的互操作性支持。
read_args write_result storage_load_bytes32 storage_store_bytes32 call_contract delegate_call_contract static_call_contract do_call create1 create2 do_create read_return_data return_data_size emit_log account_balance account_codehash evm_gas_left evm_ink_left block_basefee block_coinbase block_gas_limit block_number block_timestamp chainid contract_address msg_reentrant msg_sender msg_value native_keccak256 tx_gas_price tx_ink_price tx_prigin memoery_grow console_log_text console_log console_tee
自定义预编译是一个创新概念。他们有潜力以降低的执行成本在链上集成先进的加密原语。例如,可以预编译张量计算以降低链上机器学习的成本。但是,当前代码库中没有证据表明自定义预编译功能。虽然 EVM 存在预编译,但它们并非设计为可交换的。
这些功能很可能仍在开发中,利用 WASM 的功能。这将使 EVM 能够调用 WASM 编写的函数,然后将其编译为机器代码。
与不支持重入的 CosmWasm Actor 模型相比,Stylus 的 Rust SDK 将重入作为可选功能。默认情况下,此功能处于关闭状态。开发人员可以选择在其合约中启用可重入。
激活重入会影响 API,因为开发人员必须确保在调用期间清除存储缓存并考虑其他安全措施。此预防措施对于防止与可重入调用相关的潜在漏洞至关重要。
WASM 在云原生领域越来越受欢迎,许多区块链采用它来执行智能合约。尽管 Arbitrum 不是这种集成的先驱,但其实施可能会产生巨大影响。 WASM 并不适合彻底改变区块链格局或取代 EVM。然而,它可以增强 Arbitrum 对抗新兴 zk-rollups 的优势。 Arbitrum 的术语“EVM+”恰当地描述了这种情况。 EVM 为智能合约平台奠定了基础,而 WASM 可以为 Arbitrum 提供额外的性能提升。