誰是區塊鏈开發語言之王:Move、Solidity、Rust
發表於 2023-10-18 16:18 作者: 金色編譯
作者:DongHyun Kang,Xangle;編譯:松雪,金色財經
1、簡介
在Web3行業,重點是爲用戶提供無縫的體驗。從這個角度來看,dApp構建在哪個區塊鏈上並不那么重要,比起確保在不同區塊鏈之間實現平穩用戶體驗的互操作性更爲關鍵。在2021年和2022年,關於單體區塊鏈和多鏈之間的激烈辯論不斷發展。值得注意的是,Solana和Luna曾一度嶄露頭角,然後逐漸淡出,爲Aptos和Sui搶佔市場的關注創造了機會。
Aptos 和 Sui 都是 Meta 區塊鏈項目 Diem(以前的 Libra)的後繼者,有一個共同點——他們都使用 Move 編程語言。 本文重點介紹 Aptos,深入探討其使用的 Move 語言和 MoveVM 狀態機的特性,以及它如何與現有的編程語言和狀態機(例如 Solidity/EVM 和 Rust/WASM)進行比較。
2、什么是Move?
2.1 Move 是如何誕生的
Facebook(現爲 Meta)的 Diem 團隊發現了區塊鏈行業廣泛採用的 Solidity 編程語言的兩個局限性。 首先,Solidity 存在重入攻擊和雙花攻擊等漏洞。 雖然採用 Solidity 的區塊鏈網絡(例如以太坊)通過共識算法減輕了這些攻擊,但不可否認的事實是,該語言本身蕴藏着潛在的攻擊向量。
其次,Solidity 無法並行化事務處理導致瓶頸。 爲了防止雙重支出,Solidity 要求順序執行智能合約等交易。 這種順序處理限制了速度,進而阻礙了區塊鏈的可擴展性。
在這些擔憂的推動下,Diem 團隊(Meta 的區塊鏈部門)受 Rust 的影響,开發了 Move 語言,以解決上述缺點。 雖然 Rust 是一種值得稱贊的編程語言,但在用於編寫智能合約時可能會導致冗長的代碼。 隨後,Aptos保留了原來的Move語言,同時融入了面向對象的編程模型,演變成Aptos Move。 同時,Sui 採用了一種稱爲 Sui Move 的面向對象語言。
2.2 Aptos Move/MoveVM 功能
Aptos 的 Move/MoveVM 經過精心設計,主要關注安全性。 此外,Aptos 簡化了 Move 的合約代碼並啓用了並行處理,最大限度地減少了區塊鏈攻擊的可能性並最大限度地提高了可擴展性。 在本節中,我們將深入探討 Move 如何實現這些功能。
通過 Move Prover 和資源模型增強安全性
形式驗證涉及以數學方式證明軟件的代碼遵守特定的規則或屬性。 Aptos 通過 Move Prover 工具利用形式驗證來驗證其智能合約的安全性。 Move Prover 可以通過應用形式驗證來防御智能合約中潛在的攻擊媒介,例如雙花和重入攻擊,同時還可以識別其他代碼錯誤並確保穩定性。 與其他依靠共識算法來抵御雙花和重入攻擊的區塊鏈不同,Move 通過其語言和工具主動解決這些問題。
靜態調度 VS 動態調度
此外,MoveVM採用靜態調度來調用函數,以防止函數調用的重入攻擊。 相比之下,傳統的以太坊虛擬機(EVM)使用動態調度。 這兩種方法的不同之處在於程序執行序列中函數調用的時序,通常按如下順序進行:編譯→鏈接→加載→運行→終止。 靜態調度涉及在編譯時調用函數,使智能合約能夠在此經歷初步的錯誤檢查階段。 因此,在MoveVM中,智能合約提前進入驗證階段,從源頭上有效預防重入攻擊。
事務並行處理
Aptos MoveVM 通過事務並行處理增強可擴展性。 爲了實現這一目標,MoveVM 採用 Block-STM(塊級軟件事務內存)將數據庫事務分布在多個线程之間以進行並行執行。 仔細觀察 Block-STM 可以發現以下主要特徵:
Block-STM 利用樂觀並發控制並行執行交易並隨後驗證它們。 遇到衝突的事務會重新執行。
Block-STM採用多版本數據結構來防止寫入衝突。 所有寫入以及事務 ID 和重新執行的次數都存儲在同一位置。 這確保了即使交易被重新執行,交易也會按照預定義的順序進行處理。
Block-STM引入了協作調度程序來優先考慮子事務的執行和驗證,從而指定事務线程之間的處理順序。 Move 使用這種協作調度程序來防止事務之間的衝突並防止其失效。
最後,動態依賴性估計用於通過估計事務的依賴性並識別相關事務來對事務進行分組。
通過Block-STM,Aptos通過以下方式實現並行交易處理。 此外,雖然驗證器之間的驗證是統一的,但每個驗證器之間的執行是並行發生的,從而進一步增強了可擴展性。 Aptos的事務並行處理總結如下:
1. 用戶生成交易並將其發送到網絡。
2. 驗證器驗證交易。
3. 經過驗證的交易根據動態依賴估計進行分組,同時每個交易組由驗證器進行並行處理。
4. 處理後的交易被編譯成區塊並在整個網絡中傳播。
Aptos 代幣標准增強了开發人員和用戶的便利性
Aptos 還使用 Move 構建了自己的代幣標准,即 Aptos Coin Standard。 在此過程中,Aptos 改進了與傳統 EVM 相關的限制。 MoveVM 無需爲代幣發行單獨發行智能合約,只需少量的 Gas 費用即可發行代幣。 然而,這並不是一個顯著的優勢,因爲 Solana 和 Algorand 等非 EVM 區塊鏈也使用自己的代幣標准。
盡管如此,從 2023 年 8 月开始,Aptos 推出了 FT 和 NFT 兩個新標准。 值得注意的是,新的 FT 標准使开發者可以根據自己的开發目標選擇和發行以下其中一種:常規代幣資產、代幣化 RWA 或遊戲內代幣。 這似乎符合 Aptos 進軍不斷增長的 RWA 相關市場的战略。 在實踐中,Web 2.0 公司在對 RWA 進行代幣化時通常會尋求對資產的控制權,但以太坊的局限性使得實現這一目標具有挑战性,導致許多公司开始創建自己的區塊鏈。 相比之下,Aptos 通過代幣標准設置在協議層面實現了這一目標。
3. 與其他語言和虛擬機的比較
比較Aptos Move/Move VM &其他語言和虛擬機
3.1. Move vs. Solidity
Move/MoveVM 的創建是爲了彌補 Solidity 的局限性,因此它比 Solidity 更安全且可擴展。 如前所述,Move/MoveVM 的功能增強了 Aptos 的安全性和可擴展性。 正如2.1中提到的,MoveVM在語言階段防止了重入和雙花攻擊,而Solidity/EVM已經出現了大量的重入攻擊。 2016年以太坊的DAO攻擊就是一個很好的例子,雖然以太坊基金會已經出台了防範措施,但DeFi中仍然存在大量的重入攻擊。 黑客仍在嘗試重入攻擊,希望將錯誤的合約部署在 EVM 生態系統的 DeFi 中。
如上所述,Move/MoveVM 還具有高度可擴展性,由於能夠並行處理事務,理論上最高可達 160,000 TPS。 這使得 Aptos 擺脫了瓶頸。 同時,由於存在雙花和重入攻擊的風險,EVM 必須順序處理交易。 因此,EVM 鏈遇到了瓶頸,當大量交易同時發生時,gas 成本迅速上升,交易陷入停滯。
在靈活性方面,Solidity/EVM 比 Move/MoveVM 有優勢。 Solidity/EVM 使用動態調度,而 Move/MoveVM 使用靜態調度。 Move 使用靜態調度增強了智能合約的安全性,但與 Solidity 相比限制了其功能。 此外,Solidity 允許隨時升級協議和合約代碼,而 Move 對這些升級施加了限制。 在區塊鏈之間的互操作性方面,Solidity 比 Move 表現出更大的靈活性和可擴展性,主要是因爲 Team EVM(包括以太坊)偏向模塊化區塊鏈,而 Team Move 則傾向於整體區塊鏈。
3.2. Move vs. Rust
Move 源自 Rust,與 Rust 有許多性能和功能相似之處,例如效率和安全性。 關鍵區別在於它們的預期目的:Rust 作爲通用編程語言,而 Move 專門從事智能合約开發。 Rust 是爲更廣泛的應用而設計的,並廣泛應用於各種开發環境中,包括與區塊鏈無關的开發環境。 因此,使用 Rust 編寫智能合約代碼可能會導致代碼更長、更復雜。 相比之下,Move 被定制爲專用於智能合約的區塊鏈專用語言。 雖然這限制了它在區塊鏈开發中的使用,但在編寫智能合約時,它會導致相對簡潔且不太復雜的代碼。
<Move 與 Rust:智能合約比較,來源:Krešimir Klas>
上圖是 Solana 和 Sui 开發同一個智能合約時的代碼長度對比。 顯然,更長的代碼意味着更多潛在智能合約攻擊的機會。 較長的代碼還會增加开發人員犯錯誤的機會,而這些錯誤在代碼檢查期間可能會被忽視。 相比之下,Move 的優勢在於其代碼开發更簡單,減少了开發人員出錯的可能性並促進更有效的檢查。
3.3. Aptos Move vs. Sui Move
Aptos Move 和 Sui Move 都源自同一個 Diem 團隊,因此有很多相似之處。 它們最初受到 Rust 的影響,這賦予了它們相似的語法和功能。 此外,這兩個項目都使用 Move Prover 來驗證智能合約。
然而,Aptos Move保留了原始的Diem區塊鏈並採用了面向對象的編程模型,而Sui Move則引入了面向對象的Sui區塊鏈作爲Diem的演變。 Sui 過渡到面向對象的區塊鏈以支持並行性,這取決於了解要讀取和寫入的數據。 因此,Aptos 利用資源模型將應用程序構建塊分爲三個不同的單元:唯一標識符、屬性和方法。 另一方面,Sui 採用面向對象的模型,將應用程序的構建塊劃分爲狀態和行爲。 這導致 Aptos Move 爲开發人員提供了相當大的靈活性,而 Sui Move 則相對固執己見。
Aptos Move 和 Sui Move 在區塊鏈上的操作方式上表現出差異。 首先,兩個區塊鏈都支持並行處理,盡管方法不同。 如前所述,Aptos 通過 Block-STM 實現並行交易處理,而 Sui 採用有向無環圖(DAG)結構來存儲交易。 DAG結構切斷了交易互連,實現了並行交易處理。
另一個區別在於如何防止重入攻擊。 如前所述,Aptos 通過在執行前使用靜態調度來驗證智能合約的狀態來防止重入攻擊。 相比之下,Sui 通過在交易執行期間僅更新一次智能合約的狀態來阻止重入攻擊,確保即使攻擊者中斷交易,狀態也保持不變。 此外,由於Sui的DAG結構不依賴於交易順序,因此一筆交易的中斷不會影響其他交易的獨立處理,從而爲防止重入攻擊提供了額外的保護。
4.下一步:建立強大的开發者生態系統和殺手級 DApp
Move/MoveVM 爲區塊鏈开發提供了一個有前景的平台,但它面臨着兩個重大挑战。 1)在擁有成熟的开發者生態系統方面,Move 仍然落後於 Solidity。 Aptos 已經存在近一年了,而 Sui 最近才推出其主網。 因此,與擁有成熟开發者社區的 Solidity 相比,Move 有着相當長的路要走。 Solidity 擁有八年歷史,提供廣泛的开發人員工具和專門的培訓計劃。 對於开發人員來說,擁有一個支持性社區來爲其工作提供反饋至關重要,Solidity 已經擁有一個在全球範圍內舉辦黑客馬拉松的龐大开發者社區。 Turing 估計 Solidity 开發者社區約有 200,000 名。
相比之下,Move 自 Facebook 以來一直在發展,但大部分都是 Diem 團隊的內部努力。 因此,Move 的开發者生態系統既不像 Solidity 那樣成熟,也不像 Solidity 那樣廣泛。 雖然存在 Aptos 开發者社區,包括 Aptos 論壇,但它缺乏 Solidity 中的結構化培訓計劃、开發者工具和开放反饋機制。 Sui 背後的公司 Mysten Labs 估計 Move 开發人員的數量爲 10,000 人,盡管 Aptos 沒有提供官方數字。
其次,2)Move 缺乏出色的殺手級 dApp。 許多 EVM 鏈(例如以太坊和 Arbitrum)托管着衆多在加密用戶中廣泛使用的 dApp。 然而,Move 生態系統尚未產生類似的出色應用程序。 截至 9 月 26 日,Aptos 的總鎖定價值 (TVL) 爲 4350 萬美元,明顯小於主要 EVM 第 2 層,後者的基礎超過 3 億美元(來源:DeFiLlama)。
Aptos 基金會承認其面臨的挑战,並正在積極採取措施克服這些挑战。 首先,Aptos基金會高度重視开發开發者工具,以培育繁榮的开發者生態系統。 他們推出了 Aptos 教程來幫助早期开發人員入門,並正在創建像 Move Spider 這樣的教育項目。 此外,Aptos 基金會正在通過在世界各地(包括美國、韓國和中國)組織聚會小組來培育开發者社區,以進一步增強开發者生態系統。
在業務方面,Aptos 正在積極與知名實體和在各個領域擁有大量分銷的實體建立合作夥伴關系,例如 NBCUniversal、微軟、谷歌、Netmarble(Marblex)、Neowiz 和 Chingari 等。 另一方面,Aptos 正在努力通過 AIP-41 內部化鏈上隨機性,以促進遊戲公司整合。 Aptos 採用 AIP-41 爲遊戲公司提供了一種經濟高效的中間件替代方案,可替代 Chainlink 的 VRF 等中間件,以確保 EVM 鏈內的項目隨機化,使 Aptos 成爲一個有吸引力的選擇。
5. 結束語
本文以 Aptos 的 Move/MoveVM 爲中心,與現有的區塊鏈开發語言進行功能對比。 研究結果表明,Move 是專門爲开發區塊鏈智能合約而構建的,並且比現有語言具有明顯的技術優勢。 然而,就开發者和 dApp 生態系統而言,Move 仍處於早期階段。 目前,Solidity 的开發者數量是 Move 的約 20 倍,在總鎖定價值(TVL)和影響力 dApp 方面,Solidity 佔據着穩固的地位。 盡管如此,Move 才誕生一年,是少數專門用於區塊鏈开發的編程語言之一,這表明它具有巨大的未开發潛力。 此外,Diem 團隊开發的該語言的聲譽增加了 Move 生態系統增長的前景。 因此,如上圖所示,作爲一種綜合性區塊鏈編程語言的Move是否能夠發展到與Solidity競爭是值得關注的。
標題:誰是區塊鏈开發語言之王:Move、Solidity、Rust
地址:https://www.coinsdeep.com/article/55796.html
鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播信息之目的,不構成任何投資建議,如有侵權行為,請第一時間聯絡我們修改或刪除,多謝。