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. 获得比特币有哪些途径?