我是怎麼向5歲的孩子解釋智慧合約的

買賣虛擬貨幣

作者 | 張   問

編輯 | 楊舒芳

EOS的生態已經開始擴張,但是最近一段時間出現了種種問題,而這些問題的本質之一在於EOS的治理沒有完善。在BM的第二版憲法中,他提出了程式碼的意圖就是法律,而這個程式碼的意圖的另一個名字,就是李嘉圖合約,這究竟是什麼東西?和之前的智慧合約有什麼關係?

這個事情,我們需要分幾步來看。智慧合約,先了解一下。

什麼是合約

合約,就是合同,我們很常見了。讓兩方或者多方之間,在未來一段時間內有聯絡的東西。比如前幾天沸沸揚揚的租房合同,小明要住老王的房子,要做的就是付租金。那租房合同,就是連線小明和老王的紐帶,而更重要的是,這二位之間,是要有一些信任的。

而智慧合約,就是一種能讓電腦看懂的合約。合約裡所有的條件都寫成程式碼,然後自動執行。我們還說租房的問題,假如合約上寫的是小明給老王5000塊,一個月後,小明會去住老王的房子。我們把合約寫成程式碼,當程式碼執行的時候,就開始自動判斷條件成不成立,小明付沒付款?沒有,不執行。付了,那到沒到一個月?到了,那趕緊執行。

那智慧合約有什麼過人之處?用程式碼最重要的意義,就是人們不再需要信任的成本了。只要程式碼是對的,那合約肯定會自動判斷條件,自動執行。我們只看程式碼,什麼自如,蛋殼,不需要第三方了,程式碼就像三體人,不會說謊。

信任的問題解決了,又引來了新的問題,你怎麼確定程式碼執行的結果就是寫程式碼的人想要的結果?換句話說,程式碼有bug,怎麼辦?

我們剛才的舉例,很簡單,幾行程式碼就能搞定,但是實際上,合約可能會非常複雜,因為條件非常多,產生出來的結果的可能性就非常的多。在程式碼完成後,我們可能會測試一下,看看能不能跑起來,但是要測試出每一種結果幾乎是不可能的。前一陣的EOSBet被駭客攻擊就是一個最好的例子。

EOSBet是一個博彩遊戲,比大小,不過需要用EOS來玩,有一個聰明的哥們,發現了程式碼的漏洞。他自己做了一個假的EOS,遊戲裡並沒有檢測出來。這就意味著,他憑空造出了錢,拿去賭博。輸了就輸了,沒損失,贏了的話,贏回來的是真錢。

我們先假設,這確實是個漏洞。寫程式碼的人是不想讓大家這麼玩的,但是他沒有檢測出這個結果,這就尷尬了。他不提前說的話,沒有人知道這位碼農是怎麼想的,也就是說,誰都不瞭解程式碼到底想要什麼樣的結果,那怎麼辦?

李嘉圖合約

這個時候,我們就開始介紹李嘉圖合約這個東西了。簡單來說,這個合約解釋的就是程式碼的意圖,就是程式碼到底想要什麼樣的結果。李嘉圖合約要保證人們和程式都可以讀懂,出現任何情況都可以幫助澄清事實。

之前EOS的一個節點介紹過這個李嘉圖合約,其實早在1998年這個概念就有了。早期的金融密碼學的一批人之一,Lan Grigg1998年在他的作品《金融密碼學的7個階段》中首次提出了李嘉圖合約。只不過當時的技術並沒有實現。

這個東西,怎麼用?我們還用EOS來舉例。

假如有一個DApp,智慧合約寫的是“AB一個EOSB要返還給A一個EOS”,並且這個合約執行的非常順利,但是你突然發現這個合約有個漏洞,即使你返還給我一個你自己造的EOS,程式碼也檢測不出來,合約也可以執行。如果沒有李嘉圖合約,我認了。

但是如果我的智慧合約裡面有一個李嘉圖合約,裡面寫了我的程式碼意圖是“AB一個EOSB要返還給A一個EOS”,那麼,如果你還給我一個其他的東西,這不是我程式碼的本意,我們就不能冰釋前嫌了。

當然這裡舉的例子都是非常簡單的,真實情況會複雜的多。簡單來說,智慧合約是一套機器可讀的檔案,電腦會按照條件,自動執行,而李嘉圖合約可以列出程式碼全部的意圖,對程式碼的輸出流程做了約束。這兩個東西放在一起,確實可以讓EOS的治理更加完善,只不過完全實現,還需要一段不短的時間。

免責聲明:

  1. 本文版權歸原作者所有,僅代表作者本人觀點,不代表鏈報觀點或立場。
  2. 如發現文章、圖片等侵權行爲,侵權責任將由作者本人承擔。
  3. 鏈報僅提供相關項目信息,不構成任何投資建議

推荐阅读

;