0
雷鋒網(wǎng)AI金融評論按:智能合約代碼失誤造成以太坊上價值3億美元的代幣“消失”,這究竟是怎么回事?本文從技術(shù)角度進行了解析。文章作者為CyberMiles首席科學(xué)家Michael Yuan博士。雷鋒網(wǎng)獲得作者授權(quán)發(fā)布。
Github 用戶 devops199 今天在 Twitter 上說:“I accidentally killed it”。等大家反應(yīng)過來,他的“小事故”已經(jīng)“刪除”了以太坊上價值3億美元的代幣,平均每個詞造成 7500 萬美元的損失。

光是 Polkadot 一個項目的一個賬號就有近 9000 萬美元消失??胺Q是今天最貴的一句話!

事后有人問 devops199,為什么捅這么大一個簍子?他卻無辜地說“我是新手,正在學(xué)習(xí)?!钡拇_,他是新手,只是在試驗剛學(xué)的智能合約語言。

這個新手捅的大簍子告訴我們:價值300億美元的以太坊智能合約開發(fā)如同兒戲,非常不專業(yè)。
那么,這背后的技術(shù)失誤,究竟是怎么回事?
為什么錢可以“消失”?
我們都知道,數(shù)字貨幣可以高度匿名??墒悄涿请p刃劍。錢上沒寫你的名字,錢掉了你也證明不了是你的。
在數(shù)字貨幣世界中,一個“錢包”一般指一對密?。公?是錢包的“帳號”,可以隨便宣傳,別人可以往里面打錢。比如下面是我的一個以太坊錢包公?,歡迎大家隨時打錢進來!
0xD69b30FAdf81882253329Ab0149131c67602eEd1
可是,要想從帳號中拿錢出來,你必須得有帳號的私鑰。那么問題來了:
如果我忘記了帳號私鑰怎么辦?
回答是:
那么再也沒人能夠動那個錢包中的錢,那些錢從世界上“消失”了。
中本聰曾經(jīng)說過“消失的比特幣讓所有其他人的比特幣更值錢一點(因為供給少了)。把你丟失的比特幣當作對社區(qū)的捐贈吧!”。
Lost coins only make everyone else's coins worth slightly more. Think of it as a donation to everyone. — Satoshi Nakamoto
這個帳戶密鑰對個人來說挺實用??墒菍τ诠緛碚f有點難用。首先密鑰切忌亂傳,只能一個人知道。但是一個人掌握全公司數(shù)千萬美元的帳戶是一件很危險的事(且不說貪污挪用,就想想個人或者家人被綁架的風(fēng)險)。
所以有聰明人利用以太坊的“智能合約”機制開發(fā)了一個智能合約可以支持多重簽名的帳號。這個帳戶沒有自己的秘鑰。從帳戶中提錢需要智能合約同時驗證幾個人的秘鑰。真是一個聰明的解決方法!
顯然,很多融資項目都需要這樣的智能合約。所以其開發(fā)者 Parity 把它放在以太坊公鏈上,作為一個“庫函數(shù)”讓大家自由調(diào)用。所以,很多 ICO 融資項目,包括 parity 自己的幾個大項目,用的智能合約帳戶都是通過調(diào)用這個庫實現(xiàn)的。
可是,我們回憶一下,這個智能合約一開始并不是庫函數(shù)。只是后來出于方便,追求效率,要“彎道超車”,被大家當成庫函數(shù)用了。
作為一個獨立的智能合約,它有兩個特性是萬萬不該在“庫函數(shù)”中出現(xiàn)的:
它可以有一個“擁有者”,而且設(shè)置“擁有者”的操作函數(shù)沒有任何保護。
“擁有者”可以刪除這個智能合約。
我們現(xiàn)在知道 devops199 歪打誤撞地把自己設(shè)成了這個“庫函數(shù)”的擁有者,然后刪除了這個庫函數(shù)。造成的結(jié)果是,所有依賴這個庫函數(shù)的智能合約都無法工作了,這些智能合約對應(yīng)的帳號也都鎖死了,其中的錢沒有人能動了。
可是,系統(tǒng)不都是人設(shè)計的嗎?為什么不能進去人為改一下軟件,把刪除的智能合約恢復(fù)一下?
區(qū)塊鏈的重要特點是“去中心化”與“不可逆”。如果人可以改,又沒有權(quán)威中心,那是聽誰的,怎么改呢?而且你憑什么說這是個程序的“錯誤”?也許別人程序就是這么設(shè)計的,你理解不了其中的深意而己?
智能合約的一個重要特點是“代碼既是法律”?,F(xiàn)實生活中,律師經(jīng)常鉆法律的漏洞。在區(qū)塊鏈世界,程序員鉆代碼的漏洞,不也是合理的嗎?區(qū)塊鏈世界有自己的規(guī)則與邏輯。
不過,對于在這個事件中“消失”了3億美元的項目而言,希望還是有的。在以太坊開發(fā)的計劃圖上,有一個已經(jīng)擱置了一年多,優(yōu)先級不高的小項目:回收被智能合約凍住的資金(見EIP156)。
當然這個“回收”具體怎么做沒人知道,似乎在今天之前也沒人仔細想過。要有優(yōu)秀程序員能解決這個問題,相信1000萬美元的獎金不是夢。只是千萬不要又引入一個更壞的 bug。
這一次出問題的 Parity 是以太坊生態(tài)中最有能力的軟件開發(fā)公司之一。它不但開發(fā)了不少以太坊核心軟件,而且做了不少銀行的應(yīng)用。不過,犯這種低級錯誤真是堪憂。
這個出問題的軟件是幾百人用來管理資金的開源軟件。Linus Torvalds 說過:在很多眼球的觀注下,所有的軟件錯誤都很膚淺。這里顯然沒有發(fā)生。
不過更深層的問題是為什么以太坊的智能合約總是錯誤百出?以太坊的圖靈完備虛擬機聽上去很好,可是很難編程。有經(jīng)驗的程序員都知道,用匯編語言是寫不出安全的現(xiàn)代程序的。安全的軟件一定是基于現(xiàn)代的編程語言與框架產(chǎn)生的。而以太坊在系統(tǒng)設(shè)計上的“不專業(yè)”已經(jīng)是不爭的事實。
所以,區(qū)塊鏈要有真正企業(yè)級的應(yīng)用,我們必須在“改進智能合約”這個方向上創(chuàng)新。比如在區(qū)塊鏈上引入經(jīng)過多年實戰(zhàn)檢驗的企業(yè)級軟件框架。我個人認為,這是區(qū)塊鏈發(fā)展的主要方向之一。
封面圖片來自Sohu
=================
CyberMiles(簡稱CM)是美國知名電商平臺5miles旗下5xlab實驗室近期正式推出的智能商業(yè)合約區(qū)塊鏈。據(jù)介紹,與一般區(qū)塊鏈企業(yè)不同,CM不但可以直接承載應(yīng)用,開發(fā)社區(qū)也可根據(jù)CM進行構(gòu)造全新的區(qū)塊鏈來建立自己的公開或者私有區(qū)塊鏈。
據(jù)稱,目前CM建立了12個大類、371個小類別的商業(yè)合約定制模版,以完善對多種商業(yè)場景的支持,支持快速創(chuàng)建智能合約建立商業(yè)的智能合約市場。
相關(guān)文章:
5miles:這家電商公司,想做推動區(qū)塊鏈技術(shù)落地的標桿
雷峰網(wǎng)特約稿件,未經(jīng)授權(quán)禁止轉(zhuǎn)載。詳情見轉(zhuǎn)載須知。