什麼是貨幣呢?
貨幣就是商品(包括服務)交換的媒介。現在我們通行的貨幣是由有信譽的銀行發行的,基本上是由其信譽來擔保的。只要用的人都認可,那麼我們就可以用它來交易。貨幣有一定的保值特性,我把我的勞動/服務/所有的商品換成貨幣後,銀行擔保我在日後的某一天,我還可以用它交換會差不多等值的東西。這個保證的前提是,銀行不會濫發新的貨幣以及大家都信任這一點。
以前,我們用貴金屬做貨幣。因為貴金屬產量不高,貨幣新增加的速度有限,而經濟體在不斷增大,市場需要更多的貨幣來讓商品儘量的流通。有需求就有價值,從這個意義上來說,貴金屬本身製造別的東西具備的價值是次要的,經濟體需要貨幣來流通商品這個需求才是主要的。而貴金屬產量有限,且曾經流通著的貴金屬貨幣由於各種原因會退出市場,那麼即使是新造的貴金屬貨幣也有同樣甚至更高的價值。
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 本身會升值,總數也一直夠用。