一個簡單的智能合約模型


我問過的每個人對“智能合約”有着不同的定義。下面是我的智能合約定義。

最近這些天,我聽到越來越的人談論“智能合約”。但是,當你讓他們對“智能合約”這一術語下一個定義的時候,他們不能清晰地表達,這一個概念就像從他們手中溜走了一樣。

這不是什么新發現:Peter Todd在聽過了多場研討會以后,也得出了類似的結論。

經過多場智能合約的討論后,我得出了這樣的結論:沒人真正知道智能合約是什么,如果實現智能合約,將需要預言機(oracles)。

— Peter Todd (@petertoddbtc) December 5, 2014


事實上,我也是沒能向Peter清晰闡明智能合約概念的人之一。

現在,對智能合約下一個定義,最簡單的回答就是引用富有遠見的學者的定義,他們在幾十年以前就已經預言了“智能合約”。尼克薩博1997年的智能合約論文是非常簡潔和有用的綜述。另外,我也真的喜歡Grigg的“李嘉圖合約”(Ricardian Contract)。薩博的“自動販賣機”模型也十分有用。

但是,這些人的理念是在比特幣、區塊鏈和密碼學貨幣出現以前提出來的,所以對密碼學貨幣領域的新人來說,他們的定義存在隔閡,不夠明顯。更加使人混淆的是,現在有許多平台打算實施智能合約。事實上,你可以將比特幣看作一個智能合約平台。所以,區分概念和具體實現的不同點變得更加困難。

在這篇文章中,我盡力解釋為什么智能合約可能是一個非常棒的理念,然后做出我自己的“智能合約”定義和模型。

可復制、共享的賬本( The Replicated, Shared Ledger)

當我思考區塊鏈和分布式賬本時,我首先從比特幣的最核心創新開始:它教會世界如何在不需要信任第三方的情況下遠距離轉移價值。(我知道有些人會對此有異議,這個表述可能並不是100%精確–但是我覺得它能為思路帶來直覺。)

我們當然可以面對面地轉移實體紙幣,但是,在比特幣出現以前,我們做不到:在不需要信任中心化第三方機構(郵局、銀行等)的情況,遠距離向某人轉移價值。

就好像銀行和支付系統的傳統轉賬模式的基礎設施被重構為點對點支付網絡。這種轉變如下圖所示:


smartcontracts1 (1)

比特幣打開了點對點的電子價值轉移模式的大門,完全不同於現在的銀行系統、中央銀行和支付系統。

但是,上面的圖並沒有解釋比特幣是怎樣實現點對點價值轉移的。

答案是:比特幣系統建立在我所稱的“可復制、共享的賬本”之上。比特幣網絡中的每個參與者(完全節點)擁有一個完整的交易賬本的副本,這一系統的神奇之處在於:它是如何做到使每個人的副本與其他人的副本保持一致的。

所以,正確的示意圖應該是下圖,每個參與者都能夠從相同的可復制、共享的賬本中獲取信息。


smartcontracts2

比特幣和其它去中心化共識系統的竅門在於:它們怎樣保證每個人有一個賬本的副本,並使每個人確信自己的賬本與別人的賬本是同步的。

先把可擴展性等問題放在一邊,我們知道這樣的架構能夠運行:如果每個人擁有的賬本的副本是相同的,那么人們就不再需要一個中心化的機構記錄誰擁有什么。你知道:當你的賬本更新,記錄一筆新的資產所有權變動時, 其他人的賬本也會發生相同的變動。

我們需要區分:賬本記錄什么和怎樣記錄

密碼學貨幣領域的爭論和競爭主要集中在:賬本如何建構和保證安全。比特幣的挖礦算法?以太坊的系統?瑞波幣的共識算法?這些爭論只聚焦於“怎樣做”:怎樣保證賬本安全?共識過程如何工作?怎樣防止壞人?因為不同的密碼學貨幣對於自己可能面臨的威脅的本質有着不同的假設,所以他們是不一樣的。

但是,在這篇文章,讓我們暫時忽視這些“怎樣做”的問題,只問自己一個問題:賬本記錄什么?它可以用於哪些方面?

賬本記錄什么?

在我最近的一篇博文中,我探索了“可復制、共享的賬本”這一概念如何應用到貨幣以外的領域。我的觀點是:一旦你能確定地知道你對世界的觀點與其他每個人是一致的,“可復制、共享的賬本”在完全不相關的領域會開辟出新的可能性,例如會計領域。Ian Grigg寫過關於三重記賬法的文章,像tripleentry(三重記賬)這樣的公司正在探索三重記賬法,變革現有的會計行業。

我們可以得到這樣的結論:如果我知道每個人“看到”相同的事物,那么我就不再需要花費巨大的成本建立自己的賬本,不再需要花費巨大的成本進行賬本審計和與其他每個人的賬本進行對賬、調賬。賬本自身就可以為我做這些事情。

所以,可復制、共享的賬本可能取代現有的商業系統中的記賬方式。

哪些領域需要雙重記賬(duplication)?


一個領域就是在商業邏輯之中(business logic)。在現實的商業中,有無數的這樣的例子:合約的雙方(或多方)分別獨立地運行着一個計算/記賬系統,對合約的條款進行建模。我有時候習慣於以銀行為例,現在有幾個非銀行的例子:

大型線上零售商可能擁有一個系統,檢查他們從快遞公司收到的賬單是否正確:所有商量好的打折都實行了嗎?

大型雜貨店與供應商就打折問題,達成復雜的合約協議。折扣的大小與一定時期內的銷售量和許多其它因素有關。我們可以確信:合約的雙方都已經開發出一套非常成熟的合約模型,並做成了軟件。

以上幾個例子的共同點是:合約的每一方都需要獨立的手段計算自己在合約中擁有的價值。他們不能相信對方。所以,每一方不得不建立自己的計算/記錄系統。這會造成浪費,還需要對賬、調賬等。

但是回到我在上文所講的:對於一個可復制、共享的賬本,每個人都知道每個人看到的事情是相同的,一方不需要相信另一方是誠實的。

現在想象一下,你的賬本也可以運行計算機代碼。你需要做的是:

當你與某人商定合約時,你也同意一份代碼版的合約。

“合約使用哪個外部數據的信息源,怎么解決糾紛”,雙方需要達成共識。

雙方都仔細檢查代碼,確信不存在后門或者惡意漏洞。你也可以進行測試,查看它產生的答案是否正確。

雙方對它感到滿意后,簽字並部署到賬本上。

現在雙方都不需要花費精力在自己的系統中重新實現合約條款,雙方都知道這段代碼能夠同時滿足各自的目的。因為它運行在可復制、共享的賬本,雙方都能夠確信程序的輸出結果對兩個人來說是一樣的。

但是我們可以更加科幻

到目前為止,我已經描繪了一種十分平常的應用場景:代表雙方或多方之間合約協議的計算機程序。

但是,請記住:我們正在構想一個這些程序運行在可復制、共享的賬本上的新世界。

如果這些程序能夠與賬本進行交互,會怎樣?程序能夠控制賬本上的資產,你甚至可以向程序發送資產。所以,它不再只是一個計算機程序,而是一個自足的經濟活動參與者。

回到上面提到的雜貨店的例子:雜貨店可以通過向計算機程序發送貨款(數量為A),對供應商進行支付。程序可以計算出可能的折扣額(數量為B),然后將A-B(A減去B)數量的錢發給供應商,但是暫時保管折扣額B–因為我們只有到月底的時候才能確定地知道折扣率。到了月底,合約會將保管的B正確地計算並發給各方。

這個程序不再只是一個計算機程序:它自己就是一個參與者。它對接收到的信息進行回應,它可以接收和儲存價值,也可以向外發送信息和價值。

這個程序就像一個可以被信任的人,可以臨時保管資產,總是按照事先的規則執行操作。

我認為這就是人們談論智能合約時想要表達的想法。

下面這個示意圖就是我的智能合約模型:一段代碼(智能合約),被部署在分享的、復制的賬本上,它可以維持自己的狀態,控制自己的資產和對接收到的外界信息或者資產進行回應。


smartcontracts4

我自己的智能合約模型:它是運行在可復制、共享的賬本上的計算機程序,可以處理信息,接收、儲存和發送價值。

理論上的問題

這就是智能合約的本質。如果更加正式一點,智能合約定義可能如下:

智能合約是由事件驅動的、具有狀態的、運行在一個復制的、分享的賬本之上的、且能夠保管賬本上資產的程序。

這只是我的臨時性定義。智能合約還有許多理論問題沒有解決。我總結了一下,以供將來的研究。

導入真實世界信息

智能合約十分依賴於發送給它的信息的質量。“預言機”和“m個中選n個”(n-of-m)方案可以幫助解決問題。但是,我認為還應該考慮:如果信息源消失了,如果以前獨立的信息源合並,如果新的更好的信息源出現了,該怎么辦?

構建模型

如果可以有多種方式(例如,程序直接作為賬本上的資產或者作為合約)為世界各種現象構建模型,最終選擇哪一種,這可能是一種商業上的問題。需要出現最佳實踐,以正確的方式為不同的真實世界現象建立模型。

處理程序錯誤

你寫過沒有bug的程序嗎?智能合約部署后,發現它存在bug,明顯地有利於合約的一方,該怎樣進行修復? 就像律師可以通過發現合約中的漏洞,賺到許多錢一樣,會出現一種通過發現智能合約中的漏洞賺錢的“工程師-律師”嗎?

流動性

如果資產由智能合約保管,那么這些資產任何人都不能使用。這將改變許多商業模式的經濟邏輯。

合法性

智能合約具有與“真正”合約一樣的法律效力嗎?如果智能合約的結果違背法律,或者法庭發現它有合約法沖突,怎么辦?

隱私

大多數分享的、復制的賬本都是公開的。我不知道有多少零售商同意公開自己與供應商之間的合約。

技術問題

底層技術能夠滿足需要嗎?可以進行擴展嗎?等等

其它更多的問題

但是,我十分確信社區中的聰明人都在關注並解決這些問題。所以,也許問題只有一個:哪些引人注目的商業情景將率先采用智能合約?

如果你已經看到這里,理解我所說的,我力勸你研究薩博、Grigg和其他這個領域大神的著作,他們比我更好地解釋了智能合約領域。

----

----

如果你希望高效的學習以太坊DApp開發,可以訪問匯智網提供的最熱門在線互動教程:

1. 適合區塊鏈新手的以太坊DApp智能合約實戰入門教程
2. 區塊鏈+IPFS+Node.js+MongoDB+Express去中心化以太坊電商應用開發實戰

3. 其他更多內容也可以訪問這個以太坊博客


注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
粤ICP备14056181号  © 2014-2020 ITdaan.com