什么是區塊鏈智能合約?
關于區塊鏈智能合約的第一件事是它們不是合約、智能合約,也不一定在區塊鏈上。
要了解區塊鏈智能合約的第一件事是它們不是合約、智能合約,也不是必須在區塊鏈上。事實上,它們的名字很奇怪。
讓我們以相反的順序解決這些問題,我們應該在此過程中確切地找出智能合約實際上是什么。首先,介紹什么是交易,什么不是交易。
交易和非交易簡介
最著名的區塊鏈是像比特幣這樣的加密貨幣。2關于貨幣的事情——無論是虛擬的還是非虛擬的——是你主要想做的是使用它們買賣東西。你想要的是一個簡單的交易模型:“一旦我為你提供這項服務,你就會給我這個數量的貨幣。”我們知道這是如何運作的,因為每次我們在商店或網上購買東西時,都會發生這樣的情況:起始狀態是“我有x數量”,交易完成后的狀態是“我有xy數量,并且你有y數量。”4這是在你完成交易之前你關心的從一種狀態轉移到另一種狀態。大多數加密貨幣都被設置為支持這種類型的構造。
這很好,但一些聰明的人意識到實際上有很多不同的方法可以做到這一點。以太坊是非交易結構大獲成功的地方,Solidity是最著名的例子。我很高興地說,兩者都是開源項目。為什么不在我交出我正在交出的任何東西之前需要滿足一組更復雜的條件?而且——這是一個聰明的地方——為什么不寫那些可以被計算機執行的代碼呢?你可能希望貨幣——或其他任何東西——只在一段時間后釋放,或者如果股票價格保持在一組特定的范圍內,或者如果某個人繼續擔任總理,5或者如果沒有意外eclipse在接下來的五天內。6你也可能有復雜的依賴關系:只有當我連續三周寫一篇新文章并且沒有人對其中任何一個寫令人不快的評論時才完成。7編寫這段代碼,如果條件滿足,然后進入下一個狀態。
不僅適用于區塊鏈
開始解決那些“非”陳述。
現在,在區塊鏈中,重要的是一旦狀態發生變化,您就確保將其記錄在區塊鏈上,以便它是公開的,沒有人可以更改或挑戰它。但是區塊鏈技術還有其他用途,正如我在“區塊鏈是一個安全主題嗎?”中解釋的那樣。無許可系統,通常被稱為分布式賬本技術(DLT),非常適合非交易狀態模型,主要是因為對它們感興趣的人是封閉的組織團體,他們希望以前滿足復雜的條件集他們移動到下一個狀態。根據最嚴格的定義,這些不是區塊鏈。銀行和其他金融機構可能是DLT獲得吸引力的最明顯例子,但它們在供應鏈領域非常有用,例如,您可能會遇到有關不斷變化的市場利率、可用性和運輸時間或成本的條件,這可能所有這些都會影響所提供的商品或服務的最終價格。
沒那么聰明
智能合約可以是智能的,但對我來說,這意味著復雜并且能夠對意外或不太可能的情況做出反應。我認為人們稱它們為“智能”是因為它們體現在代碼中,而不是出于我上面建議的原因。
我認為這實際上是一件非常好的事情,因為我認為我們不希望他們表達我的意思。我所知道的“智能合約”的大多數用法是兩個或多個組織根據一組已知且受充分約束的條件就系統的一組可能結果達成一致。這就是合同的一般含義,雖然我也即將與命名法的那部分爭論,但在這種情況下它是相當合適的。
通常,您想要的不是意外或不太可能的情況以及人工智能/機器學習類型的智能處理,因為如果您這樣做了,那么結果可能會令人驚訝,并且可能會讓一個或多個人不高興當事人。簡單——或者至少很容易定義——是你想要內置到系統中的一個關鍵屬性。例如,Solidity項目似乎至少意識到了其中的一些陷阱,并建議使用智能合約的人采用形式驗證,但正如我們將在下面看到的,這只是觸及了問題的表面。
不是合同
當然,有一些合同——“在現實生活中”的合同——用于管理復雜和意外的情況。它們存在于明確的法律管轄范圍內。構成它們的單詞和短語受特定和明確定義的過程的約束,當合同條件不滿足或違反時,會受到已知的制裁和懲罰。經常有挑戰這些的情況,但同樣存在應對此類挑戰的明確機制。
目前,“智能合約”不符合對合約的這種描述。將法律合同措辭映射到計算機代碼是一個非常復雜的過程,并且代碼處理容易出現的錯誤類型在司法系統中沒有一個很好的類比。還有管轄權的問題。這通常在合同條款中描述,但如果“智能合同”的處理發生在與相關方不同的司法管轄區,甚至是未知的司法管轄區,該怎么辦?這應該重要嗎?這有關系嗎?我不知道,我也不知道一旦人們開始以具有法律強制力的方式依賴這些結構,我也不知道還有什么其他問題會從木制品中爬出來,但我懷疑它們會受到歡迎。
同樣,當IT人員談論軟件合同時,他們談論的是完全不同的東西:這是系統在已知輸入和啟動條件的上下文中所宣傳的行為,這對我們也沒有幫助。
這和安全有什么關系?
一旦交易——或“智能合約”——完成并進入區塊鏈或分布式賬本,它幾乎是不可變的,根據定義。但是在它完成之前呢?好吧,本文開頭描述的這種類型的簡單交易是原子的——它們發生或不發生,用行話來說,它們是“不可分割和不可約的”。對于大多數目的,它們是瞬時的。
“智能合約”并非如此。它們需要處理,因此會隨著時間的推移而存在。這意味著在處理它們時,它們會受到任何系統都可能容易受到攻擊的各種攻擊。標準清單是:
- 保密。“智能合約”的狀態可能會受到窺探,這可能導致不對稱的知識或泄露給未經批準的各方。
- 正直。這是許多“智能合約”的噩夢。如果一個實體——無論是基礎合同的一方與否——可以(有意或無意地)改變執行“智能合約”的代碼的內部狀態,那么該“智能合約”的結果將不會像它們一樣預期是這樣,并且任何相關方都可能有充分的理由對結果提出異議。更重要的是,這樣的糾紛甚至可能不依賴于喪失誠信的證據,而只是依賴于懷疑。在執行上下文中證明運行時完整性——更不用說在它被證明丟失時進行緩解——是極其困難的。
- 可用性。如果一方發現與“智能合約”相關的條件對他們不利,他們可能會試圖影響構成“智能合約”的系統任何部分的可用性,無論是代碼本身、系統的輸入或系統的輸出。其中任何一個都可能對現實生活的結果產生重大影響。
這篇文章的開頭似乎是對命名約定的迂腐攻擊。我想可能會很清楚,8我對“智能合約”這個詞感到不舒服,這主要是因為我認為它讓一些人認為這些結構是他們所不具備的。反過來,這可能意味著人們會在不合適的情況下使用它們。
人們還擔心,因為文字會帶來包袱,這會導致人們沒有充分考慮安全性對這些結構的影響。我認為影響可能非常大。所以,如果你正在研究這些結構,請睜大眼睛。我在這篇文章中沒有過多地談論緩解措施,但存在一些緩解措施。