什么是 Fuel
Fuel v1 最初是作为整体以太坊的第 2 层 (L2) 可扩展性技术。这是 2020 年底部署在以太坊主网上的第一个 optimistic rollup。
今天,Fuel 是最快的模块化执行层。Fuel 提供最高的安全性和灵活的吞吐量,专注于卓越的开发人员体验。
- 我们是这样做的:
- 并行交易执行
- 燃料虚拟机 (FuelVM)
- 使用 Sway 语言和 Forc 的开发人员工具
并行交易执行
Fuel 通过使用 UTXO 模型形式的严格状态访问列表并行执行事务的能力,提供无与伦比的处理能力。这使 Fuel 能够使用更多的线程和 CPU 内核,而这些线程和内核通常在单线程区块链中处于空闲状态。因此,Fuel 可以提供比其单线程同类产品更多的计算、状态访问和事务吞吐量。
使用 EVM,很难知道交易之间是否存在依赖关系,以及在哪里存在依赖关系,因此您必须按顺序执行交易。
FuelVM 使用 UTXO 模型,通过所谓的状态访问列表识别交易依赖性,从而实现并行交易执行。使用 FuelVM,Fuel 全节点识别交易涉及的账户,在执行前映射依赖关系。
Fuelvm
FuelVM 从以太坊生态系统中学习,实施了多年来向以太坊 VM (EVM) 建议但由于需要保持向后兼容性而无法实施的改进。
下面是一些已经在 FuelVM 中实现的 EIP:
生态工业园区 | 描述 | 执行 |
---|---|---|
易于并行化 | 允许 EVM 中的事务通过指定它们可以访问的地址来并行处理。 | Fuel 可以通过我们的 UTXO 模型使用严格的状态访问列表来并行执行交易。这允许 Fuel 使用您 CPU 的所有线程和核心来验证交易。 |
EIP-2098:紧凑的签名表示 | 将签名从 65 字节减少到 64 字节,以简化客户端代码中的交易处理、降低 gas 成本并减小交易规模。 | Fuel 按字节压缩签名数据,从 65 到 64 字节。 |
EIP-3074:AUTH 和 AUTHCALL 操作码 | 引入了两个 EVM 指令,AUTH 和 AUTHCALL,以启用批处理功能,允许 gas 赞助、过期、脚本编写等。 | Fuel 具有脚本和谓词,当它们组合在一起时,允许在一个批次中执行多个调用。 |
EIP-3102:二叉树结构 | 为帐户和存储尝试引入二进制结构和默克尔化规则,它们被合并到一个“状态”特里。二进制尝试比六进制尝试更小(约 4 倍)证明,使其成为无状态友好以太坊的首选设计。 | Fuel 使用二元稀疏 Merkle Trie 而不是 Patricia Merkle Trie,这使得证明更小,性能更好。 |
EIP-4758:停用 SELFDESTRUCT | 将操作码重命名 SELFDESTRUCT 为 SENDALL,并且只立即将账户中的所有 ETH 移动到目标;不再破坏代码或存储或改变随机数。禁用 SELFDESTRUCT 将是无状态的要求。 | FuelVM 没有会使客户端实现复杂化的操作 SELFDESTRUCT 码。 |
EIP-5027:取消合约代码大小的限制 | 取消对代码大小的限制,让用户可以部署一个大代码的合约,而不用担心将合约拆分成多个子合约。随着去中心化应用的急剧增长,智能合约的功能也越来越复杂,因此,新开发的合约规模也在稳步增长。因此,我们在 24576 字节的合约大小限制方面面临更多问题。 | FuelVM 对低于其物理限制的单个合约的大小没有限制。我们有一条指令允许您将字节码从另一个合约加载到当前执行上下文中,即使您必须将字节码拆分到多个交易中,也允许您将其用作单个合约。它将有一个单一的整体字节码和一个状态。在 EVM 中,如果你跨两个交易吐出一个合约,它是两个独立的合约,你必须做一些事情,比如委托调用来共享两个合约之间的状态,并且不能做一些事情,比如在每个合约的字节码之间跳转。 |
EIP-5065:以太币转账说明 | 添加一条新指令,将以太币转移到目标地址,而无需将执行流程交给它。以太坊目前没有理想的方式在不转移执行流程的情况下转移以太币。人们想出了重入守卫和类似的解决方案来防止某些类型的攻击,但这并不是一个理想的解决方案。 | FuelVM 有一条指令 TR,称为 transfer 的缩写,它将原生资产转移到合约,但不允许接收合约执行逻辑。您可能希望这样做以确保接收合同无法重新输入。这在 EVM 中并不作为原生的一流指令存在——您可以通过自毁合约来做到这一点,但这是一种仅适用于 ETH 的混乱解决方法。 |
EIP-86:交易来源和签名的抽象和 EIP-2938:账户抽象 | 实施一组更改,以服务于“抽象化”签名验证和随机数检查的综合目的,允许用户创建执行任何所需签名/随机数检查的“账户合约”,而不是使用当前硬编码到交易处理中的机制。 | FuelVM 具有无状态的账户抽象,使应用层逻辑能够配置交易的有效性规则。在今天的以太坊上,如果用户有足够的以太币、随机数正确且签名有效,则交易有效。通过账户抽象,用户无需硬分叉即可更改交易逻辑的有效性。这可能意味着更改签名方案或本机锁定多重签名后面的帐户。 |
EIP-1051:EVM 的溢出检查 | 该 EIP 添加了对 EVM 算术运算的溢出检查,以及两个用于检查和清除溢出标志的新操作码。由于 EVM 在 mod 2^256 整数上运行并且不提供内置溢出检测或预防,因此这需要对每个算术运算进行手动检查。 | 溢出检查内置于 FuelVM 中,可以选择禁用。 |
EIP-2803:丰富的交易 | 如果一个交易有一个地址为 x 的 to,那么交易的数据将被视为 EVM 字节码,并且将从交易的 CALLER(又名:交易签名者)的上下文中执行。许多以太坊 DApp 需要用户批准多项交易才能产生一种效果。这会导致糟糕的用户体验,并使与 DApp 交互的体验变得复杂。 | FuelVM 有实现这个的脚本。 |
EIP-2926:基于块的代码 Merkelization | 字节码目前是证明哈希之后第二个区块见证大小的贡献者。将 trie 从六进制转换为二进制将见证的哈希部分减少了 3 倍,从而使代码成为第一贡献者。通过将合约代码分解成块并提交到 Merkle 树中的这些块,无状态客户端将只需要在给定事务期间触及的块来执行它。 | 要在以太坊上获得代码哈希,您需要将所有字节代码哈希在一起。问题是,如果你想用无状态或欺诈证明来做事,为了证明这个哈希是有效的,你必须提供所有的字节码,每个合约最多 24KB。这个 EIP 建议我们应该将其 merkalize 而不是散列。FuelVM 通过使用代码根而不是代码哈希来实现这一点。 |
Sway 开发语言
Sway 是 Fuel 虚拟机 (FuelVM) 的特定领域语言(DSL),FuelVM 是为 Fuel 区块链设计的区块链优化 VM。Sway 基于 Rust 并包含语法来利用区块链 VM,而无需不必要的冗长样板。
Sway 与 FuelVM 一起创建,专为高计算 Fuel 环境而设计。在此处查看 Sway 文档。
开发者工具
Fuel Labs 正在开发一套开发工具,以打造无缝的开发体验。通过在内部创建所有内容,Fuel Labs 保证了工具链的维护,避免了分散的开发人员生态系统的陷阱。
Fuel 使用我们自己的特定领域语言(称为 Sway)和支持工具链(称为 Forc(Fuel Orchestrator))提供强大而流畅的开发人员体验。我们的开发环境保留了 Solidity 等智能合约语言的优势,同时采用了 Rust 工具生态系统中引入的范例。现在,开发人员可以获得完全垂直集成的体验,其中从虚拟机到 CLI 的每个组件都可以协调工作。
Fuel 工具链: Forc:构建、运行测试、启动区块浏览器的本地实例、格式化。
在此处查看 Fuel 工具链。
即将推出: 一套审计工具,从模糊测试和形式验证到代码覆盖和运行时门控。