小白快速理解智能合約
當(dāng)小白學(xué)習(xí)區(qū)塊鏈的時(shí)候,有一個(gè)叫“智能合約”的詞會反復(fù)出現(xiàn)??墒裁词?ldquo;智能合約”呢?今天樹哥嘗試用自己的語言說清楚啥叫“智能合約”。
一、什么是“智能合約”?
最初的概念:“智能合約”(smart contract):是一套以數(shù)字形式定義的承諾(promises) ,包括合約參與方可以在上面執(zhí)行這些承諾的協(xié)議。—-1995年尼克·薩博(Nick Szabo)(跨領(lǐng)域法律學(xué)者)
請注意兩個(gè)關(guān)鍵點(diǎn):
1、這是1995年提出來的,那會兒還只是互聯(lián)網(wǎng)的早期階段,區(qū)塊鏈的概念遠(yuǎn)未誕生。
2、提出的人是一個(gè)跨領(lǐng)域法律學(xué)者,是想通過計(jì)算機(jī)解決法律問題。
可以看出,當(dāng)初“智能合約”的概念是通過計(jì)算機(jī)解決法律合約執(zhí)行的問題。
那么,當(dāng)前大家談的“智能合約”還是當(dāng)初的這些含義嗎?
當(dāng)區(qū)塊鏈?zhǔn)澜缫肓?ldquo;智能合約”這個(gè)概念時(shí),它的概念已經(jīng)發(fā)生了種種變化!
1、當(dāng)前談的**“智能合約”,都在區(qū)塊鏈范疇內(nèi)討論。
2、“智能合約”已經(jīng)不局限在“合約”本身了,其它類的應(yīng)用都可以稱之為“智能合約”!
談到第一點(diǎn),我們現(xiàn)在“智能合約”因?yàn)槭遣渴鸬絽^(qū)塊鏈上,所以需要很具有“區(qū)塊鏈特色”。
談到第二點(diǎn),“智能合約”可以是合約,當(dāng)然也可以不是合約。當(dāng)前很多描述“智能合約”的文章還把“智能合約”局限在“合約”上,是不準(zhǔn)確的。
當(dāng)前的定義是:
“智能合約”:是區(qū)塊鏈系統(tǒng)上的應(yīng)用,是可執(zhí)行的代碼。
二、區(qū)塊鏈上的“智能合約”
我們既然談到是區(qū)塊鏈上的智能合約,因此區(qū)塊鏈本身的特性也會決定智能合約的相應(yīng)特性。我們用一張圖,來進(jìn)行比較說明,部署在中心化的傳統(tǒng)互聯(lián)網(wǎng)上與部署在分布式的區(qū)塊鏈上有何不同。見下圖:
互聯(lián)網(wǎng)與區(qū)塊鏈網(wǎng)絡(luò)智能合約
最直接顯著的區(qū)別有兩點(diǎn):
1、 在中心化的互聯(lián)網(wǎng)上,智能合約(代碼)只需要部署在中心節(jié)點(diǎn)服務(wù)器上就可以。
而區(qū)塊鏈網(wǎng)絡(luò)上,由于沒有中心化的節(jié)點(diǎn),所以智能合約必須部署在所有的節(jié)點(diǎn)上。
2、 在中心化互聯(lián)網(wǎng)上,智能合約(代碼)可以比較隨意、限制比較少的創(chuàng)建、執(zhí)行、升級或終止。
而在區(qū)塊鏈網(wǎng)絡(luò)上,由于體系是采用按時(shí)間出區(qū)塊,一個(gè)區(qū)塊鏈接一個(gè)區(qū)塊的方式,決定了智能合約必須打包入?yún)^(qū)塊之中,并且復(fù)制到全網(wǎng)的節(jié)點(diǎn)之中。決定了智能合約代碼會有一些要求,智能合約的創(chuàng)建、執(zhí)行、升級、終止也會復(fù)雜得多,必須符合區(qū)塊鏈本身的技術(shù)要求。
也是由于這兩點(diǎn),決定了區(qū)塊鏈上的智能合約有如下的特色:
1、代碼即法律:不同于中心化節(jié)點(diǎn),區(qū)塊鏈上的智能合約一經(jīng)部署便復(fù)制到全網(wǎng)節(jié)點(diǎn),滿足條件會自動執(zhí)行,所有人都可以看到但無法修改,即使代碼的創(chuàng)始人也無法終止。
2、機(jī)器信任:不同于傳統(tǒng)信任中心或第三方(例如淘寶信任的是第三方支付寶),智能合約的履行完全靠機(jī)器代碼完成,不依賴任何第三方或權(quán)威中心機(jī)構(gòu),因此變中心信任為機(jī)器信任。
3、升級困難:不同于中心化互聯(lián)網(wǎng)發(fā)現(xiàn)問題修改代碼非常容易,區(qū)塊鏈網(wǎng)絡(luò)中的智能合約一經(jīng)部署,修改完善過程就比較復(fù)雜。這點(diǎn)也是區(qū)塊鏈本身的特色,區(qū)塊鏈的網(wǎng)絡(luò)本身升級就很困難,容易導(dǎo)致分叉,比特幣現(xiàn)金就是比特幣網(wǎng)絡(luò)想把區(qū)塊從1M改成8M后導(dǎo)致硬分叉而來的。
3、 決策靠共識:不同于中心化服務(wù)器的任何決策都可以有權(quán)威中心直接負(fù)責(zé),區(qū)塊鏈由于是布局到全網(wǎng)節(jié)點(diǎn)上的,沒有了權(quán)威中心,很多決策都是靠全網(wǎng)共識來達(dá)成,所以就有了社區(qū)、技術(shù)開發(fā)者、礦工、交易所等等多方利益的博弈過程。
4、 功能相對弱:不同于中心化服務(wù)器的軟件功能強(qiáng)大,在區(qū)塊鏈上的智能合約受限于區(qū)塊大小、出塊速度和區(qū)塊鏈本身的網(wǎng)絡(luò)帶寬等多種因素,在功能上遠(yuǎn)沒有中心化服務(wù)器的那么強(qiáng)大;當(dāng)然,由于每個(gè)區(qū)塊都需要全網(wǎng)同步,所以并發(fā)的交易速度也遠(yuǎn)不如傳統(tǒng)中心化互聯(lián)網(wǎng)那么強(qiáng)大(雙十一淘寶的并發(fā)量是極其可怕的)。
5、 外部數(shù)據(jù)交互難度大:區(qū)塊鏈本身就是要保證在網(wǎng)的數(shù)據(jù)不可篡改、可以溯源;就會面對如何保證上鏈的數(shù)據(jù)是可信數(shù)據(jù),如果源數(shù)據(jù)不準(zhǔn)確那上鏈就沒有了意義。另外,數(shù)據(jù)上鏈的時(shí)間、花費(fèi)、儲存都是一些復(fù)雜的問題。所以相對來講,區(qū)塊鏈的智能合約和外部數(shù)據(jù)交互難度大一些,與傳統(tǒng)互聯(lián)網(wǎng)的方式不同。
小結(jié):智能合約就是一段代碼,需要實(shí)現(xiàn)的一些應(yīng)用。由于部署在區(qū)塊鏈上,區(qū)塊鏈的多方存儲、多方計(jì)算、規(guī)則透明、不可篡改等特性,恰好為智能合約提供了安全可靠的記錄載體和執(zhí)行環(huán)境。智能合約變得不可篡改,陌生人都可以信任機(jī)器而不再關(guān)心合約的對方是誰,當(dāng)然同時(shí)也就存在了區(qū)塊鏈固有的一些問題,例如升級困難,功能目前還沒有那么強(qiáng)大等問題。
三、智能合約的創(chuàng)建和執(zhí)行
一個(gè)智能合約的生命周期包含合約創(chuàng)建、合約部署、合約執(zhí)行等過程。我們以以太坊為例,來說明區(qū)塊鏈上的“智能合約”是如何創(chuàng)建和執(zhí)行的。
案例:我們新建一個(gè)發(fā)工資的智能合約,樹哥是老板,是需要給兩個(gè)員工A和B發(fā)工資。先簡單構(gòu)建一下發(fā)工資的邏輯,如下:
1、合約創(chuàng)立
從上圖可以看出,在以太坊上是分為外部賬戶和合約賬戶的。樹哥的外部賬戶存著錢,合約賬戶存著相應(yīng)的代碼。代碼執(zhí)行的操作就是30號的時(shí)候,先檢查A和B的工作量,滿足要求后給A賬戶和B賬戶轉(zhuǎn)賬工資。那么,合約的創(chuàng)立就是要給三個(gè)用戶建立賬戶,通過要編寫合約賬戶內(nèi)的代碼。
1) 創(chuàng)建賬戶
需要先了解以太坊的賬戶體系
2)編譯,打包,數(shù)據(jù)上區(qū)塊鏈
根據(jù)要求創(chuàng)建完賬戶、編寫完代碼(以太坊的官方智能合約開發(fā)語言為:solidity),開始對編寫的代碼進(jìn)行編譯。
一旦完成了智能合約打包上鏈的過程,就意味著:全網(wǎng)的驗(yàn)證節(jié)點(diǎn)都會接受到樹哥和員工A與B之間的智能合約,并進(jìn)行了保存。
需要注意的,在以太坊上部署和執(zhí)行智能合約都是要有花費(fèi)的,這樣的花費(fèi)是用GAS來表示的(挺像我們的汽車燒的燃?xì)猓@個(gè)GAS是可以是用以太坊來購買。設(shè)置GAS而沒有直接用以太坊的原因是,以太坊價(jià)格波動太大,不能今天執(zhí)行一段代碼要50塊明天就變成5塊錢吧?所以用GAS代表以太坊上執(zhí)行操作的代價(jià)相對不會波動太大。
2、合約的執(zhí)行
智能合約會定期檢查相關(guān)事件和觸發(fā)條件,滿足條件的事件會推送到待驗(yàn)證的隊(duì)列之中。例如每月30日,會觸發(fā)條件把樹哥賬戶里的錢轉(zhuǎn)給員工A和員工B的賬戶中。
區(qū)塊鏈的驗(yàn)證節(jié)點(diǎn)會對這個(gè)事件進(jìn)行簽名驗(yàn)證,等大多數(shù)的驗(yàn)證節(jié)點(diǎn)對此事件達(dá)成共識后,智能合約將被成功執(zhí)行,并通知用戶。
需要說明的是,智能合約是存儲在區(qū)塊鏈網(wǎng)絡(luò)的代碼,但區(qū)塊鏈本身是不執(zhí)行代碼的。真正執(zhí)行代碼的是以太坊虛擬機(jī)(EVM),準(zhǔn)確一點(diǎn)來說是每一臺本地的以太坊虛擬機(jī)來執(zhí)行代碼,再來相互驗(yàn)證,然后再將結(jié)果寫入到區(qū)塊鏈當(dāng)中。示意圖如下:
以太坊智能合約執(zhí)行示意
小結(jié):通過樹哥給員工發(fā)工資的智能合約的創(chuàng)建、部署和執(zhí)行的過程,就可以了解到:資金是保存在外部賬戶中,代碼是保存在合約賬戶中;部署智能合約就是在把智能合約打包進(jìn)區(qū)塊中,然后分發(fā)到全網(wǎng)中;執(zhí)行智能合約就是在觸發(fā)條件達(dá)到后本地的以太坊虛擬機(jī)執(zhí)行智能合約,然后再將結(jié)果保存在區(qū)塊鏈中這樣的一個(gè)過程。
四、智能合約的安全性討論
最近出了很多起智能合約被黑客攻破而導(dǎo)致資產(chǎn)大量損失的事件,但發(fā)生的這些事件都不是因?yàn)橐蕴痪W(wǎng)絡(luò)系統(tǒng)的問題,而是屬于開發(fā)者開發(fā)的智能合約存在漏洞的原因。那么,智能合約開發(fā)需要注意哪些問題呢?一般就是兩個(gè)問題,一是確保智能合約的確定性,二是確定智能合約的可以關(guān)閉性。
1、確定性:就是確保智能合約在不同的計(jì)算機(jī)上執(zhí)行的效果都是相同的。
在區(qū)塊鏈網(wǎng)絡(luò)上,是不同的計(jì)算機(jī)節(jié)點(diǎn)參與運(yùn)行智能合約,如果執(zhí)行的結(jié)果有差異那么無疑會導(dǎo)致不同節(jié)點(diǎn)達(dá)不成共識,相應(yīng)的區(qū)塊也會認(rèn)為是非法的。那么如何保證智能合約的確定性呢?
1)不進(jìn)行調(diào)用不確定性的函數(shù),
2)不使用不確定性的數(shù)據(jù)源。
2、可以關(guān)閉性:就是確保智能合約在一定的情況下可以關(guān)閉。
如果一段有問題的智能合約在不斷地運(yùn)行,它會不斷的消耗區(qū)塊鏈的網(wǎng)絡(luò)資源,也有可能會攻擊者利用來攻擊整個(gè)網(wǎng)絡(luò)。是可以通過一些手段限制資源的使用來執(zhí)行智能合約關(guān)閉。
1)限制最大使用的資源。在以太坊上執(zhí)行智能合約或存儲都是需要有消耗(gas),智能合約有g(shù)as limit (最大消耗的gas值)來限制智能合約。當(dāng)智能合約消耗到規(guī)定的最大值時(shí),會自動關(guān)閉。
2)限制執(zhí)行代碼行數(shù)或執(zhí)行時(shí)間。當(dāng)智能合約執(zhí)行代碼行數(shù)達(dá)到規(guī)定最大行或執(zhí)行時(shí)間,則認(rèn)為智能合約有可能進(jìn)入死循環(huán)或出現(xiàn)問題,強(qiáng)行關(guān)閉。
3)采用虛擬機(jī)方式,隔離資源。以太坊就是采用虛擬機(jī)EVM的方式,把執(zhí)行環(huán)境虛擬化,將資源進(jìn)行隔離,避免由于一個(gè)智能合約問題感染整個(gè)系統(tǒng),也可以通過關(guān)閉智能合約的執(zhí)行虛擬機(jī)關(guān)閉智能合約。
小結(jié):部署在區(qū)塊鏈上的智能合約,由于其具備的區(qū)塊鏈的復(fù)雜特性而會凸顯出安全性的重要性。如果要真正理解如何提升智能合約的安全性,那需要對區(qū)塊鏈底層邏輯和智能合約有一定了解。
總結(jié):智能合約本質(zhì)是應(yīng)用,不局限于電子合約本身。在區(qū)塊鏈上的智能合約具備著區(qū)塊的規(guī)則透明、不可篡改、分布存儲等特征,它的創(chuàng)建、部署和執(zhí)行也是有一定的復(fù)雜度,在安全防護(hù)上也有了較高一些的要求。也正因?yàn)槿绱?,區(qū)塊鏈上的智能合約可以完成傳統(tǒng)互聯(lián)網(wǎng)程序沒有辦法完成的任務(wù),不僅可以在金融、拍賣、借貸、遺囑、注冊、眾籌、股權(quán)、投票、保險(xiǎn)等領(lǐng)域發(fā)揮巨大作用,而且隨著技術(shù)的不斷發(fā)展,在其他方面也將展現(xiàn)出巨大的作用。
以上,為樹哥區(qū)塊鏈從小白到精通
作者介紹:樹哥,樹哥區(qū)塊鏈創(chuàng)始人、《區(qū)塊鏈從入門到精通》作者,U贊簽約作者,對話區(qū)塊鏈合伙人。立志用最通俗的語言讓小白透徹了解區(qū)塊鏈技術(shù)。公眾號\頭條號\新浪博客\百度百家:樹哥區(qū)塊鏈,星球:區(qū)塊鏈從小白到精通。
你可能感興趣的文章
-
詳細(xì)介紹智能合約最早在什么時(shí)候被提出的?
智能合約是區(qū)塊鏈技術(shù)的核心組成部分,具有數(shù)據(jù)透明、不可篡改、永久運(yùn)行等,通過智能合約,可以把合同或協(xié)議條款以代碼的形式電子化地放到區(qū)塊鏈網(wǎng)絡(luò)上,實(shí)現(xiàn)自動執(zhí)行,從…
2024-06-28 -
質(zhì)押挖礦智能合約是什么意思?
質(zhì)押挖礦智能合約是什么意思?質(zhì)押挖礦智能合約是指一種在區(qū)塊鏈上運(yùn)行的智能合約,用于實(shí)現(xiàn)質(zhì)押和挖礦的功能,下文將為大家詳細(xì)介紹,一起來參考學(xué)習(xí)一下吧…
2024-06-16 -
智能合約平臺的價(jià)值爭奪戰(zhàn)
人們認(rèn)為加密資產(chǎn)沒有基本價(jià)值,不能像傳統(tǒng)投資那樣進(jìn)行分析,Grayscale 認(rèn)為并非如此,像以太坊和Solana這樣的智能合約平臺就是從自身網(wǎng)絡(luò)上的經(jīng)濟(jì)活動中產(chǎn)生費(fèi)用收益的,投…
2024-06-12 -
TON未來怎么樣?從技術(shù)特點(diǎn)解讀TON幣投資價(jià)值
從技術(shù)特點(diǎn)解讀TON幣投資價(jià)值!隨著幣安上線TON生態(tài)最大的游戲Notcoin以及由全流通token經(jīng)濟(jì)模型所引發(fā)的巨量財(cái)富效應(yīng),TON在短時(shí)間內(nèi)即取得了極大的關(guān)注,短期內(nèi)TON幣有可…
2024-06-07 -
重入攻擊是什么?一文解讀智能合約中的重入攻擊
重入攻擊詳解!以太坊智能合約開發(fā)中,重入攻擊是一種常見的 安全漏洞么,這種攻擊通常發(fā)生在合約的遞歸調(diào)用中,攻擊者通過構(gòu)造惡意交易,使得原本合約在執(zhí)行過程中不斷調(diào)…
2024-05-17 -
不小心把幣轉(zhuǎn)入智能合約怎么辦?幣轉(zhuǎn)到智能合約地址能找回嗎?
在幣圈,轉(zhuǎn)幣是常見的操作方式,很多投資者不小心把幣轉(zhuǎn)入智能合約不知道怎么辦,想要知道幣轉(zhuǎn)到智能合約地址能找回嗎?一旦遇到這樣的情況,一定要保持冷靜,并聯(lián)系相關(guān)的…
2024-05-09 -
如何成為全能性的智能合約開發(fā)者?
如何成為全能性的智能合約開發(fā)者?本文主要針對 Solidity, Rust 和 Move 合約開發(fā)語言,供大家參考學(xué)習(xí),少走彎路…
2024-04-30 -
三分鐘了解以太坊智能合約是什么意思?
智能合約是以太坊應(yīng)用程序的基本構(gòu)建塊,它們是存儲在區(qū)塊鏈上的計(jì)算機(jī)程序,使我們能夠?qū)鹘y(tǒng)合同轉(zhuǎn)換為數(shù)字合同,那么,以太坊智能合約是什么意思?本文將為大家詳細(xì)介紹…
2023-12-06 -
區(qū)塊鏈和智能合約的關(guān)系是什么?
智能合約和區(qū)塊鏈?zhǔn)钱?dāng)今社會最熱門的話題之一,二者之間存在著密切的關(guān)系,那么,區(qū)塊鏈和智能合約的關(guān)系是什么?下面將為大家深入分析…
2023-11-17 -
以太坊智能合約可以改嗎?安全嗎?
以太坊是一種去中心化的開放源代碼平臺,其最大的特點(diǎn)之一就是智能合約的支持,智能合約是一種在區(qū)塊鏈上執(zhí)行的自動化合約,可以實(shí)現(xiàn)各種功能,如數(shù)字資產(chǎn)的交換、數(shù)據(jù)的驗(yàn)…
2023-11-07