[轉載] 區塊鏈開源技術調研

區塊鏈開源技術調研

這篇文章說原創吧,是我寫的;說不是原創吧,通篇沒幾個是自己的觀點。還是標明轉載好了,原創不足 10% 的原創,丟不起啊。

本篇文章以調研爲目的,主要目的是梳理區塊鏈入門的知識點,以及相關區塊鏈開源技術整理,拋磚引玉,爲進一步的區塊鏈開源技術使用以及實現做鋪墊。

由於是初學者,個人見解就不獻醜了,文章大部分都是摘要關鍵點信息(自認爲),詳細信息請點擊鏈接,尷尬而不失禮貌的微笑

思維導圖

思維導圖)

一、基本闡述

區塊鏈釋義

區塊鏈技術(Blockchain technology)是指通過去中心化和去信任中介的方式集體維護一個可靠數據庫的技術方案。本質上是解決信任問題、降低信任成本的技術方案,通過基於計算機加密技術的無可替代的信用憑證,從原本信任足夠信用度的單獨個體(中心)到信、任一堆個體,從而極大地降低了信任成本,核心目的也就是去中心化,去信用中介。

區塊鏈操作例子:比特幣

以比特幣交易爲例來看看區塊鏈具體是如何操作的:
1. 把每筆交易在全網廣播。讓全網承認有效,必須廣播給每個節點。
2. 礦工節點接收到交易信息後,都要拿出賬簿本記載該次交易。一旦記錄,就不可撤銷,不能隨意銷燬。
- 礦工節點是通過電腦運行的比特幣軟件對交易的進行確認的。
- 爲了鼓勵礦工的服務,對於其所記錄和確認的交易,系統爲礦工提供25個比特幣作爲獎勵。(這個獎勵數量,系統設定每4年減半)
- 獎勵只有一份,哪個節點記錄快就獎勵給哪個節點。爲了減少這種情況,系統會出一道十分鐘的使用哈希散列(Hash)算法運算題,誰能最快解出值,誰就將獲得記錄入賬權利,並贏得獎勵。
3. 獲得記賬權的礦工將向全網廣播該筆交易,賬簿公開,其他礦工將覈對確認這些賬目。交易達到某個確認數以上就成功記錄在案了。礦工記錄的時候,還會將該筆交易蓋上時間戳,形成一個完整時間鏈。
4. 當其它礦工對賬簿記錄都確認無誤後,該記錄就確認合法,礦工們就進入了下一輪記賬權爭奪戰。
- 若兩個人同時上傳,雖然這個概率很小,但是若發生,我們就看最後的區塊鏈哪條更長,短的那條就失效。這就是區塊鏈中的「雙花問題」(同一筆錢花兩次),具體見標題【雙花問題和共識進攻】
- 對於要製作虛假交易,除非你說服了全網裏超過51%的礦工都更改某一筆賬目,否則你的篡改都是無效的。網絡中參與人數越多,實現造假可能性越低。這也是集體維護和監督的優越性,僞造成本最大化。

礦工的每個記錄,就是一個區塊(block),會蓋上時間戳,每個新產生的區塊嚴格按照時間線形順序推進,形成不可逆的鏈條(chain),所以叫做區塊鏈(Blockchain)。而且每個區塊都含有其上一個區塊的哈希值,確保區塊按照時間順序連接的同時沒有被篡改。

區塊鏈示意圖

區塊鏈示意圖02

這時候我們再看對區塊鏈的原始定義就能理解了:區塊鏈是一種分佈式數據庫,是一串使用密碼學方法相關聯產生的數據塊,每個數據塊都包含了一次網絡交易信息,用於驗證其信息的有效性和生成下一個區塊。

核心內容

  1. 分佈式去中心化:區塊鏈中每個節點和礦工都必須遵循同一記賬交易規則,而這個規則是基於密碼算法而不是信用,同時每筆交易需要網絡內其他用戶的批准,所以不需要一套第三方中介結構或信任機構背書。在傳統的中心化網絡中,對一箇中心節點(比如說,支付中介第三方)實行有效攻擊即可 破壞整個系統,而在一個去中心化的,比如說區塊鏈網絡中,攻擊單獨一個節點是無法控制或破壞整個網絡的,掌握網內50%的節點只是獲得控制權的開始而已。
  2. 無須信任系統:區塊鏈網絡中,通過算法的自我約束,任何惡意欺騙系統的行爲都會 遭到其他節點的排斥和抑制,因此,區塊鏈系統不依賴中央權威機構支撐和信用背書。傳統的信用背書網絡系統中,參與人需要對於中央機構足夠信任,隨着參與網絡人數增加,系統的安全性下降。和傳統情況相反,區塊鏈網絡中,參與人不需要對任何人 信任,但隨着參與節點增加,系統的安全性反而增加,同時數據內容可以做到完全公 開。
  3. 不可篡改和加密安全性:指解決數據的高安全性和高可靠性問題,區塊鏈採取單向哈希算法,同時每個新產生的區塊嚴格按照時間線形順序推進,時間的不可逆性導致任何試圖入侵篡改區塊鏈內數據 信息的行爲都很容易被追溯,導致被其他節點的排斥,從而可以限制相關不法行爲。

主要參考資料

本部分內容主要摘自文章【區塊鏈之菜鳥入門】親,你淘的區塊鏈到了!,文章以詼諧的漫畫方式闡述了區塊鏈簡單的一些概念以及原理,大家可以點擊查看,圖文結合更清晰些

二、公有鏈、私有鏈、聯盟鏈

  1. 公有鏈是任何節點都是向任何人開放的,每個人都可以參與到這個區塊鏈中參與計算,而且任何人都可以下載獲得完整區塊鏈數據(全部賬本)。
  2. 私有鏈是有些區塊鏈的應用場景,並不希望這個系統任何人都可以參與,任何人都可以查看所有數據,只有被許可的節點纔可以參與並且查看所有數據。這種區塊鏈結構我們稱爲私有鏈。
  3. 聯盟鏈是指參與每個節點的權限都完全對等,大家在不需要完全互信的情況下就可以實現數據的可信交換,R3組成的銀行區塊鏈聯盟要構建的就是典型的聯盟鏈。

三、智能合約

個人見解,可以簡單理解爲使用計算機語言描述並取代紙質合同,並由計算系統自動執行該合同。

圖 出自德勤報告Blockchain: Enigma. Paradox. Opportunity

  1. 多方之間的定期交付合同被以代碼的形式寫入區塊鏈。其中的個體是匿名的,但合同記錄在公共賬本中。
  2. 當扳機事件觸發時,比如到期、執行價格達到,合約按照編程的條款自動執行。
  3. 監管者可以通過這個區塊鏈瞭解市場上的活動,同時維護個體成員的隱私。

舉個例子

Bob是接受數字貨幣支付的線上商家,Alice是使用數字貨幣進行支付的購物者,智能合約可以在去信任的情況下使Bob的商品與Alice的數字貨幣實現交換。Alice可以創建一個智能合約,將這樣一段代碼寫入區塊鏈:「如果我在24小時內收到這一商品,則我會將這筆數字貨幣發到寄件人的收款地址,並將這個商品寄給我的創建者,否則我將會將這筆數字貨幣發回給我的創建者」。
智能合約中的資產和資金沒有擁有者(Owner),在這個例子中,當Alice把這筆數字貨幣加入智能合約,就無法通過修改這個合約把這筆數字貨幣拿回來,只能等待交易成功並收到Bob寄出的商品,或者24小時後交易沒有成功,再收到自己的數字貨幣。

主要參考資料

【區塊鏈之菜鳥入門】來來來,這篇科普告訴你「區塊鏈」到底是個啥?

【區塊鏈之技術進階】讓這篇技術貼告訴你區塊鏈是怎麼運行的

四、共識機制

共識機制是區塊鏈技術的關鍵點。共識機制的核心是在分佈式網絡中,利用一種規則(算法)來保證全網對於Block的創建是一致的,下面是主要的共識算法。

pow(proof of work ) 工作量證明機制

比特幣工作原理

比特幣採用的pow工作量證明機制,即按照做工作量的多少來獲得獎勵。這一點帶來的弊端是算力很容易集中化。

比特幣的交易機制是十分鐘產生一個區塊,意思就是每隔十分鐘計算機就打包全網交易進入一個區塊。而礦工就是在打包遊戲中爭奪區塊鏈記賬權的人,誰能最快準狠解開SHA256這個數學命題的值,誰就贏得了這個十分鐘區塊的打包記賬權。而這十分鐘裏的每一筆交易,都會被蓋上一個 timestamp —時戳

具體步驟:

  1. 廣播比特幣網絡中的每一筆交易,使每個參與者(指礦工)都記錄下這筆交易。
  2. 每個參與者接收到交易信息後,都要將該筆交易蓋上時戳,收入區塊。
  3. 由於每個礦工都做了工作,誰贏了獲得獎勵呢?此時參與者們要通過一個計算遊戲,誰能最快解出SHA256運算的值,誰就將贏得打包區塊的權利,並獲得系統的25歌比特幣獎勵。這個數量的設定是每四年減半。
  4. 獲得記賬權的礦工將向全網廣播這十分鐘內區蓋了時戳的交易,其他參與者將覈對這些賬目。
  5. 當其他參與者都確認無誤後,該區塊就確認合法,就進入了下一輪的區塊爭奪戰。多個區塊逐漸形成區塊鏈。

pos(proof of stake)權益證明機制

忘記在哪裏看到具體描述了,個人理解爲是減少記賬人數(權益證明)的方式來降低工作量證明機制帶來的資源損耗,屬於工作量證明機制的升級版,具體的後續補充下吧

另一種解釋版本是這個:Pow的一種升級共識機制;根據每個節點所佔代幣的比例和時間;等比例的降低挖礦難度,從而加快找隨機數的速度。

DPos 股份授權證明機制

類似於董事會投票,持幣者投出一定數量的節點,代理他們進行驗證和記賬。

Pool 驗證池

由布比構建,基於傳統的分佈式一致性技術,加上數據驗證機制;是目前行業鏈大範圍在使用的共識機制

PoET 消逝時間量證明

全稱 Proof ofElapsed Time,它是由英特爾構建在可信執行環境的一種**協議。

QuorumVoting

屬於Quorum拜占庭協議,仲裁投票算法,它採用了瑞波和恆星的共識協議,用來解決需立即交易定局的需求。

Casper

以太坊社區提出的正在研發中的類POS共識協議。Casper的基本思路是,任何人抵押足夠多的以太幣到系統中就可以成爲礦工參與到挖礦過程。共識算法要求所有的礦工誠實工作,如果一個礦工有意破壞,不遵守協議,系統就會對礦工做出懲罰:沒收之前抵押的以太幣。有人把Casper這樣的挖礦機制稱爲「虛擬挖礦」。

PBFT 算法

全稱 PracticalByzantine Fault Tolerance,拜占庭容錯算法,屬於狀態機拜占庭協議,IBM HyperLedger fabric實現和推薦的共識算法,採取一個節點一票的方案確定記賬結果,少數服從多數投票,性能較好,主要用於聯盟鏈。

主要參考資料

【區塊鏈之技術進階】扒一扒某乎上面對於區塊鏈的理解(一)

區塊鏈主流開源技術體系介紹

五、雙花問題和共識進攻

上面提到過,區塊鏈的每個區塊頭都會進行SHA256哈希加密,生成一個哈希值,通過這個值,我們可以在區塊鏈中識別出特定區塊,並且每個區塊頭都還包含它的父區塊的哈希值。

區塊鏈示意圖02

每一個子區塊都只有一個父區塊,但一個父區塊可以暫時擁有很多子區塊,這種情況被稱爲區塊鏈分叉。這種只有當不同的礦工在同一時刻發現不同的區塊時纔會發生。這時解決的方法就是,每一個節點總是選擇並嘗試延長擁有最大工作量證明(最長或者最大難度)的區塊鏈。

舉個例子:我們現在有一個區塊鏈-藍

雙花問題01

位於X地區的礦工與位於Y地區的礦工同時發現了兩個區塊。
我們假設:
- 礦工熊貓君A發現區塊-紅,
- 礦工兔子君B發現區塊-綠。

當熊貓君A,兔子君B節點分別在比特幣網絡廣播的時候,部分節點會先收到熊貓君A的廣播,部分會先收到兔子君B的廣播,然後分爲兩派陣營的節點會分別開始以他們接收到的區塊作爲父區塊,進行深一步的挖礦活動。(這裏節點的地理意義指的是網絡拓撲上的位置,而非真實的地理位置。)

雙花問題02

就在大家如火如荼地緊張解題的關鍵時刻,一個接收到兔子君B所廣播的節點的兔子君C,優先發現了下一個區塊-粉,也就是說綠色陣營的小兔子們的區塊鏈可以進行下一步延伸,就會比紅色陣營的小熊貓們的長度長,紅色陣營小熊貓遺憾出局。這樣的話分叉問題就得到了解決。

雙花問題03

雙花問題04

這裏我們需要提到一個名詞,「共識攻擊」。一個很著名的場景就是「51%攻擊」。如果一羣礦工擁有了全網51%的算力,那麼只要他們聯合起來就可以打擊整個比特幣網絡。他們可以認爲地去製造一個分叉的區塊鏈實現雙重支付,拿我們上文的例子舉例,攻擊者在區塊-紅中進行過了交易,結果他強行製造出區塊-綠,並且區塊-綠中將原本的交易替換成另一筆交易(把原本應該給賣家的錢打入自己同夥的錢包中),然後在區塊綠的基礎上再計算一個區塊-粉,這樣包含僞造的區塊的區塊鏈就比包含真實交易的區塊紅高出一個高度,此時,包含雙重支付的惡意區塊鏈將取代真實區塊鏈,從而實現詐騙。51%的概念並不是說攻擊者需要全網51%的算力才能進行攻擊,理論上來說不到51%也是可以實現攻擊的,我們只是說擁有超過51%的算力的攻擊幾乎我們就可以判定它一定會成功。

主要參考資料

【區塊鏈之技術進階】扒一扒某乎上面對於區塊鏈的理解(二)

六、區塊鏈技術的風險

下述文章講解的非常精煉了,我就不做搬運工了,大夥自個兒點擊鏈接查看吧,這裏貼出他的思維導圖

【區塊鏈之技術進階】Attention please!區塊鏈技術的風險!

區塊鏈技術的風險

七、區塊鏈開源項目

不知道怎麼描述,在這裏也不做搬運工了,大夥自個兒點開鏈接看看,文章內包含開源項目的地址鏈接。下次專門寫個文章從技術角度詳細描述下主流開源項目的簡單使用與實現。

【區塊鏈之技術實戰】區塊鏈開源項目合集:Hello,BlockChain!

【區塊鏈主流開源技術體系介紹

文章提到的開源項目有:
比特幣體系

以太坊ETH

BitShares —— 點對點的多態數字資產交易系統

公證通Factom

瑞波Ripple - 世界上第一個開放的支付網絡,引入了一個共識機制RPCA

未來幣NXT - 第二代去中心化虛擬貨幣,100%的股權證明POS算法

Hyperledger Fabric

Bletchley —— 微軟開源區塊鏈平臺項目

Openchain —— 分佈式總賬區塊鏈工具

IBM-Blockchain-marbles - IBM 本家基於bluemix雲平臺的推薦方案,與bluemix綁定

openchain

HydraChain - 基於以太坊平臺的私有鏈技術

myblockchain - 類SQL方式的Blockchain

MultiChain - 一個構建私有區塊鏈的僞開源平臺

Eris - 帶智能合約的區塊鏈構建方案

blockstrap - html5框架的區塊鏈應用