詳解區塊鏈——從本質到實現原理

隨着比特幣、以太坊等數字貨幣的暴漲,數字貨幣的底層技術,區塊鏈技術,開始進入大衆的視野。姚勁波說:區塊鏈有可能和互聯網同樣偉大。區塊鏈技術比傳統互聯網技術好在哪裏?它的實現原理優是什麼呢?筆者但願經過本文,解答你們心中的疑問。html

信任問題

信息在互聯網上的複製和傳播成本近乎爲零,這讓你們能夠很輕易地發佈和獲取信息。可是資產和信息是不同的,資產本應是不該該被隨意複製的。若是人民幣能夠被隨意複製,那麼人人都是億萬富翁了 :-)。算法

如今的互聯網和金融技術,經過搭建中心化服務器,解決了資產傳播的問題,可是成本居高不下。緣由在於,當今的金融市場是創建在不一樣的服務提供商組成的龐大網絡上的。在這個龐大的網絡中,存在着各類互相孤立的數據系統及運做體系,這極大地影響了金融市場效率的進一步提高。在 2012 年歐洲央行的一份報告中,估計除了每一個人都支付的直接費用外,間接成本高達 GDP 的 1%,大概每一年 1300 億歐元。在世界銀行的報告中,跨國匯款的成本接近 8%。[1]服務器

金融機構之間不可以無條件地信任對方,形成了金融領域數據孤島的現象,進而致使了數字資產在互聯網上流通成本居高不下。若是金融機構可以相互信任,那麼全部的資產數據就能夠在互聯網上自由流通了,也就不存在數據孤島的現象了,進而下降數字資產的流通費用。從道德上對信用的呼籲很難落到實處,有沒有解決信任問題的技術手段呢?區塊鏈技術的出現爲解決信任問題帶來了一絲曙光。如今區塊鏈技術正在,除金融領域外的更多領域中進行應用,解決着這些領域內的信任問題。網絡

信任機器

利用區塊鏈技術,能夠創造出一種信任機器[2]。比特幣系統就是基於區塊鏈的記帳機器;以太坊就是基於區塊鏈的智能合約機器等等。而信任祕訣在於區塊鏈的加密、公開且不可篡改的特性數據結構

加密

區塊鏈技術是以密碼學和數學爲基礎的,這是信任的根本。包括,橢圓曲線數字簽名算法、非對稱加密、哈希函數、梅克爾樹等等。這些算法是密碼學、數學上公認的窮宇宙之力都難以破解的算法。區塊鏈上的數據是公開的,但這並不意味着你的祕密,能夠被任何人知曉。利用這些加密算法能夠保障你的數字權益,好比你的上網隱私,你的網絡文章的全部權,還有你的數字錢包裏的 Token。函數

公開

公開是贏得信任的最好手段。基於區塊鏈技術的系統的規則(程序)和數據都是公開的。任何參與方均可以經過運行區塊鏈的程序的方式加入進來,進而對數據進行驗證。從程序可靠性的角度出發,信任既能夠創建在一個黑盒程序之上,又能夠創建在一個開源的程序之上。從交易雙方的角度看,信任既能夠創建在一個值得被信賴的第三方之上,又能夠創建在本身親自驗證的基礎之上。在本身能驗證,也能依靠第三方進行驗證狀況下,本身驗證更可靠;若是本身不能驗證,那就只能選擇一個值得被信賴的第三方。區塊鏈提供了一個更公開、更透明且可以本身親自驗證的機制,所以基於區塊鏈技術的系統比黑盒和第三方更容易贏得你們的信任。區塊鏈

不可篡改

區塊鏈技術不可篡改的特性,是數字資產不可複製的基礎。技術上來講,咱們能夠對任何的數據進行:增、刪、改、查。可是在基於區塊鏈技術的系統上,刪、改的操做的可行性幾乎爲零。加密

核心原理

加密技術是在區塊鏈出現以前已有的技術,本文不詳細展開。區塊鏈的最大創新,在於公開且不可篡改。本文接下來會剖析區塊鏈的核心原理,幫助你們理解爲何它是公開且不可篡改的。spa

狀態機

咱們先從最簡單的區塊鏈記帳機器開始,好比以太坊系統(比特幣系統的原理稍微繞一些,但本質同樣),實際上就是多個節點維護同一個帳本。記帳機器會在帳本上記錄每筆交易的信息。經過初始時各個帳戶的餘額和已記錄的信息,就能夠推斷出任意時刻的各個帳戶的餘額。也就是說區塊鏈記帳機器完成記帳功能的基本原理是:狀態機[3]。舉個例子:在 state1 時,A B 都有 100;A 發起了一筆交易,支付 100 給 B,而這筆交易會被區塊鏈系統記錄下來。咱們能夠經過 state1 的帳戶餘額和區塊鏈上的交易記錄,計算出 state2 時 A B 的帳戶餘額:A 有 50,B 有 150。同理只要咱們知道初始化的狀態(Genesis),並將使用區塊鏈系統記錄每筆交易,就能夠算出任意時刻的任意帳戶的餘額了。orm

clipboard.png

雙重支付

在區塊鏈技術出來以前,一直沒有很好的方法解決去中心化記帳過程當中遇到的雙重支付的問題。中心化記帳指的是,一個節點(好比一臺計算機)維護一個帳本;去中心化記帳指的是,多個節點維護同一套帳本。

顧名思義,雙重支付就是同一筆錢可用於兩次支付。具體的說,就是在同一時間點,A 將 100 元,既支付給 B,又支付給 C。若是出現這種狀況,A 就至關於把 100 元錢,當作 200 元錢來花了。但 B ,C 和記帳機構三者之一就會所以遭受 100 元的損失。在中心化的記帳系統中,雙重支付的事情顯然是不可能的。由於不管這兩筆交易是否同時進行,中心化的記帳系統處理這兩筆交易必定會有一個前後順序。中心化的記帳系統會先處理第一筆交易,並在 A 的帳戶中扣除 100 元,再處理第二筆交易,若是此時 A 的帳戶中沒有餘額,第二筆交易就會失敗。

在去中心化的記帳系統中,會有多個記錄交易信息的節點。在上述例子中,去中心化的記帳系統中的一些節點會先收到 B 的交易信息;另外一些節點會先收到 C 的這筆交易信息。在去中心化的記帳系統中,全部節點都是平等的。不存在一個統籌的節點,來決定是先處理 B 的交易仍是先處理 C 交易。這就產生了去中心化記帳系統中雙重支付的問題。

解決去中心化記帳系統的雙重支付問題,能夠分紅兩步來討論:第一步,肯定交易信息的前後順序;第二步,須要一個共識機制,來保證全部節點都承認這個順序。

第一步,確認順序的原理很簡單,就是給交易排序。肯定交易順序的數據結構就是區塊鏈。「區塊鏈」中的「區塊」,指的是在同一段時間內的交易信息及相關數據的集合。「鏈」就是把區塊按產生的前後順序鏈接在一塊兒。

clipboard.png

共識機制

共識機制是區塊鏈系統上獨立節點們經過遵照一套相同的規則,自發地對區塊的前後順序達成共識。這套規則能夠簡單的描述爲如下 3 步[4]。

全部節點質押成本(如:算力)競爭記帳權,由勝利者產出並廣播區塊(記帳信息),並得到收益(如,比特幣)獎勵。

每一個節點獨立的對新區塊進行驗證,並組裝進區塊鏈。

每一個節點對區塊鏈進行獨立選擇,選擇長度最長的區塊鏈。

這個規則是如何讓獨立節點們自發地參與到區塊鏈系統的記帳之中呢?又是如何規避節點搗亂的問題呢?

第 1 步,保障了每一個節點都會出於「自私」的目的,「誠實」地參與到區塊鏈系統中來。「自私」指的是,節點都是爲利潤(收益 - 成本)而來。「誠實」指的是,遵循區塊鏈的共識機制。可是有利潤就會有做弊,如何防止做弊呢?這就要依靠後面兩步。

第 2 步,保障了每一個節點均可以對競爭勝出的節點的記帳信息進行校驗。即使有「搗亂」節點搶到了記帳權,並記了假帳,其餘節點,包括你的節點,均可以經過驗證得知是否做假。區塊(帳本)作不了假,那麼有沒有可能在鏈(順序)上做假呢?也就是經過顛倒交易的前後順序,進行雙重支付。

第 3 步,保障了顛倒交易的前後順序在經濟上是不可行的。既然每一個誠實的節點都選擇的是最長的鏈,那麼搗亂節點能不能製造一個最長的鏈呢?當搗亂鏈的長度,超過誠實鏈的長度的時候,整個交易的順序就被顛倒過來了。在區塊鏈上,父節點只能有一個,可是子節點能夠有多個,多個子節點就會有分叉,稱爲 Fork。 搗亂節點能夠在某個節點 Fork 原先的鏈,再用比誠實節點更快的速度,製造出一個最長搗亂鏈。這有沒有可能呢?答案是,在技術上是有可能的,可是經濟上是沒有可能的。

clipboard.png

總結

區塊鏈技術的本質是經過公開的、加密的不可篡改的技術手段,爲解決多方信任問題提供了一個方案。如今區塊鏈技術離可大規模應用,還有很長的一段路要走。其中最關鍵緣由是每秒確認交易的筆數太少、確認交易的時間又太長[5]。可是,換個角度思考一下,問題即機會。如今的區塊鏈就像 98 年的互聯網,將來充滿挑戰,也充滿但願。

本文首發於 58無線技術 公衆號

本文由【區塊鏈研習社】優質內容計劃支持,更多關於區塊鏈的深度好文,請點擊【區塊鏈研習社】簡書專欄:http://www.jianshu.com/c/b17f...

參考文章:

中國區塊鏈技術和應用發展白皮書

http://www.199it.com/archives...

經濟學人《The trust machine》

https://www.economist.com/new...

How does Ethereum work, anyway?

https://medium.com/@preethika...

喬延宏譯《精通比特幣(第二版)》

http://book.8btc.com/books/6/...

Fundamental challenges with public blockchains

https://medium.com/@preethika...

相關文章
相關標籤/搜索