昨天讀到了 Bitcoin 的中文介紹,,覺得非常有意思。不過上面這篇文章解釋的非常不靠譜,,我花了一晚上去Bitcoin的官方網(wǎng)站 仔細研究了一下,,總算理解了其原理。感覺非常有啟發(fā),,尤其是對虛擬貨幣的流通和發(fā)行有許多借鑒意義,。今天寫這篇 Blog 理一下,。
什么是貨幣呢?貨幣就是商品(包括服務)交換的媒介?,F(xiàn)在我們通行的貨幣是由有信譽的銀行發(fā)行的,,基本上是由其信譽來擔保的。只要用的人都認可,,那 么我們就可以用它來交易,。貨幣有一定的保值特性,我把我的勞動/服務/所有的商品換成貨幣后,,銀行擔保我在日后的某一天,,我還可以用它交換會差不多等值的 東西。這個保證的前提是,,銀行不會濫發(fā)新的貨幣以及大家都信任這一點,。
以前,我們用貴金屬做貨幣,。因為貴金屬產(chǎn)量不高,,貨幣新增加的速度有限,而經(jīng)濟體在 不斷增大,,市場需要更多的貨幣來讓商品盡量的流通,。有需求就有價值,從這個意義上來說,,貴金屬本身制造別的東西具備的價值是次要的,,經(jīng)濟體需要貨幣來流通 商品這個需求才是主要的。而貴金屬產(chǎn)量有限,,且曾經(jīng)流通著的貴金屬貨幣由于各種原因會退出市場,,那么即使是新造的貴金屬貨幣也有同樣甚至更高的價值。
Bitcoin 為什么保值,,BTC (Bitcoin 的貨幣簡稱)存在于一個龐大的 p2p 網(wǎng)絡中,。使用 Bitcoin 的群體公認了一種算法,這種算法在現(xiàn)今的條件下,,每小時只會新產(chǎn)生大約 6 組新的 BTC ,,目前一組是 50 個。也就是說,,這個世界上,,每個小時大約只會產(chǎn)生 300 個 BTC 。這個產(chǎn)量還會由網(wǎng)絡自動調(diào)整難度來限制產(chǎn)量,。你沒辦法通過修改所有人的 Client 的算法及參數(shù)(client 是開源的)來加快貨幣產(chǎn)量,。偽造的貨幣會被網(wǎng)絡丟棄(除非你可以控制大部分網(wǎng)絡節(jié)點)。
BTC 本身有什么價值,?
BTC 的價值就是交易渠道本身,。一組新制造出來的 BTC 提供了把舊的 BTC 從一個帳戶轉移到另一個帳戶的數(shù)學保證,。這個安全保證背后的代價是大量的計算力。生產(chǎn)這么一個安全通道是需要消耗大量能源的,,所以整個 BTC 用戶群體,,獎勵那個造幣者(目前是 50 BTC)。
簡單說,,我的理解就是,,現(xiàn)在世界上所有的 BTC 背后都是用運行計算機的能量產(chǎn)生出來的,它們的總價值,,(到現(xiàn)在一共有大約 12w 組 BTC 被生產(chǎn)出來,,每組 50 個,市場價格大約 7.3 美金一個),,應該是少于消耗掉的能源的總市場價值的,。不過我想,用于生產(chǎn) BTC 的能源大都原本就是不用也被浪費掉的資源,。
一個沒有中心節(jié)點的“銀行”是怎么讓大家信任并工作起來的呢,?
答案是,這個 p2p 網(wǎng)絡上每個節(jié)點都記錄了 BTC 誕生以來的每筆交易的詳單,,并從中可以推測出每個 BTC 唯一的屬于誰。這樣你接受一筆交易時,,就能知道別人給你的錢是不是合法的,。
從最基本的說起:
每個帳戶其實就是一對公私匙,有私匙的人就是帳戶的主人,。如果 A 要給 B 轉一筆錢,,A 就把錢的數(shù)量加上 B 的公匙,用自己的鑰匙簽名,。而 B 看到這個簽名,,就可以了解,的確是 A 轉給了他如數(shù)的 BTC ,。
那么這筆交易需要一個見證人,,擔保交易發(fā)生過。這樣,,以后 B 想用這筆錢的時候才是合法的,。擔保人就是整個使用 BTC 的網(wǎng)絡。
A 在發(fā)起這筆交易的時候,,必須把簽過名的交易單盡量的廣播到 p2p 網(wǎng)絡上,,最終會讓每個節(jié)點都知道這件事。B 從 p2p 網(wǎng)絡上不斷的收到別人的確認信息,。當它收到足夠多的確認信息后,,就認為 A 的確發(fā)出了這條交易單,。這以后,B 就可以自由使用這筆錢了,。
當 B 使用 A 轉給它的錢給 C 時,,也會廣播給足夠多(最終所有人都收到)的人讓他們擔保。每個擔保人只有確信 B 有足夠多的錢可以支付的時候才做確認,。本質(zhì)上,,BTC 網(wǎng)絡并沒有記錄每一塊錢屬于誰,它記錄的是從誕生起到當前的每一筆交易,,并推算出每個帳戶里有多少錢,。任何人試圖確認一個交易單時,它需要確認的是轉出帳 號上有沒有那么多錢,。
Bitcoin 需要解決的核心問題是,,如何避免一筆錢被花兩次。
整個帳單序列是一環(huán)套一環(huán)的,。每個人在完整的全局帳單上簽上新的一筆的時候,,都需要利用前面信息生成后面的。這個帳單序列被稱為 chain of blocks ,。每個 block 里面包含有若干條經(jīng)過確認并 hash 簽名 (難以偽造) 的交易記錄,。每個 block 都和全局表上的上一個 block 有關聯(lián)。每條帳單都會通過 p2p 網(wǎng)絡最終被轉發(fā)給制造新 block 的節(jié)點上,。
這個制造新 block 的過程被叫做 mining ,,制造新 block 就是把最近收到的帳單打包在剛制造的 block 里。這個打包的過程即制作的過程,,只有極其稀少的幾率被制造成功,。(你可以理解成把新收到的帳單合在一起,一次成型不可修改,,如果制造失敗就要再來一次) 一旦制造成功,,你就把新的 block (被認為是對老的全局 block 鏈的延續(xù))廣播出去。
因為是 p2p 網(wǎng)絡,,可能有許多人都在同時制造新的 block ,,但有一個排序機制保證只有最優(yōu)(最難,花費最大計算時間的)的那個新 block 被網(wǎng)絡群體接受,,掛在全局的 block 鏈上,。重復一次,整個 BTC 網(wǎng)絡只有一個全局帳單表,,每個節(jié)點都完整的保存有一份,。
這個全局帳單表會越來越大,block 鏈越來越長,,在最新的部分,,必然有許多分茬,。這是因為 p2p 網(wǎng)絡的 mining 過程是分開并行進行的,每條新帳單也不能立刻廣播給所有的節(jié)點,。每個 mining 的節(jié)點都有責任把他新收到的,,在他認可的老的全局帳單上不存在的帳單,合在他準備制造的新 block 中,。一旦新 block 被制造出來,,就立刻廣播出去,爭取得到更多人的認可,。主要是得到那些想 mining 的人的認可,,這些人會在這個 block 的基礎上制造新的 block 。
如果 p2p 網(wǎng)絡過大,,交易帳單不能盡量的迅速的廣播到全網(wǎng)絡,。就會出來 p2p 的網(wǎng)絡的局部保持有小群體共同認可的一份全局帳單。多個全局帳單的分支同時發(fā)展是有可能的,。因為每個小群體都可能認為他們看見的那部分更長更有效,。但是, 只有有人發(fā)現(xiàn)另一條分支更長,,它就會轉換陣營,。所以,有一定的可能性,,你的帳單被一個小群體接受,,但在一段時間后,被更大的陣營拋棄,。
不過,算法參數(shù)決定了,,新的 block 產(chǎn)生速度很慢,,如果你的帳單被多達 6 個人確認,基本上就保證了它合并到的那份全局帳單,,就是 p2p 網(wǎng)絡全體認可的,。
既然生成新 block 費時費力,制造出新 block 的幾率好象買彩票中大獎,,還有那么多人去執(zhí)行程序計算出新 block 呢,?答案是,每個制造出新 block 的人,,都有權利構造一條帳單聲明老天給了我 50 BTC ,。這個規(guī)則是被所有 BTC 用戶共同承認的。把制造 block 等同于成挖金礦 (mining) 只是一個形象上的比喻,。實際上,,沒有人可以把金子挖出來囤積,。每個新 block 必須包含全局表上的上一個 block 的 hash 值,BTC 網(wǎng)絡自我調(diào)節(jié)難度,,讓每 10 分鐘大約產(chǎn)生一個新 block ,。如果你 10 分鐘內(nèi)沒制造出新的 block ,差不多就是說你前面 10 分鐘干的活白干了,。從最新版的 block 繼續(xù)演算,。
所以更恰當?shù)谋扔魇琴I彩票。一個每 10 分鐘開一次的彩票,。你不停的花錢買,,10 分鐘內(nèi)開中了就是你的,開不中先買的都作廢,,然后下一輪,。
數(shù)學上怎樣保證 mining 的過程需要消耗大量的 CPU 時間?并只有很小的幾率成功,?
這里用到一個叫做 Hashcash 的系統(tǒng),。它最早是為了改善 email spam 的問題被發(fā)明出來的。
就是給一段特定信息(比如這封 email 是從誰發(fā)給誰)加一個特定的 hash 頭,。這個 hash 頭需要大量的 CPU 時間計算出來,。發(fā) spam 的人沒有那么多 CPU 時間為群發(fā)的每一封 email 計算一個符合要求的 hash 頭,所以認為有這個合法 hash 頭的 email 不太可能是 spam (花了 CPU 時間在上面)
這個算法就是,,為你想保護的信息,,找到一串數(shù)字,附加上去后,,使用某種公認的 hash 算法,,比如 SHA-2 ,算出一個 hash 值,。如果 hash 值由一長串 0 打頭(具體多少個決定了難度),,那么就成功了。
為一段信息,,找到這串數(shù)字,,在目前來說,除了暴力嘗試沒有什么好的方法,。也就是隨機更換數(shù)字,,換一次就 hash 一次比對。在一個可以預期的嘗試次數(shù)后,,一般都能找到想找的數(shù)字,。
每個想 mining 賺 BTC 的人,不停的從 BTC 網(wǎng)絡上監(jiān)聽信息。如果有人發(fā)布了新的合法的 block ,,他就合并到本地的全局表里,。并重置自己的計算過程,從新得到的 block 開始,。如果有新發(fā)布的交易單,,也記錄下來。不斷的把最新的 block 的 hash 值,、新收到的交易單,,自己獲得 50 BTC 的那條獎勵單合并在一起,計算 SHA-256 ,,看看結果是否滿足條件,。一旦滿足,就把這個新的 block 廣播出去,。
當足夠的人認可它,,(以它為基礎計算后面的 block ),他也就獲得了那 50 BTC ,。
為了匹配 BTC 的經(jīng)濟規(guī)模,。所有的 Bitcoin client 都被設置成,每 210000 個 block ,,生產(chǎn)新 block 的人被認可憑空獲得的 BTC 數(shù)量比之前的少一半(如果這個時候他還在包內(nèi)寫上自己獲得 50 BTC ,,其他人不會確認他的這個 block )。這會讓 BTC 的總量增速變緩,。新的 block 產(chǎn)生的速度是由難度來調(diào)節(jié)的,。這個難度會由 p2p 網(wǎng)絡根據(jù)最近生產(chǎn) block 的速度自動調(diào)節(jié)。所以即使日后計算能力增加,,也能保證大約 10 分鐘一個的速度,。
而且,隨著生產(chǎn)新 block 的收益減少,,愿意貢獻自己的 CPU 來 mining 的節(jié)點也會變少,。(如果減少太多,只需要減少難度即可)
最終,,p2p 網(wǎng)絡不再憑空制造出新的 BTC ,,這個時候制造新的 block 的動力是什么呢,?那就是交易稅,。因為沒有什么人愿意生產(chǎn)新的 block ,發(fā)起交易就變的困難,。(沒有 block 可以容納交易單)希望交易被確認的人可以聲明,,如果有人制造出新的 block 接納他的交易單,他會支付一小筆交易稅給他。當許多人都這么做的時候,,制造 block 又變的有利可圖了,。只不過,直接上不再有新的 BTC 誕生,,只是在這些 BTC 用戶之間流通,。
總有一些 BTC 會消失,主要是那些賬號的私匙丟失了,,沒有任何人可以轉移走帳戶上的錢,。不能流通的貨幣就不是貨幣了。但最終 BTC 總體會達到一個比較大的規(guī)模,,準確說是兩千一百萬個,。但 BTC 本身是可以切割的,比如你可以支付給別人 0.01 個 BTC ,。所以 BTC 本身會升值,,總數(shù)也一直夠用。
如果你覺得這篇文章對你有用,,可以捐贈一點 BTC 給我玩玩,。賬號是 1CDPtAPKf3EKLby85nnR35yBwPPsqHn8Cr
這里有人免費派 BTC ,每個 gmail 賬號給 0.02 BTC ,。