治愈以太坊Solodity頑疾的正確姿勢區(qū)塊鏈
隨著智能合約問題變得越來越普遍,以太坊的Solidity備受關(guān)注。不幸的是,許多依靠智能合約的新項目,都缺乏能對智能合約進行適當(dāng)優(yōu)化和審核的程序員。
目前,以太坊網(wǎng)絡(luò)上有1,700多個去中心化的應(yīng)用程序(DApps),這一數(shù)字預(yù)計在未來幾年還會繼續(xù)增加。所有的DApp都依靠智能合約來完成一系列重要任務(wù),但很明顯的是,錯誤、bug甚至災(zāi)難性差錯經(jīng)常出現(xiàn)在智能合約里。到目前為止,黑客在智能合約中“竊取”的金額已經(jīng)超過了10億美元。
為了編寫智能合約,程序員必須學(xué)習(xí)一種新的編程語言“Solidity”。雖然智能合約會使以太坊上復(fù)雜的商業(yè)邏輯運營變得簡單,但是用Solidity編寫智能合約時犯下簡單的錯誤就能導(dǎo)致非常嚴重的后果,包括安全漏洞以及非常高的交易成本。
智能合約代碼很差的案例中,最出名的是去中心化的Decentralized Autonomous Organization(DAO)。最近,在Parity的智能合約中也發(fā)現(xiàn)了一個bug,該bug導(dǎo)致了50萬個ETH的損失,價值超過了1.69億美元。
Solidity是替罪羊嗎?
隨著智能合約問題變得越來越普遍,以太坊的Solidity備受關(guān)注。不幸的是,許多依靠智能合約的新項目,都缺乏能對智能合約進行適當(dāng)優(yōu)化和審核的程序員。
例如,就性能而言,執(zhí)行復(fù)雜的智能合約時,手續(xù)費可能是天文數(shù)字。手續(xù)費是以太坊上用于運行交易的單位,手續(xù)費的多少取決于智能合約的復(fù)雜性和執(zhí)行合約時網(wǎng)絡(luò)的擁堵程度。通過收取高昂的gas費,以太坊可以自動地懲罰緩慢又復(fù)雜的合約。但是在許多情況下,應(yīng)用場景本身就很復(fù)雜,高額的手續(xù)費阻礙了智能合約在現(xiàn)實社會中的應(yīng)用。
例如,使用以太坊智能合約來驗證單個比特幣交易的header(即scrypt操作)將消耗3.7億個以太坊gas。這意味著當(dāng)你把以太坊gas價格設(shè)定為3 Gwei時,將花費超過10億Gwei,也就是1個ETH。這么簡單的跨鏈交易驗證就要500美元, 難以置信!
在用Solidity編寫的智能合約中,安全性,特別是整數(shù)溢出,也是一個嚴重的問題。黑客們非常勤奮的挖掘智能合約中的漏洞,從而“盜取”大量的加密貨幣。多個ERC20 代幣合約容易受到攻擊,導(dǎo)致了高等級的安全警報,。
許多黑客攻擊的發(fā)生,只是因為程序員在Solidity編寫代碼時犯了錯誤。例如,Beauty Chain(BEC)是一個在中國頗有知名度的項目,于2018年2月23日在OKEX上開始交易。它在交易的第一天就狂漲4000%。在巔峰時,它有約700億美元的市值,但在4月22日,其交易價值突然下降至零,價格也逐漸下降至約20億美元。隨后,OKEX暫停了BEC的交易。
此事件的發(fā)生是因為,在BEC的ERC20 智能合約中存在錯誤。在BEC的案例中,開發(fā)人員在合約中添加了一個名為“batchTransfer()”的方法,可以讓token能一次性轉(zhuǎn)移給多方(即批量)。
然而,開發(fā)人員在下面這行代碼中犯了一個致命性錯誤:
uint256 amount = uint256(cnt) * _value.
什么是正確的姿勢?
Solidity的解決方案
為了解決用Solidity語言編寫的智能合約所面臨的現(xiàn)實問題,看看最近新出的一個高級語言Lity吧, 在CyberMiles區(qū)塊鏈、DApp和其他定制區(qū)塊鏈上,Lity可用于開發(fā)智能合約。特別值得一提的是,Lity旨在解決Solidity面臨的性能和安全問題。
Lity由動態(tài)可擴展語言,編譯器和虛擬機runtime組成,是從Solidity語言的進化而來。這意味著,不用更改任何代碼,所有用Solidity編寫的程序即可在CyberMiles 虛擬機(CVM)上運行。
使用Lity語言的另一個好處是,Lity比Solidity 更靈活,功能更強大,并且更安全。例如,Lity支持OTA添加新的語言功能。
至于性能方面,Lity的插件可適用于特定的計算任務(wù)并且可以進行高度優(yōu)化。libENI函數(shù)由 CyberMiles虛擬機調(diào)用,在區(qū)塊鏈節(jié)點作為原生代碼執(zhí)行。
例如,以太坊上的公鑰和私鑰算法非常慢并且過于昂貴。許多真正的應(yīng)用如數(shù)據(jù)市場,在以太坊上基本不可能實現(xiàn)。然而,通過LibENI,這些運算僅需幾毫秒(快了一萬倍)就可以執(zhí)行完畢,并且手續(xù)費也很低,只需幾美分,而用Solidity執(zhí)行跨鏈交易就需要500美元的手續(xù)費, 。
Lity 的改進對跨區(qū)塊鏈資產(chǎn)交換以及將鏈下數(shù)據(jù)納入?yún)^(qū)塊鏈交易具有重要意義。
最后,Lity編譯器可以檢查ERC 20和ERC 721合約中代碼的合規(guī)性和已知錯誤,并且可以在ERC 20合約中為ERC 223標(biāo)準(zhǔn)提供支持,以防止token被意外轉(zhuǎn)到不接受轉(zhuǎn)賬的合約地址。
而在虛擬機層面,Lity會自動防止整數(shù)溢出等常見問題和將合約所有者設(shè)置為無的問題。
智能合約的未來
不幸的是,如今Solidity已經(jīng)成為智能合約錯誤的罪魁禍?zhǔn)琢恕榱吮WC智能合約的未來,大家在開發(fā)像Lity一樣的新編程語言。
毫無疑問,以太坊基金會也在積極尋找創(chuàng)新的方式。其中最主要的是“Casper”和原生合約的實施,經(jīng)過一定的過渡期,最終以太坊將轉(zhuǎn)為PoS共識機制。這一轉(zhuǎn)變是解決源于PoW機制相關(guān)的各種問題的關(guān)鍵。就這部分而言,CyberMiles基金會宣稱他們已經(jīng)找到了解決方案:正如litylang.org 所述,有效的DPoS機制及其虛擬機CVM。
比賽已經(jīng)開始了。
這樣的修改會使以太坊的核心技術(shù)發(fā)生轉(zhuǎn)變,其執(zhí)行可能會對以太坊, 特別是他的核心組成部分——智能合約,產(chǎn)生重大影響。
1.TMT觀察網(wǎng)遵循行業(yè)規(guī)范,任何轉(zhuǎn)載的稿件都會明確標(biāo)注作者和來源;
2.TMT觀察網(wǎng)的原創(chuàng)文章,請轉(zhuǎn)載時務(wù)必注明文章作者和"來源:TMT觀察網(wǎng)",不尊重原創(chuàng)的行為TMT觀察網(wǎng)或?qū)⒆肪控?zé)任;
3.作者投稿可能會經(jīng)TMT觀察網(wǎng)編輯修改或補充。