智能合約-區塊鏈 2.0 的產物

什麼是智能合約?

智能合約 (Smart Contract) 一詞是由學者尼克 ‧ 薩博 (Nick Szabo) 於 1990 年代初期提出,但在當時並沒有受到重視。直到近幾年,區塊鏈的發展,才隨著第二代區塊鏈以太坊受到廣泛的討論。什麼是智能合約呢?最簡單的解釋是「當達成特定條件時,就會觸發程序,強制執行」。

最常用來解釋智能合約的例子是「自動販賣機」。

  • 如果使用者投入 10 元且按 A 按鈕 → 輸出紅茶
  • 如果使用者輸入 10 元且按 B 按鈕 → 輸出綠茶
  • 如果使用者輸入 20 元且按 C 按鈕 → 輸出咖啡

既不智能,也不是合約

這樣看下來你或許會發現,智能合約並沒有那麼”智能”,只能夠根據設計的條件執行特定的程序,無法接受突發狀況的產生。這就好比若自動販賣機沒有設計退幣功能,使用者突然反悔不想喝飲料了,機器沒有退幣口,沒有辦法退錢,只能摸摸鼻子選一樣喝。

同時智能合約也不是合約,所謂的合約是交易雙方共同簽署的,具有「法律效力」的約定事項。然而智能合約只是運行在以太坊上的程式,並不具備任何法律效力。這也就是為什麼以太坊創辦人 Vitalik 曾在 twitter 上公開表示 :

「需要澄清的是,在這一點上,我非常後悔採用了’智能合約’這個術語。我應該把它們叫做更無聊和技術性的東西,也許類似於’持久腳本 (Persistent Scripts)’。」

智能合約的特色

簡單舉一個智能合約的運用案例。

  • 條件1:若3個月內的降雨量不到6毫米。(降雨量數據來自氣象局的傳感器)

  • 條件2: 農民必須如期繳納保險費

若達成以上兩個條件,即強制執行:

  • 將一定金額的錢作為保險費發給農民。

這是一個相當好懂的例子,但是這時你可能會想:

「這種事情現在也做得到阿,銀行都可以自動扣款了,達成特定條件自動轉帳,這沒有什麼特別的阿」

沒錯,一般保險公司確實不需要智能合約就能夠做到,但是, 數據庫不同

在過程中也會出現一些額外風險。例如保險公司拖延甚至拒絕理賠、合約內容儲存於保險公司的中央數據庫有安全疑慮,保險公司有可能偽造氣象數據不認帳以及保險公司倒閉等諸多問題,而有了去中心化的智能合約,就能夠妥善解決這些問題。

智能合約的運作

智能合約是一個運行於區塊鏈上的一串代碼,以以太坊為例,可以想像每一個礦工都在同時運行這個代碼,代碼不會停止運作、不會受到竄改且完全公開透明,沒有人能夠改變智能合約的內容與執行,為合約雙方提供更好的保障,與強制力。

在以太坊的網路中存在著許多節點,這些節點除了挖礦之外,也要負責運行以太坊上的智能合約,這項工作運行在每一個礦工的 EVM(以太坊虛擬機)上。我們可以把 EVM 看作一台分散式的計算機,擁有網絡中所有節點的計算與存儲資源,該資源用於在區塊鏈上運行智能合約。

智能合約的確定性與可終止性

智能合約要順利運行就必須要具備「確定性」與「可終止性」。

所謂的「確定性」是指,如果一個程序在不同的計算機、或者在同一台計算機上的不同時刻多次運行,對於相同的輸入能夠保證產生相同的輸出,則稱該程序的行為是確定性的。由於智能合約運行於網路上的多台電腦,如果一個智能合約是非確定性的,那麼不同節點運行的結果就可能不一致,從而導致共識無法達成,網路停滯。

為什麼智能合約需要具備「可終止性」?假設今天在以太坊上運行一個程式讓合約不斷的運作,也就是所謂的死循環,將會無限消耗以太坊上 EVM 的資源。為了解決這個問題,以太坊引入了計價器機制。

每次執行一次智能合約,EVM都會向用戶收取非常小的ETH維護費,也就是GAS,以提供智能合約需要使用的計算能力。所以以太幣的核心意義不是作為一般等價物的貨幣,而是類似於石油一樣作為動力驅動以太坊網路的服務,因此,若有人企圖使用智能合約消耗以太坊網路上的資源,由於每次執行智能合約都需要 GAS 做驅動,一但燃料耗盡,合約就會執行失敗,並且不會退回消耗掉的費用,藉此防止死循環的發生。

智能合約的出現讓大家開始覺得區塊鏈有實際的用途,而且能廣泛運用在各行各業中解決問題,所以被大家稱為第二代的區塊鏈或是區塊鏈2.0,智能合約也讓區塊鏈的開發變得更簡單,使得更多企業或新創公司能夠將自己的去中心化應用(Dapp)建立在以太坊之上,並發行自己的加密貨幣 (Token),讓區塊鏈的開發進入到下一個世代。目前許多團隊也在開發類似以太坊的去中心化平台,但以太幣仍舊佔據前三名的寶座之上,未來以太坊是否會被取代,亦或是稱霸區塊鏈開發端,就讓我們繼續看下去。

相關文章