Skip to content

与 Solidity的区别

本页概述了 Sway 和 Solidity 之间以及 FuelVM 和 EVM 之间的一些关键区别。

底层虚拟机

Sway 所针对的底层虚拟机是 FuelVM,具体请参见 此处. Solidity 所针对的是以太坊虚拟机 (EVM), 具体请参见 此处.

Word Size

FuelVM 中的字为 64 位(8 字节),而不是 EVM 的 256 位(32 字节)。因此,所有小于且包括的原始整数 u64 都存储在寄存器中; u256, 大于寄存器,而哈希值 ( b256 类型) 不存储在寄存器中,而是存储在内存中。因此,它们是指向包含其数据的 32 字节内存区域的指针。

仅限无符号整数

只有无符号整数作为原语提供: u8, u16, u32, u64, 和 u256。 有符号整数算法在FuelVM中不可用。如果需要,有符号整数和有符号整数算术可以在高级库中实现。

全局恢复

FuelVM 中的恐慌(在 Solidity 和 EVM 中称为“恢复”)是全局性的,也就是说,它们无法被捕获。恐慌将完全无条件地恢复交易的状态效果,减去使用的 gas。

默认安全数学

FuelVM 中的数学运算默认是安全的(即任何溢出或异常都会引起恐慌)。安全检查是在 VM 实现中本地执行的,而不是像 Solidity默认的安全数学运算那样在字节码级别执行的。

无* 代码大小限制

Sway 合约没有实际的代码大小限制。物理限制由 VM_MAX_RAM VM 参数控制,在撰写本文时为 64 MiB。

账户类型

FuelVM中的帐户类型在原始b256 哈希周围有类型安全的包装,以清楚地区分它们各自的类型。包装器 Address 反映了EOA(外部拥有的帐户)的地址,并且能够在EVM的上下文中保存utxo。 另一个包装器 ContractId 反映了EVM中部署的合约,但不能保存utxo。