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
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提供的同構,只是語法不同。