智慧合約的真相(中)
合作媒體:巴比特資訊
李麗詩頻道/張詠晴編譯 2018-09-13 10:45

要撰寫一份普通的合約,需要多年的學習,並通過律師考試才能勝任。而撰寫一份智慧合約的難度,並不亞於此。但目前,大部分智慧合約都是新手寫的,他們對事物的考慮,做不到盡善盡美。也因此,我們發現,許多的智慧合約都存在著安全漏洞。

 

比特幣為了解決這個問題,放棄了圖靈完備性(Turing-completeness)。這使得合約更易於分析,程式也更容易被檢查。

 

以太坊的解決方案,是把責任轉嫁給合約起草者。也就是,為了保障操作的安全性,合約的起草者應確保自己撰寫出來的合約,要盡可能完善。

 

智慧合約不是真正的合約

 

把維護合約安全性的的責任交給合約起草者,雖然聽起來不錯,但在實踐中,會產生「權利集中」的問題。

 

以太坊的重要理念為「代碼即法律」,也就是說,以太坊合約是最終的權威,沒有人可以推翻這個合約。這個想法是為了讓智慧合約的起草者明白,合約本身是獨立的。如果起草者沒有發現自己的智慧合約存在著安全漏洞,那麼一旦發生什麼事,起草者們是「罪有應得」。

 

然而,當DAO事件發生時,一切嘎然而止。

 

DAO代表著「分散式自治組織」,他們在以太坊上設立了一個基金。用戶可以將錢存入DAO,並按投資比例獲得回報。

 

從理論上來說,這一切都是可行的。但是,由於代碼的安全性沒有得到保障,一旦有人找出了漏洞,就可以成功的從DAO中拿到錢。

 

從DAO中拿錢的人被認為是「駭客」。從某種意義上來說,駭客確實找到了合約的漏洞,這是出乎合約起草者預料的,但也是事實。從更廣泛的意義上說,這根本不是駭客,而是一個利用智慧合約的安全漏洞來獲利的用戶。這和一個會計師透過找出稅收漏洞,來節省客戶的錢,並沒有太大的不同。

 

接下來發生的是,以太坊決定不再完全拿代碼當法律,並收回了所有投入DAO中的錢。

 

而這起事件被記錄了下來了,後來「Ethereum Classic」誕生時,它將「DAO」作為書面形式保存,並保留了「代碼就是法律」的原則。

 

此外,因為圖靈完備實在難以維護,開發人員開始避免使用這種語言。目前ERC 20和ERC 721標準是以太坊中最常用的智慧合約模板,需要指出的是,這兩種類型的合約都可以在沒有任何圖靈完備的情況下編寫。

 

上篇連結:智慧合約的真相(上)

下篇連結:智慧合約的真相(下)

 

本文為巴比特資訊授權刊登,原文標題為「智慧合約的真相