汪詰為你長文解惑02:比特幣原理深入——區塊鏈技術
文章推薦指數: 80 %
到此為止,我們去中心化帳本的理想只實現了一半,並沒完全實現,為什麼呢?因為還有兩個重大的問題沒有解決:
第一個問題:帳本同步問題。
比特幣網絡中有那麼多台電腦,一條交易信息發送出來的時候,當然不可能所有的電腦都開機,必然有一些處於離線狀態,開了電腦也未必開著比特幣客戶端,所以總有一些電腦無法立刻收到這條信息。
這樣就會導致不同電腦上的記錄不同步,到底以誰的電腦記錄為準呢?
第二個問題:如何防止同一個比特幣被重複使用呢?假如有一個黑客,他只有 1 個比特幣,但是他卻同時把這個比特幣付給 A 和 B(雖然理論上無法真正的同時,但可以做到間隔時間極短),於是他就會在網絡上廣播兩條信息,一條是支付給 A 的信息,一條是支付給 B 的信息,因為網速的關係,必然有的電腦先收到了信息1,有的電腦先收到了信息2,這就產生了矛盾,如何確定哪一條信息是有效的呢?
為了解決上面這兩個難題,"區塊鏈"技術橫空出世,"中本聰"的論文真正在全世界掀起大風大浪的不是我們上一章介紹的比特幣的基本工作原理,數字指紋和非對稱加密都是成熟的技術。
真正讓中本聰一戰成名的是"區塊鏈"技術。
但請記住:比特幣不是區塊鏈,它只是區塊鏈技術的一個具體應用。
到底什麼是區塊鏈?它怎樣巧妙地解決了帳本同步和信息不重複的問題呢?
"中本聰"的總體思路是這樣的:比特幣網絡中的所有電腦都只認可唯一的一個帳本,任何一台電腦在接入比特幣網絡時,首先要同步這個唯一的帳本,任何一台電腦想要往這個帳本上寫入新的信息,必須要完成一套繁瑣的"手續",這套"手續"複雜到幾乎不太可能被同時完成兩次,即便真的發生了巧合,被同時完成了兩次甚至多次,也有一個規則可以判定哪條信息是合法的,哪條信息該被拋棄。
讓我一步步為你揭開區塊鏈技術的面紗。
為什麼要叫"區塊鏈"?因為中本聰把這個帳本設計成了由一個個"信息包"首尾相連而成的長鏈,每一個"信息包"被稱為一個"區塊",這些區塊每一個都有唯一的編號(在比特幣系統中,編號被稱為高度(height)),這些編號就是自然數1、2、3、4……一直往下排,不允許跳躍,也不允許中斷和重複。
下面講解區塊的具體規則:
第一個區塊當然是由區塊鏈的發明人"中本聰"親自創建的,那是北京時間 2009 年 1 月 4 日,在芬蘭赫爾辛基的一台小型伺服器上,第一個區塊誕生了,這也被稱作"創世區塊"。
在這個區塊上,包含的主要信息是:
中間那段話是"中本聰"刻在第一個區塊上的紀念,從第 2 個區塊開始,以後每一個區塊都必須嚴格按照比特幣系統的規則來創建。
區塊的規則是:
前一個區塊的數字指紋+ 固定信息+ 收到的交易記錄 +一個隨機數
區塊鏈所有的奧妙就在尾巴上加的這個隨機數上,因為它實在太奧妙,讓我等凡夫俗子只能大呼過癮,所以後面我就把它稱為"奧數",以方便講解。
"中本聰"規定:這個新區塊的數字指紋(一個 256 位的二進位數)的前 72 位必須全部為 0 。
回憶一下我們前面介紹過的數字指紋的知識。
因為 SHA 算出來的指紋是毫無規律可循的一個數字,所以,想要滿足"中本聰"的這個變態規定,唯一的辦法就只能憑運氣湊"奧數",從 0 開始不斷地去常試,直到滿足要求為止。
這就是一個純粹的機率問題。
我們來算一下要滿足這個要求的機率是多大?
因為二進位數,每一位只有兩種可能性,0 或者 1,所以,湊出一個奧數的可能性是 2 的 72 次方分之一,也就是 1 / 4722366482869645213696。
這個數字已經大到看花眼了吧,它大約就是 4.7 萬億億分之一。
換句話說呢,就是平均要進行 4.7 萬億億次 SHA 計算,才可能得到一個"奧數",你可見每一個"奧數"的金貴。
最巧妙的是,"奧數"並不是某一個方程的解,解出一個少一個,因為每一個區塊的字符串都不同,所以,每一次尋找奧數都需要從 0 開始,任何一個數字都有可能成為新的奧數,完全沒有規律可循。
一旦成功找到了一個奧數,就獲得了一次記帳權力,可以給帳本上新增加一個區塊。
那麼,為什麼要花時間找奧數,去給帳本記帳呢?因為好處實在太大了。
比特幣系統規定,每成功增加一個區塊,這台記帳的電腦(實際上是某個帳號)就能獲得 12.5 個比特幣的獎勵(截止到本文發稿時的獎金額),以及這個區塊中所有交易的手續費,總額取決於交易頻繁程度(平均約 2 比特幣)。
這樣一來,相當於每找到一個奧數,可以獲得
14.5 比特幣獎勵,按照本文寫作時的比特幣市場價,相當於12 萬美元。
這麼豐厚的獎勵,自然就會吸引大量的電腦願意去搶奪記帳權。
尋找奧數就是搶記帳權,搶記帳權也就是挖比特幣。
因此,尋找奧數也被形象地稱為"挖礦"。
挖礦的電腦就叫"礦機",一個裝滿礦機的房間當然就可以叫"礦廠"了嘛,礦廠的主人就是"礦主",他們是比特幣江湖中的弄潮兒。
但是,我需要給你解釋一下挖礦的難度,讓你打消去挖礦的衝動。
個人電腦的運算速度大約是每秒可以進行 60 萬次 SHA 計算,也就意味著,一台個人電腦需要花一千萬年才有可能湊出一個奧數。
當然,這是一種機率計算,我不能從理論上排除某人的人品超新星爆發,算了一次奧數就中了 4 萬億億分之一機率的獎。
但我還是想勸你不要相信自己是耶穌轉世,你沒有那個命。
我給你看看人家專業的礦廠是怎樣的:
圖:一個中等規模礦廠(圖片來源:百度圖片搜索)
這只是一個中等規模的礦廠,大規模的礦廠據說有幾萬甚至幾十萬台礦機同時運行。
我在《看看新聞》 2017 年 6 月 17 日的一個新聞中看到,記者採訪了一個位於中國四川的礦廠,根據報導,這個礦廠有 5000 多台礦機的規模,平均每天耗電超過 20 萬度,當地的電價是 3 毛每度,一天光是電費就 6 萬多元,平均每天可以挖出大約 50
個比特幣,一年左右回本,之後能做到20%左右的利潤。
不過我覺得這個報導中的數據前後矛盾,我查了一下,比特幣當時的市場價是大約 2500 美金/個,美元兌人民幣的匯率大約是 6.8 ,所以,每天的收入大約是 85 萬人民幣,一年的收入大約 3.1億元,一台礦機的成本均價是 1 - 2 萬元, 礦廠的礦機總成本是 5000 萬- 1億元,再算上電費等,一年起碼 2
億的利潤。
我想,在充分市場競爭下,出現這種暴利的可能性很低。
所以,不是記者搞錯了,就是被採訪對象在吹牛不打草稿。
由於比特幣的價格和全網算力的波動很大,所以投資比特幣礦廠很難做長期預測,不確定因素太多。
圖:看看新聞報導的位於四川的某礦廠(圖片來源:《看看新聞》官網)
根據我們前面掌握的比特幣知識,50 個比特幣,相當於找到了 4 個奧數,搶到了 4 次記帳權。
目前,整個比特幣網絡的所有礦機加起來的總算力能達到的水平,大約平均每 10 分鐘可以找到一個奧數,也就意味著平均每 10 分鐘生成一個新的區塊。
當然,這個 10 分鐘是一個平均數,快一點的話 3、4 分鐘生成一個區塊,慢一點的話 15 分鐘左右。
正因為奧數太難找,每個區塊平均要 10 分鐘才能生成一個,所以就能基本解決我在本章開頭提出的第一個問題"如何同步帳本?",只要有個 3、4 分鐘的時間,足以讓所有在線的電腦同步到這個區塊了,那些不在線的電腦或者第一次運行客戶端的電腦,上線以後必須要先做一件事情,就是從相鄰的節點上獲取最新的帳本。
請注意,我用了"基本解決"這個詞,也就意味著,並沒有完全解決"帳本同步"的問題。
這是因為總會有極小的機率兩台礦機恰好同時(只要在網絡上所有在線的節點沒有完成區塊鏈同步之前都可以算同時)找到奧數,也就意味著同時搶到了記帳權。
因為礦機實在太多了,這樣的小機率事件時不時也會發生一次。
同時搶到記帳權的礦機都會將自己生成的新區塊廣播到比特幣網絡中。
遇到這種情況,比特幣系統怎麼處理呢?
在這種情況下,相當於網絡上的其他節點收到了兩個合法的新區塊,因為網絡節點的地域分布不同,所以,不同的節點收到這兩個新區塊的先後次序就會不同。
此時,所有的節點會暫時保留兩個新區塊,並且把區塊鏈做一個臨時的分叉,如下圖所示:
(圖片來源:自繪)
接下去,比特幣網絡中必然又會有其中一個節點(礦機)搶到了記帳權,這時該節點就會將生成的最新區塊接到其中的一個分支上,那到底是接到新區塊 1上還是 2 上呢?系統規則是:這個節點先收到哪個區塊,就接到哪個區塊上,同時放棄另一個區塊,然後全網廣播,如下圖所示:
(圖片來源:自繪)
比特幣網絡上的所有節點在收到最新的區塊鏈後,只要發現其中一個分支比另外一個分支多 2
個區塊了,就立即也放棄那個短的分支,總之,比特幣網絡永遠只承認更長的那條分支。
你可能會想,那如果小機率事件再次發生,在區塊鏈第一次分叉後,又是同時產生了兩個新區塊,而恰好兩個新區塊產生在兩個不同的分支上,這時候,其他節點收到的區塊鏈還是兩個一樣長的分支,那怎麼辦?很好辦,還是同樣的規則,只要分支一樣長就暫時保留,直到出現兩個分支不一樣長時,就放棄短於 2
個區塊的,保留長的。
那個被放棄的分支中所有交易和比特幣獎勵都會被判定為無效。
因為有了這個臨時分叉的規則,所以,比特幣玩家在完成一筆交易後,不能立即認為這筆交易是成功的,有可能會被取消,必須要等到一定數量的新區塊生成後,如果交易依然沒有被取消,這才能放心地認為交易成功了。
那到底要等到多少個新區塊產生才能放心呢?按照機率來說的話,小額交易有這麼三個新區塊產生就夠了,但是大額交易的話,為了更保險,一般認為是等到 6
個新區塊產生,就足以放心了。
前面說過,每個區塊產生的平均時間是 10 分鐘,也就意味著,一筆大額交易需要 1 個小時左右才能確認交易成功。
但是小額交易確認的時間往往會更長,甚至長達好幾天。
聽到這個你可能會有點兒糊塗,剛才不是還說小額交易一般只要三個新區塊產生就夠了嗎?怎麼確認時間反而會更長呢?比特幣網絡剛剛誕生的頭幾年,確實不會出現這樣的怪事,但是這幾年隨著交易量的猛增,就會出現這種怪事了。
為什麼?先回憶一下每個區塊的規則:
前一個區塊的數字指紋+ 固定信息+ 收到的交易記錄 +奧數
你的交易記錄要被寫到區塊鏈上,有一個前提:礦工將你的這筆交易記錄打包到這個區塊上。
你可能想問:為什麼會不打包?難道系統規則還允許不打包嗎?打包成功了不是還要給礦工交稅嗎?礦工好不容易搶到一次記帳權,怎麼會有錢不賺呢?
是的,允許不打包。
原因不是礦工不想賺錢,而是"不可抗力",關鍵問題是每一個區塊允許存儲的數據量有限。
中本聰當初設計比特幣系統時,規定了每一個區塊最大只能是1MB,一條交易記錄大概是 0.25K,那麼一個區塊最多可以儲存4000多條交易記錄,如果在一個新區塊產生的時段中,發生的交易請求超過了 4000
條,那就肯定存不下了。
我們可以算算,這個量大概是一個怎樣的交易頻率,每個區塊的平均產生時間是 10 分鐘,也就意味著,平均每秒鐘的交易量如果超過 7 條,那麼就一定會出現排隊等待打包的交易記錄了。
這個交易頻率實在很低,要知道支付寶一秒鐘大約要處理上萬筆交易。
這一秒鐘七筆交易對於全球來說,實在是太不夠用了。
一般來說,大額交易優先打包,小額交易,手續費越高的交易越優先打包,打包規則礦工有一定的自主權。
比特幣交易手續費的規則比較複雜,不同的礦工收的還不一樣,不是三言兩語能說清。
但有一點可能會讓你感到詫異,越是大額的交易反而收費越低,甚至免費。
交易額越小反而費率越高。
這是因為,交易手續費除了鼓勵礦工挖礦,還有一個非常重要的功能,就是防止有人惡意發布大量的小額交易造成信息擁堵。
現在,比特幣交易滯留是非常普遍的現象,很多小額交易甚至等上好幾天都確認不了,因此,很多人不惜附加很高的交易手續費來讓礦工提前替他們打包。
好了,講到這裡,有關區塊鏈的核心原理就講完了,關鍵要記住,"中本聰"利用區塊鏈技術,巧妙地解決了帳本同步和信息不重複的問題,這就使得去中心化帳本的理想最終得以實現。
學習知識,我認為最佳的方式就是帶著問題學習,在學習過程中,先掌握知識的主幹,如果還有興趣,再去了解那些枝枝杈杈。
以上三章,第一章是讓你帶上問題,第二、三章就是比特幣和區塊鏈知識的主幹,如果你消化完畢,可以繼續閱讀下一章,了解一些枝杈。
更多精彩:
汪詰為你長文解惑03:比特幣交易和神秘的中本聰
區塊鏈世界默默付出,你不知道的,上百萬礦工!
想了解區塊鏈硬碟挖礦,點擊底部原文連結按照中本聰最初的設想,比特幣是一個由全體「礦工」共同維護的網絡。在這個網絡中,誰掌握了算力誰就掌握了投票權,這也意味著擁有了比特幣世界裡的話語權。2017年...
從POW到Casper來感受下以太坊共識機制演進藝術(上)
囚徒戈多第4篇文章,閱讀需要5分鐘這或許是全網解釋區塊鏈的價值核心--共識機制最詳細的文章。區塊鏈起源於比特幣,發展於以太坊。想對區塊鏈有系統性的認知,最好先熟知比特幣和以太坊的知識。這是我從比特
比特幣「礦工」的自白:曾買比特幣「礦機」股清零,幾近乞討
在數字貨幣比特幣的世界中,存在一種神秘的工種——「挖礦」。顧名思義,就是像挖金子一樣去「挖」比特幣。挖比特幣的人被稱為「礦工」,孫小小(化名)就是一名「礦工」。孫小小是Haobtc自營礦場的負責...