根據(jù)谷歌趨勢(shì)數(shù)據(jù)顯示牵署,目前漏隐,程序員對(duì)智能合約編程的興趣已經(jīng)處于歷史最高水平,其中中國高居全球榜首奴迅,隨著區(qū)塊鏈技術(shù)的發(fā)展青责,相信日后智能合約將會(huì)與我們的生活密切相關(guān),今天就為大家介紹一下什么是智能合約取具。
1.智能合約基本概念
智能合約英文名稱Smart Contract脖隶,90 年代由跨領(lǐng)域法律學(xué)者尼克·薩博(Nick Szabo)博士首次提出,幾乎與互聯(lián)網(wǎng)同齡暇检。但由于缺少可信的執(zhí)行環(huán)境产阱,智能合約并沒有被應(yīng)用到實(shí)際生活中,然而由于區(qū)塊鏈的誕生他開始重新走入人們視野块仆,并逐步開始得到重視和應(yīng)用构蹬。
不同于法律意義上的合約概念,區(qū)塊鏈領(lǐng)域的合約表達(dá)的是可以“自治自理”的 計(jì)算機(jī)協(xié)議悔据,這套協(xié)議具有自我執(zhí)行庄敛、自我驗(yàn)證的屬性。
如果完全從技術(shù)角度來看科汗,智能合約等價(jià)于一段事先就被規(guī)定好邏輯和條款的計(jì)算機(jī)代碼被激活運(yùn)行的狀態(tài)藻烤,同時(shí),智能合約也提供了通用的用戶接口头滔,用戶可以通過接口與用戶交互怖亭。
從定義中我們可以得知,智能合約由多個(gè)協(xié)議組成坤检,這些協(xié)議包含了用戶接口兴猩,能表達(dá)用戶的承諾,它可以安全有效地確定公共網(wǎng)絡(luò)上的關(guān)系缀蹄。
換句話說峭跳,智能合約是一個(gè)由計(jì)算機(jī)處理膘婶、可執(zhí)行合約條款的交易協(xié)議,其總體目標(biāo)是滿足協(xié)議既定的條件蛀醉,例如支付悬襟、抵押、保密協(xié)議拯刁。這可以降低合約欺詐造成的損失脊岳,降低仲裁和強(qiáng)制執(zhí)行所產(chǎn)生的成本以及其他的交易成本。
我們舉個(gè)實(shí)際的例子解釋一下垛玻,今年 4 月 9 日割捅,上海某建設(shè)銀行支行開放了“無人銀行”,銀行中充斥了眾多機(jī)器和顯示屏帚桩,智慧柜員機(jī)亿驾、VTM 機(jī)、外匯兌換機(jī)账嚎、VR 設(shè)備和兩臺(tái)機(jī)器人代替了傳統(tǒng)的柜臺(tái)莫瞬。
這里的智慧柜員機(jī)、外匯兌換機(jī)器人眾多電子設(shè)備都可以認(rèn)為是智能合約的一種表現(xiàn)形式郭蕉,用戶在辦理銀行業(yè)務(wù)時(shí)疼邀,如辦理大額匯兌業(yè)務(wù),業(yè)務(wù)流程和邏輯依據(jù)已經(jīng)定在程序中召锈,用戶只需要按照操作一步一步進(jìn)行旁振,辦理完成后即可獲得單據(jù)。
這里“既定的業(yè)務(wù)流程涨岁、機(jī)器人模樣的人機(jī)交互界面拐袜、雙方同意承諾”組成了智能合約的概念,它甚至具有一定的法律效力卵惦。
薩博提出的是智能合約的概念阻肿,以及我們舉的例子瓦戚,都是廣義的智能合約概念沮尿。智能合約具有多種實(shí)踐形式,而在區(qū)塊領(lǐng)域所說的智能合約概念较解,我們其實(shí)是指 Blockchain-based 這種形式畜疾。
在薩博的智能合約概念中提到了開放式網(wǎng)絡(luò),而我們知道開放式網(wǎng)絡(luò)的基本要求就是拜占庭容錯(cuò)印衔,通過前面文章的講解我們知道啡捶,區(qū)塊鏈天然具有拜占庭容錯(cuò)特性。所以如果在區(qū)塊鏈上實(shí)踐智能合約這個(gè)概念奸焙,兩者會(huì)非常契合瞎暑,天造地設(shè)彤敛。
首先實(shí)踐了智能合約這一概念的是比特幣,比特幣腳本(bitcoin script)包含了 5 種標(biāo)準(zhǔn)交易腳本了赌,這些腳本的功能不僅僅提供了普通單人支付的情況墨榄,它還提供了多方共同簽名支付的腳本,叫做多重簽名支付勿她,多重簽名支付可以看成是薩博語義下的智能合約袄秩。
除了比特幣,將智能合約這個(gè)概念發(fā)揚(yáng)光大的區(qū)塊鏈項(xiàng)目就是以太坊了逢并,2013 年底以太坊的創(chuàng)始人 Vitalik 發(fā)布了白皮書《以太坊:下一代智能合約和去中心化應(yīng)用平臺(tái)》之剧,并一直致力于將以太坊打造成最佳智能合約平臺(tái),所以說 比特幣引領(lǐng)區(qū)塊鏈砍聊,以太坊復(fù)活智能合約背稼。
2.智能合約與以太坊
以太坊 Ethereum 項(xiàng)目的目標(biāo)是打造一個(gè)去中心化的新一代互聯(lián)網(wǎng)應(yīng)用平臺(tái),這個(gè)平臺(tái)稱作 Dapp 平臺(tái)玻蝌。
這些 Dapp 基于以太坊智能合約虛擬機(jī)開發(fā)雇庙、編譯、部署灶伊,并且可以自定義業(yè)務(wù)邏輯疆前,部署后全網(wǎng)可見且自動(dòng)執(zhí)行,理想情況下不存在宕機(jī)聘萨、審查竹椒、欺詐、第三方干預(yù)的情況米辐。
以太坊核心概念包括:智能合約虛擬機(jī) EVM 和 Solidity 編程語言胸完、賬戶模型、以太幣和 Gas翘贮,交易和消息赊窥。
以太坊的核心概念首先是智能合約,智能合約包含兩部分狸页,一部分是開發(fā)語言锨能,主要以 Solidity 為主,Solidity 與 Javascript 語言在使用上十分接近芍耘,這極大地降低了 Dapp 開發(fā)人員的學(xué)習(xí)成本址遇。
Dapp 開發(fā)者編寫好代碼以后,使用 Solidity 編譯成十六進(jìn)制字節(jié)碼斋竞,然后部署到 EVM 上倔约,也就是把合約廣播到全網(wǎng),等礦工打包后就形成了常年運(yùn)行的 Dapp 了坝初。
另一部分就是 EVM浸剩。 EVM 是以太坊智能合約虛擬機(jī)钾军,我們可以等價(jià)理解它為 Javascript、Python 等腳本語言的執(zhí)行引擎绢要。
它是一個(gè)輕量級(jí)的虛擬機(jī)隔離環(huán)境巧颈,它并不提供訪問本地網(wǎng)絡(luò)、進(jìn)程袖扛、文件系統(tǒng)的功能砸泛,它更像是一個(gè)封閉的容器,這個(gè)容器里面裝了一個(gè)正在運(yùn)行 Dapp蛆封,可以看成是無法和外界交互的 Docker Container唇礁。
Dapp 在運(yùn)行過程中,可以被請(qǐng)求或其他事件觸發(fā)惨篱,然后執(zhí)行相應(yīng)的邏輯盏筐,這些請(qǐng)求和事件是由以太坊上的交易產(chǎn)生的,不是來自本地操作系統(tǒng)的事件砸讳。
Dapp 運(yùn)行過程中琢融,每次狀態(tài)發(fā)生變化,則意味著全網(wǎng)同步更新簿寂,大家的計(jì)算結(jié)果都是一致的漾抬,這有兩個(gè)特性:
1、所有 Dapp 的計(jì)算結(jié)果經(jīng)過全網(wǎng)共識(shí)常遂,一旦確認(rèn)過幾乎無法被偽造和篡改纳令;
2、由于必須經(jīng)過全網(wǎng)共識(shí)克胳,所以這限制了整個(gè)網(wǎng)絡(luò)的容量平绩。
3.智能合約示例代碼
這里以生活中常見的雙方打賭場(chǎng)景為切入點(diǎn),寫一個(gè)簡單的合約代碼漠另,比如捏雌,張三和李四打賭,周末拜仁和皇馬的足球比賽誰會(huì)贏笆搓。如果拜仁贏了性湿,張三給李四 100 元;如果反過來砚作,李四給張三 100 元窘奏;如果打成平局,則不贏不輸葫录。
張三和李四都怕對(duì)方不認(rèn)賬,所以领猾,他們需要找一個(gè)他們都信得過的人來做公證米同,兩人都把 100 元錢給這個(gè)公證人骇扇。然后,如果拜仁贏了面粮,公證人把全部 200 元給李四少孝;如果皇馬贏了,則全部給張三熬苍;如果是平局稍走,則分別退還 100 元。
上面這個(gè)模型什么都好柴底,就是有一個(gè)問題婿脸,這個(gè)“公證人”跑路了怎么辦?因?yàn)樗麄冎毁€ 100 元柄驻,公證人犯不著為了 200 元跑路狐树。但是,如果有一萬人把賭金交給公證人呢鸿脓?如果張三李四賭金是 100 萬呢抑钟?公證人的人性會(huì)受到極大的挑戰(zhàn),他還有那么可信嗎野哭? 針對(duì)此問題只需將雙方的賭局約定寫入智能合約在塔,通過智能合約執(zhí)行這一問題即可迎刃而解。
合約代碼如下:
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 是最受歡迎的智能合約編程語言拨黔,如果大家致力于區(qū)塊鏈智能合約的開發(fā)可以學(xué)習(xí)下Solidity 這門語言心俗。
4.關(guān)于區(qū)塊鏈與智能合約的誤解
誤解 1. 區(qū)塊鏈技術(shù)的主要受益者是不法分子
區(qū)塊鏈技術(shù)最初進(jìn)入大眾視野的時(shí)候,基本被描述為犯罪中心蓉驹,尤其是在暗網(wǎng)上城榛。盡管區(qū)塊鏈逐漸作為安全業(yè)務(wù)解決方案被廣泛接受,人們還是有著區(qū)塊鏈可以讓罪犯匿名作惡的負(fù)面聯(lián)想态兴。
然而狠持,恰恰相反的是,大多數(shù)的公共區(qū)塊鏈都是完全可跟蹤和安全的瞻润,因?yàn)樵摷夹g(shù)可以讓公司企業(yè)跟蹤自身與客戶之間的所有信息往來喘垂。
誤解 2. 區(qū)塊鏈不可更改不會(huì)被黑
雖然區(qū)塊鏈?zhǔn)枪酒髽I(yè)可用的最安全選擇之一,然而绍撞,卻沒有哪一種系統(tǒng)是 100% 對(duì)黑客和更改免疫的正勒。
理論上,區(qū)塊鏈網(wǎng)絡(luò)中的任何個(gè)人或組織傻铣,都可以集結(jié)足夠多的挖礦資源來奪取控制權(quán)章贞,雖然這種事情發(fā)生的可能性很低。
誤解 3. 政府可以關(guān)停區(qū)塊鏈網(wǎng)絡(luò)
實(shí)際上非洲,區(qū)塊鏈網(wǎng)絡(luò)的去中心化特性決定鸭限,除非每個(gè)網(wǎng)絡(luò)的參與者都停止使用蜕径,否則幾乎不可能關(guān)停任何一個(gè)區(qū)塊鏈網(wǎng)絡(luò)。無法關(guān)停败京,正是區(qū)塊鏈技術(shù)之所以成為安全業(yè)務(wù)解決方案極佳選擇的眾多因素之一兜喻。
誤解 4. 智能合約就是具有法律約束力的合同
事實(shí)上,智能合約只是程序里的一段代碼赡麦,按照交易雙方之間的協(xié)議說明執(zhí)行朴皆。它沒有任何法律的約束力,而且它們也只能在區(qū)塊鏈的網(wǎng)絡(luò)中存在泛粹。與其將智能合約看作是真正的合同遂铡,不如說它們更像是某種安全工具。
誤解 5. 智能合約操作完全自治
有些人認(rèn)為戚扳,智能合約是完全自治的忧便,能夠自主分析自身環(huán)境并響應(yīng)任何修改。事實(shí)上帽借,智能合約之所以是安全解決方案的原因之一珠增,就在于它們只會(huì)在收到交易或消息時(shí)執(zhí)行。
誤解 6. 所有智能合約都有相同特征
很多人對(duì)于區(qū)塊鏈技術(shù)和智能合約都有的誤解是砍艾,世界上就一種區(qū)塊鏈技術(shù)或者只有一種智能合約蒂教。其實(shí),根據(jù)所依托的區(qū)塊鏈網(wǎng)絡(luò)不同脆荷,智能合約的功能特性完全不同凝垛。