治癒以太坊Solidity頑疾的正確姿勢

買賣虛擬貨幣

近日,Hackernoon 對CyberMiles 虛擬機器及Lity進行了報道,文章講解了以太坊Solidity所面臨的問題,而像Lity這樣新的程式語言正在解決這種問題。本文源自Hackernoon,版權歸Hackernoon所有。

目前,以太坊網路上有1,700多個去中心化的應用程式(DApps),這一數字預計在未來幾年還會繼續增加。所有的DApp都依靠智慧合約來完成一系列重要任務,但很明顯的是,錯誤、bug甚至災難性差錯經常出現在智慧合約裡。到目前為止,駭客在智慧合約中“竊取”的金額已經超過了10億美元。

為了編寫智慧合約,程式設計師必須學習一種新的程式語言“Solidity”。雖然智慧合約會使以太坊上覆雜的商業邏輯運營變得簡單,但是用Solidity編寫智慧合約時犯下簡單的錯誤就能導致非常嚴重的後果,包括安全漏洞以及非常高的交易成本。

智慧合約程式碼很差的案例中,最出名的是去中心化的Decentralized Autonomous Organization (DAO)。最近,在Parity的智慧合約中也發現了一個bug,該bug導致了50萬個ETH的損失,價值超過了1.69億美元。

01

Solidity是替罪羊嗎?

隨著智慧合約問題變得越來越普遍,以太坊的Solidity備受關注。不幸的是,許多依靠智慧合約的新專案,都缺乏能對智慧合約進行適當最佳化和稽覈的程式設計師。

例如,就效能而言,執行復雜的智慧合約時,手續費可能是天文數字。手續費是以太坊上用於執行交易的單位,手續費的多少取決於智慧合約的複雜性和執行合約時網路的擁堵程度。透過收取高昂的gas費,以太坊可以自動地懲罰緩慢又複雜的合約。但是在許多情況下,應用場景本身就很複雜,高額的手續費阻礙了智慧合約在現實社會中的應用。

例如,使用以太坊智慧合約來驗證單個比特幣交易的header(即scrypt操作)將消耗3.7億個以太坊gas。這意味著當你把以太坊gas價格設定為3 Gwei時,將花費超過10億Gwei,也就是1個ETH。這麼簡單的跨鏈交易驗證就要500美元, 難以置信!

在用Solidity編寫的智慧合約中,安全性,特別是整數溢位,也是一個嚴重的問題。駭客們非常勤奮的挖掘智慧合約中的漏洞,從而“盜取”大量的加密貨幣。多個ERC20 代幣合約容易受到攻擊,導致了高等級的安全警報。

許多駭客攻擊的發生,只是因為程式設計師在Solidity編寫程式碼時犯了錯誤。例如,Beauty Chain(BEC) 是一個在中國頗有知名度的專案,於2018年2月23日在OKEX上開始交易。它在交易的第一天就狂漲4000%。在巔峰時,它有約700億美元的市值,但在4月22日,其交易價值突然下降至零,價格也逐漸下降至約20億美元。隨後,OKEX暫停了BEC的交易。

此事件的發生是因為,在BEC的ERC20 智慧合約中存在錯誤。在BEC的案例中,開發人員在合約中新增了一個名為“batchTransfer()”的方法,可以讓token能一次性轉移給多方(即批次)。

(圖片來自CVE-2018-10299安全警報)

然而,開發人員在下面這行程式碼中犯了一個致命性錯誤:

uint256 amount = uint256(cnt) * _value.

那麼,什麼是正確的姿勢?

02

Solidity的解決方案

為了解決用Solidity語言編寫的智慧合約所面臨的現實問題,看看最近新出的一個高階語言Lity吧, 在CyberMiles區塊鏈、DApp和其他定製區塊鏈上,Lity可用於開發智慧合約。特別值得一提的是,Lity旨在解決Solidity面臨的效能和安全問題。

Lity由動態可擴充套件語言,編譯器和虛擬機器runtime組成,是從Solidity語言的進化而來。這意味著,不用更改任何程式碼,所有用Solidity編寫的程式即可在CyberMiles 虛擬機器(CVM)上執行。

使用Lity語言的另一個好處是,Lity比Solidity 更靈活,功能更強大,並且更安全。例如,Lity支援OTA新增新的語言功能。

至於效能方面,Lity的外掛可適用於特定的計算任務並且可以進行高度最佳化。libENI函式由 CyberMiles虛擬機器呼叫,在區塊鏈節點作為原生程式碼執行。

例如,以太坊上的公鑰和私鑰演算法非常慢並且過於昂貴。許多真正的應用如資料市場,在以太坊上基本不可能實現。然而,透過LibENI,這些運算僅需幾毫秒(快了一萬倍)就可以執行完畢,並且手續費也很低,只需幾美分,而用Solidity執行跨鏈交易就需要500美元的手續費。

Lity 的改進對跨區塊鏈資產交換以及將鏈下資料納入區塊鏈交易具有重要意義。

最後,Lity編譯器可以檢查ERC 20和ERC 721合約中程式碼的合規性和已知錯誤,並且可以在ERC 20合約中為ERC 223標準提供支援,以防止token被意外轉到不接受轉賬的合約地址。

而在虛擬機器層面,Lity會自動防止整數溢位等常見問題和將合約所有者設定為無的問題。

03

智慧合約的未來

不幸的是,如今Solidity已經成為智慧合約錯誤的罪魁禍首了。為了保證智慧合約的未來,大家在開發像Lity一樣的新程式語言。

毫無疑問,以太坊基金會也在積極尋找創新的方式。其中最主要的是“Casper”和原生合約的實施,經過一定的過渡期,最終以太坊將轉為PoS共識機制。這一轉變是解決源於PoW機制相關的各種問題的關鍵。就這部分而言,CyberMiles基金會宣稱他們已經找到了解決方案:正如litylang.org 所述,有效的DPoS機制及其虛擬機器CVM。

比賽已經開始了。

這樣的修改會使以太坊的核心技術發生轉變,其執行可能會對以太坊, 特別是他的核心組成部分——智慧合約,產生重大影響。

免責聲明:

  1. 本文版權歸原作者所有,僅代表作者本人觀點,不代表鏈報觀點或立場。
  2. 如發現文章、圖片等侵權行爲,侵權責任將由作者本人承擔。
  3. 鏈報僅提供相關項目信息,不構成任何投資建議

推荐阅读

;