探索 FuelVM:為執行智能合約而專門構建的定制虛擬機

RyanSproule
2022-10-24 11:35:27
收藏
FuelVM 被設計成模組化性質,它可以作為任何區塊鏈的執行引擎。

原文標題:《Exploring the FuelVM

作者:Ryan Sproule

編譯:老雅痞

介紹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能夠判斷出交易將觸及哪些合約,它就可以安全地並行執行所有其他無爭議的狀態訪問交易。

image 請注意,由於交易輸出被明確包括在驗證中,因此在斷言另一個節點提出的區塊是否正確的過程中,不需要按順序執行重疊的交易。這意味著無論狀態爭用如何,驗證都可以完全並行進行。在實踐中,這意味著當節點與網絡同步時,它們可以實現更大的並行化,並且可以更快地趕上。

原生資產系統

在EVM中,有一種原生資產:ETH。所有其他資產都是通過處理餘額會計(ERC20)的智能合約實現的。在Fuel中,開發人員可以自由地在智能合約中實現資產,但是,有一個選項允許VM以本地方式處理這一點。

在餘額管理方面,本地資產比起ERC20風格的智能合約有幾個相當大的優勢。首先,本原生資產的操作比智能合約中操作狀態更便宜。這可以歸因於它在較低級的原語中運行(UTXO系統被用來代替操縱存儲)。其次,原生資產具有更好的用戶體驗,類似於發送ETH比發送ERC20簡單得多(不需要設置批准)。

原生帳戶抽象+謂詞

帳戶抽象一直是研究的熱點話題,多年來以太坊社區在EIP (EIP-86、EIP-2938、EIP-3074、EIP-4337、EIP-5003)上進行了多次嘗試。實施和升級以太坊以支持帳戶抽象是困難的,這主要是因為核心團隊的工程帶寬/技術債務加上相關的複雜性,以及一長串更高優先級的項目。許多rollup從一開始就有機會在其新穎的執行環境上實施帳戶抽象。FuelVM就是其中之一,除了原生帳戶抽象之外,它還將包括一個有趣的新原語:謂詞。

image 謂詞是一個純粹的(不訪問狀態)合約腳本,它只返回一個布爾值(true或false)。UTXO可以被鎖定在一個謂詞後面,所以只有當謂詞中定義的條件被滿足時,它們才能被使用。這帶來了一個有趣的UX機會,用戶可以將交易設置為只在某些條件下執行,然後一旦滿足謂詞,他們的交易就可以自動執行。此外,謂詞在被銷毀時可以被刪減,因此它們不會導致狀態膨脹。

簡單的演示示例:用戶設置一個交易,只要價格滿足謂詞中定義的閾值,就購買X個代幣。瞧,pièce de résistance,完全鏈上的無信任限價訂單,不會使狀態膨脹!

多維資源定價

資源定價是智能合約區塊鏈最關鍵的組成部分之一。通過將鏈上的資源需求保持在合理的、負擔得起的水平來維持去中心化。資源定價允許系統向用戶收取網絡中節點的"工作"的費用。

在EVM中,引入EIP的最常見原因之一是操作碼的重新定價。這是因為操作碼具有硬編碼的Gas價格,而資源的基礎價格並不按比例擴展(從歷史上看,CPU的改進比SSD更快)。理想情況下,這些系統能夠完全獨立地為每個資源定價,這樣整個收費系統就可以根據底層硬體系統的變化進行動態調整。

FuelVM將能夠實現動態的多資源定價,這可以激勵節點運行者更好地優化其底層硬體,同時仍然最大優化"每區塊效用"。

image 這張圖演示了智能合約的需求明顯高於其他智能合約的情況。有了本地化的資源定價,其他合約就不會受到相同程度的影響。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可以執行更多的交易。

這種中心化排序角色中有幾個關鍵問題需要得到更多的關注!

  1. 控制交易的順序是非常有利可圖的。我們在以太坊和其他區塊鏈中觀察到,MEV是那些排序區塊的人的主要收入來源之一。正如我們今天在傳統金融中看到的那樣,單方控制排序和MEV捕獲最終會導致用戶執行能力的下降。

  2. 從可用性和監管的角度來看,中心化的排序器可能是一個單點故障。如果一個或少數組織正在運行排序器,它們可能會癱瘓或被關閉。這對網絡來說是一個活生生的風險。

  3. 一個中心化的排序器可以審查第二層的交易。排序器可以選擇任何交易,並在構建區塊的過程中以任何順序放置它們,這就產生了審查的能力。許多L2通過提供"強制交易"機制來處理這種情況,這種機制允許用戶繞過排序器,通過利用L1直接包括交易。

  4. 排序器可能會對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如果設計正確,則爭議較小。這一特點使其能夠更好地實現並行化,也可以通過簡化狀態截斷的過程來防止狀態膨脹。

image 繼續使用現金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數據模型的爭議自然比帳戶數據模型小,並且會帶來更多的並行性和更少的狀態膨脹。

鏈捕手ChainCatcher提醒,請廣大讀者理性看待區塊鏈,切實提高風險意識,警惕各類虛擬代幣發行與炒作,站內所有內容僅係市場信息或相關方觀點,不構成任何形式投資建議。如發現站內內容含敏感信息,可點擊“舉報”,我們會及時處理。
ChainCatcher 與創新者共建Web3世界