根據谷歌趨勢數據顯示,目前,程序員對智能合約編程的興趣已經處于歷史最高水平,其中中國高居全球榜首,隨著區塊鏈技術的發展,相信日后智能合約將會與我們的生活密切相關,今天就為大家介紹一下什么是智能合約。
智能合約基本概念
智能合約英文名稱Smart Contract,90 年代由跨領域法律學者尼克·薩博(Nick Szabo)博士首次提出的,幾乎與互聯網同齡。但由于缺少可信的執行環境,智能合約并沒有被應用到實際生活中,然而由于區塊鏈的誕生他開始重新走入人們視野,并逐步開始得到重視和應用。
不同于法律意義上的合約概念,區塊鏈領域的合約表達的是可以“自治自理”的 計算機協議,這套協議具有自我執行、自我驗證的屬性。
如果完全從技術角度來看,智能合約等價于一段事先就被規定好邏輯和條款的計算機代碼被激活運行的狀態,同時,智能合約也提供了通用的用戶接口,用戶可以通過接口與用戶交互。
從定義中我們可以得知,智能合約由多個協議組成,這些協議包含了用戶接口,能表達用戶的承諾,它可以安全有效地確定公共網絡上的關系。
換句話說,智能合約是一個由計算機處理、可執行合約條款的交易協議,其總體目標是滿足協議既定的條件,例如支付、抵押、保密協議。這可以降低合約欺詐造成的損失,降低仲裁和強制執行所產生的成本以及其他的交易成本。
我們舉個實際的例子解釋一下,今年 4 月 9 日,上海某建設銀行支行開放了“無人銀行”,銀行中充斥了眾多機器和顯示屏,智慧柜員機、VTM 機、外匯兌換機、VR 設備和兩臺機器人代替了傳統的柜臺。
這里的智慧柜員機、外匯兌換機器人眾多電子設備都可以認為是智能合約的一種表現形式,用戶在辦理銀行業務時,如辦理大額匯兌業務,業務流程和邏輯依據已經定在程序中,用戶只需要按照操作一步一步進行,辦理完成后即可獲得單據。
這里“既定的業務流程、機器人模樣的人機交互界面、雙方同意承諾”組成了智能合約的概念,它甚至具有一定的法律效力。
薩博提出的是智能合約的概念,以及我們舉的例子,都是廣義的智能合約概念。智能合約具有多種實踐形式,而在區塊領域所說的智能合約概念,我們其實是指 Blockchain-based 這種形式。
在薩博的智能合約概念中提到了開放式網絡,而我們知道開放式網絡的基本要求就是拜占庭容錯,通過前面文章的講解我們知道,區塊鏈天然具有拜占庭容錯特性。所以如果在區塊鏈上實踐智能合約這個概念,兩者會非常契合,天造地設。
首先實踐了智能合約這一概念的是比特幣,比特幣腳本(bitcoin script)包含了 5 種標準交易腳本,這些腳本的功能不僅僅提供了普通單人支付的情況,它還提供了多方共同簽名支付的腳本,叫做多重簽名支付,多重簽名支付可以看成是薩博語義下的智能合約。
除了比特幣,將智能合約這個概念發揚光大的區塊鏈項目就是以太坊了,2013 年底以太坊的創始人 Vitalik 發布了白皮書《以太坊:下一代智能合約和去中心化應用平臺》,并一直致力于將以太坊打造成最佳智能合約平臺,所以說 比特幣引領區塊鏈,以太坊復活智能合約。
智能合約與以太坊
以太坊 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、由于必須經過全網共識,所以這限制了整個網絡的容量。
智能合約示例代碼
這里以生活中常見的雙方打賭場景為切入點,寫一個簡單的合約代碼,比如,張三和李四打賭,周末拜仁和皇馬的足球比賽誰會贏。如果拜仁贏了,張三給李四 100 元;如果反過來,李四給張三 100 元;如果打成平局,則不贏不輸。
張三和李四都怕對方不認賬,所以,他們需要找一個他們都信得過的人來做公證,兩人都把 100 元錢給這個公證人。然后,如果拜仁贏了,公證人把全部 200 元給李四;如果皇馬贏了,則全部給張三;如果是平局,則分別退還 100 元。
上面這個模型什么都好,就是有一個問題,這個“公證人”跑路了怎么辦?因為他們只賭 100 元,公證人犯不著為了 200 元跑路。但是,如果有一萬人把賭金交給公證人呢?如果張三李四賭金是 100 萬呢?公證人的人性會受到極大的挑戰,他還有那么可信嗎?針對此問題只需將雙方的賭局約定寫入智能合約,通過智能合約執行這一問題即可迎刃而解。
合約代碼如下:
目前Solidity 是最受歡迎的智能合約編程語言,如果大家致力于區塊鏈智能合約的開發可以學習下Solidity 這門語言。
關于區塊鏈與智能合約的誤解
誤解 1. 區塊鏈技術的主要受益者是不法分子
區塊鏈技術最初進入大眾視野的時候,基本被描述為犯罪中心,尤其是在暗網上。盡管區塊鏈逐漸作為安全業務解決方案被廣泛接受,人們還是有著區塊鏈可以讓罪犯匿名作惡的負面聯想。
然而,恰恰相反的是,大多數的公共區塊鏈都是完全可跟蹤和安全的,因為該技術可以讓公司企業跟蹤自身與客戶之間的所有信息往來。
誤解 2. 區塊鏈不可更改不會被黑
雖然區塊鏈是公司企業可用的最安全選擇之一,然而,卻沒有哪一種系統是 100% 對黑客和更改免疫的。
理論上,區塊鏈網絡中的任何個人或組織,都可以集結足夠多的挖礦資源來奪取控制權,雖然這種事情發生的可能性很低。
誤解 3. 政府可以關停區塊鏈網絡
實際上,區塊鏈網絡的去中心化特性決定,除非每個網絡的參與者都停止使用,否則幾乎不可能關停任何一個區塊鏈網絡。無法關停,正是區塊鏈技術之所以成為安全業務解決方案極佳選擇的眾多因素之一。
誤解 4. 智能合約就是具有法律約束力的合同
事實上,智能合約只是程序里的一段代碼,按照交易雙方之間的協議說明執行。它沒有任何法律的約束力,而且它們也只能在區塊鏈的網絡中存在。與其將智能合約看作是真正的合同,不如說它們更像是某種安全工具。
誤解 5. 智能合約操作完全自治
有些人認為,智能合約是完全自治的,能夠自主分析自身環境并響應任何修改。事實上,智能合約之所以是安全解決方案的原因之一,就在于它們只會在收到交易或消息時執行。
誤解 6. 所有智能合約都有相同特征
很多人對于區塊鏈技術和智能合約都有的誤解是,世界上就一種區塊鏈技術或者只有一種智能合約。其實,根據所依托的區塊鏈網絡不同,智能合約的功能特性完全不同。
責任編輯:ct
評論
查看更多