Curve 因受 Vyper 個別版本的重入鎖故障影響,導致旗下 alETH/msETH/pETH 等穩定池被駭客攻擊,引發一系列的 DeFi 次生災害與加密世界震盪,Vyper 究竟是什麼,它在 DeFi 世界中扮演著怎樣的角色,為什麼它的 Bug 又會引起行業的高度關注?
(前情提要:Curve代幣差點歸零,CZ:中心化交易所餵價救了DeFi!)
(背景補充:韓國五大交易所警告「謹慎投資CRV」;Curve 創辦人將千萬鎂轉入AAVE救火)
昨夜開始, Curve 因受 Vyper 個別版本的重入鎖故障影響,導致旗下 alETH/msETH/pETH 等穩定池被駭客攻擊,由此引發一系列的 DeFi 次生災害與加密世界震盪,至今仍在持續發酵中。
這也是 DeFi 世界罕見地直面針對智慧合約語言層 Bug 的攻擊事件。不過相比於加密世界中常常見諸報端的 Solidity 語言,Vyper 其實並不那麼為人所熟知。
那 Vyper 究竟是什麼,它在 DeFi 世界中扮演著怎樣的角色,為什麼它的 Bug 又會引起行業的高度關注?本篇文章 Foresight News 就帶大家來了解一下目前正處於風口浪尖的 Vyper 語言。
Vyper:第二受歡迎的智能合約程式語言
Vyper 創建於 2017 年,在此之前,開發人員編寫智慧合約最常用的語言是 Solidity。而 Vyper 和 Solidity 一樣,都是一種面向智慧合約的程式語言,可編譯為以太坊虛擬機器(EVM)的位元組程式碼,執行在 EVM 上。
不過 Vyper 的編譯器使用 Python 進行編寫,是一種基於 Python 且相容 EVM 的程式語言,具有強型別、小型編譯器程式碼和高效的位元組碼生成的特點,這也使其成為想要進入 Web3 的 Python 開發人員的最佳選擇之一。
這導致從採用率角度看,目前的 Vyper 也是僅次於 Solidity 的「第二大相容 EVM 的智慧合約程式語言」,截至此次攻擊事件發生前的 DeFiLlama 最新統計資料顯示:
在目前的 DeFi 開發格局中(TVL 佔比維度),Solidity 以 94.71% 的市場份額佔據絕對壟斷地位,而 Vyper 以 3.04% 的市場份額位列第二名。
而第三名開始往後的 Rust(0.9% )、Cairo(0.53% )、Haskell(0.26% )已經是斷崖式下降。
除了基於 Python 的特點之外,Vyper 不採用面向物件模式、內聯彙編,並且不支援程式碼重用、修飾符、繼承、函式過載、遞迴呼叫、無限長度迴圈和二進位制定長浮點等。
此外它還針對安全性、可讀性、可稽核性和 Gas 效率進行了優化:
- 安全性:支援在 Vyper 中構建安全的智慧合約;
- 可讀性:Vyper 的智慧合約語言和編譯器實現力求簡單,以提高程式碼的可讀性,尤其是對於沒有使用 Vyper 經驗的使用者以及一般沒有程式設計經驗的使用者;
- 可稽核性:Vyper 程式碼最大限度地讓人可讀,且其簡單架構減少了軟體錯誤,提升了智慧合約的可審計性;
Vyper 的創辦人 John Max Skaller 曾表示,構建 Vyper 有兩個原因:「首先,我喜歡 Python,特別是它的簡單性,但我不喜歡它缺乏範圍確定性,凡事都需要做大量更改來取得進展,因此我決定在保留與 Python 相容性的同時,通過建造高階得多的程式語言,並在其中建造函式性程式語言的某些概念來改正這些問題。
第二個原因是效能。我有一個稱之為 interscript 的主要 Python 程式,一個有讀寫能力的程式設計工具,它受到 Python 中缺乏良好結構和效能問題的困擾」。
總的來說,Vyper 的設計初衷是為了創建出智慧合約參與方易懂的透明智慧合約簡化流程,以主打可讀性與可稽核性,從而確保安全。
Vyper 的優劣勢
本章節談及的 Vyper 優劣勢,主要是相比 Solidity 語言,畢竟從上文提到的市場份額維度,其它的智慧合約語言暫時還未形成較大的氣候。
首先,Vyper 相比 Solidity 的最大優勢之一,就是它基於 Python 開發的特性,因此雖然 Vyper 的功能和流行程度不如 Solidity,但對於熟悉 Python 的開發人員來說,它是理想的可選語言。
同時,Vyper 編譯器還選擇將區域性變數儲存在記憶體中而不是堆疊上,這使得合約更加簡單和高效,並解決了其他高階語言中常見的「堆疊過深」的問題。
Vyper 也提供了更多內建函式,以確保幾乎每個 Solidity 和 Yul 中的功能在 Vyper 中也可以實現。開發者通過內建函式可以訪問低階位運算、外部呼叫和代理合約操作,通過編譯時提供覆蓋檔案可以實現自定義儲存佈局。
而 Vyper 相比 Solidity 的劣勢也很明顯,主要源於它是一種相對 Solidity 較新的語言,所以首當其衝自然是開發者維護和社群工具層面的短板:
Vyper 至今仍然缺乏 Solidity 所擁有的廣泛社群支援 ——Solidity 有大量優秀的開發工具可供使用,像 OpenZeppelin 為安全的智慧合約開發提供開源庫,以及 Remix 線上 IDE 和本地開發人員環境 Hardhat 等 IDE,為其提供了允許輕鬆開發 DApp 的工具和功能。
截至發文時,GitHub 資料顯示,Solidity 的貢獻者為 568 人,而 Vyper 為 189 人,相差 3 倍。
不過 Vyper 雖然沒有豐富的的開發工具套件,但它有更緊密整合的工具,並且也可以插入到 Solidity 開發工具中 —— 如 Titanaboa 直譯器,具有許多與 EVM 和 Vyper 相關的內建工具,可用於實驗和開發;Dasy,作為一種基於 Vyper 的 Lisp,具有編譯時程式碼執行功能。
此外從技術細節角度,Vyper 缺少修飾符、類繼承和遞迴呼叫,並且程式語言不是圖靈完備的。
當然這些大部分是 Vyper 特意提供更少的功能,旨在提升安全性和可審計性,以使合約更安全和易於稽核,但這也使得開發人員需要額外的工作來解決這些限制,從而意味著本就不佔人力優勢的 Vyper 註定開發效能偏低。
Vyper 的影響力從何而來?
目前來看,此次 Vyper 故障只涉及 0.2.15、 0.2.16 和 0.3.0 等幾個特定版本,且從上文也可知,使用 Vyper 編寫的頂級 DeFi 專案的體量並不大,僅佔不到 5% 的 TVL 市場份額。
那為何此次 Vyper 的故障卻造成了如此大的影響?
簡言之,雖然在主流 DeFi 協議中,主動使用 Vyper 語言進行開發的專案並不多,且此次出現問題的是 Vyper 的幾個特定版本,但有一個頂級 DeFi 專案卻是基於 Vyper 開發:
沒錯,正是 Curve,主要原因似乎與上文提到的 Gas 優化特性有關 —— 因為 Curve 合約較為複雜,Vyper 使得這些複雜性變得更易於管理,並進一步節省 Gas(其它基於 Vyper 開發的知名專案則屈指可數,如 Uniswap v1 版本、第一個 ETH 2.0 存款合約等)。
由於 Curve 已經成為 DeFi 世界甚至整個鏈上金融的關鍵基礎設施,所以在層層巢狀之下,Curve 的穩定池本質上就是絕大部分協議的底層資金與收益來源,這也是此次安全事件發生至今,JPEG’d、 Alchemix 、 Metronome 、 deBridge 、 Ellipsis Finance 等餘震不斷的關鍵原因。
不過 Vyper 的新版本已經修復這個漏洞,但由於受影響的 Curve 穩定池合約不可升級,因此無法進行部署升級,只能選擇廢棄對應合約,將資金撤出。
小結
總的來看,此次安全事件之所以大家會心有餘悸,主要是因為智慧合約語言層的 Bug 風險,已經遠超 DeFi 協議本身或者說智慧合約邏輯的範疇。
試想一下,如果此次不只是 Vyper,而是連 Solidity 也同樣出了問題,那麼鏈上所有的 DeFi 協議可能都幾難倖免,我們甚至會真的面臨「DeFi 不存在了」的風險。
但禍兮福之所倚,這次 Curve 也算被動掀開了對智慧合約語言層進行攻擊的問題蓋子,讓大家意識到了這個可能,對 DeFi 世界而言,是一次大考,也是一場自我救贖的機會。
📍相關報導📍
Curve遭駭逃難潮,讓搶跑機器人賺到1,227ETH,創史上最大MEV獎勵區塊