智能合約的真相:真的有必要去中心化嗎?
「真正的問題是,你的「智能合約」真的有必要去中心化嗎?還是它只要能夠完成它的使命就足夠了?其實,以中心化的方式實現合約更為高效,因為將來的「智能合約」大多數都將與現實中的東西交互。
比如,一個無人駕駛汽車接你然後送你到目的地。在你和這輛無人駕駛汽車之間的「智能合約」,為何需要去中心化這個屬性?它為何需要抵抗審查,為何需要被儲存在全球成千上萬台電腦上,並且從今往後永遠持續不間斷的納入運算?這根本用不到。同樣的,當你走向一個汽水販賣機買一瓶可樂的智能合約,也用不到去中心化。
若你歸根結底總結起來,在底端最簡單的智能合約,其實根本就不需要去中心化的屬性。我知道哪裡肯定又出來個ICO給你宣傳,說你和那台汽水販賣機的智能合約需要去中心化,需要在往後的時間裡不斷被重複驗證。他們在說謊。相反,真正需要高級別抗審查屬性和去中心化的智能合約,正是最近在新聞中被傳遍的暗殺市場——這才是真正需要去中心化和抗審查屬性的智能合約。而另一端就是類似汽水販賣機這類的智能合約。
這兩端間那條界線在哪?那條為了達到抗審查的隱私性,去中心化科技帶來的低效率是值得被妥協的界線在哪兒?我認為那條界線就在Augur(暗殺市場)下面一點點。」
——Tone Vays
近來,「智能合約」這個詞,就跟「區塊鏈」、「人工智慧」、「雲」這些詞一樣,被人大肆炒作。
畢竟,人們都想要確定將來的情況,但目前最可依賴的手段還是司法體系。如果除了司法體系,還有之外的其他手段,那真是再好也不過了。 智能合約就給人們提供了一系列承諾,包括:
承諾1:以自動、去信任、公正的方式強制履行合約。
承諾2:在合約制訂、履行、強制執行方面,去掉了中間商。
承諾3:(暗示我們可以)不要律師!
我對於這種炒作很有同感。畢竟,原來我們跟別人合作都必須要信任另一方才能做事。如果把這種信任的必要去除了,那該有多方便啊?
智能合約到底是神馬玩意?是不是以太坊將大顯身手的領域?是不是未來的必經之路?為什麼有人要妨礙時代進步?
本文就要看一看智能合約究竟是什麼;圍繞智能合約的工程界的現實又是什麼樣的。劇透:智能合約實現不容易,保持穩定又很難。
01 智能合約是什麼?
一般情況下,合約或者合同就是雙方或者多方達成的一個協議,約束他們在未來做些什麼事。比如,劉英可能會付給永強一筆錢,住永強的房子(也就是租金);玉田可能會承諾,小萌的汽車只要將來出了毛病,玉田都會負責修理,好處是每月都能收一筆錢(也就是汽車保險)。
圖片里的狗:2015年嚷嚷「區塊鏈」,2017年嚷嚷「智能合約」
智能合約跟傳統合約的區別就在於,各種條件都由計算機代碼評估然後執行,代碼讓合約變成了「去信任」的狀態。所以劉英要是同意付給永強五百塊,讓永強三個月以後寄給她一個沙發(也就是期貨沙發),就有一套計算機代碼決定,這些條件是否為真。比如:劉英給永強付錢了嗎?時間到三個月了嗎?然後,代碼就會執行,也就是通過第三方保管人發出沙發;雙方都不能退出合約。
智能合約的主要特徵就是「去信任化的執行」。也就是說,我們不需要依賴第三方執行各種條件。智能合約不依賴另外一方兌現承諾。更糟的狀態,如果萬一出現異常,也不依賴律師和司法系統解決問題。智能合約只是會執行那些按照代碼應該及時而客觀出現的結果。
02 智能合約相當傻
「智能」兩個字,似乎表示這些合約有一種內在的智慧;但合約實際上並沒有。所謂「智能」,意思就是不需要另一方的合作也能履行協議。假如租房的房客不交房租了,智能合約並不會把房客掃地出門,而是會把房門鎖上,使得房客進不來。智能合約有效的地方,在於嚴格執行事先約定好的結果,而不是合約本身有智慧。
叫嚷:把一切都編成智能合約!!!
真正的智能合約,會考慮到一切「情有可原」的場合,審視合約的基本精神。即使在最混亂的情況下,也能讓裁定儘可能公平。換句話說,真正的智能合約,就好比一位十分優秀的法官。然而,我們現在說的「智能合約」其實一點也不智能。智能合約的基礎是規則,遵守規則一絲不苟,不考慮任何次要因素或者「法律的精神」。
再換句話說,讓合約「去信任」,意味著我們決不能容忍一丁點歧義空間,於是引發了下一個問題。
03 智能合約相當難
因為以太坊進行了很多中心化的推廣,所以人們就產生了一個誤解,以為只有以太坊才有智能合約。實際情況不是這樣。從2009年比特幣推出開始,就有了一套擴展性很強的智能合約語言,名叫Script語言。再追溯遠一點,早在1995年,比特幣推出之前,智能合約就已經存在了。比特幣的智能合約語言,跟以太坊的智能合約不同在於以太坊合約具有「圖靈完備」(Turing-complete)這一特性。以太坊的合約語言名叫Solidity.這種語言能夠實現更加複雜的合約,壞處是合約更複雜就會更難分析。
準確說來,智能合約早在比特幣之前就存在了。我愛死這幅漫畫了!
複雜性會產生一些重要的結果。複雜合約能夠適應更加複雜的情況,但要保證穩定卻十分困難。即使傳統合約也是越複雜就越難以強制執行,因為各種複雜因素會帶來更多不確定性,帶來更大的解讀空間。智能合約的「穩定」意味著管理合約所能執行的一切方式,確保合約做事符合制定者的預期。
漫畫內容:
眼鏡男:出於安全考慮,我們說,打算招個人負責……
黑髮男:等一下,這事兒不著急。咱們先把項目做起來,這個咱們以後再說。
眼鏡男:哎,項目差不多弄完啦!咱們得做個安全審計,好讓……
黑髮男:不行啊!沒時間了!也沒錢搞!
眼鏡男:網站都上線十天了,還沒做安全測試呢,我放心不下……
黑髮男:不用擔心,咱們回頭再說。
後來……
黑髮男:崩了!咱們網站崩了!有人把咱們黑了!你幹什麼吃的?
在「圖靈完備」環境下,執行變得非常困難,也難以分析。讓「圖靈完備」的智能合約保持穩定,就相當於證實某計算機程序沒有bug。我們都知道,這一點實在太難了,因為現實中的所有程序都有bug。
考慮一下:寫出智能合約,需要多年的學習,還需要通過非常嚴苛的考試,才能有效製作合約。這是智能合約的基本要求。而目前寫合約的人卻有很多菜鳥,完全不知道智能合約需要多麼穩定才算合格。
比特幣對這個問題的解決方案,是乾脆把「圖靈完備」的條件取消了。這就讓合約更容易分析了一些,讓程序可能出現的各種狀態,更容易列舉、檢驗了。
以太坊的解決方案,則是讓智能合約的作者承擔責任。作者必須確保合約的執行一定符合預期。
04 智能合約其實不是合約(至少以太坊的智能合約不是)
以太坊把確保智能合約穩定的責任留給了作者。這辦法在理論上不錯,而在實踐中卻會產生某些非常嚴重的結果,導致中心化。
以太坊建立的基本理念是「代碼即規則」(code is law)。也就是,以太坊的某個合約代表最高許可權,誰也不能超越合約本身。這個理念是為了明確告知一切智能合約開發者,責任必須自負。一旦開發自己的智能合約搞砸了,某種方面可以說是自作自受。然而,「DAO攻擊事件」一出,這一制度就突然完結了。
DAO英文全稱是Decentralized Autonomous Organization,意為「去中心化自治組織」,是一個在以太坊內部創造的基金會,目的在於向人們顯示這個平台可以做出什麼成就。用戶可以在DAO中存錢,因DAO作出的投資而得到回報。決定以「眾包」形式作出(碳鏈價值註:一個公司或機構把過去由員工執行的工作任務,以自由自願的形式外包給非特定的(而且通常是大型的)大眾網路的做法。),是去中心化的。DAO用以太幣的形式籌集了1.5億美元,當時以太幣的交易價格大約是20美元。這一切在理論上聽起來都很不錯,但現實中有一個問題:代碼的穩定性並不好,於是有人就發現了一個漏洞,能把DAO資金全部提光。
這個提光DAO資金的人,很多人叫他「黑客」。的確,「黑客」發現了漏洞,從合約里拿錢,DAO的創始人沒有料到這種情況。從這個意義上說,叫他黑客是可以的。但是從更加廣泛的意義來說,他也並不是黑客,只是利用了智能合約原有的怪異之處為自己謀利而已,跟一個聰明的註冊會計師發現了稅收政策漏洞而為客戶省錢沒有什麼區別。
接著,以太坊決定,代碼不再是規則了,並且歸還了注入DAO的所有資金。換句話說,合約作者和投資者幹了蠢事,以太坊開發者決定為他們兜底了。
「我年輕的時候都把時間虛度過去了,現在我想申請政府救助。」
這一事件的影響,已經有許多文章記載。出現了一個叫「以太坊經典」(Ethereum Classic)的新區塊鏈系統,用書面形式保存了DAO,也保留了「代碼即規則」制度。另外,開發者開始放棄使用以太坊的「圖靈完備」特徵,因為現實證明這個特徵太難以穩定了。目前,以太坊中最常用的智能合約模板是ERC20和 ERC721,而且很重要的一點是,兩種模板都可以完全不符合「圖靈完備」就寫出合約。
05 智能合約僅僅適用於「數字憑證資產」
即使沒有了「圖靈完備」,智能合約似乎也是個極好的主意。要是簡簡單單就能用「去信任」的方式拿到某種理應屬於自己的資產,又何必專門上法庭爭奪資產呢?用智能合約不是比用傳統合約容易多了嗎?
比如,房地產應該從智能合約受益吧?劉英可以證明自己是房主,永強可以花錢買房。不必有所有權的爭議,可以讓機器用「去信任」的方式快速執行,也用不著法官了,也用不著官僚機構了,也用不著「產權保險」了。這該有多棒啊!
現實中有兩個問題。第一個問題:智能合約只要由一個中心化的機構執行,就不是真正「去信任」的。我們依然必須信任這個中心化機構,才能執行。「去信任」是關鍵特徵,所以中心化的執行其實是沒意義的。必須有一個真正去中心化的平台,才能讓智能合約真正做到「去信任」。
這就帶來了第二個問題:在去中心化的情況下,智能合約要發揮作用,還必須在數字版本和現實版本之間存在某種確定的聯繫。也就是說,房屋的數字版本一旦發生所有權變更,房屋的現實版本就必須同樣發生所有權變更。數字世界必須「了解」現實世界,這就稱作「預言機問題」(Oracle problem)。(碳鏈價值註:預言機為數字世界裡的智能合約提供關於物理世界中相對應問題的真實信息。)
劉英把房子過戶給永強的時候,智能合約需要知道劉英真正把房子轉讓給了永強。完成這個步驟有幾個不同的方法,但全都有同樣的基本漏洞:必須存在一個受人信任的第三方,去驗證現實世界發生的事件。
漫畫內容:
黑人:松鼠宣布投資以後,市場上一直有不少動作……
黑人:好多小公司一直都在用松果幣收購我們的股票。我們現在擁有的自己的股票連50%都不到了!
黑人:等一下!!這些小公司的所有人都是松鼠,就是說……
黑人與白人:我們讓松鼠買下了!
松鼠:我這間新辦公室里應該有好多好多木鑲板!
例如,以太坊中可以用一種「非同質代幣」代表這棟房子。劉英可以使用「原子化交易」(atomic swap)(碳鏈價值註:又譯原子交換、原子互換等,一種正在開發中的去中心化、無需第三方的新技術,允許在不同類型的數字資產之間實現無需信任的點對點交易。 )把房子過戶給永強,拿到一定金額的以太幣。這就是問題所在!永強需要信任代幣,認為代幣確實可以代表房子;這就要求存在某種預言機,確保房子代幣一旦給了永強,永強就在現實中合法擁有了房子。
而且,就算有一個政府權威出來保證說「這代幣確實代表房子」,那如果代幣讓人偷了該怎麼辦呢?是不是說明這房子就歸小偷了?代幣丟了又該怎麼辦?是不是說明這房子不能在市場上出售了?還能再發一份代幣嗎?能發的話,由誰來發呢?
只要在一個去中心化的環境下,就存在非常棘手的問題——怎樣才能把一種數字資產跟一種現實資產(水果、汽車、房子等等)聯繫起來呢?現實資產由我們所在地區的司法機構管轄,這意味著,資產除了信任我們創建的智能合約,還必須信任某些別的東西。所以,智能合約之下的所有權,並不一定意味著現實世界中的所有權,而且智能合約跟現實合約一樣面臨同樣的信任問題。智能合約只要信任一個第三方,「去信任」這一主要優勢就沒了。
哪怕數字資產(電子書、醫療檔案、電影)也面臨同樣的問題。某人擁有這些數字資產的「權利」,最終還要讓某種其他的權威和預言機來決定,而人們必須信任這種權威和預言機。
從這個角度看,預言機也就是「傻子版的法官」了。我們本來想讓計算機執行合約,讓強制執行的過程變得簡易,可是反而平添了更多的麻煩——必須考慮到主觀性和人類判斷的風險,把一切可能結果全都變成代碼。於是,讓合約「智能化」的結果,是讓合約的寫作更加複雜,與此同時還不得不依然信任別人。何苦呢?
如果不用預言機,唯一能夠做出的成就也就是「數字承載設備」(digital bearer instruments)了。交易雙方不光必須是數字化的,而且必須是承載設備。就是說,代幣的所有權,絕對不能依賴智能合約平台以外的什麼東西。智能合約只有具備了數字承載設備,才能真正做到「去信任」。
06 結論
我希望智能合約可以發揮比目前更大的作用。不幸的是,我們人類的傳統合約總是存在大量不言自明的隱含內容和先前的判例法(case law,按照以前司法審判的例子而形成的法律),不需要明確表達;智能合約卻必須明確表達一切內容,所以二者是不通用的。
而且我們還發現,應用「圖靈完備」原則很容易產生嚴重後果,導致各種各樣意料之外的行為。我們應該把現有的各個智能合約平台貼上一個標籤「圖靈脆弱」而不是「圖靈完備」。DAO攻擊事件也證明,合約存在一種「核心精神」,是大家都遵守的不成文的規矩,能夠幫助解決爭端,而且力量比我們意識到的還要大。
智能合約太容易出事故,太難以保持穩定,太不容易做到「去信任」,而且還必須依賴很多外在因素才能發揮作用。智能合約唯一增加「去信任」程度的地方,是那些具有數字承載設備的去中心化的平台,例如比特幣。
作者:Jimmy Song;編譯:Morpho Hawkes、Diana
※區塊鏈:一項新技術的普及需要多久?
※布比CTO王璟:智能合約更大的安全隱患一定會出現在虛擬機本身
TAG:巴比特資訊 |