智慧合約的真相
和“區塊鏈”一樣,“AI”、“雲”和“智慧合約”這些概念都在被大肆炒作。
畢竟,讓事物“順其自然”,比按照司法程式管理不是來得更加簡單嗎?智慧合約的承諾會:
1.自動地、無需信任地、公正地強制執行合約內容;
2.在合約的簽訂、執行和履行過程中,去除對第三方的依賴;
3.(據說可以)替代律師。
對於炒作中的部分資訊,我還是支援的。畢竟,一旦去除對可信第三方的依賴,效率會提高許多。
那麼,智慧合約到底是什麼呢?它是以太坊專屬的嗎?這難道不是未來的必然趨勢嗎?你為什麼要阻礙這種進步?
在本文中,我將說說智慧合約是什麼,以及它將有哪些應用場景。
智慧合約是什麼?
一般的合約,是兩個(兩個以上)當事人之間的協議,協議內容將會對他們即將進行的某件事上進行約束。例如,Alice可以付錢給Bob,以換取Bob房子的使用權(也就是租金)。Denise可能每月給Charlie付款,讓Charlie幫忙修理汽車(又名汽車保險)。
智慧合約的不同之處在於,它是由計算機程式碼評估和執行的。如果Alice同意支付500美元給Bob,而Bob需要在3個月後交付一張沙發。程式碼會確定條件是否屬實(Alice支付500美元給Bob了嗎?付款後有3個月了嗎?)。並執行(從託管到交付沙發),過程中不允許任何一方退出合約或拒絕履行。
智慧合約的關鍵點是,它可以實現可信執行(trustless execution)。也就是說,不需要依賴任何第三方來進行信任背書。因為,與其等著第三方履行諾言,或者依靠律師和法律制度補救,還不如讓智慧合約來。智慧合約可以及時、客觀地執行記錄在合約中的所有條款。
智慧合約其實挺“笨”的
“智慧”一詞,意味著合約具有某種與生俱來的智慧。實際上,真正執行的時候它沒有那麼聰明。合約的智慧之處在於,只需要將協議寫入演算法,然後強制雙方履行協議,不需要協議雙方的合作。就好像,房東會把不付錢的租客趕出去,智慧合約會直接把他們鎖在門外。
一個真正“智慧”的智慧合約,會考慮到所有“情有可原”的情況,並審視合約精神,作出最公平的裁決。換句話說,真正的智慧合約會表現得像一個優秀的法官。而現實情況是,“智慧合約”根本就不智慧,因為它是基於規則,並始終遵循規則的,完全不會考慮現實情況或人道主義。
換句話說,一旦使用智慧合約,就不允許有任何模稜兩可的空間,這也就引出了下一個問題。
智慧合約真的很難實現
由於以太坊的影響力太大,人們錯誤的以為智慧合約是以太坊獨有的。事實上這是不對的。智慧合約從1995年就出現了。2009年比特幣出來的時候,也採用了智慧合約語言——指令碼。拿比特幣的智慧合約語言和以太坊的相比,最大的區別是以太坊是圖靈完備(Turing-complete)的。也就是說Solidity(以太坊智慧合約語言)可以執行更加複雜的合約,代價是它也更難分析。
複雜性帶來了一些嚴重後果。雖然複雜的合約可以允許更復雜的情況出現,但複雜的合約也很難維護。在日常生活中,也會出現合約越複雜,就越難強制執行的現象。因為複雜因素增加了不確定因素和解釋空間。如果要保證智慧合約絕對安全,就要對合約執行中每一種可能進行測試,並確保合約能夠完全實現起草者本人的意願。
保證圖靈完備的智慧合約,就相當於證明計算機程式沒有錯誤。我們知道這是非常困難的,因為現在幾乎所有的計算機程式都不是完美的。
寫作一份普通的合約,需要多年的學習,並通過律師考試才能勝任。寫作一份智慧合約的難度,不亞於此。但目前,大部分智慧合約都是新手寫的,他們對事物的考慮,做不到盡善盡美。也是因此,可以發現許多智慧合約都存在安全漏洞。
比特幣為了解決這個問題,放棄了圖靈完備性(Turing-completeness)。這使得合約更易於分析,程式更容易列舉和檢查。
以太坊的解決方案呢,是把責任轉嫁給合約起草者。即,為了保障操作的安全性,合約的起草者應確保自己寫作出來的合約儘可能完善。
智慧合約不是真正的合約(至少在以太坊上是這樣)
把維護合約安全性的的責任交給合約起草者,雖然聽起來不錯,但在實踐中,會產生權利集中的問題。
以太坊是基於“程式碼就是法律”的理念展開。也就是說,以太坊合約是最終的權威,沒有人可以推翻這個合約。這個想法是為了讓智慧合約起草者明白,合約本身是獨立的。如果起草者沒有發現自己的智慧合約的安全漏洞,那麼一旦發生什麼事,起草者們是“罪有應得”。當DAO事件發生時,一切戛然而止了。
DAO代表“分散式自治組織”,他們在以太坊上設立了一個基金。使用者可以將錢存入DAO,並跟著DAO的投資按比例獲得回報。當ETH的交易價為20美元左右時,DAO融資1.5億美元。從理論上講,這一切都是可行的。但是,由於程式碼的安全性沒有得到保障,有人找出了漏洞,可以成功的從DAO中拿到錢。
從DAO中拿錢的人被認為是“黑客”。從某種意義上來說,“黑客”確實找到了合約的漏洞,這是出乎合約起草者預料的,但也是事實。從更廣泛的意義上說,這根本不是黑客,而是一個利用智慧合約安全漏洞來獲利的使用者。這和一個註冊會計師找出稅收漏洞來節省客戶的錢,並沒有太大的不同。
接下來發生的是,以太坊決定不再完全拿程式碼當法律,並收回了所有投入DAO中的錢。這其實是,合約起草者和投資者做了一些愚蠢的事情,以太坊開發商決定為他們紓困。
這一事件的被記錄下來了。後來“Ethereum Classic”誕生,它將“DAO”作為書面形式儲存,並保留了“程式碼就是法律”的原則。此外,因為圖靈完備實在難以維護,開發人員開始迴避使用這種語言。ERC 20和ERC 721標準是以太坊中最常用的智慧合約模板,需要指出的是,這兩種型別的合約都可以在沒有任何圖靈完備的情況下編寫。
智慧合約僅適用於數字承載裝置(Digital Bearer Instruments)
即使沒有圖靈完整性,智慧合約依然聽起來很好。畢竟,大家都不想去真正的法庭,使用智慧合約不是比普通合約容易得多嗎?
智慧合約不是也可以應用於房地產領域嗎?Alice可以證明房子是她的。Bob可以付錢購買這所房子。不存在所有權問題,在無需信任、不需要法官、中間人或保險機構的環境裡,依靠計算機程式來履行合約。聽起來就不錯,對吧?
這裡有兩個問題。第一,由中心機構來執行的智慧合約,並不能做到真正的可信執行。至少,你還得依賴這個中心機構。可信執行是智慧合約的關鍵特性,因此通過中心機構來執行不是最佳選擇。要使智慧合約真正做到可信執行,需要的是一個去中心化平臺。
這就引出了第二個問題。在分散式的況下,只有在數字世界和現實世界建立直接的聯絡,智慧合約才可能真正執行。也就是說,一旦在數字世界中,房子的所有權發生改變,那麼現實生活中房子的所有權也必須發生改變。數字世界需要“對應”現實世界。這被稱為“預言機問題”(Oracle problem)。
當Alice把房子轉讓給Bob時,智慧合約需要知道的是,她在現實生活中,也確實把房子轉給了Bob。有幾種方法可以做到這一點,但它們都有同樣的基本問題。必須有一些可信第三方來核對現實世界中的情況。
例如,Alice把房子轉化為數字貨幣,並通過轉讓數字貨幣的方式把房子轉讓給Bob。問題出在這裡:Bob需要相信這些數字貨幣確實代表了真實的房子。必須有一些預言機來擔保,將代表房子的數字貨幣轉讓給他的同時,也完成了法律上房屋所有權的轉讓。
此外,即使政府當局明確證明這些數字貨幣確實代表了房子時,也存在一些問題:如果數字貨幣被偷了,這房子現在是小偷的嗎?如果數字貨幣丟失了,這房子已經賣不出去了嗎?這房子的數字貨幣能重新發放嗎?如果是的話,是由誰來發?
在去中心化系統中,將數字資產與有形資產(無論是水果、汽車還是房屋)聯絡起來都是一個棘手的問題。在司法管轄範圍裡,有形資產除了遵循智慧合約之外,還需要遵循其他司法規則。也意味著,智慧合約中的所有權,並不一定等同於現實世界中的所有權。並且,與普通合同一樣,仍然存在信任問題。如果智慧合約最終還要依賴第三方,那麼它可信執行的特點也就無從說起了。
像電子書、醫療記錄或電影這樣的數字資產也面臨著同樣的問題。這些數字資產的“所有權”最終由其他權威機構決定,也對預言機有依賴。
從這個角度來看,預言機只是弱化的法官。你真正得到的不再只是機械的、簡化的執行,而是通過對所有風險預估之後進行編碼的複雜性。換句話說,你使用了“智慧”的合約,卻仍然依賴第三方,合約的寫作卻變得更加複雜了。
在沒有預言機的情況下,唯一能工作的就是數字承載裝置。本質上,交易雙方不僅需要將資訊數字化,還需要數字承載裝置。也就是說,數字貨幣的所有權不能依賴智慧合約之外的其他存在。只有在擁有數字承載裝置後,智慧合約才能真正應用於無需信任的環境中。
結論
我希望智慧合約可以更實用一點。但是,由於傳統合同中有很多約定俗成的,或者難以言明的部分。而智慧合約只能執行條理清晰的指令,這些無法明確說明的隱形條款,根本無法通過智慧合約表現出來。
此外,圖靈完備比較容易受到攻擊,會導致各種意想不到的行為出現。我們應該將智慧合約標記為圖靈易損(Turing-vulnerable),而不是圖靈完備。“DAO”事件也證明了合約中的“精神”是隱含可信的,比我們想象的更有助於解決爭端。
智慧合約很容易被攻擊,難以得到保障,太難應用到無需信任的環境中,而且對外部有太多依賴,導致它無法大規模應用。智慧合約真正的作用,是在去中心化平臺(比如比特幣)上使用數字承載裝置。
發文時比特幣價格 ¥43058.00