簡介:上一章咱們簡單介紹了區塊鏈技術的發展狀況,並詳細介紹智能合約的基礎概念。能夠說,區塊鏈1.0時代(比特幣)除了代幣功能,與現實生活相去甚遠。智能合約的出現,給區塊鏈帶來了驚天動地的變化,區塊鏈也從一種帳本形式,變成了下一代計算網絡的雛形。這一章咱們將聊聊智能合約的應用場景。編程
上一篇文章咱們聊過,尼克·薩博對智能合約定義已經說的很清楚,智能合約不是必定要用區塊鏈來實現,好久以前就已經出現了:好比微信和支付寶的信用卡自動還款,您能夠認爲他是一種智能合約。當還款日到了,還款條件也知足(支付寶的餘額寶、微信支付餘額或者銀行儲蓄卡中餘額充足),系統會自動進行還款,這些都是智能合約,也沒有使用區塊鏈技術。微信
既然傳統的計算架構能夠知足智能合約,爲何區塊鏈開始熱炒智能合約了呢?最重要的緣由就是信任機制。看到這篇文章的讀者應該已經對區塊鏈技術有了必定的瞭解,咱們知道區塊鏈解釋的中心思想就是「去中心化」,在現實世界,合約是些在紙上的,只有雙方簽字畫押以後,人們才確認生效;在計算機世界中,合約是記錄在代碼中的。那智能合約在銀行、支付寶、微信等中心化的系統中,就兩大問題:網絡
1、黑客攻擊的風險。回到剛纔的例子,人們願意相信銀行的,可是一樣的服務人們還願意不肯意相信支付寶呢?畢竟這些證據都從高度保密的銀行專向了支付寶系統中,他也有本身的「芝麻信用」,他會不會篡改呢?對不少人來說這裏就要先存個疑問了。架構
2、中心化信息互通。「銀行」-「支付寶」-「微信支付」每家都是中心化的、孤島的,總不能期望央行、阿里巴巴和騰訊都打通吧,就算用戶有這個意願,各家也確定不想這麼作,具體緣由你懂的:)post
那區塊鏈技術又什麼過人之處,能夠贏得用戶的信任呢?區塊鏈
這裏偏偏就是咱們剛剛提到兩個中心化系統不能解決的問題。首先是不可篡改,這樣就不須要擔憂合約的內容會被更改,是數據沒法刪除、修改,只能新增,保證了歷史的可追溯,同時做惡的成本將很高,由於其做惡行爲將被永遠記錄,同時擁有高可靠行,咱們不用擔憂系統在條件被知足時不執行合約;而後就是去中心化和給咱們帶來的全網備份,完備的記錄徹底能夠支持支持過後的審計,避免了中心化因素的影響。微信支付
有了以上的特性,咱們再也不須要找一箇中心化的組織來簽定合約,區塊鏈天然會幫助咱們完成其餘的工做。這就是區塊鏈帶來的革命。智能合約的能量才被無限放大。.net
基於區塊鏈的智能合約構建及執行分爲以下幾步:cdn
一、多方用戶共同參與制定一份智能合約;blog
二、合約經過P2P網絡擴散並存入區塊鏈;
三、區塊鏈構建的智能合約自動執行。
下面詳細描述步驟1「多方用戶共同參與制定一份智能合約」的過程,包括以下步驟:
首先用戶必須先註冊成爲區塊鏈的用戶,區塊鏈返回給用戶一對公鑰和私鑰;公鑰作爲用戶在區塊鏈上的帳戶地址,私鑰作爲操做該帳戶的惟一鑰匙。
兩個以兩個以上的用戶根據須要,共同商定了一份承諾,承諾中包含了雙方的權利和義務;這些權利和義務以電子化的方式,編程機器語言;參與者分別用各自私鑰進行簽名;以確保合約的有效性。
簽名後的智能合約,將會根據其中的承諾內容,傳入區塊鏈網絡中。
下面詳細描述步驟2「合約經過P2P網絡擴散並存入區塊鏈」的過程,包括以下步驟:
(1)合約經過P2P的方式在區塊鏈全網中擴散,每一個節點都會收到一份;區塊鏈中的驗證節點會將收到的合約先保存到內存中,等待新一輪的共識時間,觸發對該份合約的共識和處理。
(2)共識時間到了,驗證節點會把最近一段時間內保存的全部合約,一塊兒打包成一個合約集合(set),並算出這個合約集合的Hash值,最後將這個合約集合的Hash值組裝成一個區塊結構,擴散到全網;其它驗證節點收到這個區塊結構後,會把裏面包含的合約集合的Hash取出來,與本身保存的合約集合進行比較;同時發送一份本身承認的合約集合給其它的驗證節點;經過這種多輪的發送和比較;全部的驗證節點最終在規定的時間內對最新的合約集合達成一致。
(3)最新達成的合約集合會以區塊的形式擴散到全網,以下圖所示,每一個區塊包含如下信息:當前區塊的Hash值、前一區塊的Hash值、達成共識時的時間戳、以及其它描述信息;同時區塊鏈最重要的信息是帶有一組已經達成共識的合約集;收到合約集的節點,都會對每條合約進行驗證,驗證經過的合約纔回最終寫入區塊鏈中,驗證的內容主要是合約參與者的私鑰簽名是否與帳戶匹配。
(1)智能合約會按期檢查自動機狀態,逐條遍歷每一個合約內包含的狀態機、事務以及觸發條件;將條件知足的事務推送到待驗證的隊列中,等待共識;未知足觸發條件的事務將繼續存放在區塊鏈上。
(2)進入最新輪驗證的事務,會擴散到每個驗證節點,與普通區塊鏈交易或事務同樣,驗證節點首先進行簽名驗證,確保事務的有效性;驗證經過的事務會進入待共識集合,等大多數驗證節點達成共識後,事務會成功執行並通知用戶。
(3)事務執行成功後,智能合約自帶的狀態機會判斷所屬合約的狀態,當合約包括的全部事務都順序執行完後,狀態機會將合約的狀態標記爲完成,並從最新的區塊中移除該合約;反之將標記爲進行中,繼續保存在最新的區塊中等待下一輪處理,直處處理完畢;整個事務和狀態的處理都由區塊鏈底層內置的智能合約系統自動完成,全程透明、不可攥改。
由此咱們能夠了解在存證、溯源、數字資產等領域有着普遍的應用場景。
區塊鏈2.0是更宏觀的對整個市場去中心化,利用區塊鏈技術來轉換許多不一樣的數字資產而不只僅是比特幣,經過轉讓來建立不一樣資產的價值。區塊鏈技術的去中心化帳本功能能夠被用來建立、確認、轉移各類不一樣類型的資產及合約。幾乎全部類型的金融交易均可以被改形成在區塊鏈上使用,包括股票、私募股權、衆籌、債券和其餘類型的金融衍生品如期貨、期權等。
如今,以太坊網絡以及國內的矩陣元等一系列區塊鏈社區都提供了公開的智能合約編程的接口。
下一篇文章咱們將開始介紹智能合約開發最主流的語言Solidity的文檔內容。若是你們有哪些疑問能夠在博客裏留言。
部份內容摘自〈區塊鏈:從數字貨幣到信用社會〉(中信出版社)