一、區塊鏈的定義前端
相較於區塊鏈,你們彷佛更瞭解比特幣。區塊鏈是一種技術,支撐和保障整個比特幣的貨幣機制在這樣一個分佈式網絡中運行,包括產生、流通、交易等等。算法
簡單來講它就是一個帳本,在整個交易過程當中,每產生一筆交易,你們都會記一筆帳,承認這個交易是有價值的,這筆錢從這個帳戶經過某種方式轉移到另外一個帳戶,區塊鏈就是保證這個交易數據實時和不可篡改的一個記錄。數據庫
從技術的角度來看,區塊鏈是多種技術的整合。它不只僅包括髮幣的制度,更重要的是分佈式網絡、加密技術、分佈式數據存儲技術等多種技術的組合。後端
從數據存儲的角度來看,區塊鏈是一個分佈式數據庫。區塊鏈網絡中的全部參與的節點都在存儲數據,每一個人都有一個帳本,這就解決了僞造和中心的問題。設計模式
區塊鏈徹底使用分佈式的網絡。之前咱們的金融交易系統更多的是中心化的,好比銀行。咱們的錢存到銀行,過去不少年以後,銀行可能說找不到那個存錢的記錄了,這筆存款就做廢了,這就是中心化的一個弊端,存在單點失效的問題。安全
分佈式存儲就不會存在這樣的問題,**歷史上產生過的每一筆交易,每一個節點的帳本都有記錄。**在區塊鏈或者說比特幣的結構中,每筆交易的信息,包括幣的產生、幣的交易,都會產生一個區塊,區塊裏包括了交易信息和時間,經過時間戳、隨機數和前一區塊的哈希值算一個新的區塊,新的區塊中包括當前產生的交易內容、數額大小和整個區塊大小,區塊鏈就是這麼來的。隨着交易的增長,鏈會愈來愈長,鏈上的全部信息都不可刪除不可篡改。網絡
如上圖所示,交易數據隨時能夠回溯,任何一步均可以驗證曾經發生過的交易。架構
區塊鏈中每筆交易的流程都要通過上圖所示的這七步,第三步就是所謂的「挖礦」。假若有筆交易是Alice要給Bob發送2個比特幣,就表明着網絡上這2個比特幣的權屬會發生轉移。首先Alice發起交易,向全網廣播,讓全世界人都知道Alice要給Bob2個比特幣,廣播以後全部節點接收到這個消息,礦工知道生意來了:如今有一個新的交易。因而全部礦工開始挖礦。框架
前面咱們說每筆交易都會記錄到區塊裏去,怎麼記進去、由誰來記呢?礦工挖礦就是去爭取記帳的權利,他爭取到記帳權後,要確認這筆交易是否正常,確認後把交易信息打包放到區塊裏,生成新的區塊,作完這些事情以後系統會獎勵給他比特幣,同時還會給他必定的交易費。挖礦的獎勵加上交易費組成礦工的收益。分佈式
這個記帳權須要礦工經過計算來爭取,礦工須要在最快的時間內經過一個隨機數加上時間戳、前一區塊的內容、本次交易的數據等計算出一個值小於給定的難度目標,(這個難度目標是根據上一個區塊的計算難度、時間和全網的算力狀況來決定的),而要找到這個值,並無固定算法,只能靠計算機隨機的哈希碰撞。隨機數能夠變化,並且要從0試到最大值2^32。
第一個算出來的人把獲得的結果放到區塊上讓你們都承認即達成共識,通過連續6-7次確認便可認爲這筆交易是可靠的,該礦工也就能夠獲得獎勵,比特幣是在挖礦的過程當中產生的。
交易被打包進區塊,並放到了鏈上,交易雙方不能夠反悔或賴帳,由於交易通過了全網廣播、全網驗證。這就是比特幣的產生和交易流程。
二、區塊鏈的特徵
開放、共識
區塊鏈是一個分佈式網絡,任何人均可以參與到網絡中來,全部節點都是平等的,都擁有一份帳本,以共識機制經過競爭來維護區塊。
去中心、去信任
徹底分佈式的端到端的網絡,沒有一箇中心化的設備,節點之間無需互相信任。
交易透明、匿名
交易規則公開透明,交易數據公開,每筆交易都會通過全網廣播,你們都能看到和參與驗證交易的發生,同時全部參與節點都是匿名的。
不可篡改、可追溯
大部分節點同時確認新增區塊,整個區塊鏈上的數據只能增長,不能刪除,不能篡改,經過這樣的一個機制來保證在節點匿名和無需信任的狀態下創建一種信任。由於每一個區塊都包含了上一區塊的信息,因此每筆交易都是可追溯的。
三、區塊鏈的核心技術
區塊鏈包括四個核心技術:
共識機制,即前面提到的算力的證實,礦工怎麼爭取記帳權,你們如何達成一致。
公鑰機制,即交易產生的時候怎麼驗證身份。在區塊鏈裏咱們用公鑰機制來進行簽名、加密和身份驗證。
分佈式存儲,保證整個帳本及交易的公開透明。
數字化合約,即咱們所說的智能合約。
四、區塊鏈分類
根據應用場景不一樣,區塊鏈能夠分爲三類:公有鏈、聯盟鏈和私有鏈。
公有鏈,好比比特幣、以太坊等,全部節點均可以參與。
聯盟鏈,部分節點可加入,須要經過聯盟的審覈和受權。好比大型金融機構之間創建聯盟鏈。
私有鏈,通常在企業內部使用。
五、解決信任
區塊鏈的整個設計思想就是爲解決信任問題。分佈式網絡、所有節點共同記帳、共識機制等都是爲了解決「在一個網絡中你們沒有信任的狀況下如何保證交易的可信」的問題。
從技術層面來看,多方參與,即分佈式網絡當中全部節點都參與,每次交易礦工經過計算競爭記帳權,保證記帳機會每一個節點都公平擁有,並且計算結果須要通過大部分節點驗證才能證實是有效交易並寫入區塊,我的修改或改變數據不影響整個帳本的交易數據,保證交易的可信和不可篡改。
從經濟層面看,經過這種方式下降了交易成本,實際上不少交易成本就在於信任的創建。淘寶作起來的一個很重要的緣由就是它經過支付寶這個第三方平臺來作背書,解決了電子商務中交易信任的問題。區塊鏈經過保證每筆交易都被記錄、交易數據雙方不能篡改、每筆交易都通過節點共識並可追溯,讓交易可信,不用擔憂反悔或欺詐。
一、區塊鏈技術架構
區塊鏈技術架構能夠分爲如下幾層:
應用層,好比咱們向錢包、客戶端記帳或轉帳。
激勵層,好比怎麼挖礦、怎麼分配比特幣的機制。
共識層,經過POW、權利證實等方式爭取記帳權。
網絡層,區塊鏈主要是經過P2P網絡來保證整個分佈式網絡當中的傳播和驗證機制。
數據層,包括區塊數據怎麼生成、數字簽名、哈希計算、整個鏈式結構的生成、以及非對稱加密。
最核心的是交易的生成,上圖所示是實際的一個區塊的產生過程,每一個區塊都有它的前一個區塊,經過前一個區塊的信息結合當時交易發生的時間戳以及隨機數進行計算,求得一個小於目標難度值的數,經過其餘節點認證,你們承認就生成一個新的區塊哈希值,寫到新的區塊中。每個區塊都是這麼產生的,在整個交易鏈條中環環相扣。由於每一個區塊中都包含上一個區塊的信息,所以它能夠從後往前追溯,同時不可篡改。
上圖是實際發生的一筆交易,塊的高度等都在裏面,可以實現快速檢索是誰算出的隨機數、廣播的是誰、廣播的內容和時間等信息。
而全部用戶都是匿名的,這也是比特幣交易在黑市流行的一個很重要的緣由。
激勵層就是發幣的機制,前面提到任何一筆交易廣播後,全部節點都會去爭搶記帳權,得到記帳權完成記帳後就會有獎勵,比特幣就是經過挖礦獎勵產生。比特幣的總量也不是無窮的,每四年減半。當比特幣所有產生以後,礦工的收益就只有交易費,這也是比特幣不會致使通脹的緣由。
區塊鏈技術中最核心的是共識機制,共識機制是獲取記帳權的憑證。共識機制包括:
POW,工做量證實,即經過算力爭奪記帳權。
POS,權益證實,誰擁有的比特幣越多,得到記帳權的機率就越大。
BFT,拜占庭容錯協議,實際上整個共識機制就解決了所謂的拜占庭將軍問題,少數節點不會影響多數節點的共識。
瞭解一下比特幣的雙花,這是比特幣或者區塊鏈面臨的一個安全問題。仍是剛纔的例子,Alice要給Bob2個比特幣,從Bob那買一千克黃金,Bob答應了,Alice在網上公佈說要跟Bob發生一筆交易:Alice用2個比特幣買Bob的一千克黃金。而Alice具備足夠的算力,網絡公佈以後,你們去計算,算出來以後會生成一個新的區塊放到上面,由於全網確認須要一段時間,在這個過程當中Alice撤銷了,又告訴全網說我要把這2個比特幣給第三我的不給Bob了,而後又在全網廣播,節點收到新的交易消息又開始挖礦,也算出來一個數,這樣的話就會發生分叉,其餘節點在同步帳本的時候就會面臨兩個新的區塊選擇哪個的問題。
區塊鏈裏的機制是選擇長的鏈,因此前面說到須要在5-6個區塊後才能確認交易可靠,節點根據這個長的鏈同步數據,短的鏈就被撤銷掉了,以此來共同來維護這個帳本。解決這個問題咱們須要在確認的時候有一個延時的機制,也就是說當延時必定程度以後再確認,使得它在這個時間當中不可能快速地去建立一個更長的鏈來撤銷這個交易,這是時間也是根據當前整個網絡的算力來估計的。理論上有雙花的可能,但實際上發生的機率很是低。
回顧一下比特幣的交易機制。
首先交易輸出,好比我要從個人錢包裏拿出2個比特幣來進行交易,我要先對這兩個比特幣進行鎖定,再告訴全網我要發起這筆交易,這2個比特幣屬於交易狀態,即在交易中不能再交易,而後用公鑰私鑰進行加密和簽名。
而後是交易輸入,支出方用私鑰簽名和加密,接收方同時用公鑰加密,完成雙重加密後,由礦工打包區塊、節點完成共識,驗證交易後,雙方共同用公鑰和私鑰進行驗證並解密,完成交易。
也就是說整個交易過程當中,首先是對交易帳戶中的餘額即交易的內容作鎖定,雙方肯定以後再解鎖,而後從帳戶里扣除掉想要的交易數和手續費。
二、區塊鏈應用架構體系設計
這是整個區塊鏈的應用架構體系設計圖,咱們能夠根據這樣的思路構建一個應用:
首先是區塊鏈協議,整個帳本怎麼創建、帳本狀態怎麼更新、帳本歷史怎麼證實、帳本當中節點怎麼更新、智能合約指令如何保證智能合約引擎。
其次組件模型是實現這些協議的內容,包括共識網絡、帳本、持久化引擎、合約引擎等。
最上面是服務平臺,包括網關、服務、節點網絡、SDK、工具等。
簡單展開介紹一下。三大塊:
區塊鏈協議,咱們本身開發相應的區塊鏈技術和應用的時候,必定要定義本身的區塊鏈協議,好比帳本怎麼創建、區塊怎麼構建、獎勵怎麼設置、帳本怎麼操做、帳本的數據怎麼更新、怎麼計算等。基於這樣的一個協議,來開發相應的支持帳本和狀態更新、歷史證實、帳本添加等的組件。最後再提供服務平臺。
在協議設計時有3個原則:
面向業務。必定要面向咱們的具體業務,利用區塊鏈的思想解決具體業務中的什麼問題,要解決什麼問題決定了這個帳本應該怎麼設計。
標準化。咱們的業務通常會涉及多個主體,這種狀況下咱們應該儘可能讓區塊鏈協議標準化,解決各個主體之間數據交互的問題。
鬆耦合和模塊化。定義模塊間清晰的接口,實現模塊之間的鬆耦合,以此得到整個系統的擴展性,知足不一樣用戶和場景的須要,採用可插拔的模塊組件。
區塊鏈應用模型設計,包括3步:
定義身份。全部參與這個鏈的節點的身份都要經過某種方式來驗證。
編寫智能合約。帳戶驗證的同時,咱們要使得交易正常進行的話,須要把參與者之間達成的商業協議以智能合約代碼的形式進行定義。智能合約最核心的是提升效率,下降交易的可替代性。以前合約的簽定具備主觀性,容易產生違約的狀況,智能合約是經過代碼的形式統一規則,保證只要知足合同所約定的條件就會自動執行,誰也不能更改。
簽署智能合約。智能合約最後須要通過參與者以各自的身份帳戶作出簽署,以後每一方參與者只須要根據業務範圍內的業務進程作出相應的操做,觸發智能合約執行。
肯定了應用模型後,咱們進行區塊鏈應用帳本協議設計。
帳本協議是從數據的角度定義模型。帳本數據的標準格式:包括帳本狀態、帳戶的歷史證實等。讀寫帳本數據的指令的標準格式:包括帳本操做集、合約指令集。
再來看區塊鏈應用組件模型設計,區塊鏈應用組件模型包括共識網絡、帳本、持久化存儲、合約引擎。
共識網絡包括算法的使用和共識過程兩方面。
共識網絡中共識算法能夠根據整個應用的業務需求來設定,只要知足標準化和具有不可僞造性的條件,能夠經過網絡當中參與的節點證實它全部的權益就能夠。
共識過程包括怎麼證實交易在網絡上擴散;若是發生兩個節點具有一樣能力的狀況,怎麼進行交易排序;在產生交易的時候如何調用交易執行程序;如何對交易結果進行全網共識?如何提交共識結果生成塊?
帳本。帳本狀態和合約分離,使用基於身份的訪問控制協議約束合約對狀態的訪問,這種將數據和邏輯分離的設計模式是典型的貧血模式,可爲上層業務邏輯提供無狀態的邏輯抽象。
持久化存儲。利用成熟的NoSQL數據庫實現持久化存儲。
合約引擎。前端包括合約高級語言規範及其工具鏈;後端提供輕量級合約中間代碼執行環境。
最後來看區塊鏈應用服務層設計。
區塊鏈網關,包括私鑰管理、隱私保護、協議轉換。
區塊節點服務,包括帳號管理、節點進入網絡的認證受權、帳本數據訪問框架、網絡當中整個交易的事件通知機制、智能合約管理等。
區塊鏈共識網絡,由共識節點組成的網絡,基於P2P網絡和共識算法確保交易數據在節點之間保持一致。
工具,配套的工具集合包括SDK、數據管理、安裝部署工具、監控服務。
一、區塊鏈適合解決哪些問題?
**第一類:業務開展須要跨主體合做。**也就是須要不少個單位或業務部門合做而且有不少流程的時候,區塊鏈能夠解決多主體之間的信任問題,提高交易效率。
對於此類問題目前的一種解決方式是:有一箇中心化的節點去協調業務開展,各方存在成本分攤及數據隱私的問題,成本較高,且參與各方不肯意把本身的數據貢獻出來。
另一種是SOA方式,由於要打通各業務方之間的數據,技術比較負責,方案缺乏通用性,只能解決當前特定業務領域的問題,難以支持複雜業務。
以上兩種方式都難以防止數據被篡改。
利用區塊鏈能夠作到:共有數據,經過加密的方式既保證了數據的隱私也能夠作到防篡改,利用分佈式和數字化合約的特色可以將一些業務層面的協調解決問題放在技術層面解決,更高效靈活客觀。
**第二類:對方參與並須要低成本信任。**參與的節點不少,節點之間驗證或構建信任的成本又要比較低。
第二類問題須要多方參與同時又要求低成本信任。
首先要解決數據可信的問題。傳統的方式是數據由中心節點強勢持有,好比傳統的銀行等,數據可信由數據持有者的商業或社會信用來保證,只能創建主觀的可信;區塊鏈結合密碼學哈希和數字簽名,以區塊鏈的形式將數據變動歷史結合,經過共識協議使得參與方共同擁有數據,多方持有相同數據副本,並數據被簽名確認,數據變得可信。
其次是合約履行。經過智能合約的方式,使得整個業務方之間肯定的這種合同協議自動化客觀地執行,只要知足條件,合約就會自動執行,下降履行成本,確保高效履約,通常的契約是過後以人的主觀意願來執行,智能合約是在觸發條件被知足後,由計算機程序來保證合約及時執行,具備客觀性。
最後是歷史可證實。固話交易歷史,並提供對交易歷史的追溯查詢,保證交易的不可篡改和不可抵賴,保留參與交易各方可信的歷史記錄。
第三類:業務存在長週期交易。
第三類問題是業務過程存在長交易、長週期鏈條。最典型的就是供應鏈,業務在多個主題之間流轉,難以肯定間接主體的真實性和有效性,因爲多主體間業務隔離,難以延伸出多級業務。區塊鏈從技術上保證整個長交易、長週期鏈條的各參與主體身份真實,數據可信,實現信用多級傳遞,提高業務效率。
二、區塊鏈應用生態圈
區塊鏈應用最典型的場景是金融,包括跨境支付、保險、政權、股權登記等。
跨境支付方面,目前市場上跨境支付存在中心節點的問題,商業機構之間對帳致使跨境交易時間變長,一筆交易對帳可能須要幾天的時間。
保險理賠方面,之前保險理賠須要準備不少材料通過各類覈實,過程很長。經過智能合約的應用,既無需投保人申請,也無需保險公司批准,只要觸發了理賠條件就能事先自動理賠和支付。整個理賠過程會在區塊鏈上向全網廣播,由於區塊鏈數據不可篡改不可造假的特色,還能大大較低騙保的機率。
政券交易方面,將股權整合進區塊鏈中成爲數字資產,可實現無需經過中介機構直接發起權屬轉移等交易。
票據方面,藉助分佈式高容錯性和非對稱加密算法可實現票據價值的去中心化傳遞,較低對傳統業務模式中票據交易中心的依賴,下降系統中心化帶來的運營和操做風險。
區塊鏈在公共服務領域的應用主要是文化、教育、產權登記、醫療健康等方面。文化方面,主要是版權保護。
三、區塊鏈技術在國內外佈局
四、區塊鏈技術應用解析:共享經濟
接下來舉個典型的應用案例:Airbnb。
Airbnb是一個P2P房屋共享平臺,最大的問題是房主和房客之間的信任。房主會擔憂住進來的這我的不安全,房客去到一個陌生的地方一樣會擔憂這個房子或房東的安全。
快速解決信任問題,目前的方式是用戶註冊帳戶以後要作一個身份驗證,網站會保證全部用戶都是實名的。房客會經過線上交流的方式對房東和房子的狀況作一些瞭解,同時房東也會對房客進行考察,這我的的信用怎麼樣、有沒有租過房子、什麼背景、要不要租房子給他等等。這個過程會很長,由於這是個全球化的平臺,還涉及到時區的問題,一個交易有時候可能會須要20-30小時來確認。確認後預約交易最後互評,整個過程很是長。
這種方式存在的痛點包括:房主和顧客交流耗費大量時間;評價房主、顧客和房屋存在困難,會有相似刷單的行爲;支付和擔保速度慢。
區塊鏈技術偏偏是針對解決信任問題,信任問題解決後全部痛點也將迎刃而解。好比快速在房東和顧客之間創建信任,就能夠縮短交流時間,甚至能夠不用交流。入住就將錢打給房東也就解決了支付和擔保的問題。
**信任怎麼創建呢?**經過區塊鏈的方式每個交易都在區塊鏈的網絡中進行,全部人均可以看到交易的整個過程,顧客身份信息的提交通過匿名化的加密處理,經過簽名來保證帳戶信息的有效性,預約的時候經過加密機制保證預約的安全,驗證預約可信後整個交易會讓網絡中的全部節點知曉,信用也會在交易中體現並記錄,取消或僞造交易的做惡行爲一樣也會被記錄在網絡中,成爲下次交易的判斷依據。
同時會有一個智能合約,觸發入住條件後自動將錢打給房東。最後評價機制設置上經過區塊鏈的方式保證評價的可追溯、不可篡改和不可僞造。
從三個方面解決整個交易的信任問題,同時也提高了交易效率。
五、區塊鏈應用解析:供應鏈
物流供應鏈中存在兩個比較明顯的痛點:信息不透明、不流暢,交易效率低;糾紛處置難,舉證追責難。
咱們經過區塊鏈技術保證整個物流的每一個環節都生成一個塊,造成每一步均可溯源的鏈。解決思路是:
首先各方交易數據公開透明,加快信息流提高效率;
其次交易數據不可篡改,便於舉證和追責;
最後交易數據可追溯,杜絕虛假交易和假冒僞劣。
區塊鏈在供應鏈的兩個應用場景:物流和溯源防僞
物流方面主要是:利用數字簽名機制保證沒法僞造簽名,防止貨物丟失冒領;經過真實身份證生成數字化身份證,既能保護我的隱私,又能落實實名制度;簡化物流流程。
溯源防僞方面主要是:數據完整性和不可篡改;商品交易全流程記錄;貴重物品的防僞溯源。
內容來源:HiBlock區塊鏈線下沙龍西安站 趙建強老師的分享《區塊鏈總體架構及應用案例分析》
本文編輯:Cynthia
HiBlock區塊鏈社區線下沙龍西安站視頻回放:http://www.itdks.com/eventlist/detail/2090
HiBlock區塊鏈社區線下沙龍下一期時間:5月27日
如下是咱們的社區介紹,歡迎加入各類合做、交流、學習)