為什麼要用區塊鏈技術實現智能合約?

Kimi-Dan

智能合約是一個沒有中心化權威的第三機構為其擔保,而是由一個寫在整個網絡上、所有人都能查看的公開的智能合約進行監督。一旦智能合約簽署,將依靠智能的方式,根據電子合約的條款自動判斷觸發條件,從而選擇相應的下一步條件。而合約條款寫在編程語言中,不存在歧義,雙方不存在因為合同歧義而產生的毀約問題。這使得智能合約清晰約了交易雙方的權利和義務,也從根本上保證了違約處理的執行力。



智能合約因其特點,需要一個公開、透明和安全的環境生根發芽。而區塊鏈技術從根本上解決了信息傳遞的一致性、可信性和安全性,為智能合約的未來發展創造了紮根成長的空間。


科技行者

談到區塊鏈,必然離不開“智能合約”這個詞。我們在本系列的第一篇文章中就提到“智能合約”(smart contract)是由多產的跨領域法律學者Nick Szabo 於1995 年提出來的,他的定義為:“一個智能合約是一套以數字形式定義的承諾,包括合約參與方可以在上面執行這些承諾的協議。”那麼,我們該如何理解這段話呢?

首先回顧一下比特幣區塊鏈系統中的轉賬:

Alice轉賬給Bob 100比特幣,在比特幣區塊鏈系統中是這樣記錄的:

本質上,這就是一個合同。這個合同裡面規定了Alice要轉給Bob 100比特幣,該合同立即生效。注意,裡面有一個“解鎖信息”,這個解鎖信息本質上就是Alice證明自己是Alice的地址持有者時需要提交的一個信息。

顯然,像比特幣區塊鏈系統裡面,純UTXO模式的這種合同用處是很有限的。首先,比特幣是一個獨立運行的封閉系統,它的轉賬腳本沒有提供和外界進行交互的接口。所有信息(這裡主要是解鎖信息)只能在腳本提交到區塊鏈之前定死,之後就只能按照固定方式運行。這對於“合同”來說是不符合實際應用的。

在我們實際生活中,一個完整的合同制定到執行的流程是按照如下方式隨著時間流逝而進行的:

其中,條件的達成通常是一個外部輸入的事件,這意味著,我們實際生活中的合同通常是“事件驅動”型的。這個“事件”是否發生通常不是區塊鏈上的數據能夠判斷出來的,而是要依靠在事件發生的時間點,通過鏈外輸入數據的方式實現。

以電子商務為例,Alice在某寶的某個商家購買了一臺筆記本電腦,當Alice下單成功的那一刻,實質上就生成了一個合同。這個合同包含了Alice需要在多長時間內付款到第三方平臺——事件1

然後賣家看到Alice付款後需要發貨,當Alice收到貨——事件2——以後需要點擊確認收貨,完成整個合同。(不考慮售後的情況下)

在這個合同的執行過程中,事件1由於是一個純粹的金融活動,已經高度的虛擬化了,能夠實現自動發現事件自動觸發。而事件2則是一個在現實世界中發生的活動,需要我們點擊確認收貨來把這個事件的發生同步到虛擬世界中,這個“點擊確認收貨”就是虛擬世界中的事件2。所以,對於某寶的購物合同而言,事件1實質上是Alice是否轉賬到平臺,事件2是Alice是否點擊確認收貨。因此,在這個合同中,預留了一個和外部交互的接口——確認收貨。

除了和外部的交互能力外,比特幣轉賬合同(腳本)的另一個重要缺陷是它不是圖靈完備的。這句話對於非計算機專業的人來說可能不太好理解,我們可以簡單的理解為它沒有循環能力和複雜的條件控制能力。

合同的循環能力在我們現實世界中是很常見的,例如我們和電信運營商簽署的移動電話服務合同,通常就是一個循環合同。這種合同以自然月為單位,每個月自動循環執行。還有類似的企業間簽訂的長期採購合同,都是一種不斷循環的合同。合同中的規定的事件(或時間點)全部達成以後,自動循環回第一步,重新執行。

而複雜的條件控制能力就更常見了——合同中的違約條款就是條件控制能力。事件達成怎樣,沒有達成如何執行違約條款等,這些都需要合同擁有複雜的條件控制能力。

比特幣中的交易是使用比特幣區塊鏈底層平臺定義的一套腳本語言來寫的,由於當初比特幣區塊鏈系統是按照一個數字貨幣的模型進行設計的,因此它並不需要這些複雜的能力。但是如果我們需要區塊鏈技術在其他商業場合進行應用,很多時候就需要這些能力了。比如我們利用以太坊平臺來實現某個業務,那麼整個流程是這樣子的:

目前,關於智能合約的爭議仍然是很多的。主要包含兩方面:

一、合同本身是否是雙方真實意思的表達。

a) 業慣例的約束。而在智能合約中,外部法律和行業慣例如果不能嚴格的體現在合同本身中,那麼合同就不是雙方真實意思的表達了。

b) 在現實世界中,我們撰寫的合同通常是由律師或者法律專家來幫我們完成的。不同水平的法律專家,其完成的合同嚴謹程度是不一樣的。同樣在智能合約中,我們撰寫的合同是由程序員幫我們完成的,程序員的水平決定了合同的嚴謹性。還有一點,程序通常都會有bug,這些bug是否會導致嚴重的損失,在bug沒有被發現之前,都不得而知。

二、合同的仲裁機構是誰

a) 在現實世界中,我們通常都會在合同中約定一旦發生糾紛,請哪個仲裁機構對合同進行仲裁。而在區塊鏈中,尤其是公有鏈的平臺上的智能合約,一旦我們認為合同沒有表達雙方真實的意思,我們無法找到一個仲裁機構對合同進行仲裁。

b) 在聯盟鏈中,由於各方各個節點的身份都是已知的,現實世界中的司法機構是可以介入智能合約糾紛的。但是這種介入有時候可能會影響整個聯盟鏈系統的穩定性,這種情況下,怎樣介入是一個技術問題,而這個技術問題又可能會帶來新的bug。


中國信息通信研究院

智能合約首先是合約,傳統的人合約是寫在紙上的文字,明確了一些甲方乙方應該在什麼時間付錢什麼時候交貨這一系列的業務邏輯。合約是需要雙方簽字以及公證機構公證其法律的有效性。傳統合約需要一式兩份,甲方乙方各執一封份(或者更多方持有),內容都一樣,這就可以抽象看成是所有持有方共享是一個共享賬本,這就和區塊鏈的本質聯繫起來了。這就解釋了為什麼區塊鏈是實現智能合約的一種技術了。


分享到:


相關文章: