比特幣為什么需要建立在大量運算之上

Bitcoin 的基本原理
服務器君一共花費了110.269 ms進行了4次數據庫查詢,努力地為您提供了這個頁面。
試試閱讀模式?希望聽取您的建議

最近關于比特幣的話題很熱,一開始我對比特幣的概念還是云里霧里的,直至看到云風的這篇bitcoin的基本介紹,里面講了為什么要大量的計算,bitcoin這個概念才慢慢開始清晰起來。

昨天讀到了?Bitcoin?的中文介紹,覺得非常有意思。不過上面這篇文章解釋的非常不靠譜,我花了一晚上去Bitcoin的官方網站?仔細研究了一下,總算理解了其原理。感覺非常有啟發,尤其是對虛擬貨幣的流通和發行有許多借鑒意義。今天寫這篇 Blog 理一下。

什么是貨幣呢?貨幣就是商品(包括服務)交換的媒介。現在我們通行的貨幣是由有信譽的銀行發行的,基本上是由其信譽來擔保的。只要用的人都認可,那么我們就可以用它來交易。貨幣有一定的保值特性,我把我的勞動/服務/所有的商品換成貨幣后,銀行擔保我在日后的某一天,我還可以用它交換會差不多等值的東西。這個保證的前提是,銀行不會濫發新的貨幣以及大家都信任這一點。

以前,我們用貴金屬做貨幣。因為貴金屬產量不高,貨幣新增加的速度有限,而經濟體在不斷增大,市場需要更多的貨幣來讓商品盡量的流通。有需求就有價值,從這個意義上來說,貴金屬本身制造別的東西具備的價值是次要的,經濟體需要貨幣來流通商品這個需求才是主要的。而貴金屬產量有限,且曾經流通著的貴金屬貨幣由于各種原因會退出市場,那么即使是新造的貴金屬貨幣也有同樣甚至更高的價值。

Bitcoin 為什么保值,BTC (Bitcoin 的貨幣簡稱)存在于一個龐大的 p2p 網絡中。使用 Bitcoin 的群體公認了一種算法,這種算法在現今的條件下,每小時只會新產生大約 6 組新的 BTC ,目前一組是 50 個。也就是說,這個世界上,每個小時大約只會產生 300 個 BTC 。這個產量還會由網絡自動調整難度來限制產量。你沒辦法通過修改所有人的 Client 的算法及參數(client 是開源的)來加快貨幣產量。偽造的貨幣會被網絡丟棄(除非你可以控制大部分網絡節點)。

BTC 本身有什么價值?

BTC 的價值就是交易渠道本身。一組新制造出來的 BTC 提供了把舊的 BTC 從一個帳戶轉移到另一個帳戶的數學保證。這個安全保證背后的代價是大量的計算力。生產這么一個安全通道是需要消耗大量能源的,所以整個 BTC 用戶群體,獎勵那個造幣者(目前是 50 BTC)。

簡單說,我的理解就是,現在世界上所有的 BTC 背后都是用運行計算機的能量產生出來的,它們的總價值,(到現在一共有大約 12w 組 BTC 被生產出來,每組 50 個,市場價格大約 7.3 美金一個),應該是少于消耗掉的能源的總市場價值的。不過我想,用于生產 BTC 的能源大都原本就是不用也被浪費掉的資源。


一個沒有中心節點的“銀行”是怎么讓大家信任并工作起來的呢?

答案是,這個 p2p 網絡上每個節點都記錄了 BTC 誕生以來的每筆交易的詳單,并從中可以推測出每個 BTC 唯一的屬于誰。這樣你接受一筆交易時,就能知道別人給你的錢是不是合法的。

從最基本的說起:

每個帳戶其實就是一對公私匙,有私匙的人就是帳戶的主人。如果 A 要給 B 轉一筆錢,A 就把錢的數量加上 B 的公匙,用自己的鑰匙簽名。而 B 看到這個簽名,就可以了解,的確是 A 轉給了他如數的 BTC 。

那么這筆交易需要一個見證人,擔保交易發生過。這樣,以后 B 想用這筆錢的時候才是合法的。擔保人就是整個使用 BTC 的網絡。

A 在發起這筆交易的時候,必須把簽過名的交易單盡量的廣播到 p2p 網絡上,最終會讓每個節點都知道這件事。B 從 p2p 網絡上不斷的收到別人的確認信息。當它收到足夠多的確認信息后,就認為 A 的確發出了這條交易單。這以后,B 就可以自由使用這筆錢了。

當 B 使用 A 轉給它的錢給 C 時,也會廣播給足夠多(最終所有人都收到)的人讓他們擔保。每個擔保人只有確信 B 有足夠多的錢可以支付的時候才做確認。本質上,BTC 網絡并沒有記錄每一塊錢屬于誰,它記錄的是從誕生起到當前的每一筆交易,并推算出每個帳戶里有多少錢。任何人試圖確認一個交易單時,它需要確認的是轉出帳號上有沒有那么多錢。

Bitcoin 需要解決的核心問題是,如何避免一筆錢被花兩次。

整個帳單序列是一環套一環的。每個人在完整的全局帳單上簽上新的一筆的時候,都需要利用前面信息生成后面的。這個帳單序列被稱為 chain of blocks 。每個 block 里面包含有若干條經過確認并 hash 簽名(難以偽造)的交易記錄。每個 block 都和全局表上的上一個 block 有關聯。每條帳單都會通過 p2p 網絡最終被轉發給制造新 block 的節點上。

這個制造新 block 的過程被叫做 mining ,制造新 block 就是把最近收到的帳單打包在剛制造的 block 里。這個打包的過程即制作的過程,只有極其稀少的幾率被制造成功。(你可以理解成把新收到的帳單合在一起,一次成型不可修改,如果制造失敗就要再來一次)一旦制造成功,你就把新的 block (被認為是對老的全局 block 鏈的延續)廣播出去。

因為是 p2p 網絡,可能有許多人都在同時制造新的 block ,但有一個排序機制保證只有最優(最難,花費最大計算時間的)的那個新 block 被網絡群體接受,掛在全局的 block 鏈上。重復一次,整個 BTC 網絡只有一個全局帳單表,每個節點都完整的保存有一份。

這個全局帳單表會越來越大,block 鏈越來越長,在最新的部分,必然有許多分茬。這是因為 p2p 網絡的 mining 過程是分開并行進行的,每條新帳單也不能立刻廣播給所有的節點。每個 mining 的節點都有責任把他新收到的,在他認可的老的全局帳單上不存在的帳單,合在他準備制造的新 block 中。一旦新 block 被制造出來,就立刻廣播出去,爭取得到更多人的認可。主要是得到那些想 mining 的人的認可,這些人會在這個 block 的基礎上制造新的 block 。

如果 p2p 網絡過大,交易帳單不能盡量的迅速的廣播到全網絡。就會出來 p2p 的網絡的局部保持有小群體共同認可的一份全局帳單。多個全局帳單的分支同時發展是有可能的。因為每個小群體都可能認為他們看見的那部分更長更有效。但是,只有有人發現另一條分支更長,它就會轉換陣營。所以,有一定的可能性,你的帳單被一個小群體接受,但在一段時間后,被更大的陣營拋棄。

不過,算法參數決定了,新的 block 產生速度很慢,如果你的帳單被多達 6 個人確認,基本上就保證了它合并到的那份全局帳單,就是 p2p 網絡全體認可的。


既然生成新 block 費時費力,制造出新 block 的幾率好象買彩票中大獎,還有那么多人去執行程序計算出新 block 呢?答案是,每個制造出新 block 的人,都有權利構造一條帳單聲明老天給了我 50 BTC 。這個規則是被所有 BTC 用戶共同承認的。把制造 block 等同于成挖金礦 (mining) 只是一個形象上的比喻。實際上,沒有人可以把金子挖出來囤積。每個新 block 必須包含全局表上的上一個 block 的 hash 值,BTC 網絡自我調節難度,讓每 10 分鐘大約產生一個新 block 。如果你 10 分鐘內沒制造出新的 block ,差不多就是說你前面 10 分鐘干的活白干了。從最新版的 block 繼續演算。

所以更恰當的比喻是買彩票。一個每 10 分鐘開一次的彩票。你不停的花錢買,10 分鐘內開中了就是你的,開不中先買的都作廢,然后下一輪。


數學上怎樣保證 mining 的過程需要消耗大量的 CPU 時間?并只有很小的幾率成功?

這里用到一個叫做?Hashcash?的系統。它最早是為了改善 email spam 的問題被發明出來的。

就是給一段特定信息(比如這封 email 是從誰發給誰)加一個特定的 hash 頭。這個 hash 頭需要大量的 CPU 時間計算出來。發 spam 的人沒有那么多 CPU 時間為群發的每一封 email 計算一個符合要求的 hash 頭,所以認為有這個合法 hash 頭的 email 不太可能是 spam (花了 CPU 時間在上面)

這個算法就是,為你想保護的信息,找到一串數字,附加上去后,使用某種公認的 hash 算法,比如 SHA-2 ,算出一個 hash 值。如果 hash 值由一長串 0 打頭(具體多少個決定了難度),那么就成功了。

為一段信息,找到這串數字,在目前來說,除了暴力嘗試沒有什么好的方法。也就是隨機更換數字,換一次就 hash 一次比對。在一個可以預期的嘗試次數后,一般都能找到想找的數字。

每個想 mining 賺 BTC 的人,不停的從 BTC 網絡上監聽信息。如果有人發布了新的合法的 block ,他就合并到本地的全局表里。并重置自己的計算過程,從新得到的 block 開始。如果有新發布的交易單,也記錄下來。不斷的把最新的 block 的 hash 值、新收到的交易單,自己獲得 50 BTC 的那條獎勵單合并在一起,計算 SHA-256 ,看看結果是否滿足條件。一旦滿足,就把這個新的 block 廣播出去。

當足夠的人認可它,(以它為基礎計算后面的 block ),他也就獲得了那 50 BTC 。


為了匹配 BTC 的經濟規模。所有的 Bitcoin client 都被設置成,每 210000 個 block ,生產新 block 的人被認可憑空獲得的 BTC 數量比之前的少一半(如果這個時候他還在包內寫上自己獲得 50 BTC ,其他人不會確認他的這個 block )。這會讓 BTC 的總量增速變緩。新的 block 產生的速度是由難度來調節的。這個難度會由 p2p 網絡根據最近生產 block 的速度自動調節。所以即使日后計算能力增加,也能保證大約 10 分鐘一個的速度。

而且,隨著生產新 block 的收益減少,愿意貢獻自己的 CPU 來 mining 的節點也會變少。(如果減少太多,只需要減少難度即可)

最終,p2p 網絡不再憑空制造出新的 BTC ,這個時候制造新的 block 的動力是什么呢?那就是交易稅。因為沒有什么人愿意生產新的 block ,發起交易就變的困難。(沒有 block 可以容納交易單)希望交易被確認的人可以聲明,如果有人制造出新的 block 接納他的交易單,他會支付一小筆交易稅給他。當許多人都這么做的時候,制造 block 又變的有利可圖了。只不過,直接上不再有新的 BTC 誕生,只是在這些 BTC 用戶之間流通。

總有一些 BTC 會消失,主要是那些帳號的私匙丟失了,沒有任何人可以轉移走帳戶上的錢。不能流通的貨幣就不是貨幣了。但最終 BTC 總體會達到一個比較大的規模,準確說是兩千一百萬個。但 BTC 本身是可以切割的,比如你可以支付給別人 0.01 個 BTC 。所以 BTC 本身會升值,總數也一直夠用。

本文地址:http://www.zqhthc.tw/librarys/veda/detail/2560,歡迎訪問原出處。

不打個分嗎?

轉載隨意,但請帶上本文地址:

http://www.zqhthc.tw/librarys/veda/detail/2560

如果你認為這篇文章值得更多人閱讀,歡迎使用下面的分享功能。
小提示:您可以按快捷鍵 Ctrl + D,或點此 加入收藏

大家都在看

閱讀一百本計算機著作吧,少年

很多人覺得自己技術進步很慢,學習效率低,我覺得一個重要原因是看的書少了。多少是多呢?起碼得看3、4、5、6米吧。給個具體的數量,那就100本書吧。很多人知識結構不好而且不系統,因為在特定領域有一個足夠量的知識量+足夠良好的知識結構,系統化以后就足以應對大量未曾遇到過的問題。

奉勸自學者:構建特定領域的知識結構體系的路徑中再也沒有比學習該專業的專業課程更好的了。如果我的知識結構體系足以囊括面試官的大部分甚至吞并他的知識結構體系的話,讀到他言語中的一個詞我們就已經知道他要表達什么,我們可以讓他坐“上位”畢竟他是面試官,但是在知識結構體系以及心理上我們就居高臨下。

所以,閱讀一百本計算機著作吧,少年!

《程序員修煉之道:從小工到專家》 亨特(Andrew Hunt) (作者), 托馬斯(David Thomas) (作者), 馬維達 (譯者)

《程序員修煉之道:從小工到專家》內容簡介:《程序員修煉之道》由一系列獨立的部分組成,涵蓋的主題從個人責任、職業發展,知道用于使代碼保持靈活、并且易于改編和復用的各種架構技術,利用許多富有娛樂性的奇聞軼事、有思想性的例子及有趣的類比,全面闡釋了軟件開發的許多不同方面的最佳實踐和重大陷阱。無論你是初學者,是有經驗的程序員,還是軟件項目經理,《程序員修煉之道:從小工到專家》都適合你閱讀。

更多計算機寶庫...

英超直播吻球网