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