區塊鏈技術被認爲是繼蒸汽機、電力、互聯網以後,下一代顛覆性的核心技術。 若是說蒸汽機釋放了人們的生產力,電力解決了人們基本的生活需求,互聯網完全改變了信息傳遞的方式,那麼區塊鏈做爲構造信任的機器,將可能完全改變整我的類社會價值傳遞的方式。算法
之前是靠信譽、靠百年老店、權威機構等,區塊鏈利用技術創建了新的信任方式,這是能夠被量化的,從技術的角度實現的,因此說區塊鏈成爲了下一個信任的基石。區塊鏈最核心的革命特性是改變千百年來落後的信用機制。數據庫
最近常常看到或聽到區塊鏈和比特幣的關鍵詞,可是對於像我這中菜鳥級別的如何簡單通俗的理解區塊鏈呢?安全
區塊鏈的本質是一個分佈式的公共帳本,任何人均可對這個帳本進行覈查,但不存在單一的用戶能夠對它控制。在區塊鏈系統中的參與者共同維持帳本的更新:它只能按照嚴格的規則和共識進行修改。服務器
可是存在如下問題:編碼
假設過了很長一段時間,憑空創造的查克拉已經在這個系統中流通了起來,你們都開始承認了查克拉。可是這個系統中一共就只有10個查克拉,因而有人動了壞心思,他在人羣中高呼「我有10個查克拉!」怎麼辦?你們是直接在本本上記下他有10個查克拉麼,這樣不是人人均可以僞造查克拉了麼?spa
「憑啥你喊一句話我就幫你記?個人小本本不要錢麼?」。爲了激勵你們幫我傳話和記帳,我決定給第一個聽到我喊話而且記錄在小本本上的人一些獎勵:第一個聽到我喊話並記錄下來的人,你就憑空獲得了1個查克拉,這個查克拉是整個系統對你幸苦記帳的報酬,而你記錄了這句話以後,要立刻告訴其它人你已經記錄好了,讓別人放棄繼續記錄這句話,並給你本身的記錄編號讓別人有據可查,而後你再把個人話加上你的記錄編號一塊兒喊出來,供下一我的記帳。
當這個規則定下之後,這個系統中必定會出現一批人,他們開始豎着耳朵監聽周圍發出 的聲音,以搶佔第一個記帳的權利。好比概念 「比特幣挖礦」。畢竟1比特幣=1K-nK美圓。 比特幣挖礦機,就是用於賺取比特幣的電腦,這類電腦通常有專業的挖礦芯片, 多采用燒顯卡的方式工做,耗電量較大。用戶用我的計算機下載軟件而後運行特定算法, 與遠方服務器通信後可獲得相應比特幣,是獲取比特幣的方式之一。 |
|
這會致使怎樣的狀況呢?按照咱們的設想,應該每一個人的小本本上記錄的東西都是同樣的,都是一條能夠把全部信息串聯起來的鏈條。可是在這一刻,他們小本本上記錄的東西不同了?之後還怎麼肯定交易和信息的真實性?
爲了解決這個問題,又追加了新的規則,增長記錄編碼的難度,即比特幣挖礦難度,保證記錄的惟一性(保證節點之間的同步)。」不知道用惟一性是否準確?
區塊鏈幾乎能夠應用到任何領域,在金融、物流、公共服務等領域都有大量案例。中國央行早在2016年就表態支持區塊鏈。2016年11月,中國政府正式把區塊鏈列入十三五規劃綱要中。 好比貴州超過3000億的脫貧脫貧攻堅基金,要經過300多個單位的運做,惠及493萬貧困人口,如何確保扶貧資金募款,投資,使用管理等環節正確運做呢?區塊鏈具備多方共識,交易溯源,不可篡改等技術特色,使它在確保信息可信、安全、可追溯等方面具備傳統技術不可比擬的優點。以城市爲單位,第一個發佈區塊鏈白皮書的就是貴陽市。 |
若是仔細觀察,咱們會發現馬雲最近兩年在公共場所說起最多的概念即是信用體系。互聯網在將來不會是創業主體,而是像空氣同樣成爲咱們生活的一部分。 螞蟻金融即是馬雲最爲看重的業務體系,在馬雲的構想下,將來人們的生活將無現金,並能夠用信用兌換商品。這一實現,十分須要一種革命性的信用機制。這一機制在2016年的支付寶App裏已經悄然 上線---螞蟻區塊鏈 |
區塊鏈是一種特殊的分佈式數據庫。 首先,區塊鏈的主要做用是儲存信息。任何須要保存的信息,均可以寫入區塊鏈,也能夠從裏面讀取,因此它是數據庫。 其次,任何人均可以架設服務器,加入區塊鏈網絡,成爲一個節點。區塊鏈的世界裏面,沒有中心節點(去中心化),每一個節點都是平等的,都保存着整個數據庫。你能夠向任何一個節點,寫入/讀取數據,由於全部節點最後都會同步,保證區塊鏈一致。 |
區塊鏈沒有管理員,它是完全無中心的。其餘的數據庫都有管理員,可是區塊鏈沒有。若是有人想對區塊鏈添加審覈,也實現不了,由於它的設計目標就是防止出現居於中心地位的管理當局。
沒有了管理員,人人均可以往裏面寫入數據,怎麼才能保證數據是可信的呢,這就是區塊鏈奇妙的地方。
區塊鏈由一個個相連的區塊(block)組成。區塊很像數據庫的記錄,每次寫入數據,就是建立一個區塊。 每一個區塊包含兩個部分:
|
區塊與 Hash 是一一對應的,每一個區塊的 Hash 都是針對」區塊頭」(Head)計算的。
Hash = SHA256(區塊頭)
區塊頭包含不少內容(包括上一個區塊的Hash、當前區塊體的Hash等,見上圖)。這意味着,若是當前區塊的內容變了,或者上一個區塊的 Hash 變了,必定會引發當前區塊的 Hash 改變。
若是有人修改了一個區塊,該區塊的 Hash 就變了。爲了讓後面的區塊還能連到它,必須同時修改後面全部的區塊,不然被改掉的區塊就脫離區塊鏈了。Hash 的計算很耗時,同時修改多個區塊幾乎不可能發生,除非有人掌握了全網51%以上的計算能力。
正是經過這種聯動機制,區塊鏈保證了自身的可靠性,數據一旦寫入,就沒法被篡改。這就像歷史同樣,發生了就是發生了,今後再沒法改變。
因爲必須保證節點之間的同步,因此新區塊的添加速度不能太快。試想一下,你剛剛同步了一個區塊,準備基於它生成下一個區塊,但這時別的節點又有新區塊生成,你不得不放棄作了一半的計算,再次去同步。由於每一個區塊的後面,只能跟着一個區塊,你永遠只能在最新區塊的後面,生成下一個區塊。因此,你別無選擇,一聽到信號,就必須馬上同步。
因此,區塊鏈的發明者故意讓添加新區塊,變得很困難。他的設計是,平均每10分鐘,全網才能生成一個新區塊,一小時也就六個。
這種產出速度不是經過命令達成的,而是故意設置了海量的計算。也就是說,只有經過極其大量的計算,才能獲得當前區塊的有效 Hash,從而把新區塊添加到區塊鏈。因爲計算量太大,因此快不起來。
這個過程就叫作採礦(mining),由於計算有效 Hash 的難度,比如在全世界的沙子裏面,找到一粒符合條件的沙子。計算 Hash 的機器就叫作礦機,操做礦機的人就叫作礦工。
你可能會有一個疑問,人們都說採礦很難,但是採礦不就是用計算機算出一個 Hash 嗎,這正是計算機的強項啊,怎麼會變得很難,遲遲算不出來呢?(比特幣挖礦機,就是用於賺取比特幣的電腦,通常有專業的挖礦芯片,多采用燒顯卡的方式工做)
原來不是任意一個 Hash 均可以,只有知足條件的 Hash 纔會被區塊連接受。這個條件特別苛刻,使得絕大部分 Hash 都不知足要求,必須重算。
區塊頭包含一個難度係數(difficulty)這個值決定了計算 Hash 的難度。舉例來講,第100000個區塊的難度係數是 14484.16236122。
區塊鏈協議規定,使用一個常量除以難度係數,能夠獲得目標值(target)。顯然,難度係數越大,目標值就越小。
就算採礦很難,但也無法保證,正好十分鐘產出一個區塊,有時一分鐘就算出來了,有時幾個小時可能也沒結果。整體來看,隨着硬件設備的提高,以及礦機的數量增加,計算速度必定會愈來愈快。
爲了將產出速率恆定在十分鐘,區塊鏈發明者還設計了難度係數的動態調節機制。他規定,難度係數每兩週(2016個區塊)調整一次。若是這兩週裏面,區塊的平均生成速度是9分鐘,就意味着比法定速度快了10%,所以難度係數就要調高10%;若是平均生成速度是11分鐘,就意味着比法定速度慢了10%,所以難度係數就要調低10%。
難度係數越調越高(目標值愈來愈小),致使了採礦愈來愈難。
即便區塊鏈是可靠的,如今還有一個問題沒有解決:若是兩我的同時向區塊鏈寫入數據,也就是說,同時有兩個區塊加入,由於它們都連着前一個區塊,就造成了分叉。這時應該採納哪個區塊呢? 如今的規則是,新節點老是採用最長的那條區塊鏈。若是區塊鏈有分叉,將看哪一個分支在分叉點後面,先達到6個新區塊(稱爲」六次確認」)。按照10分鐘一個區塊計算,一小時就能夠確認。 如今的規則是,新節點老是採用最長的那條區塊鏈。若是區塊鏈有分叉,將看哪一個分支在分叉點後面,先達到6個新區塊(稱爲」六次確認」)。按照10分鐘一個區塊計算,一小時就能夠確認。 |
爲了保證數據的可靠性,區塊鏈也有本身的代價。一是效率,數據寫入區塊鏈,最少要等待十分鐘,全部節點都同步數據,則須要更多的時間;二是能耗,區塊的生成須要礦工進行無數無心義的計算,這是很是耗費能源的。