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

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

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

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

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

區塊鏈 -> 比特幣

首先我們得先知道,區塊鏈和比特幣之間並不等同,如果要論輩分,區塊鏈應該是比特幣的爸爸,為什麼這麼說呢?我們先來了解下區塊鏈是什麼,以及區塊鏈是用來幹嘛的。

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

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

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

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

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

區塊+鏈=區塊鏈?

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

區塊

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

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

  • 區塊頭(Block Header):記錄當前區塊的特徵值(裡面存放的內容我們稍後再說)
  • 區塊體(Block Body):存放的數據

所以,區塊就是一種存放數據的東西,可以近似的理解為鏈表中的節點。

把許多上圖那樣的區塊連接在一起就形成了區塊鏈,如下圖所示:

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

想要形成一個鏈,那總得有頭吧,鏈頭的區塊學名叫做創世區塊(Genesis Block)。前一個區塊稱為後一個區塊的父區塊,反之則稱為子區塊。 所以,其實區塊鏈就長上面那樣,沒什麼神秘的。

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

如何鏈接

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

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

  • 推論1:每個區塊的哈希都是不一樣的,可以通過哈希唯一標識區塊。
  • 推論2:如果區塊的內容變了,它的哈希一定會改變。

所以我們只需要在每個區塊的區塊頭存放上個區塊的哈希值即可。就是下圖紅線標註的地方。

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

至於如何計算出這個哈希值,不同的區塊鏈有不同的計算方法,這裡不多說。

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

https://www.jianshu.com/p/4187a7352769

為什麼需要區塊鏈?

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

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

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

好了,這裡又出現了一個新的概念,去中心化

?這個名詞只要一提到區塊鏈就一定會被提到,所以你一定想知道去中心化到底是什麼。不急,在談去中心化之前,我們先談一下另一個詞——信任

信任

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

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

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

近視的人想要摘下眼鏡一般都需要做手術,但是你不清楚這個手術做了之後是否真的可以恢復視力,所以你去找專家,這個專家是全國非常有名的眼科醫生,他告訴你這個手術做完是可以恢復視力的,所以你就去做手術了。

還有一種情況是,你在做手術之前問了之前做過這個手術的親戚朋友,他們都說這個手術做完之後可以恢復到正常視力,你覺得他們都成功了,所以你就去做手術了。

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

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

在金融領域,我們平常能接觸到的

銀行就是這個有足夠信用度的個體(中心)

去中心化

仔細想一下上面那個例子,為什麼我們會相信眼科專家而不相信小診所的醫生,因為相較於小診所的醫生,眼科專家有更多的信用成本,所以我們往往要為眼科專家付更多的費用。

對於銀行來說,作為信用中介也是需要成本的,而我們普通大眾就要為這龐大的信用成本買單。所以才會造就金融業是最賺錢的行業。

所以如果想要去除銀行類等中心機構的信用背書? 那就可以用我們上面提到過的「一堆個體」,這也是區塊鏈技術的核心——去中心化

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

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

我們先來建立一個去中心化的系統,為了方便理解,我們來看一個簡單的去中心化借貸模型:如果A借了B 100塊錢,這個時候,A在人群中大喊“我是A,我借給了B 100塊錢!”,B也在人群中大喊“我是B,A借給了我100塊錢!”,此時路人甲乙丙丁都聽到了這些消息,因此所有人都在心中默默記下了“A借給了B100塊錢”。你看,這個時候一個去中心化的系統就建立起來了,這個系統中不需要銀行,也不需要借貸協議和收據,嚴格來說,甚至不需要人與人長久的信任關係(比如B突然又改口說“我不欠A錢!”,這個時候人民群眾就會站出來說“不對,我的小本本上記錄了你某天借了A100塊錢!”)。

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

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

那如果發生了很多次交易呢?很簡單,那就在小本本上面再添加一條記錄就可以了啊。

久而久之,這個小本本上面就會有很多交易記錄了,有沒有讓你想到什麼東西?不錯,就是區塊鏈,一條

記錄就是一個區塊,這個小本本就是一個區塊鏈。看到這裡你應該就可以理解為什麼提到區塊鏈就會提到分佈式賬本了吧。

如何操作區塊鏈?

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

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

操作流程

1. 挖礦

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

2. 廣播

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

區塊鏈的廣播機制

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

  • 節點A收到一個區塊,對其進行驗證並將其廣播給其附近的區塊;
  • 節點B收到inv消息後,如果他之前沒有接收過這個區塊,則向節點A發送一個getdata消息;
  • 節點A收到getdata消息後,就會把區塊和交際記錄的具體信息發送給節點B。
  • 此時節點B也就收到了一個區塊,重複1、2、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. 不可撤銷、不可篡改和加密安全性

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

導致被其他節點的排斥,造假成本極高,從而可以限制相關不法行為。


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


分享到:


相關文章: