探索FuelVM:为执行智能合约而专门构建的定制虚拟机

22-10-22 13:00
阅读本文需 23 分钟
总结 AI 总结
看总结 收起
原文标题:《探索 FuelVM:为执行智能合约而专门构建的定制虚拟机》
原文作者:Ryan Sproule, medium
原文编译:RR
本文来自微信公众号:老雅痞


介绍 Sway 和 FuelVM


Fuel Labs 正在构建一个新的执行层,用于扩展下一代区块链应用程序。FuelVM 被设计成模块化性质——它可以作为任何区块链的执行引擎。首先,FuelVM 将被部署为以太坊的第 2 层 rollup,但在理论上,它可以作为 L2 甚至另一个 L1 部署在任何地方。FuelVM 旨在扩展以太坊而不增加节点需求,而是通过从现有硬件中获得更多内容。

Fuel Labs 还在为 FuelVM 构建一种名为 Sway 的新型 DSL,用于编写合约。Sway 受到了 Rust 和 Solidity 的启发,创建了理想的智能合约编程语言。


什么是 FuelVM?


FuelVM 是一个完全为执行智能合约而专门构建的定制虚拟机。Fuel VM 从一开始就被设计成易于防欺诈,可以用作 optimistic rollup 的交易执行层使用。


FuelVM 经过了优化,可以更好地利用硬件来提高交易执行的吞吐量。具体地说,它基于 UTXO,并强制每个交易明确定义它将接触的 UTXO。由于执行引擎可以准确地识别每个交易所触及的状态,因此它能够轻松地找到没有争议的交易并将其并行化。


为什么 VM 很重要?


在智能合约区块链系统中,VM 是能够理解智能合约代码并根据该代码中定义的规则执行状态转换的系统。VM 是智能合约区块链的操作系统。


到目前为止,智能合约 VM 还没有在以太坊提供的初始版本之外有什么迭代。目前所有广泛使用的智能合约链 (Solana 除外) 都使用了与以太坊相同的 VM:EVM。


目前,EVM 是「足够好」的,因为扩展的主要瓶颈不是交易执行的速度,而是共识引擎可以支持的带宽 (区块空间)。随着第二层扩展解决方案和 Celestia、EIP-4844、Danksharding、EigenDA 等 DA 解决方案的发展,将 rollup 交易数据发布到 L1 的成本将不再是主要制约因素。


在这个即将到来的带宽很便宜的环境中,下一个瓶颈将是计算吞吐量:在保持底层硬件需求足够低的情况下,系统能以多快的速度执行交易,以实现足够的去中心化。FuelVM 的优势是在设计时就考虑到了这些未来因素,并能相应地进行优化。


FuelVM 的差异化优势


执行+验证并行化


FuelVM 的可并行虚拟机背后的秘密是其严格的访问列表——它要求用户指出他们的交易将涉及哪些合约。检查 FuelVM 中交易的确切组成是很有帮助的。


输入:交易将触及的所有合约 UTXO 的列表+解锁 UTXO 或谓词脚本的数据。


输出:定义将被创建的 UTXO


Gas 信息:Gas 价格+Gas 限制


见证人:元数据+数字签名授权


这里的关键点是明确的「输入」列表,它列出了将要消耗的所有 UTXO。这包括「特殊」合约 UTXO。如果在执行任何代码之前,VM 能够判断出交易将触及哪些合约,它就可以安全地并行执行所有其他无争议的状态访问交易。



 交易执行和验证都可以利用并行性 (验证的程度甚至更高)。


请注意,由于交易输出被明确包括在验证中,因此在断言另一个节点提出的区块是否正确的过程中,不需要按顺序执行重叠的交易。这意味着无论状态争用如何,验证都可以完全并行进行。在实践中,这意味着当节点与网络同步时,它们可以实现更大的并行化,并且可以更快地赶上。


原生资产系统


在 EVM 中,有一种原生资产:ETH。所有其他资产都是通过处理余额会计 (ERC20) 的智能合约实现的。在 Fuel 中,开发人员可以自由地在智能合约中实现资产,但是,有一个选项允许 VM 以本地方式处理这一点。


在余额管理方面,本地资产比起 ERC20 风格的智能合约有几个相当大的优势。首先,本原生资产的操作比智能合约中操作状态更便宜。这可以归因于它在较低级的原语中运行 (UTXO 系统被用来代替操纵存储)。其次,原生资产具有更好的用户体验,类似于发送 ETH 比发送 ERC20 简单得多 (不需要设置审批)。


原生帐户抽象+谓词


帐户抽象一直是研究的热点话题,多年来以太坊社区在 EIP (EIP-86、EIP-2938、EIP-3074、EIP-4337、EIP-5003) 上进行了多次尝试。实施和升级以太坊以支持帐户抽象是困难的,这主要是因为核心团队的工程带宽/技术债务加上相关的复杂性,以及一长串更高优先级的项目。许多 rollup 从一开始就有机会在其新颖的执行环境上实施账户抽象。FuelVM 就是其中之一,除了原生账户抽象之外,它还将包括一个有趣的新原语:谓词。



谓词是一个纯粹的 (不访问状态) 合约脚本,它只返回一个布尔值 (true 或 false)。UTXO 可以被锁定在一个谓词后面,所以只有当谓词中定义的条件被满足时,它们才能被使用。这带来了一个有趣的 UX 机会,用户可以将交易设置为只在某些条件下执行,然后一旦满足谓词,他们的交易就可以自动执行。此外,谓词在被销毁时可以被删减,因此它们不会导致状态膨胀。


简单的演示示例:用户设置一个交易,只要价格满足谓词中定义的阈值,就购买 X 个代币。瞧,pice de rsistance,完全链上的无信任限价订单,不会使状态膨胀!


多维资源定价


资源定价是智能合约区块链最关键的组成部分之一。通过将链上的资源需求保持在合理的、负担得起的水平来维持去中心化。资源定价允许系统向用户收取网络中节点的「工作」的费用。


在 EVM 中,引入 EIP 的最常见原因之一是操作码的重新定价。这是因为操作码具有硬编码的 Gas 价格,而资源的基础价格并不按比例扩展 (从历史上看,CPU 的改进比 SSD 更快)。理想情况下,这些系统能够完全独立地为每个资源定价,这样整个收费系统就可以根据底层硬件系统的变化进行动态调整。


FuelVM 将能够实现动态的多资源定价,这可以激励节点运行者更好地优化其底层硬件,同时仍然最大优化「每区块效用」。


图片


这张图演示了智能合约的需求明显高于其他智能合约的情况。有了本地化的资源定价,其他合约就不会受到相同程度的影响。NFT 空投便是一个很好的例子。这与资源定价与合约定价 (Solana 风格) 并不完全相同,但效果非常相似。具有特定资源配置文件的智能合约与其他合约的定价不同。对于 NFT 空投的示例,热合约可能具有一个存储密集型但计算成本非常低的资源配置文件。相对于存储而言,对计算量要求较高的智能合约不会受到嘈杂的 NFT 空投的影响。


Solana 打破帐户或合约收费市场的策略在实际基础资源和对它们的需求之间增加了一层抽象。这意味着仍然可能存在费用非常低,但节点上的压力非常大的情况。例如,由于一个事件 (例如,许多不同的 NFT 同时被铸造),系统上的存储负载可能非常高,但费用非常低,因为不是所有的流量都发生在一个帐户上。每个帐户的费用模型确实解决了帐户的热分区问题,但留下了系统无法正确定价底层资源的情况,因此它仍然可能导致失败。


基于底层硬件资源为系统定价更简洁、更准确,而不是试图添加基于多个市场的资源定价的帐户这种特定于网络的抽象层。


状态膨胀注意事项


正如 geth 团队多次提到的,geth 目前的瓶颈在于状态读写的 I/O。最初的想法是,100% 的 Merkle Patricia trie(MPT) 状态将适合于标准设备的 RAM。现在的情况已经不同了,因为状态已经增长到 900 多 GB,并且预计每年将增长大约 50-100 GB,这对于任何一个人来说都是不合理的,所以大多数节点已经转向 SSD 来存储状态。从历史上看,SSD 的不会随着状态大小的增长而迅速改进,因此这种成本将继续影响网络的去中心化。这是以太坊研究人员讨论了一段时间的一个关键问题。


相反,FuelVM 在构建时就考虑到了这个问题。Fuel Labs 的联合创始人 John Adler 曾多次谈到资源定价在智能合约消耗状态或其他资源的过程中所扮演的角色。通过将适当的资源定价和更清晰的数据模型与 UTXO 系统相结合,FuelVM 将能够保持状态处于控制之下,降低运行节点的成本,这相当于增加了网络的去中心化。


「排序器」的去中心化


尽管第 2 层允许我们从主链上卸载计算工作,但他们仍然需要提供一种机制来排序交易。许多第 2 层解决方案都是使用所谓的「排序器」启动的。排序器是一个特权节点,负责对交易进行排序,执行状态转换,然后将状态根更新连同压缩的交易信息提交给第一层以太坊。值得注意的是,一台负责排序的超级计算机比许多冗余地执行相同交易序列的小型计算机在每个 epoch 可以执行更多的交易。


这种中心化排序角色中有几个关键问题需要得到更多的关注!


控制交易的顺序是非常有利可图的。我们在以太坊和其他区块链中观察到,MEV 是那些排序区块的人的主要收入来源之一。正如我们今天在传统金融中看到的那样,单方控制排序和 MEV 捕获最终会导致用户执行能力的下降。


从可用性和监管的角度来看,中心化的排序器可能是一个单点故障。如果一个或少数组织正在运行排序器,它们可能会瘫痪或被关闭。这对网络来说是一个活生生的风险。


一个中心化的排序器可以审查第二层的交易。排序器可以选择任何交易,并在构建区块的过程中以任何顺序放置它们,这就产生了审查的能力。许多 L2 通过提供「强制交易」机制来处理这种情况,这种机制允许用户绕过排序器,通过利用 L1 直接包括交易。


排序器可能会对 rollup 用户做出不一致的链状态承诺。这通常被称为 equivocation,这基本上意味着排序器可以对 L2 的某些状态做出误导性的承诺。这是因为,rollup 的快速终结是一个可信的步骤,一个排序器可能滥用这种信任,导致用户做他们不打算做的事情。


Fuel 如何解决这些问题?


首先,Fuel 不只是一个 rollup 或 L1 区块链,相反,它是一个应用状态转换的系统,如果配置为 rollup 或者作为 L1 在网络中运行以实现共识,它可以将状态转换发布到 L1。关键的区别在于,Fuel 的执行引擎并不关心共识或交易排序。Fuel 只负责尽可能快地应用交易。但是,由于 Fuel 可以在如此轻量级的硬件上运行,而且验证是如此便宜,Fuel 可以引导一个多样化和去中心化的共识网络,这比运行性能较差的执行引擎 (如 EVM) 的同等系统要便宜得多。


此外,Fuel 团队正在考虑将去中心化、MEV 和其他考虑因素结合在一起的第二层代币经济学。Fuel 联合创始人 John Adler 在 1 月份写了一篇关于第二层区块链的代币模型的文章,阐述了一种通过允许 rollup 通过作为区块生产者收取费用的权利来代币化区块空间的稀缺性,从而帮助去中心化区块生产的代币设计。收费只是区块生产者收入的一部分,正如我们在其他链中看到的,MEV 是收入的另一大部分。与区块空间的稀缺性类似,MEV 收入也将通过区块生产权进行被代币化。


状态模型:UTXO vs 基于帐户


将 UTXO 数据模型和账户模型之间的区别概念化的最佳方法如下:UTXO 可以被比作现金账单,而账户模型更类似于银行分类账。帐户系统自然会导致状态膨胀,因为每个交易都试图访问同一个帐户,而 UTXO 如果设计正确,则争议较小。这一特点使其能够更好地实现并行化,也可以通过简化状态截断的过程来防止状态膨胀。



继续使用现金 vs. 银行分类账的比喻,就可以清楚地了解为什么使用 UTXO 并行化会容易得多。两笔现金交易可以同时发生,它们彼此不需要知道任何信息,而如果一个分类账上有 2 个账户更新,则两笔交易都必须更新同一个共享分类账。


VM 大战


除了 Fuel 之外,其他团队也在为智能合约区块链开发下一代虚拟机,如 Mysten Labs 和 Aptos,后者正在使用最初由 Facebook 工程师设计的 Libra 项目的一部分的 MoveVM。这进一步支持了这样一个论点:为了支持下一代区块链应用,需要新的执行环境。所有这些项目都有有趣的方法,并做出了不同的权衡。


在 MoveVM 停滞不前的几年里,当 Libra 忙于打官司时,加密货币世界发生了很多变化。Fuel 能够适应这些变化并在一个节奏极快的行业中保持敏捷,而 Move 则略微落后。尽管如此,由于 Move 已经从 Facebook 分离出来,新的大型融资轮已经完成,他们肯定已经准备好开战了!


结论


与其他 L2 不同,Fuel 计划从一开始就通过设计 VM 来去中心化排序器角色,这样就不需要昂贵的硬件来增加规模。


Fuel 是灵活的。它可以部署在许多环境中,但其优先考虑的是作为与以太坊对齐的 Optimistic Rollup。


Fuel 的用户体验将比 EVM 好得多,因为它采用了原生和新颖的方式与链交互,例如账户抽象、脚本和谓词。


UTXO 数据模型的争议自然比帐户数据模型小,并且会带来更多的并行性和更少的状态膨胀。


原文链接


欢迎加入律动 BlockBeats 官方社群:

Telegram 订阅群:https://t.me/theblockbeats

Telegram 交流群:https://t.me/BlockBeats_App

Twitter 官方账号:https://twitter.com/BlockBeatsAsia

举报 纠错/举报
选择文库
新增文库
取消
完成
新增文库
仅自己可见
公开
保存
纠错/举报
提交