來源:《反擊!多位資深開發者反駁某些批評Move系公鏈的言論》
作者:Faust
受訪者:
- Wubuku—低代碼Dapp開發平台dddappp創始人
- Nanne2022—資深Move生態開發者
- Zhou Qi—以太坊生態存儲類項目EthStorage創始人
- Li—資深Move生態開發者
- Jolestar—支持Move的Layer2項目Rooch創始人
- eternal—Move社區成員
前情提要:在2023年6月21日,名為“刺耳的Whistle”的媒體發表了一篇題為《開技術倒車?Aptos和Sui其實是聯盟鏈,生命取決於資本的耐心》的文章。文章主要內容是關於作者北辰對一位疑似來自芯片巨頭高通公司的通信工程師Steven的採訪記錄,並對Aptos和Sui做出了諸多批判。文中稱Steven是經常對區塊鏈發表暴論的技術專家,並稱Sui不是區塊鏈的正確方向,Aptos和Sui用的都是聯盟鏈的技術。
此文一出,便在一些Web3社區引發廣泛傳播和爭議。包括以太坊社區和Move社區在內的,諸多業內技術人員,都對此文做出了批判。
本著實事求是精神,我們與多位業內技術大咖進行了訪談,針對《開技術倒車?Aptos和Sui其實是聯盟鏈,生命取決於資本的耐心》中有爭議的12個論點進行討論。
1.關於這篇批判Move系公鏈的文章在標題和結尾處,反复提到“所有的Move系公鏈本質上就是一個聯盟鏈。”
Nanne2022:區分聯盟鍊和公鏈有多種指標,最重要的是節點的准入門檻。聯盟鏈節點需要獲得官方的許可才可以進入網絡中,並且不允許用戶私自搭建同步數據的全節點。聯盟鏈的數據只有節點內部可以同步,外界想獲取數據,只能通過聯盟鏈內部節點對外提供的接口。
而公鏈的全節點沒有准入門檻,共識節點Validator質押足額的資產就可以進入。
此外,在技術上可以區分是公鏈還是聯盟鏈,比如共識和網絡通訊層面,公鍊和聯盟鏈的設計就不一樣。聯盟鏈只考慮固定數量的節點,設計原則就是節點是官方許可製,不是無許可製的。這樣會使得聯盟鏈的技術實現相對簡單。事實上,Aptos和Sui用的都不是聯盟鏈的技術,而是公鏈。
真正為人所詬病的無非是Aptos和Sui不夠去中心化(相比於以太坊),並且Sui官方在二級市場上有控制SUI流動性的能力。
注:目前包括Aptos和Sui在內的絕大多數公鏈,全節點都沒有准入門檻。 Aptos的共識節點質押100萬枚APT就可以運行,Sui的共識節點需要質押3000萬枚SUI,都不需要獲得官方的許可。
2.關於文章開頭聲稱,Aptos和Sui其實沒有區塊,也沒有鏈。
Wubuku:首先,Aptos 有區塊,只要看一下它的Node API文檔就清楚。
其次,Sui的確沒有區塊的概念,因為它用了針對交易數據的DAG結構。但是,狹義的“區塊鏈”沒有那麼重要,實現Web3 願景需要的是“去中心化的賬本”,不是某種特定的數據結構。
3.關於文章作者認為,“web3圈的人挺沒見識,比如Dfinity(ICP)出現後,很多人就很興奮,覺得敘事宏大,能解決很多問題,但其實那就是雲原生的故事,微軟、IBM都搞了多少年了。”
Jolestar:ICP的構建路徑的確有問題。但這個作者應該是覺得“去中心化的雲計算”這條路不對,但Web3就是去中心化的雲原生。
4.關於文中嘉賓Steven認為,“自以太坊以來,沒有再出現什麼新的技術範式。”
Zhou Qi: 如果是指最早的以太坊,其實它和它以外的技術範式更迭都很快。 ZK,DA,Verkle Tree,交互式欺詐證明,這些技術範式的最早發起者都不是以太坊基金會,但很快就被以太坊借鑒並吸收。
比如,以太坊在DA方面借鑒了Celestia,在PoS共識協議上借鑒了Cosmos的Tendermint。 ZK也不算以太坊本身的技術,但是在推廣ZK概念上,以太坊基金會花了不少力氣。
另外,Move語言也算是技術範式上的創新。 Algorand和Cardano在POS上的範式創新也很重要,只是還沒有經歷大規模的考驗。
5.關於Steven認為,“Solidity是一種編譯型語言,Move是解釋型語言。”
Nanne2022:如果要用“編譯型”和“解釋型”來劃分,Solidity和Move應該被劃分到一種類別中。
傳統意義的劃分中,編譯型語言是將代碼編譯成比較接近機器底層的形式,比如彙編語言,然後由機器鏈接運行。解釋型語言,是將代碼編譯成某種更上層的字節碼,然後由這種字節碼的解釋器直接解釋運行字節碼,比如Ruby,Python。
如果從這個角度來講,Solidity和Move都是先被編譯成虛擬機能夠解釋的字節碼,具體執行時再由解釋器輸出為底層硬件能夠理解的機器碼。無論怎麼理解解釋型和編譯型,Solidity和Move都是處在同一類別下的。
eternal:Solidity和Move寫的合約,都是先在開發合約的IDE平台所在的主機本地完成編譯,上傳到鏈上時存的都是字節碼Bytecode。從語言被編譯器和解釋器處理的整個流程來看,Solidity和Move沒什麼本質的不同。
6.關於Steven認為,“Move語言是前Facebook的聯盟鏈項目Libra創造的,基於Rust語言來實現,是為聯盟鏈而生的。Move繼承了Rust的硬件資源管理,有良好的並行能力。”
Wubuku:首先,Starcoin 就採用了Move作為合約開發語言,共識算法上沿用了比較經典的POW,和聯盟鏈就沒有任何關係。然後,Rust是為系統編程設計的語言,Move 是為“智能合約開發”而重新設計的語言。所謂的“Move繼承了Rust語言的硬件資源管理”,其實風馬牛不相及。再者,不能因為Move 的“面向資源編程”在一定程度上受到了Rust 所有權機制(用於實現內存安全的)的啟發,就說“Move繼承了Rust語言的硬件資源管理能力”。
eternal:無論是Solidity還是Move寫的合約代碼,最後都被放到沙盒化的虛擬機裡運行了,根本就感知不到底層的硬件資源。 Move沒有像Rust那樣的“硬件資源管理能力”。此外,現在已經有Rooch和ZkMove這類支持Move語言的以太坊Layer2,寫Move合約不是非要在Aptos和Sui上。
7.關於Steven認為,“Move不是一種好的語言,因為如果脫離了Aptos和Sui等項目,Move就沒法用。”
Nanne2022:這對於Solidity也是完全一樣的。如果Solidity脫離了支持EVM的鏈,也沒法用。 “XXX 不是一種好的語言,因為你如果脫離了XXX生態,XXX 語言就沒法使。”這一套放很多編程語言身上也是一樣的。
eternal:Steven會這麼說,主要是因為Solidity和Move需要專門的虛擬機才能執行,這需要專用的程序,但統治整個互聯網開發領域的Java一樣需要專門的虛擬機。如果放在上世紀末Java剛推出不久時,也有人會說:“Java如果脫離了JVM生態,就沒法用,所以不是一種好的語言”。
8.關於Steven認為,“Aptos和Sui的整個體係是從Libra繼承過來的,在Libra基礎上有改進,但改進不大。”
Wubuku:Aptos 主網上線時間較早,其實和Starcoin 相對接近,但是共識是更“環保”的PoS。
Sui 的改進其實相當激進,在公鏈/網絡的狀態存儲模型方面,Sui Move 進行了相當徹底的重寫,拋棄了Starcoin和Aptos的賬戶存儲模型,採用對象存儲模型。在這幾個不同公鏈上做過應用的Move開發者們,一定對其中的明顯差異深有感觸。不能因為人家有團隊成員是從Libra 出來的,就天然認為人家就指望著啃老本。
9.關於Steven認為,“Libra就是一個帶版本號的關係型數據庫,每次交易都會更新一下賬本狀態,這與傳統區塊鏈完全不同。區塊鏈賬本只會新增字段,不會修改已有的字段。這種全局狀態控制的方式只適合聯盟鏈,不適合公鏈。”
Li:區塊鏈本質就是一個可驗證的Key-Value數據庫,沒有必要非把它和關係型數據庫分個高下。
Zhou Qi:以太坊的賬本狀態模型StateTree就可以修改已有數據,是支持增刪改查、帶版本號的Key-Value存儲模型。而且其他的傳統區塊鏈賬本也可以刪數據,比如比特幣鏈上的utxo用掉了,就被刪掉了。
Jolestar:感覺Steven對狀態樹StateTree的理解不太準確。
10.關於Steven認為,“Aptos設立時間戳來安排區塊鏈上的執行次序,不需要在礦工之間形成廣泛的共識。這麼做容易被攻擊……區塊時間容易預估,導致Aptos的安全級別下降。”
Li:Aptos的記賬模型是和以太坊基本一致的賬戶模型,用的BFT共識也不是靠時間戳來定序的。所謂的“區塊時間(出塊時間)”可以預估,無非會讓不同時刻的leader提前暴露,理論上可能有遭到ddos攻擊的隱患。但這屬於可用性問題,和安全性沒有聯繫,而且Aptos每個時間點的Leader暴露時間只有幾十秒,每秒都在輪換Leader。
eternal:Aptos無論是區塊還是交易,都要經過至少2/3的礦工(Validator)共識,並不是“不需要在礦工之間形成廣泛的共識”。只不過Aptos上的交易數據被共識,是在打包進區塊前就完成,區塊中不需要包含完整的交易數據,只要有摘要就行。
Zhou Qi:某個時間點的出塊者被預估,理論上是可以被ddos的。但secret leader election可以解決這方面的問題。
11.關於Steven認為,“Aptos只是一個關係型數據庫……跟傳統的關係型數據庫沒什麼兩樣。”
Wubuku:以我這種做了二十多年傳統企業應用和互聯網應用的資深CRUD boy的體驗,Aptos和“關係型數據庫”提供的體驗有天壤之別。
Li:區塊鏈本質就是一個可驗證的Key-Value數據庫,沒有必要非把它和關係型數據庫分個高下。
12.關於Steven認為,“Sui並不需要所有的節點都達成共識……
Sui把交易分為簡單交易和復雜交易,簡單交易只要簽名就結束了,複雜交易只需要BFT一致就行。
任何交易只要能提交,理論上可以單獨完成驗證……Sui直接拋棄了區塊鏈最基本的共識。 ”
Nanne2022: 共識的含義是,系統中多數節點對某個消息的確認,能在一定時間內達成穩態(也即能夠繼續處理後續消息)。 Sui中的交易,無論是簡單交易還是複雜交易,都需要收集一遍節點的簽名,超過2/3的節點響應,簡單交易才會完成共識,複雜交易才會進入下一步共識流程。
簡單交易不會和其他交易發生衝突,天然可並行。既然如此,自然可以把簡單交易和復雜交易分開做共識驗證,這樣可以提速。
至於Sui為什麼能夠實現交易的快速確認,和它採用的Narwhal內存池協議也有很大關係。 Narwhal 保證了要共識的消息能夠在本地直接獲取,使節點能在本地直接完成共識,不需要再從網絡中獲取類似區塊的消息。
Wubuku:Sui比較特殊,可以針對簡單交易和復雜交易,採用不同的共識方式,這個要從Sui 採用的對像模型說起。
Sui 的對像模型包含Owned Objects和Shared Objects兩大類型。其中,Owned Objetcs類似比特幣的UTXO,但卻是“增強版的UTXO”。相比之下,Shared Objects更貼近處理全局數據的以太坊合約賬戶。
Sui的簡單交易往往只涉及Owned Objects,後者類似UTXO,只有其Owner可以操作,並且有版本號,天然支持被並行處理。那麼,只涉及Owned Objects的簡單交易當然可以在共識驗證上走捷徑,不需要和其他交易放在一起排序。