2.3 比特幣系統
比特幣系統的兩大功能是實現比特幣發行和交易,兩者相互關聯、密不可分。發幣是為了交易的需要,交易則給貨幣帶來價值;交易在發幣流程中被賬本固化,為交易記賬又會獲得新幣獎勵。
從比特幣新區塊生成流程還可以發現,比特幣并不會憑空發放。首先,新幣是隨新區塊生成而發放(數量每4年減半),而新區塊就是固化新交易記錄的賬本頁;其次,比特幣是對記賬所付出的勞動的獎勵,發放給最早生成新區塊的人。正是這種機制的建立,激勵了人們踴躍爭取記賬權,使交易池中的交易得以確認。
2.3.1 比特幣挖礦
現實世界里已經形成了對各種東西的價值衡量標準。例如,鉑、金、銀等貴金屬之所以比銅、鐵、鋁等普通金屬價值高很多,是因為其性質穩定(恒久)、儲量很低(稀有)、開采困難(工作量大、成本高);如果一個商品來自著名品牌(可信)、設計創新(新穎)、技術先進(品質)、工藝復雜(工作量大、成本高),自然可以價格不菲。
虛擬世界里顯然不能照搬這些評價指標。例如,如何在公開的對等網絡環境中公平競爭、公正評判,以便讓公認的勝者獲利。對此類問題的數字化解決方案被稱為工作量證明(Proof of Work,PoW)。
在純粹虛擬化的比特幣系統中,為了評判誰可獲得記賬權(目的是獲得獎勵),需要參與競爭的結點做出工作量證明,并被共識機制所認可。這個過程被形象地稱為比特幣挖礦(mining),參與挖礦的設備、人就是比特幣礦機、礦工(miner)。
比特幣系統為挖礦工作設計了一種“窮舉式計算”的工作量證明算法,基本原理和運行流程如下:
(1)初始化區塊頭,只給礦工留下一個“計數器”的調節空間。
(2)系統自動設定一個“目標值”,全網所有礦工有共同的參照目標。
(3)礦工進行挖礦時,由礦機調節一次“計數器”的值(一般從0開始),并按給定算法對區塊頭進行計算,得到一個計算結果。
(4)如果該計算結果符合“目標值”的要求,挖礦成功;否則返回第(3)步。
從挖礦原理可以看出,礦工比拼的是反復嘗試計算的實力。因為無法推測“計數器”的解,甚至無法推測最優范圍,所以只能從0開始試算所有數值。雖然每一次計算的工作量是有限的,但是不斷地循環嘗試累加起來的工作量十分可觀。
從挖礦流程還可以看到,任何一個“計數器”的值都有可能產生正確的結果,數值小說明所花的時間較少,數值大說明已花了大量時間,因此挖礦成功的時間并不確定,不會是精準的10分鐘,有時不到1分鐘,有時可能需要一個多小時。
如圖2.13所示,從概率分布狀況來看,挖礦時間符合泊松分布(Poisson distribution)模型,平均時間為10分鐘左右。為了保持產生新區塊的節奏,比特幣系統給每一次挖礦設定了一個“難度值”,并導出“目標值”。配合算法的特點,可以達到難度越大、目標越難實現的效果。比特幣系統統計過去一段時間區塊生成時間間隔的平均值,如果小于10分鐘,則調高“難度值”,反之調低難度值,即可維持新區塊生成頻率的大致恒定。隨著電腦運算性能的迅速提高和礦工挖礦工具的不斷優化,挖礦能力必然呈逐步提升態勢,而同步提高的難度則抵消了這一增量,將這些技術進展通通消弭于無形。所以礦工們不遺余力地改進技術,抗衡的不是系統,而是其他礦工。

圖2.13 比特幣挖礦時間概率分布示意圖
“比特幣挖礦好浪費!”Bob驚呼,“電腦CPU狂算10分鐘,就是為了湊一個數啊!”Bob話糙理不糙。Alice也對此表示震驚:“全網那么多結點都在全力挖礦,每次只有一個贏家,勝者通吃,意味著其他礦工都白忙活了!而且結點越多浪費就越大。”
Bob還發現了另一個情況:“現在的難度值愈來愈大,運算工作量劇增,我們手頭的這些普通電腦已經很難挖得過別人了。”
對于礦工來說,每次失敗的挖礦就意味著投入的成本沒有任何回報,成本包括時間、場地費、電腦損耗(折舊費)、電費、空調費等。為了盡力壓縮成本,挖礦往往會在水電資源豐富、地價低廉的地區進行,并使用計算能力強、價格便宜的顯卡來跑挖礦程序。
不管怎樣,比特幣采用的工作量證明方法具有公平合理性。每個礦工唯一能做的就是老老實實提升自身的算力,力爭在這場周而復始的競賽的更多輪次中獲勝。雖然礦工沒有投機取巧的余地,但是仍然可以采用一些改進方法來提高算力。
分析挖礦算法,“計數器”取值范圍從0到2564-1(即4294967295)。單核CPU只能從0開始、以1為步長依次遞增嘗試,但可以同時運行n臺電腦組成的集群,采用并行計算,各算一段取值區間,任意一臺成功就意味著挖礦成功,算力就可達原來的n倍。
同理,還可以采用組建挖礦聯盟(或礦池)的方法,將網絡上分散的單臺電腦聯合起來進行并行計算,并共享挖礦收益。
2.3.2 比特幣系統組成
比特幣系統是一套安裝在用戶電腦端的軟件,運行比特幣系統的電腦即成為一個比特幣結點。按比特幣設計理念,沒有中心化的服務器,而是各個結點形成P2P對等網絡,相互間直接交換信息。
如圖2.14所示,比特幣系統主要由四個功能模塊組成:
? 完整區塊鏈模塊(full blockchain)——保存和維護一份完整的、最新的區塊鏈副本,能夠獨立自主地校驗所有交易,而不需借助任何外部參照信息。
? 網絡路由模塊(network routing)——每個結點都具備全網絡的路由功能,執行比特幣協議,參與驗證和傳播(轉發)交易、區塊信息,發現并維持與對等結點的連接。

圖2.14 比特幣系統結點類型
? 比特幣挖礦模塊(Bitcoin mining)——運行比特幣工作量證明算法,發掘新區塊,以獲取系統獎勵。
? 比特幣錢包模塊(Bitcoin wallet)——為用戶提供個人資產管理(如查看“余額”和交易記錄)、密鑰管理和比特幣地址管理等。
Bob被弄糊涂了:“不是說好了比特幣沒有錢包只有UTXO,為什么又有錢包模塊了?”
“這個并不矛盾。”Alice秉承思路清晰的一貫作風,侃侃而談,“電子錢包的本意是用來儲存、使用錢的,例如可以從銀行卡充錢到電子錢包,再用來支付,對不對?比特幣系統確實沒有這樣的錢包,因為比特幣是不能‘脫鏈’操作的,不能把BTC轉到一個錢包里存起來再花出去。比特幣只有UTXO,所有交易都直接從交易到交易。”Alice說得像繞口令,根本停不下來,“電子錢包模塊從功能上看只是幫助用戶自動搜索交易記錄,統計屬于自己的UTXO,然后顯示給用戶看看總共有多少財富,‘錢包’里實際上沒有錢。”
“哦,原來只是一個‘資產觀察鏡’啊,取名叫‘錢包’而已。”Bob明白了大半,但還不肯罷休,“那么這個‘錢包’是怎么知道主人是誰?”
“錢包還有管理用戶密鑰和比特幣地址的功能。錢包才不管主人是誰,只認地址不認人。”
并非所有的比特幣系統結點都具備所有功能模塊。根據不同的應用需求,結點可聚焦特定的目標,從而形成不同類型的結點(如圖2.14所示):
? 具備所有功能模塊的結點被稱為比特幣核心結點(Bitcoin core)或全功能結點,構成比特幣網絡的主干群體。
? 有些結點僅提供完整區塊鏈和網絡路由功能,是保持網絡規模和正常運行的種子,可以為其他結點提供區塊鏈數據、參與共識驗證等。
? 獨立礦工結點的目的很明確,就是挖礦,附帶完成轉發、驗證功能。而挖礦結點(如礦池的礦機)則進一步簡化,僅保留挖礦模塊,由運行Stratum協議的礦池服務器負責統籌協調。
? 智能手機等終端通常只用來進行交易,且資源有限,可以只保留區塊鏈的一部分,并通過一種簡易支付驗證(Simplified Payment Verification,SPV)方式來完成交易驗證,被稱為SPV結點或輕量錢包結點。
比特幣網絡中還運行著一種特殊的結點,就是比特幣交易中心(Bitcoin exchange center)或稱比特幣交易所。嚴格地說,比特幣交易中心并不屬于比特幣網絡的組成部分,而是一種擴展的服務機構。
與股票交易所類似,各個比特幣交易中心為客戶代理比特幣的買入、賣出的交易業務。如圖2.15所示,用戶使用專門的客戶端軟件(或Web方式)在交易中心平臺注冊一個交易賬戶后,即可登錄賬戶查看行情、查詢資產、發起買賣比特幣等,使用門檻低,不需要自行安裝、配置比較復雜的比特幣系統,不需要挖礦,甚至可以不用懂得比特幣是什么。但用戶并不擁有比特幣地址,賬戶下的比特幣不能獨立進行轉賬操作,所有交易都要通過中心化的交易平臺進行。可見,用戶賬戶上顯示的已買入的比特幣數量實際上只是交易中心平臺記錄的一個數值罷了,用戶確實擁有這些比特幣,不過是由交易中心代持的。

圖2.15 比特幣交易中心與結點關系示意圖
比特幣交易中心這種機構非常適合專門“炒幣”的用戶,就像買賣股票一樣進行低吸高拋的操作。從實際情況來看,交易中心具有其存在的價值,然而,交易中心與比特幣確實存在理念上的沖突,至少在以下三個方面幾乎是背道而馳的:
(1)對等式結構是比特幣網絡最重要的特征,用戶所在的所有結點都是平等的,沒有銀行或管理中心等特權機構;而交易中心卻是集中式、中心化的,所有用戶都依附在其平臺上,由平臺進行控制和管理。
(2)比特幣系統是匿名操作的,從比特幣地址無法追蹤到持有者的真實身份;而交易中心通常需要實名注冊,即使可以匿名注冊,操作中留下的各種信息也足以暴露用戶身份和蹤跡。
(3)比特幣交易只有支付一種操作,即持有者屬性的轉移,購買商品、資金轉賬等所有交易僅使用比特幣;而交易中心實施的卻是比特幣與各種法幣之間的“兌換”交易,不支持購買商品、資金轉賬等貨幣用途。
可見,在交易中心里,比特幣不再是虛擬貨幣,實際上變成了一種數字化商品。
思考:
1. 比特幣為什么要采用對等式網絡結構?
2. 比特幣的共識機制與工作量證明是什么關系?
3. 如何看待比特幣挖礦所產生的浪費?
4. 獲得比特幣有哪些途徑?