比特幣白皮書翻譯-part2

比特幣白皮書翻譯-part2

比特幣白皮書翻譯-part2

編者按:本文由Peter 王廣忠的技術分享,轉載請註明來自Peter 王廣忠,並聯系作者獲得授權。Peter 王廣忠,程序員,專業區塊鏈講解員

接上一篇:Peter 王廣忠:比特幣白皮書翻譯-part1

4. 工作量證明

我們真正需要的是一個類似 Adam Back 的哈希現金的工作量證明系統,而不是報紙或者論壇,來達成點對點的分佈式時間戳服務器。工作量證明涉及到去找一個值,當對這個值進行類似 SHA-256 這樣的哈希運算的時候,得到的哈希值滿足以特定數量的零打頭。隨著零的數量的增加,找到這個值所需要的工作量會呈指數增長,但是要驗證這個值是合格的只需要一次哈希運算即可。

我們給區塊數據添加一個隨機數,每次運算區塊的哈希的時候都把它加一,這樣經過不斷嘗試就能找到一個合格的隨機數的值,保證區塊哈希以所需位數的零打頭,這就是我們需要為時間戳服務器構建的工作量證明機制了。當我們花費了 CPU 算力去讓區塊滿足了工作量證明機制的要求,那麼這個區塊就很難被改動了,因為改動區塊必須要重新運算獲得合格的隨機數。隨著新區塊不斷的添加的這個區塊的後面,形成一條鏈,那麼修改區塊的工作量中還會包含重新制作之後的所有區塊。

比特幣白皮書翻譯-part2

工作量證明機制同時解決了如何在投票的時候計票的問題。如果用一個 IP 地址代表一票,那麼就很容易搗鬼,因為有人可以很輕易的獲得很多 IP 。而工作量證明機制的思路是一個 CPU 一票。這樣最長的那條鏈就可以代表多數票,因為它是用最多的算力生成出來的。如果誠實的節點控制了大多數的 CPU 算力,那麼誠實的鏈就會比任何競爭鏈都要延長的更快。要想修改一個過去的區塊,攻擊者需要完成這個以及後面所有區塊的工作量證明過程所需的工作量,然後趕上並超過所有誠實節點的工作量。稍後我們會展示,運算速度比較慢的攻擊者追上所有誠實節點的概率會隨著後續區塊的增多而呈指數減小。

因為硬件速度和節點數量的變化,工作量證明的難度是會不斷調整的。調整通過不斷改變每小時平均能夠生成的區塊數來實現。如果生成的太快,那麼難度就會增加。

5. 網絡

網絡運行的步驟如下:

  • 1 新交易被廣播給所有節點2 節點把交易收集到一個區塊中3 節點開始計算這個區塊的工作量證明4 當一個節點找到工作量證明後,它就會把區塊廣播給所有節點5 只有當區塊中的交易都是有效的並且是沒有被花費的,其他的節點才會接受這個區塊6 接受的表現形式是把這個區塊的哈希作為前哈希來製作下一個區塊。

所以節點都始終認為最長的那條鏈是正確的,並基於這條鏈來運算。如果兩個節點同時廣播出了不同版本的下一個區塊,那麼某些節點可能會先收到其中一個,而其他節點卻先收到另一個。這樣,節點會基於它先收到的節點來運算,但是也會保存另外一個分支,因為這個分支也很有可能成為最長的。當下一個工作量證明被找到後,到底哪條分支比較長就明確了,發現自己站錯隊的節點會切換到最長的這個分支上。

新的交易不一定非要到達網絡上的所有節點。只要足夠多的節點收到了這個交易,那麼它不久後就可以被收入到區塊中。區塊廣播的時候也是有容錯能力的,不必擔心個別的信息丟失。如果節點沒有收到區塊,那麼當它收到下一個區塊的時候,就會發現自己少了一個區塊,然後會再次請求。

6. 激勵

按照約定,區塊中的第一個交易是比較特殊的,裡面會生成一個歸區塊創建者所有的幣。這個激勵措施讓節點有動力去支持網絡。同時這也是發行新幣的方式,因為網絡上不會通過中央權威發行新幣。我們穩定的去增加幣的數量,很像去花費資源挖礦來增加黃金的流通量,只不過我們這裡花費的資源是 CPU 時間和電力。

交易手續費是另外一種激勵。如果一筆交易的輸出值小於它的輸入值,那麼其中的差額就是手續費。手續費會被添加到交易所在區塊的激勵總額之中。一旦既定數量的幣已經進入流通,那麼獎勵將全部由交易手續費來完成,整個系統不會有通貨膨脹。

這樣的激勵形式也很有可能讓節點保持誠實。如果一個貪婪的攻擊者手裡真的掌握了比全部誠實節點還要多的 CPU 算力,那他可以有兩種選擇。一是可以選擇欺騙他人來把自己已經花掉的幣再偷回來。另外就是可以用算力來生產新幣。他會發現遵守規則會獲利更多。因為規則可以讓他獲得的幣比其他所有人加起來還要多。而如果破壞規則了,那麼他自己手裡的幣也就不值錢了。

7. 回收硬盤空間

當一個幣的最近一個交易被埋在足夠多的區塊之下,就可以扔掉之前花費這個幣的交易來節省硬盤空間了。區塊中的交易是通過默克爾樹的形式來生成哈希的,這使得扔掉交易之後區塊的哈希也不會變,因為只有默克爾根會被包含在區塊哈希中。把默克爾樹的一些分支砍掉,刪掉一些內部哈希,這樣就能壓縮老區塊。

比特幣白皮書翻譯-part2

一個不帶交易的區塊頭大概是80字節。假定每十分鐘生成一個區塊,每年生成的數據總量就是:80字節 * 6 * 24 * 365 = 4.2M 。就2008年來看,計算機系統一般都是 2G 的內存。根據摩爾定律,每年會增加 1.2G ,這樣算的話,即使把所有的區塊頭都保存到內存裡也不成問題。


分享到:


相關文章: