總覽react
區塊鏈本質上是一個去中心化的分佈式帳本數據庫(感謝算法
指出:在與比特幣相關的區塊鏈應用中可以使用這一術語,但區塊鏈技術可能並不包含「帳本」)。其自己是一串使用密碼學相關聯所產生的數據塊,每個數據塊中包含了屢次比特幣網絡交易有效確認的信息。
這是區塊鏈的定義,所以要逐步瞭解區塊鏈,咱們須要一步步瞭解以下東西。數據庫
去中心化微信
先來考慮一箇中心化集中式處理的過程。你要在某寶上買一部手機,交易流程是:你將錢打給支付寶-支付寶收款後通知賣家發貨-賣家發貨-你確認收貨-支付寶把錢打給賣家。網絡
圖1: 中心化集中式交易模式在這個過程當中,雖然你是在和賣家交易,可是這筆交易還牽扯到了除了你和賣家的第三方,即支付寶,你和賣家的交易都是圍繞支付寶展開。所以,若是支付寶系統出了問題便會形成這筆交易的失敗。而且雖然你只是簡單的買了一個手機,可是你和賣家都要向第三方提供多餘的信息。所以考慮極端狀況,若是支付寶跑路了或者是拿了錢不卻不認可你的交易或者是支付寶所在的城市由於開G20把全部人都趕走了(?),那麼你就悲劇了。異步
而去中心化的處理方式就要顯得簡單不少,你只須要和賣家交換錢和手機,而後雙方都聲稱完成了這筆交易,就OK了。分佈式
能夠看出在某些特定狀況下,去中心化的處理方式會更便捷,同時也無須擔憂本身的與交易無關的信息泄漏。區塊鏈
其實若是隻考慮兩我的的交易並不能把去中心化的好處徹底展現出來,設想若是有成千上萬筆交易在進行,去中心化的處理方式會節約不少資源,使得整個交易自主化、簡單化,而且排除了被中心化代理控制的風險。spa
去中心化是區塊鏈技術的顛覆性特色,它無需中心化代理,實現了一種點對點的直接交互,使得高效率、大規模、無中心化代理的信息交互方式成爲了現實。3d
固然,上述的例子有一個很大的潛在問題:沒有了權威的中心化代理,怎樣保證每筆交易的準確性和有效性呢?好比:若是沒有了權威的中心化代理,張三某一天借了我100塊錢,可是不還錢還不認可怎麼辦?這裏就引出了區塊鏈的其它特性。
兩個基礎難題
在去中心化之後,整個系統中沒有了權威的中心化代理,信息的可信度和準確性便會面臨問題。
問題1:類兩軍問題
第一次據說這個問題竟然是在TCP的課上,大體說的是有兩個相距很遠的軍隊要傳遞信息,紅軍派遣一個信使去跟藍軍說:「你他孃的把意大利炮拿出來!」。藍軍收到信息後又派了一個信使去紅軍說:「收到指令!」。而後紅軍又派一個信使去藍軍說:「知道你收到指令了!」。而後藍軍又派一個信使去紅軍說:「知道你知道我收到指令了!」。而後紅軍又派一個信使去藍軍說:「知道你知道我知道你收到指令了!」……而後就沒完沒了了。
圖2:在分佈式計算中在異步系統和不可靠的通道上達到一致性是不可能的在這種狀況下,由於是點對點的通訊,雙方不可能在這種狀況下達到信息的一致性。嚴謹一點,就是「在分佈式計算上,試圖在異步系統和不可靠的通道上達到一致性是不可能的」。
問題2:拜占庭將軍問題
拜占庭羅馬帝國在軍事行動中,採起將軍投票的策略來決定是進攻仍是撤退,也就是說若是多數人決定進攻,就上去幹。可是軍隊中若是有奸細(好比將軍已經反水故意亂投票,或者傳令官叛變擅自修改軍令),那怎麼保證最後投票的結果然正反映了忠誠的將軍的意願呢?
拜占庭將軍問題反映到信息交換領域中來,能夠理解爲在一個去中心的系統中,有一些節點是壞掉的,它們可能向外界廣播錯誤的信息或者不廣播信息,在這種狀況下如何驗證數據傳輸的準確性。
區塊鏈技術的誕生
如今讓咱們來一步一步在去中心化的系統中解決這些問題,見證區塊鏈技術雛形的誕生。
1
咱們先來創建一個去中心化的系統,爲了方便理解,咱們來看一個簡單的去中心化借貸模型:若是A借了B 100塊錢,這個時候,A在人羣中大喊「我是A,我借給了B 100塊錢!」,B也在人羣中大喊「我是B,A借給了我100塊錢!」,此時路人甲乙丙丁都聽到了這些消息,所以全部人都在心中默默記下了「A借給了B100塊錢」。你看,這個時候一個去中心化的系統就創建起來了,這個系統中不須要銀行,也不須要借貸協議和收據,嚴格來講,甚至不須要人與人長久的信任關係(好比B忽然又改口說「我不欠A錢!」,這個時候人民羣衆就會站出來講「不對,個人小本本上記錄了你某天借了A100塊錢!」)。
圖3:去中心化借貸模型可能你已經發現了,在上述的模型中,所謂的「100塊錢」已經不重要了。換句話說,任何東西均可以在這個模型中交換,甚至你能夠憑空杜撰一個東西,只要你們認可,你就可讓你杜撰的東西流通。好比:我在人羣中高喊一聲「我創造了10個查克拉!」,我甚至不須要知道查克拉是什麼,也不須要關心世界上是否是真的有查克拉,只要你們都聽到,而後在本身的小本本上記下「LaiW3n有10個查克拉」,因而我就真的有100個查克拉了。今後之後,我即可以聲稱我給了某人1個查克拉,只要路人甲乙丙丁都收到而且認可了這一信息,那我就算完成了此次交易,哪怕世界上沒有查克拉。
你如今腦海中是否是浮現出了三個字——「比特幣」?因爲真正的區塊鏈和比特幣比我上述的模型複雜太多,細節也豐富太多,所以如下仍是以查克拉舉例,畢竟本文是Blockchain for Babies.(笑)
假設過了很長一段時間,我憑空創造的查克拉已經在這個系統中流通了起來,你們都開始承認了查克拉。可是這個系統中一共就只有10個查克拉,因而有人動了壞心思,他在人羣中高呼「我有10個查克拉!」怎麼辦?你們是直接在本本上記下他有10個查克拉麼,這樣不是人人均可以僞造查克拉了麼?
爲了防止這種現象發生,我決定在我創造查克拉的時候給個人查克拉打上標記(更準確地說,我是給我喊的那句「我創造了10個查克拉」打上標記,好比標記爲001),這樣之後在每一筆交易的時候,我在高喊「我給了某某1個查克拉!」的時候,會附加上額外的一句話:「這1個查克拉的來源是記爲001的那條記錄,個人這句話標記爲002!」。咱們再抽象一點,某人喊話的內容的格式就變成了:「這句話編號xxx,上一句話的編號是yyy,我給了某某1個查克拉!」,這樣就解決了僞造的問題。其實上述模型就變成一個簡化的中本聰初版比特幣區塊鏈協議:
圖4:查克拉模型和中本聰初版區塊鏈協議對比圖好了,看到這裏你基本已經可以生動形象又不涉及任何細節地向你的弱智室友解釋區塊鏈了。可是也許你的室友是一個有打破沙鍋問到底精神求是學子,所以你最好繼續準好回答如下這幾個問題。
1. 「憑啥?」
你室友可能會問:「憑啥你喊一句話我就幫你記?個人小本本不要錢麼?」。爲了激勵你們幫我傳話和記帳,我決定給第一個聽到我喊話而且記錄在小本本上的人一些獎勵:第一個聽到我喊話並記錄下來的人,你就憑空獲得了1個查克拉,這個查克拉是整個系統對你幸苦記帳的報酬,而你記錄了這句話以後,要立刻告訴其它人你已經記錄好了,讓別人放棄繼續記錄這句話,並給你本身的記錄編號讓別人有據可查,而後你再把個人話加上你的記錄編號一塊兒喊出來,供下一我的記帳。
當這個規則定下之後,這個系統中必定會出現一批人,他們開始豎着耳朵監聽周圍發出的聲音,以搶佔第一個記帳的權利。對的,你腦海中是否是又浮現出了「比特幣挖礦」的字眼?
值得一提的是,關於比特幣挖礦,
舉了一個很形象的例子:
單身汪們要找女票,國民岳母說我有好多女兒,這樣吧我給大家出點題目,解出一個就給其中一個姑娘的微信號。
單身汪們瘋狂競爭,想破腦殼去解題。只要其中一隻汪解出一道題,就立馬得意洋洋地昭告天下,示威所有單身汪,這個姑娘是個人啦,大家放棄吧。其餘單身汪們即便不服也沒有辦法,惆悵懊惱也不是個事兒啊,仍是麻溜地立馬去解下一道題目吧。這隻喜贏姑娘的幸運小汪被岳母承認後還能獲得25個貨幣單位的彩禮,簡直人生贏家。
2. 「聽誰的?」
在這個系統中,若是我和另外一我的C幾乎同時地喊出一句:「爲了艾澤拉斯!」。因爲聽衆所處的位置不一樣,必定會有人先聽到我說的那句話,而另一些人則先聽到C的那句話,若是咱們規定只能有一我的說出這句話,那到底這句話是誰說的?
若是不加任何條件,那麼上述的狀況必定會這樣發展:一部分人認爲這句話是我說的,在聽到這句話以後開始記帳,以後他們所作的全部事情都是基於這個事實,而且隨着這個信息一次次的傳下去,這條信息鏈會愈來愈深;而另一羣認爲是C先說這句話的人,也會按照這樣的趨勢發展。這樣,本來是一條惟一的信息鏈,在咱們喊出「爲了艾澤拉斯」這句話以後,分叉了!?
圖5:「區塊鏈」分叉
這會致使怎樣的狀況呢?按照咱們的設想,應該每一個人的小本本上記錄的東西都是同樣的,都是一條能夠把全部信息串聯起來的鏈條。可是在這一刻,他們小本本上記錄的東西不同了!這還玩毛啊?之後還怎麼肯定交易和信息的真實性!?
爲了解決這個問題,我又追加了新的規則:每一個人在記錄小本本的時候,須要脫鞋而後用腳拿筆,在小本本上用正楷體書寫!有了這個規定,因爲用腳寫字難度很大,每一個人至少須要10分鐘才能寫完,並且因爲每一個人用腳寫字的熟練度不通,寫完這句話所用的時間也不一樣,所以必定會有人先寫完而後高呼「我寫完了!那句話是LaiW3n喊的!」,這樣其它正在寫這句話的人便會停筆,而後在小本本上從新開始寫「那句話是來文寫的,上一句的編號是xxx」。
若是你對上述個人解決方法感興趣,你能夠對照我上面的比喻去了解如下知識:
「聽誰的」——中本聰破解「拜占庭將軍問題」的算法
「在小本本上記錄」——比特幣挖礦
「脫鞋用腳寫字」——比特幣挖礦難度
「脫鞋寫字速度」——算力
「新的規則」——工做量證實鏈
3. 「雙花」問題
這個時候你的室友可能又要問:若是我同時宣佈我給了A一個查克拉和我給了B一個查克拉,可是我只有一個查克拉,那咋整?是A和B都收到了查克拉仍是咋地?
這個時候你只須要托起他的下巴,溫柔地看着他的眼睛,用手刮刮他的鼻子,說:「小妖精,你把這種狀況帶到上面的規則中去試試?」
--------------