你看那個區塊鏈,像不像我借你的二百元?

最近這幾天區塊鏈又粉墨登場了,新聞媒體也一直在大量報道,宣稱可能要在金融界掀起一番浪潮。甚至有人說好久以前中國就出現了區塊鏈的產物——麻將。那麼區塊鏈究竟是什麼,麻將和區塊鏈又有什麼關係呢?算法

筆者這兩天也閱讀了相關文獻和資料,下圖是我學習的一個路徑,本文也是按照本身瞭解區塊鏈的路徑作的一些總結,篇幅較長,寫這篇文章的目的也是但願能簡單地向對區塊鏈技術不瞭解可是想知道區塊鏈是什麼的人介紹區塊鏈技術,由於本身在區塊鏈方面也是一個小白,若是有錯誤的地方,還望各位留言指正。編程

區塊鏈 -> 比特幣

首先咱們得先知道,區塊鏈和比特幣之間並不等同,若是要論輩分,區塊鏈應該是比特幣的爸爸,爲何這麼說呢?咱們先來了解下區塊鏈是什麼,以及區塊鏈是用來幹嗎的。安全

什麼是區塊鏈?區塊鏈是作什麼的?

一提到區塊鏈,相信不少人都會想到什麼去中心化、分佈式、不可篡改之類的名詞。說實話我剛開始因爲姿式水平不夠看到這些名詞的時候也是一頭霧水,《區塊鏈技術發展示狀與展望》一文給出以下定義:服務器

狹義來說,區塊鏈是一種按照時間順序將數據區塊以鏈條的方式組合成特定數據結構, 並以密碼學方式保證的不可篡改和不可僞造的去中心化共享總帳(Decentralized shared ledger),可以安全存儲簡單的、有前後關係的、能在系統內驗證的數據。微信

廣義的區塊鏈技術則是利用加密鏈式區塊結構來驗證與存儲數據、利用分佈式節點共識算法來生成和更新數據、利用自動化腳本代碼(智能合約)來編程和操做數據的一種全新的去中心化基礎架構與分佈式計算範式。網絡

上面的文字畢竟太過學院派了,若是用一句話來歸納,區塊鏈其實就是一種數據結構(棧和隊列也是一種數據結構),既然他是一種數據結構,那區塊鏈的做用天然也就不言而喻了:組織並存儲數據。剩下的一些定語如「去中心化」、「分佈式」這些無非就是對這種數據結構的修飾罷了。比特幣就是應用這種技術製做的數字貨幣。數據結構

區塊+鏈=區塊鏈?

既然他和棧同樣是一種數據結構,那咱們總得知道這個數據結構長什麼樣子吧。咱們把區塊鏈拆分紅**「區塊」「鏈」**就會明白區塊鏈長什麼樣子了。架構

區塊

上圖是一個**區塊(Block)**示意圖,每一個區塊包含兩個部分:分佈式

  • 區塊頭(Block Header):記錄當前區塊的特徵值(裏面存放的內容咱們稍後再說)學習

  • 區塊體(Block Body):存放的數據

因此,區塊就是一種存放數據的東西,能夠近似的理解爲鏈表中的節點。

把許多上圖那樣的區塊鏈接在一塊兒就造成了區塊鏈,以下圖所示:

想要造成一個鏈,那總得有頭吧,鏈頭的區塊學名叫作創世區塊(Genesis Block)。前一個區塊稱爲後一個區塊的父區塊,反之則稱爲子區塊。 因此,其實區塊鏈就長上面那樣,沒什麼神祕的。

這時我想確定會有人問了,你說把區塊鏈接在一塊兒他們就能鏈接在一塊兒了嗎?他們之間是怎麼鏈接的呢?

如何連接

這裏我也不賣關子了,子區塊與父區塊是經過父區塊的 哈希(Hash) 值創建連接的。這裏又引入一個新的概念,什麼是哈希呢?

所謂「哈希」就是計算機能夠對任意內容,計算出一個長度相同的特徵值。區塊鏈的哈希長度是256位,這就是說,無論原始內容是什麼,最後都會計算出一個256位的二進制數字。並且能夠保證,**只要原始內容不一樣,對應的哈希必定是不一樣的。**所以咱們能夠獲得兩個推論:

  • 推論1:每一個區塊的哈希都是不同的,能夠經過哈希惟一標識區塊。
  • 推論2:若是區塊的內容變了,它的哈希必定會改變。

因此咱們只須要在每一個區塊的區塊頭存放上個區塊的哈希值便可。就是下圖紅線標註的地方。

WX20191029-154534@2x

至於如何計算出這個哈希值,不一樣的區塊鏈有不一樣的計算方法,這裏很少說。

下面這篇文章介紹了比特幣是如何計算Block Hash的,有興趣的能夠閱讀了解下。👇

www.jianshu.com/p/4187a7352…

爲何須要區塊鏈?

看了上面的內容後相信你應該就明白什麼是區塊鏈了。可是確定就會有人說,說到底這不就是鏈表嗎,爲何國家還要大力發展區塊鏈產業,甚至上升到了到戰略層面呢?

的確,區塊鏈的技術原理並不複雜,可是他的『社會意義』倒是巨大的。

區塊鏈本質上是一種解決信任問題、下降信任成本的技術方案,其目的就是爲了去中心化

好了,這裏又出現了一個新的概念,去中心化?這個名詞只要一提到區塊鏈就必定會被提到,因此你必定想知道去中心化究竟是什麼。不急,在談去中心化以前,咱們先談一下另外一個詞——信任

信任

對於信任一詞,維基百科給出的定義以下:

可能你仍是不太能理解,咱們再來舉個很常見的例子:

近視的人想要摘下眼鏡通常都須要作手術,可是你不清楚這個手術作了以後是否真的能夠恢復視力,因此你去找專家,這個專家是全國很是有名的眼科醫生,他告訴你這個手術作完是能夠恢復視力的,因此你就去作手術了。

還有一種狀況是,你在作手術以前問了以前作過這個手術的親戚朋友,他們都說這個手術作完以後能夠恢復到正常視力,你以爲他們都成功了,因此你就去作手術了。

但若是一個小診所的醫生告訴你,咱們診所也能夠幫你作這個手術,作完也能幫你恢復視力,你會信嗎?我想你可能就要好好考慮下了。

這就是所謂的信任的力量。你不會信任一個沒有足夠信用度的單獨個體,但你會信任一堆個體或者有足夠信用度的單獨個體

在金融領域,咱們日常能接觸到的銀行就是這個有足夠信用度的個體(中心)

去中心化

仔細想一下上面那個例子,爲何咱們會相信眼科專家而不相信小診所的醫生,由於相較於小診所的醫生,眼科專家有更多的信用成本,因此咱們每每要爲眼科專家付更多的費用。

對於銀行來講,做爲信用中介也是須要成本的,而咱們普通大衆就要爲這龐大的信用成本買單。因此纔會造就金融業是最賺錢的行業。

因此若是想要去除銀行類等中心機構的信用背書? 那就能夠用咱們上面提到過的**「一堆個體」**,這也是區塊鏈技術的核心——去中心化

用一句很是洗腦的廣告語來描述去中心化就是:沒有中間商賺差價

如何實現去中心化——分佈式帳本

咱們先來創建一個去中心化的系統,爲了方便理解,咱們來看一個簡單的去中心化借貸模型:若是A借了B 100塊錢,這個時候,A在人羣中大喊「我是A,我借給了B 100塊錢!」,B也在人羣中大喊「我是B,A借給了我100塊錢!」,此時路人甲乙丙丁都聽到了這些消息,所以全部人都在心中默默記下了「A借給了B100塊錢」。你看,這個時候一個去中心化的系統就創建起來了,這個系統中不須要銀行,也不須要借貸協議和收據,嚴格來講,甚至不須要人與人長久的信任關係(好比B忽然又改口說「我不欠A錢!」,這個時候人民羣衆就會站出來講「不對,個人小本本上記錄了你某天借了A100塊錢!」)。

上述例子中A君、B君和路人甲乙丙丁每一個人的小本本上都有 A 借給 B 100塊錢這條記錄了,那些小本本就是這個去中心化系統中的分佈式帳本

那若是發生了不少次交易呢?很簡單,那就在小本本上面再添加一條記錄就能夠了啊。

長此以往,這個小本本上面就會有不少交易記錄了,有沒有讓你想到什麼東西?不錯,就是區塊鏈,一條記錄就是一個區塊,這個小本本就是一個區塊鏈。看到這裏你應該就能夠理解爲何提到區塊鏈就會提到分佈式帳本了吧。

如何操做區塊鏈?

上文說過比特幣就是應用區塊鏈技術製做的數字貨幣,這裏的話咱們就以比特幣交易爲例來看看區塊鏈具體是如何操做的。再介紹流程前,咱們先來了解一個概念:節點/礦工

什麼是節點?在上個例子中,路人甲乙丙丁都有一個小帳本用於記帳,每一個記帳的都是一個節點,外號礦工

操做流程

1. 挖礦

什麼是挖礦?每增長一筆交易,即造成一個區塊的過程,就是所謂的挖礦

2. 廣播

若是咱們想要新增一筆交易(也就是在區塊鏈中新增一個區塊),咱們須要廣播到整個區塊鏈網絡中,讓全部的節點都認可這條記錄 。那麼應該如何實現廣播的呢?

區塊鏈的廣播機制

下圖畫出了區塊鏈廣播機制的一個流程:

  1. 節點A收到一個區塊,對其進行驗證並將其廣播給其附近的區塊;
  2. 節點B收到inv消息後,若是他以前沒有接收過這個區塊,則向節點A發送一個getdata消息;
  3. 節點A收到getdata消息後,就會把區塊和交際記錄的具體信息發送給節點B。
  4. 此時節點B也就收到了一個區塊,重複一、二、3操做給其附近的區塊的。

3. 記錄

一旦A節點新增一條記錄並廣播到網絡中,網絡中的其餘節點如B、C、D等都會在本身的小本本上新增這條記錄。一旦記錄,以後就不可撤銷,且不能隨意銷燬。爲何不可修改呢?

區塊鏈的不可修改

這裏就引出了一個區塊鏈的特性——不可修改。之因此沒有在前面介紹區塊鏈的時候介紹這個特性就是想結合上面的例子來講。試想一下若是有人想修改的其中一條記錄,就得先修改本身的這個帳本上的這條記錄以及這條記錄後的全部記錄,而後還得按照一樣的方式修改別人的帳本。這個難度是可想而知的。

區塊鏈的激勵機制

這一節會介紹下區塊鏈的激勵機制,由於比特幣已經十分紅熟,這裏會以比特幣做爲例子講解。

爲何要挖礦?

整個系統看似很和諧,可是有一個問題不可避免,「憑啥你讓我記帳我就記帳?個人小本本不要錢麼?」

以比特幣舉例,礦工會把每十分鐘(這是比特幣系統規定的)產生的交易打包到一個區塊之中,一旦生成區塊成功,礦工就會收到兩種形式的獎勵,也就是出塊獎勵手續費,獎勵過程是程序自動完成的。

出塊獎勵

爲了鼓勵礦工的服務,對於其所記錄和確認的交易,系統爲礦工提供25個比特幣做爲獎勵。(這個獎勵數量,系統設定每4年減半)

手續費

交易雙方爲了交易被區塊鏈儘早記錄會提供給礦工一筆交易費用做爲激勵。

誰來發行貨幣?

既然我能夠收到比特幣獎勵,那貨幣到底是怎麼發行出來的?出塊獎勵是系統生成新幣的惟一方式。比特幣是經過挖礦來生成並進入流通的,這個過程要消耗不少電力和硬件資源,跟採金礦很相似。生產貨幣的過程伴隨着記帳和出塊的過程,這就是爲什麼比特幣的記帳過程被叫作挖礦了。你們都會爭着去生成區塊,由於只有最快的人才最有可能得到生產這個區塊的權力,也才能獲得經濟激勵。

誰能夠收到獎勵?

既然咱們知道了挖礦是爲了獲取獎勵、也知道了獎勵是從哪來的,這時候就會有新的問題了,獎勵到哪去?

由於沒有中心分配獎勵,並且每一個礦工都會新增一個區塊,那獎勵該怎麼給?難不成每人一份?答案固然是no!

獎勵只有一份,想要肯定獎勵對象(即記帳權歸屬的問題),這就要涉及區塊鏈中另外一個概念了——共識機制

共識機制

共識機制是區塊鏈網絡最核心的祕密。簡單來講,共識機制是區塊鏈節點就區塊信息達成全網一致共識的機制,能夠保證最新區塊被準確添加至區塊鏈、節點存儲的區塊鏈信息一致不分叉甚至能夠抵禦惡意攻擊。實踐中要達到這樣的效果須要知足兩方面條件:一是選擇一個獨特的節點來產生一個區塊,二是使分佈式數據記錄不可逆。

上圖爲當前主流的共識機制,主要包括:工做量證實/POW(Proof of Work)、權益證實/POS(Proof of Stake)、工做量證實與權益證實混合(POS+POW)、股份受權證實/DPOS(Delegated Proof-of-Stake)、實用拜占庭容錯(PBFT)、瑞波共識協議等。其中比特幣使用的是工做量證實機制

POW機制

這裏簡單說下POW機制的工做流程:

  1. 節點監聽全網數據記錄,經過基本合法性驗證的數據記錄將進行暫存;

  2. 節點消耗自身算力嘗試不一樣的隨機數(nonce),進行指定的哈希計算,並不斷重複該過程直到找到合理的隨機數,這一過程也被稱爲「挖礦」;

  3. 找到合理的隨機數後,生成區塊信息(塊頭+塊身);

  4. 節點對外部廣播出新產生的區塊,其餘節點驗證經過後,鏈接至區塊鏈中,主鏈高度加一,而後全部節點切換至新區塊後繼續進行下一輪挖礦。

儘管工做量證實機制解決了記帳權歸屬問題,可是上面的描述實在是太複雜了,咱們能夠簡單的理解爲誰記錄的快誰就能夠得到獎勵

記錄的速度同樣快怎麼辦?

由於整個系統是分佈式的,因此有不少機率會出現同樣快的狀況,因此爲了保證節點之間的同步,新區塊的添加速度不能太快。試想一下,你剛剛同步了一個區塊,準備基於它生成下一個區塊,但這時別的節點又有新區塊生成,你不得不放棄作了一半的計算,再次去同步。由於每一個區塊的後面,只能跟着一個區塊,你永遠只能在最新區塊的後面,生成下一個區塊。因此,你別無選擇,一聽到信號,就必須馬上同步。

所以,區塊鏈的發明者中本聰(這是假名,真實身份至今未知)故意讓添加新區塊,變得很困難。他的設計是,平均每10分鐘,全網才能生成一個新區塊,一小時也就六個。

這種產出速度不是經過命令達成的,而是故意設置了海量的計算。也就是說,只有經過極其大量的計算,才能獲得當前區塊的有效哈希,從而把新區塊添加到區塊鏈。因爲計算量太大,因此快不起來。

若兩我的同時上傳,雖然這個機率很小,可是若發生,咱們就看最後的區塊鏈哪條更長,短的那條就失效。這就是區塊鏈中的**「雙花問題」**(同一筆錢花兩次)。

若是想造假怎麼辦?

如何判斷交易是否真實?咱們遵循的是少數服從多數原則,對於要製做虛假交易,除非你說服了整個網絡中超過51%的礦工都更改某一筆帳目,不然你的篡改都是無效的。 網絡中參與人數越多,實現造假可能性越低。

這也是集體維護和監督的優越性,僞形成本最大化。說服51%的人造假仍是灰常灰常難的。這就是常常提到的51%攻擊

腦洞忽然大開,咱們每一個人的記憶不就是個區塊鏈,分佈記帳法的模式嗎。 若是有件事情發生了,有51%以上的人記住了寫在本身的腦子裏,那這件事情就真的發生了,成爲了記憶。相反,若是隻有少數的人看到了這件事情的發生,就算髮生了也可能會被當成沒發生吧。

爲何比特幣成功了?其餘山寨幣失敗了?

過去幾年比特幣網絡的算力悄無聲息的增加到了無比之大,這大大增長了比特幣成功的可能性。反之也能夠解釋爲何山寨幣不靠譜,太容易被51%攻擊。在依賴密碼學的數字貨幣領域,先發優秀是很是明顯的。因此51%攻擊對於比特幣來講並非一個什麼大問題(早在2013年7月,比特幣全網算力已經達到世界前500強超級計算機算力之和的20倍),即便有政府集全國之力祕密造出一臺超級計算機,用來擊潰比特幣來挽救本身的貨幣發行體系,它會發現使用該能力進行挖礦即可壟斷比特幣的發行權,其收益遠大於擊潰比特幣,動機也就不復存在了。

比特幣是有限的嗎?發行結束了怎麼辦?

比特幣是一個無通脹的貨幣,發行是有上限的。系統規定,比特幣的出塊獎勵每四年會減半,到2140年,比特幣發行總量到達2100萬以後,就不會有出塊獎勵了,手續費會成爲惟一的獎勵形式。不少人擔憂比特幣完成了2100萬的發行量以後,單純靠手續費不足以彌補礦工的挖礦支出,這會給比特幣帶來危機。實際中真的會這樣的嗎?

首先,出塊獎勵消失的過程是很是緩慢的。每四年減半一次,2020年會減半到6.75個,到一百多年後的2140年纔會真的消失。社區有幾十年的時間去逐步適應這個問題,不會一會兒形成巨大的網絡震盪。其次比特幣的持有者也會由於期待比特幣升值,會很是有動力的去推廣比特幣,而後不斷產生手續費,不斷產生收益。

一個有趣的例子

其實上面就是挖礦的流程和一些問題整理了,我以前在網上看到一個有關比特幣挖礦的很是有趣的例子,在這裏分享出來:

單身汪們要找女票,國民岳母說我有好多女兒,這樣吧我給大家出點題目,解出一個就給其中一個姑娘的微信號。

單身汪們瘋狂競爭,想破腦殼去解題。只要其中一隻汪解出一道題,就立馬得意洋洋地昭告天下,示威所有單身汪,這個姑娘是個人啦,大家放棄吧。其餘單身汪們即便不服也沒有辦法,惆悵懊惱也不是個事兒啊,仍是麻溜地立馬去解下一道題目吧。這隻喜贏姑娘的幸運小汪被岳母承認後還能獲得25個貨幣單位的彩禮,簡直人生贏家。

麻將和區塊鏈

看了這麼多,想必你也已經有些累了,不妨讓咱們回到文章開頭的問題,麻將到底和區塊鏈又有什麼關係呢?

麻將是中國傳統的區塊鏈項目。他擁有如下幾個特徵:

  1. 去中心化。不像鬥牛閒家只能贏莊家的錢,麻將誰的牌都能胡。

  2. 比賽挖礦。四個礦工一桌,最早正確組合出13張牌的礦工將得到獎勵。

  3. 不可篡改。打錯了牌毫不能反悔,其餘人指定不一樣意。

  4. 公開透明。都是桌上現金交易,沒有暗箱操做。

最後

最後咱們總結下,區塊鏈主要有如下核心內容:

1. 去中心化

這是區塊鏈顛覆性特色,不存在任何中心機構和中心服務器,全部交易都發生在每一個人電腦或手機上安裝的客戶端應用程序中。

實現點對點直接交互,既節約資源,使交易自主化、簡易化,又排除被中心化代理控制的風險。

2. 開放性

區塊鏈能夠理解爲一種公共記帳的技術方案,系統是徹底開放透明的,

帳簿對全部人公開,實現數據共享,任何人均可以查帳。

3. 不可撤銷、不可篡改和加密安全性

區塊鏈採起單向哈希算法,每一個新產生的區塊嚴格按照時間線形順序推動,時間的不可逆性、不可撤銷致使任何試圖入侵篡改區塊鏈內數據信息的行爲易被追溯,

致使被其餘節點的排斥,造假成本極高,從而能夠限制相關不法行爲。


相關文章
相關標籤/搜索