區塊鏈、比特幣與拜占庭將軍問題

上一篇講了拜占庭將軍問題,講的比較清晰:html

http://www.cnblogs.com/charlesblc/p/6271472.htmlweb

而上一篇也提到了,區塊鏈技術比較好的解決了這個問題,而比特幣就是基於區塊鏈的。算法

 

先用這一篇科普:http://blog.sina.com.cn/s/blog_6441f6930102v1zs.html安全

首先,不要把比特幣當成一種貨幣,而是一個總帳。它是個電子總帳,網絡上的每個參與者的電腦都會有一份總帳的備份,而且全部的備份都是在實時的持續的更新、對帳、以及同步着網絡

每個參與者都能在這本總賬裏記上一筆,這一筆記錄着必定數量的幣從一個參與者那裏被髮送到另外一個參與者那裏,而且每一條這樣的記錄都接着就實時的廣播到網絡了,因此在每一臺電腦上的每一分份拷貝都是幾乎同時更新的,而且全部的總帳拷貝都保持着同步。這本公開的分佈式的總帳的官方叫法是「區塊鏈(blockchain)」,而且它使用了BT技術以保證全部的拷貝都是同步的。分佈式

 

而且儘管單個哈希值用如今的計算機能夠幾乎即時的計算出來,但只有一個前13個字符是0的哈希值結果能夠被比特幣系統接受成爲「工做量證實」。這樣一個13個0的哈希值是極其不可能與罕見的,而且在當前須要花費整個比特幣網絡大約10分鐘的時間來找到一個。在一臺網絡中的機器隨機的找到一個有效哈希值以前,上十億個的無效值會被計算出來,這就是減慢信息傳遞速率並使得整個系統可用的「工做量證實」函數

那臺發現下一個有效哈希值的機器(或者說在咱們類比中的城邦),把全部的以前的信息放到一塊兒,附上它本身的,以及它的簽名/印章/諸如此類,並向網絡中的其餘機器廣播出去。只要其餘網絡中的機器接收到並驗證經過了這個13個0的哈希值和附着在上面的信息,他們就會中止他們當下的計算,使用新的信息更新他們的總帳拷貝,而後把新更新的總帳/區塊鏈做爲哈希算法的輸入,再次開始計算哈希值。哈希計算競賽從一個新的開始點從新開始。如此這般,網絡持續同步着,全部網絡上的電腦都使用着同一版本的總帳。工具

 

最後,在我的向網絡輸入一筆交易的時候,他們使用內嵌在比特幣客戶端的標準公鑰加密工具來同時他們的私鑰以及接收者的公鑰來爲這筆交易簽名。這對應於拜占庭將軍問題中他們用來簽名和驗證消息時使用的「印章」。所以,哈希計算速率的限制,加上公鑰加密,使得一個不可信網絡變成了一個可信的網絡,使得全部參與者能夠在某些事情上達成一致(好比說攻擊時間、或者一系列的交易、域名記錄、政治投票系統、或者任何其餘的須要分佈式協議的地方)。區塊鏈

這一解決方案在一系列的歷史事件發生以前是不可能的,這些事件有:網站

  1. 互聯網的創造
  2. 公鑰加密算法的發明
  3. 點對點Bitorrent(BT)協議的發明。BT協議最開始是開發來用於在網絡上的相對小的用戶子集之間共享許多文件的,但比特幣用它來在全部用戶之間共享單個文件。
  4. 人們意識到,在系統中添加一個簡單的時間延遲,同時使用公鑰加密算法以驗證每筆交易,能夠解決這個問題。

能夠推廣到任何核心問題是在分佈式網絡上缺少信任的領域。如咱們已經提到樂的,人們正在爲互聯網建設一個分佈式的域名系統,以及爲政治選舉建設分佈式的投票系統(尚未網站)。若是人們認爲單純的文件分享攪亂了這個世界,那麼比特幣解決方案和協議纔剛剛打開洪水的閘門。

 

 

PS:如今比特幣,對交易速度是有限制的,防止區塊過大(如今區塊限制1M左右),大約每秒很少於7筆,天天60萬筆。而如今峯值是天天7萬筆。

當我在2011年開始使用比特幣的時候,個人比特幣軟件花了一天的時間來下載從2009年起源開始到2011年的全部比特幣交易記錄。到了2013年,若是客戶端連續幾天沒有開啓運行的話,它每次啓動就得花幾個小時來遇上最近幾天的交易記錄的進度。

 

下面這個系列,講了區塊鏈技術:

上:Link    中:Link    下:Link

 

先看上《區塊鏈與銀行家(上篇:拜占庭將軍問題)

簡單來講,這條新聞告訴咱們目前央行正在探索用比特幣的底層技術——區塊鏈(Blockchain)來發行央行本身的數字貨幣的可行性。無獨有偶,大洋彼岸的納斯達克也在進行着本身的區塊鏈實驗。2015年12月30日,納斯達克宣佈初創公司Chain經過區塊鏈技術交易平臺Linq向私人投資者發行了該公司的股份[3]。 在聲明中,納斯達克稱Chain是第一家經過Linq平臺完成私募證券交易的公司。納斯達克的首席執行官Bob Greifeld表示:

 

『經過此次對區塊鏈技術的初次應用,咱們開啓了一項進程,它有可能從根本上爲現有的資本市場交易系統帶來深入的變革。』

 

事實上不只是央行和納斯達克,上圖中這些諸如高盛、花旗、瑞銀、西聯匯款等銀行和金融機構也都已經參與到了區塊鏈技術的投資和研究之中[4]。

 

比特幣是一種去中心化的加密數字貨幣(Crypto-Currency),其創始人中本聰(Satoshi Nakamoto)於2008年11月1日發表了一篇題爲《比特幣:一種點對點的電子現金系統》[5],論文中詳細闡述瞭如何在陌生人之間創建一套去中心化的電子支付系統。2009年1月3日,中本聰開發出了比特幣客戶端,並採集了第一批的50枚比特幣, 比特幣由此誕生。2009年10月5日出現了最先的交易所匯率:1美圓=1309.03比特幣[6],此後隨着價格的飆升,比特幣吸引到了愈來愈多的關注。

 

既然數字貨幣的構想早已出現,那爲何過去的30年間一直沒有成功的數字貨幣誕生呢?這就牽涉到一些技術方面的討論。首先咱們要知道理想的加密數字貨幣必定是分佈式的,所謂的分佈式,又叫去中心化,指的是整個系統的運行不依賴於某一個或某幾個中心節點。

 

關於兩種系統的比較,《海星模式》一書中有一個精彩的比喻:

 

『若是砍掉一隻蜘蛛的腦殼,毫無疑問它會死亡;可是砍掉海星的一條腿,它卻還會長出一條新腿,就連那隻砍掉的腿也會長成一個全新的海星。』

 

 

因而可知道德風險和法律問題對數字貨幣來講都是致命的,而這些又沒法經過計算機程序來輕易解決,所以分佈式系統纔是數字貨幣的理想選擇。可是創建一個分佈式的交易系統,在技術上卻要比集中式困難許多,由於在這一過程當中須要克服一個通訊領域裏的經典問題——拜占庭將軍問題(Byzantine Generals Problem)

 

 

拜占庭將軍問題(如下簡稱「共識問題」)的正式表述是:如何在一個不基於信任的分佈式網絡中就信息達成共識?(注意這與兩軍問題的區別。在上一篇文章有講)

因爲四我的的決策都是獨立作出的,所以最終的選擇結果就有256種可能,而只有當三人以上都剛好選擇了同一時間的時候,共識才被達成,而這樣的結果才64種,也就是說達成共識的機率僅爲1/4。這還只是四位將軍的狀況,若是將軍的人數是10人,100人,1000人呢?咱們稍加計算就能夠發現隨着人數的增長,達成共識的但願會變得愈來愈渺茫。

 

再看中《區塊鏈與銀行家(中篇:區塊鏈技術簡介)

有一我的有仲裁權 = 有一我的 + 有仲裁權

這個看似多餘的分割中其實包含了解決共識問題的關鍵思路。球場上的犯規裁判說了算,法庭上的勝負法官說了算,雖然咱們對由某我的或某個組織壟斷仲裁權這樣的安排習覺得常,可是你們有沒有想過這樣一個問題:誰規定了仲裁權必須和某個個體綁定在一塊兒了?當你意識到這個問題的時候就已經很是接近中本聰的答案了

 

區塊鏈技術給出的解決方案很是簡單:保留仲裁權,但不將其與某一個節點綁定,而是每次記帳的時候將仲裁權隨機分配給全網中的某個節點,而後其餘節點跟隨該節點完成記帳任務。這樣一來既能輕鬆地就帳本達成共識,又由於沒人知道下次記帳誰說了算,系統的去中心化特徵也被保留了。

 

那麼咱們能夠再來看一下區塊鏈技術在比特幣系統中具體是如何實現的

在比特幣系統中每時每刻都會產生許多交易,這些交易一經產生就向全網廣播,以保證每一個節點均可以收到,但它們並非零亂地散落在系統中,而是每隔一段時間就會被打包成一個區塊(Block)記錄到比特幣的總帳裏,將這些區塊按時間順序鏈接到一塊兒就成了區塊鏈(Blockchain),也就是說區塊鏈一詞其實有兩層含義,它既是分佈式系統中達成共識的技術,在比特幣系統中也特指包含了全部交易的總帳。比特幣的代碼是開源的,任何人均可以在本身的電腦上下載並運行客戶端,從而使本身的電腦成爲維護比特幣網絡的一個節點。每一個節點都存有一本包含所有交易的總帳,並按期將新產生的交易記錄到本身的總帳裏。就像以前提到的,每次記帳的時候都會有一個節點帶領你們一塊兒完成,那麼一個關鍵的問題就出現了:這個節點是如何選出的?怎麼保證該節點不會僞造和篡改交易內容呢?

這個目標是經過挖礦(Mining)來實現的。上面就是一個挖礦過程的示意圖,圖中每一個橫線表明一筆交易,矩形方框表明包含着許多交易的區塊,連在一塊兒就是總帳。挖礦過程是經過一個叫作SHA-256的函數實現的,它的功能是輸入任意一個文件,返回一個毫無規律的64位16進制數,虛線部分就是每次挖礦時礦工(Miner)須要輸入的內容,它由三部分組成:上一個區塊的信息,新產生的交易和一個隨機數。輸入以後SHA-256會返回一個結果,最早獲得足夠小的64位數的節點會將本身的隨機數和SHA-256的結果向全網廣播以供其餘人驗證 。目前這個「足夠小」的要求是前17位數全是0, 難度會隨着全網算力動態調整以保證約每10分鐘產生一個新礦(個人理解,增長0的個數能夠直接調整難度和時間)。驗證過程就是其餘礦工將收到的隨機數輸入到SHA-256中看可否獲得相同的結果,若結果不一樣,說明發出廣播的礦工的帳本和你們不同,有私自僞造和篡改交易的嫌疑,從而致使驗證失敗,這就保證了只有誠實節點才能挖到新礦。經過驗證的節點成爲新礦的礦主,它會將做爲SHA-256輸入內容的新交易打包成新的區塊記錄到總帳中,其餘節點也會照作。與此同時新礦主得到兩筆獎勵,一筆是新區塊中全部交易的手續費,目前廣泛爲每筆0.0001比特幣,不管交易金額大小;另一筆是新發行的比特幣,目前是每一個新礦發行25枚,該數額每四年減半。每次挖礦結束以後,全部礦工一塊兒投入到下一輪的挖礦比拼之中,每一個人挖到礦的機率和本身爲比特幣系統貢獻的算力成正比,總帳就是依靠這樣一個精巧而公平的挖礦機制不斷延續下去的。

 

以上就是比特幣的運行方式,即便有些地方看不太懂也沒有關係,只要你知道它能在沒有創建信任的去中心化網絡中,讓全部節點保存一本相同的總帳就能夠了。比特幣從誕生至今整整七年,儘管宣佈比特幣已經失敗的聲音不絕於耳,根據一個叫「比特幣訃告」的欄目統計,目前比特幣已經被宣告死亡90次了[10],但整個系統依然運行良好,比特幣和它底層的區塊鏈技術都經受住了時間的考驗。

 

再看下《區塊鏈與銀行家(下篇:區塊鏈技術在銀行業證券業的應用)

 

付款人——>付款人的銀行——>清算機構——>收款人的銀行——>收款人

 

因此在一個有志氣的銀行家眼裏,理想的支付流程固然是下面這樣:

 

付款人——>付款人的銀行——>收款人的銀行——>收款人

 

 

 

在一個有志氣的儲戶眼裏,理想的支付流程固然是下面這樣:

 

付款人——>收款人

 

 

應用前景

事實上證券交易也存在着跟支付流程相似的結構:

 

買方——>買方的經紀人——>證券交易所——>賣方的經紀人——>賣方

 

區塊鏈將在哪些方面提升交易所的效率?在有志氣的經紀人和有志氣的買賣方眼中理想的交易流程分別是怎樣的?對照咱們以前的分析,你們應該對這些問題已經心中有數了。

 

固然,共識問題中的信息也並不只限於全部權轉移,全部能夠數字化的內容理論上均可以被區塊鏈處理,並且目前已經有許多有趣的區塊鏈應用被開發出來了,好比去中心化的微博Twister去中心化的聊天軟件Bitmessage去中心化的雲儲存Storj去中心化的域名系統Dot-Bit等等。它們大都擁有着比特幣的鮮明印記:更低的成本,更好的安全性,沒法篡改的信息,和海星通常頑強的生命力……

 

That will fly, flies at last.

 

 

區塊鏈的更多補充,以及PPT等,也能夠看看下面這個頁面:

http://business.sohu.com/20161011/n470006712.shtml

相關文章
相關標籤/搜索