【區塊鏈】什麼是智能合約?

根據谷歌趨勢數據顯示,目前,程序員對智能合約編程的興趣已經處於歷史最高水平,其中中國高居全球榜首,隨着區塊鏈技術的發展,相信日後智能合約將會與我們的生活密切相關,今天就爲大家介紹一下什麼是智能合約。

1.智能合約基本概念

智能合約英文名稱Smart Contract,90 年代由跨領域法律學者尼克·薩博(Nick Szabo)博士首次提出,幾乎與互聯網同齡。但由於缺少可信的執行環境,智能合約並沒有被應用到實際生活中,然而由於區塊鏈的誕生他開始重新走入人們視野,並逐步開始得到重視和應用。

不同於法律意義上的合約概念,區塊鏈領域的合約表達的是可以“自治自理”的 計算機協議,這套協議具有自我執行、自我驗證的屬性。

如果完全從技術角度來看,智能合約等價於一段事先就被規定好邏輯和條款的計算機代碼被激活運行的狀態,同時,智能合約也提供了通用的用戶接口,用戶可以通過接口與用戶交互。

從定義中我們可以得知,智能合約由多個協議組成,這些協議包含了用戶接口,能表達用戶的承諾,它可以安全有效地確定公共網絡上的關係。

換句話說,智能合約是一個由計算機處理、可執行合約條款的交易協議,其總體目標是滿足協議既定的條件,例如支付、抵押、保密協議。這可以降低合約欺詐造成的損失,降低仲裁和強制執行所產生的成本以及其他的交易成本。

我們舉個實際的例子解釋一下,今年 4 月 9 日,上海某建設銀行支行開放了“無人銀行”,銀行中充斥了衆多機器和顯示屏,智慧櫃員機、VTM 機、外匯兌換機、VR 設備和兩臺機器人代替了傳統的櫃檯。

這裏的智慧櫃員機、外匯兌換機器人衆多電子設備都可以認爲是智能合約的一種表現形式,用戶在辦理銀行業務時,如辦理大額匯兌業務,業務流程和邏輯依據已經定在程序中,用戶只需要按照操作一步一步進行,辦理完成後即可獲得單據。

這裏“既定的業務流程、機器人模樣的人機交互界面、雙方同意承諾”組成了智能合約的概念,它甚至具有一定的法律效力。

薩博提出的是智能合約的概念,以及我們舉的例子,都是廣義的智能合約概念。智能合約具有多種實踐形式,而在區塊領域所說的智能合約概念,我們其實是指 Blockchain-based 這種形式。

在薩博的智能合約概念中提到了開放式網絡,而我們知道開放式網絡的基本要求就是拜占庭容錯,通過前面文章的講解我們知道,區塊鏈天然具有拜占庭容錯特性。所以如果在區塊鏈上實踐智能合約這個概念,兩者會非常契合,天造地設。

首先實踐了智能合約這一概念的是比特幣,比特幣腳本(bitcoin script)包含了 5 種標準交易腳本,這些腳本的功能不僅僅提供了普通單人支付的情況,它還提供了多方共同簽名支付的腳本,叫做多重簽名支付,多重簽名支付可以看成是薩博語義下的智能合約。

除了比特幣,將智能合約這個概念發揚光大的區塊鏈項目就是以太坊了,2013 年底以太坊的創始人 Vitalik 發佈了白皮書《以太坊:下一代智能合約和去中心化應用平臺》,並一直致力於將以太坊打造成最佳智能合約平臺,所以說 比特幣引領區塊鏈,以太坊復活智能合約

2.智能合約與以太坊

以太坊 Ethereum 項目的目標是打造一個去中心化的新一代互聯網應用平臺,這個平臺稱作 Dapp 平臺。

這些 Dapp 基於以太坊智能合約虛擬機開發、編譯、部署,並且可以自定義業務邏輯,部署後全網可見且自動執行,理想情況下不存在宕機、審查、欺詐、第三方干預的情況。

以太坊核心概念包括:智能合約虛擬機 EVM 和 Solidity 編程語言、賬戶模型、以太幣和 Gas,交易和消息。

以太坊的核心概念首先是智能合約,智能合約包含兩部分,一部分是開發語言,主要以 Solidity 爲主,Solidity 與 Javascript 語言在使用上十分接近,這極大地降低了 Dapp 開發人員的學習成本。

Dapp 開發者編寫好代碼以後,使用 Solidity 編譯成十六進制字節碼,然後部署到 EVM 上,也就是把合約廣播到全網,等礦工打包後就形成了常年運行的 Dapp 了。

另一部分就是 EVM。 EVM 是以太坊智能合約虛擬機,我們可以等價理解它爲 Javascript、Python 等腳本語言的執行引擎。

它是一個輕量級的虛擬機隔離環境,它並不提供訪問本地網絡、進程、文件系統的功能,它更像是一個封閉的容器,這個容器裏面裝了一個正在運行 Dapp,可以看成是無法和外界交互的 Docker Container。

Dapp 在運行過程中,可以被請求或其他事件觸發,然後執行相應的邏輯,這些請求和事件是由以太坊上的交易產生的,不是來自本地操作系統的事件。

Dapp 運行過程中,每次狀態發生變化,則意味着全網同步更新,大家的計算結果都是一致的,這有兩個特性:

1、所有 Dapp 的計算結果經過全網共識,一旦確認過幾乎無法被僞造和篡改;

2、由於必須經過全網共識,所以這限制了整個網絡的容量。

3.智能合約示例代碼

這裏以生活中常見的雙方打賭場景爲切入點,寫一個簡單的合約代碼,比如,張三和李四打賭,週末拜仁和皇馬的足球比賽誰會贏。如果拜仁贏了,張三給李四 100 元;如果反過來,李四給張三 100 元;如果打成平局,則不贏不輸。

張三和李四都怕對方不認賬,所以,他們需要找一個他們都信得過的人來做公證,兩人都把 100 元錢給這個公證人。然後,如果拜仁贏了,公證人把全部 200 元給李四;如果皇馬贏了,則全部給張三;如果是平局,則分別退還 100 元。

上面這個模型什麼都好,就是有一個問題,這個“公證人”跑路了怎麼辦?因爲他們只賭 100 元,公證人犯不着爲了 200 元跑路。但是,如果有一萬人把賭金交給公證人呢?如果張三李四賭金是 100 萬呢?公證人的人性會受到極大的挑戰,他還有那麼可信嗎? 針對此問題只需將雙方的賭局約定寫入智能合約,通過智能合約執行這一問題即可迎刃而解。

合約代碼如下:

Contract GamblingContract{
    function transferAction(  address _from, address _to, uint256 _value) {
        if ( isBayernWin ) {
            blanceOf[_from] +=  _value
            blanceOf[_to] -= value
        }else if ( isRealMadridWin ) {
            blanceOf[_from] -= _value
            blanceOf[_to] += value
        }
    }
}

目前Solidity 是最受歡迎的智能合約編程語言,如果大家致力於區塊鏈智能合約的開發可以學習下Solidity 這門語言。

4.關於區塊鏈與智能合約的誤解

誤解 1. 區塊鏈技術的主要受益者是不法分子
區塊鏈技術最初進入大衆視野的時候,基本被描述爲犯罪中心,尤其是在暗網上。儘管區塊鏈逐漸作爲安全業務解決方案被廣泛接受,人們還是有着區塊鏈可以讓罪犯匿名作惡的負面聯想。

然而,恰恰相反的是,大多數的公共區塊鏈都是完全可跟蹤和安全的,因爲該技術可以讓公司企業跟蹤自身與客戶之間的所有信息往來。

誤解 2. 區塊鏈不可更改不會被黑
雖然區塊鏈是公司企業可用的最安全選擇之一,然而,卻沒有哪一種系統是 100% 對黑客和更改免疫的。

理論上,區塊鏈網絡中的任何個人或組織,都可以集結足夠多的挖礦資源來奪取控制權,雖然這種事情發生的可能性很低。

誤解 3. 政府可以關停區塊鏈網絡
實際上,區塊鏈網絡的去中心化特性決定,除非每個網絡的參與者都停止使用,否則幾乎不可能關停任何一個區塊鏈網絡。無法關停,正是區塊鏈技術之所以成爲安全業務解決方案極佳選擇的衆多因素之一。

誤解 4. 智能合約就是具有法律約束力的合同
事實上,智能合約只是程序裏的一段代碼,按照交易雙方之間的協議說明執行。它沒有任何法律的約束力,而且它們也只能在區塊鏈的網絡中存在。與其將智能合約看作是真正的合同,不如說它們更像是某種安全工具。

誤解 5. 智能合約操作完全自治
有些人認爲,智能合約是完全自治的,能夠自主分析自身環境並響應任何修改。事實上,智能合約之所以是安全解決方案的原因之一,就在於它們只會在收到交易或消息時執行。

誤解 6. 所有智能合約都有相同特徵
很多人對於區塊鏈技術和智能合約都有的誤解是,世界上就一種區塊鏈技術或者只有一種智能合約。其實,根據所依託的區塊鏈網絡不同,智能合約的功能特性完全不同。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章