區塊鏈技術瞭解-轉

區塊鏈技術被認爲是繼蒸汽機、電力、互聯網以後,下一代顛覆性的核心技術。 若是說蒸汽機釋放了人們的生產力,電力解決了人們基本的生活需求,互聯網完全改變了信息傳遞的方式,那麼區塊鏈做爲構造信任的機器,將可能完全改變整我的類社會價值傳遞的方式。算法

之前是靠信譽、靠百年老店、權威機構等,區塊鏈利用技術創建了新的信任方式,這是能夠被量化的,從技術的角度實現的,因此說區塊鏈成爲了下一個信任的基石。區塊鏈最核心的革命特性是改變千百年來落後的信用機制。數據庫

       最近常常看到或聽到區塊鏈和比特幣的關鍵詞,可是對於像我這中菜鳥級別的如何簡單通俗的理解區塊鏈呢?安全

1.區塊鏈的舉例

       區塊鏈的本質是一個分佈式的公共帳本,任何人均可對這個帳本進行覈查,但不存在單一的用戶能夠對它控制。在區塊鏈系統中的參與者共同維持帳本的更新:它只能按照嚴格的規則和共識進行修改服務器

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

       這是一個去中心化的系統,整個系統中沒有了權威的中心化代理,信息的可信度和準確性便會面臨問題。分佈式

image_thumb11

       可能你已經發現了,在上述的模型中,所謂的「100塊錢」已經不重要了。換句話說,任何東西均可以在這個模型中交換,甚至你能夠憑空杜撰一個東西,只要你們認可,你就可讓你杜撰的東西流通。好比:我在人羣中高喊一聲「我創造了10個查克拉!」,我甚至不須要知道查克拉是什麼,也不須要關心世界上是否是真的有查克拉,只要你們都聽到,而後在本身的小本本上記下「LaiW3n有10個查克拉」,因而我就真的有100個查克拉了。今後之後,我即可以聲稱我給了某人1個查克拉,只要路人甲乙丙丁都收到而且認可了這一信息,那我就算完成了此次交易,哪怕世界上沒有查克拉。又好比:「比特幣」,區塊鏈是比特幣的底層技術,真正的區塊鏈和比特幣比上述的模型複雜太多,細節也豐富太多。區塊鏈

image_thumb32

       可是存在如下問題:編碼

       假設過了很長一段時間,憑空創造的查克拉已經在這個系統中流通了起來,你們都開始承認了查克拉。可是這個系統中一共就只有10個查克拉,因而有人動了壞心思,他在人羣中高呼「我有10個查克拉!」怎麼辦?你們是直接在本本上記下他有10個查克拉麼,這樣不是人人均可以僞造查克拉了麼?spa

       爲了防止這種現象發生,決定在我創造查克拉的時候給個人查克拉打上標記(更準確地說,我是給我喊的那句「我創造了10個查克拉」打上標記,好比標記爲001),這樣之後在每一筆交易的時候,我在高喊「我給了某某1個查克拉!」的時候,會附加上額外的一句話:「這1個查克拉的來源是記爲001的那條記錄,個人這句話標記爲002!」。咱們再抽象一點,某人喊話的內容的格式就變成了:「這句話編號xxx,上一句話的編號是yyy,我給了某某1個查克拉!」,這樣就解決了僞造的問題。其實上述模型就變成一個簡化的中本聰初版比特幣區塊鏈協議設計

      看到這裏基本已經可以生動形象又不涉及任何細節地解釋區塊鏈了。可是任然存在如下疑問:

image_thumb13

   「憑啥?」

     「憑啥你喊一句話我就幫你記?個人小本本不要錢麼?」。爲了激勵你們幫我傳話和記帳,我決定給第一個聽到我喊話而且記錄在小本本上的人一些獎勵:第一個聽到我喊話並記錄下來的人,你就憑空獲得了1個查克拉,這個查克拉是整個系統對你幸苦記帳的報酬,而你記錄了這句話以後,要立刻告訴其它人你已經記錄好了,讓別人放棄繼續記錄這句話,並給你本身的記錄編號讓別人有據可查,而後你再把個人話加上你的記錄編號一塊兒喊出來,供下一我的記帳。

       當這個規則定下之後,這個系統中必定會出現一批人,他們開始豎着耳朵監聽周圍發出

的聲音,以搶佔第一個記帳的權利。好比概念 「比特幣挖礦」。畢竟1比特幣=1K-nK美圓。

比特幣挖礦機,就是用於賺取比特幣的電腦,這類電腦通常有專業的挖礦芯片,

多采用燒顯卡的方式工做,耗電量較大。用戶用我的計算機下載軟件而後運行特定算法,

與遠方服務器通信後可獲得相應比特幣,是獲取比特幣的方式之一。

 

「聽誰的?」

       在這個系統中,若是我和另外一我的C幾乎同時地喊出一句:「爲了艾澤拉斯!」。因爲聽衆所處的位置不一樣,必定會有人先聽到我說的那句話,而另一些人則先聽到C的那句話,若是咱們規定只能有一我的說出這句話,那到底這句話是誰說的?

       若是不加任何條件,那麼上述的狀況必定會這樣發展:一部分人認爲這句話是我說的,在聽到這句話以後開始記帳,以後他們所作的全部事情都是基於這個事實,而且隨着這個信息一次次的傳下去,這條信息鏈會愈來愈深;而另一羣認爲是C先說這句話的人,也會按照這樣的趨勢發展。這樣,本來是一條惟一的信息鏈,在咱們喊出「爲了艾澤拉斯」這句話以後,分叉了

image_thumb19

       這會致使怎樣的狀況呢?按照咱們的設想,應該每一個人的小本本上記錄的東西都是同樣的,都是一條能夠把全部信息串聯起來的鏈條。可是在這一刻,他們小本本上記錄的東西不同了?之後還怎麼肯定交易和信息的真實性?

       爲了解決這個問題,又追加了新的規則,增長記錄編碼的難度,即比特幣挖礦難度,保證記錄的惟一性(保證節點之間的同步)。」不知道用惟一性是否準確?


2.區塊鏈的應用

     區塊鏈幾乎能夠應用到任何領域,在金融、物流、公共服務等領域都有大量案例。中國央行早在2016年就表態支持區塊鏈。2016年11月,中國政府正式把區塊鏈列入十三五規劃綱要中。

      好比貴州超過3000億的脫貧脫貧攻堅基金,要經過300多個單位的運做,惠及493萬貧困人口,如何確保扶貧資金募款,投資,使用管理等環節正確運做呢?區塊鏈具備多方共識,交易溯源,不可篡改等技術特色,使它在確保信息可信、安全、可追溯等方面具備傳統技術不可比擬的優點。以城市爲單位,第一個發佈區塊鏈白皮書的就是貴陽市。

image_thumb49

      若是仔細觀察,咱們會發現馬雲最近兩年在公共場所說起最多的概念即是信用體系。互聯網在將來不會是創業主體,而是像空氣同樣成爲咱們生活的一部分。

螞蟻金融即是馬雲最爲看重的業務體系,在馬雲的構想下,將來人們的生活將無現金,並能夠用信用兌換商品。這一實現,十分須要一種革命性的信用機制。這一機制在2016年的支付寶App裏已經悄然 上線---螞蟻區塊鏈

image_thumb50



3.從技術角度簡單理解區塊鏈

(1)區塊鏈的本質

      區塊鏈是一種特殊的分佈式數據庫

      首先,區塊鏈的主要做用是儲存信息。任何須要保存的信息,均可以寫入區塊鏈,也能夠從裏面讀取,因此它是數據庫。

      其次,任何人均可以架設服務器,加入區塊鏈網絡,成爲一個節點。區塊鏈的世界裏面,沒有中心節點(去中心化),每一個節點都是平等的,都保存着整個數據庫。你能夠向任何一個節點,寫入/讀取數據,由於全部節點最後都會同步,保證區塊鏈一致。

dc3881e8925dc8fc641a92314c83e57f_thu

(2)區塊鏈的最大特色

區塊鏈沒有管理員,它是完全無中心的。其餘的數據庫都有管理員,可是區塊鏈沒有。若是有人想對區塊鏈添加審覈,也實現不了,由於它的設計目標就是防止出現居於中心地位的管理當局。

沒有了管理員,人人均可以往裏面寫入數據,怎麼才能保證數據是可信的呢,這就是區塊鏈奇妙的地方。

(3)區塊

       區塊鏈由一個個相連的區塊(block)組成。區塊很像數據庫的記錄,每次寫入數據,就是建立一個區塊。

每一個區塊包含兩個部分:

  • 區塊頭(Head):記錄當前區塊的元信息

  • 區塊體(Body):實際數據

image_thumb1

   區塊頭包含了當前區塊的多項元信息

  • 生成時間

  • 實際數據(即區塊體)的 Hash

  • 上一個區塊的 Hash

  • ......

      Hash 就是計算機能夠對任意內容,計算出一個長度相同的特徵值。區塊鏈的 Hash 長度是256位,無論原始內容是什麼,最後都會計算出一個256位的二進制數字。並且能夠保證,只要原始內容不一樣,對應的 Hash 必定是不一樣的。

舉例來講,字符串123的 Hash 是a8fdc205a9f19cc1c7507a60c4f01b13d11d7fd0(十六進制),轉成二進制就是256位,並且只有123能獲得這個 Hash。

image_thumb3

(4)Hash 的不可修改性

區塊與 Hash 是一一對應的,每一個區塊的 Hash 都是針對」區塊頭」(Head)計算的。

Hash = SHA256(區塊頭)

區塊頭包含不少內容(包括上一個區塊的Hash、當前區塊體的Hash等,見上圖)。這意味着,若是當前區塊的內容變了,或者上一個區塊的 Hash 變了,必定會引發當前區塊的 Hash 改變。

若是有人修改了一個區塊,該區塊的 Hash 就變了。爲了讓後面的區塊還能連到它,必須同時修改後面全部的區塊,不然被改掉的區塊就脫離區塊鏈了。Hash 的計算很耗時,同時修改多個區塊幾乎不可能發生,除非有人掌握了全網51%以上的計算能力。

正是經過這種聯動機制,區塊鏈保證了自身的可靠性,數據一旦寫入,就沒法被篡改。這就像歷史同樣,發生了就是發生了,今後再沒法改變。

image_thumb6

(5)採礦

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

因此,區塊鏈的發明者故意讓添加新區塊,變得很困難。他的設計是,平均每10分鐘,全網才能生成一個新區塊,一小時也就六個。

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

這個過程就叫作採礦(mining),由於計算有效 Hash 的難度,比如在全世界的沙子裏面,找到一粒符合條件的沙子。計算 Hash 的機器就叫作礦機,操做礦機的人就叫作礦工。


(6)難度係數

你可能會有一個疑問,人們都說採礦很難,但是採礦不就是用計算機算出一個 Hash 嗎,這正是計算機的強項啊,怎麼會變得很難,遲遲算不出來呢?(比特幣挖礦機,就是用於賺取比特幣的電腦,通常有專業的挖礦芯片,多采用燒顯卡的方式工做)

原來不是任意一個 Hash 均可以,只有知足條件的 Hash 纔會被區塊連接受。這個條件特別苛刻,使得絕大部分 Hash 都不知足要求,必須重算。

區塊頭包含一個難度係數(difficulty)這個值決定了計算 Hash 的難度。舉例來講,第100000個區塊的難度係數是 14484.16236122。

區塊鏈協議規定,使用一個常量除以難度係數,能夠獲得目標值(target)。顯然,難度係數越大,目標值就越小。

Hash 的有效性跟目標值密切相關,只有小於目標值的 Hash 纔是有效的,不然 Hash 無效,必須重算。因爲目標值很是小,Hash 小於該值的機會極其渺茫,可能計算10億次,纔算中一次。這就是採礦如此之慢的根本緣由。

區塊頭裏面還有一個 Nonce 值,記錄了 Hash 重算的次數。第     100000 個區塊的 Nonce 值是  274148111,即計算了 2.74 億次,才獲得了一個有效的 Hash,該區塊才能加入區塊鏈。

8ab5c8ea028d7e2e2ac3a8f0e0aa9755_thu5e83108f64034f205ce83a40c1236198_thu

(7)難度係數的動態調節

就算採礦很難,但也無法保證,正好十分鐘產出一個區塊,有時一分鐘就算出來了,有時幾個小時可能也沒結果。整體來看,隨着硬件設備的提高,以及礦機的數量增加,計算速度必定會愈來愈快。

爲了將產出速率恆定在十分鐘,區塊鏈發明者還設計了難度係數的動態調節機制。他規定,難度係數每兩週(2016個區塊)調整一次。若是這兩週裏面,區塊的平均生成速度是9分鐘,就意味着比法定速度快了10%,所以難度係數就要調高10%;若是平均生成速度是11分鐘,就意味着比法定速度慢了10%,所以難度係數就要調低10%。

難度係數越調越高(目標值愈來愈小),致使了採礦愈來愈難。


(8)區塊鏈的分叉

即便區塊鏈是可靠的,如今還有一個問題沒有解決:若是兩我的同時向區塊鏈寫入數據,也就是說,同時有兩個區塊加入,由於它們都連着前一個區塊,就造成了分叉。這時應該採納哪個區塊呢?

如今的規則是,新節點老是採用最長的那條區塊鏈。若是區塊鏈有分叉,將看哪一個分支在分叉點後面,先達到6個新區塊(稱爲」六次確認」)。按照10分鐘一個區塊計算,一小時就能夠確認。

如今的規則是,新節點老是採用最長的那條區塊鏈。若是區塊鏈有分叉,將看哪一個分支在分叉點後面,先達到6個新區塊(稱爲」六次確認」)。按照10分鐘一個區塊計算,一小時就能夠確認。

image_thumb13[1]

image_thumb12

爲了保證數據的可靠性,區塊鏈也有本身的代價。一是效率,數據寫入區塊鏈,最少要等待十分鐘,全部節點都同步數據,則須要更多的時間;二是能耗,區塊的生成須要礦工進行無數無心義的計算,這是很是耗費能源的。

相關文章
相關標籤/搜索