金色观察|Sway:Fuel虚拟机的特定语言
Fuel是一个很有趣的 以太坊 拓展层项目,其项目主要目的是提高以太坊的可扩展性,与其他L2链相同的是,都为了更高的吞吐量在努力,而不同的是,Fuel聚焦于在执行部分解决问题。
Fuel v1早于2020年部署,是第一个推出到以太坊主网的生产级Optimistic Rollup。目前已经进展到了Fuel v2。
更有趣的是,在Fuel v1时,Fuel推出了Yul+语言,主要用于以太坊虚拟机语言功能的完善。
而在Fuel v2上又推出了虚拟机语言Sway,本文中将总结Sway的资料,了解其特性。
Fuel虚拟机(Fuel VM)是一种专为Fuel区块链设计的区块链优化VM。Sway则是Fuel VM的特定语言(DSL),Sway基于Rust,并包含利用区块链VM的语法。
Sway程序有四种类型:contract、predicate、script、library。每个Sway文件都必须以它是什么类型的程序的声明开头。
例如,声明文件是一个被调用的wallet_lib。Sway合约应该在库中声明一个ABI(一个应用程序二进制接口),以便下游合约可以重用它。
Sway工具链由以下几个组件组成。
Forc
“Fuel Orchestrator”Forc相当于Rust的Cargo。它是创建、构建、测试和部署Sway项目的主要入口。
Sway语言服务器(forc-lsp)
提供Sway语言服务器forc-lsp以向IDE公开功能。目前,仅通过插件支持Visual Studio Code,Vim支持即将推出。
Sway格式化程序(forc-fmt)
提供了一个规范的格式化程序forc-fmt,可以手动运行。Visual Studio Code插件将forc-fmt在保存时自动格式化Sway文件。
Fuel Core
虽然不是Sway工具链的直接部分,但提供了Fuel协议的实现Fuel Core。
标准库
与Rust类似,Sway带有自己的标准库。
Sway标准库是可移植Sway软件的基础,它是一组适用于更广泛的Sway生态系统的最小共享抽象。它提供核心类型,如Result<T,E>和Option<T>、语言原语上的库定义操作、本机资产管理、区块链上下文操作、访问控制、存储管理以及对来自其他VM的类型的支持等。
Sway与Solidity的区别
Sway所针对的底层虚拟机是Fuel VM。Solidity指定以太坊虚拟机(EVM)为目标。
Fuel VM中的字节是64位(8字节),而不是EVM的256位(32字节)。因此,原始整数只能达到u64,而哈希(b256类型)不在寄存器中,而是在内存中。因此,Ab256是指向包含哈希值的32字节内存区域的指针。
Fuel VM只有无符号整数作为原语提供:u8、u16、u32和u64。不提供有符号整数运算。如果需要,可以在高级库中实现有符号整数和有符号整数算术。
Fuel VM中的恐慌(即“恢复”)是全局性的,可以完全无条件地恢复交易的状态效果,减去使用的gas。
Fuel VM中的数学计算默认是安全的(即任何溢出或异常都是“恐慌”)。安全检查在VM实现中本地执行,而不是像Solidity的默认安全数学计算那样在字节码级别执行。
Sway合约没有实际的代码大小限制。物理限制由VM_MAX_RAMVM参数控制,在撰写本文时为64MiB。
Sway与Rust的区别
在Rust中,枚举通常采用以下三种形式之一:单元变体,没有内部数据,结构变体,包含命名字段,元组变体,其中包含数据元组。
在Sway中,该过程被简化了。枚举变体必须全部指定一种类型。这种类型代表他们的内部数据。这实际上与Rust提供的同构,只是语法不同。
Bitcoin Price Consolidates Below Resistance, Are Dips Still Supported?
Bitcoin Price Consolidates Below Resistance, Are Dips Still Supported?
XRP, Solana, Cardano, Shiba Inu Making Up for Lost Time as Big Whale Transaction Spikes Pop Up
XRP, Solana, Cardano, Shiba Inu Making Up for Lost Time as Big Whale Transaction Spikes Pop Up
Justin Sun suspected to have purchased $160m in Ethereum
Justin Sun suspected to have purchased $160m in Ethereum