工作量证明所解决的问题
数字账本易于复制,也易于篡改。如果任何人都能随意添加交易,他们也就能把同一笔币花两次——这就是经典的"双花"问题。在一个没有中央运营者的系统里,你需要一种办法,让相互独立的参与者就哪些交易发生过、以及以何种顺序发生达成一致,即便其中一些参与者不诚实或处于离线状态。
早期的数字现金尝试依赖一个可信第三方来记账。比特币的设计——在2008年的白皮书中被描述——用一场公开竞争取代了那个可信第三方:参与者花费真实资源来追加区块,网络则遵循一条共享规则来挑选胜出的链。共识源自成本与数学,而非源自权威。
矿工实际上在计算什么
每个候选区块都包含一批交易、一个指向前一区块的引用,以及一个称为随机数(nonce)的可变的小数字。矿工把这些数据送入SHA-256哈希函数,该函数会把任何输入变成一段定长、看上去不可预测的输出。目标是找到一个能产生低于某个目标值的哈希的输入——在实践中,就是一个以特定数量的零开头的哈希。
由于哈希输出无法被预测或逆推,找到符合条件的哈希的唯一办法就是不断试错:改变随机数,再次哈希,如此反复,每秒进行数十亿次。这种暴力搜索就是所谓的"工作"。它被刻意设计得难以完成,但对其他任何人来说都极易核验——一次哈希运算就能确认答案是否有效。这种不对称性(生成困难、验证容易)正是工作量证明的核心。
难度与大约十分钟的节奏
比特币的目标是平均大约每十分钟产生一个新区块。随着更多算力(哈希率)加入网络,区块本会趋于更快出现,因此协议会周期性地调整难度——即目标哈希必须低到何种程度——以保持平均节奏的稳定。大约每两周(2,016个区块),每个节点都会根据近期的出块时间重新计算难度。
正是这种自我调整,使得从长期看更多的挖矿算力并不意味着更快的出块速度;它主要意味着有更多的工作被花费在保障同一条稳定的区块流上。任何单个区块的确切时间都是随机的,因此十分钟是一个长期平均值,而非一份时间表。
从区块到共识:最长的有效链
找到一个有效区块只是故事的一半。当两个矿工在几乎同一时刻找到区块时,节点仍需就同一份历史达成一致。规则是:节点遵循累积工作量证明总量最大的那条有效链——常被概括为"最长链",尽管它实际上是按累积工作量衡量最重的那条。
每个全节点都会依照比特币的规则独立地验证每个区块:签名有效、没有双花、区块奖励正确,以及哈希满足目标。违反规则的区块会被直接拒绝,无论其中投入了多少工作。暂时的分歧(分叉)会随着下一个区块延长其中一个分支而消解,诚实的矿工会向其收敛,因为在被接受的链上继续构建才是奖励所在。
为什么这能保障网络安全
要改写一笔过去的交易,攻击者就得为那个区块以及其后的每一个区块重新完成工作量证明,然后超越整个诚实网络,构建出一条更长的链。一笔交易被埋得越深,需要重做的工作就越多——这正是商家往往会等待多次确认的原因。其成本随网络总哈希率而按比例上升。
这就是"51%攻击"背后的直觉:控制多数哈希算力,可能让某人得以对近期交易重新排序或进行审查。但获取并运行那些硬件代价高昂,它无法伪造签名或直接窃取币,而且一次公开可见的攻击可能会削弱攻击者正为之投入资源挖矿的那种资产本身的价值。激励机制经过校准,使得诚实参与通常比发动攻击更有利可图。这里的安全是经济性的、概率性的,而非绝对的保证。
权衡取舍与更广泛的争论
工作量证明的长处——真实的、外部的成本——同时也是它最常见的批评的来源:能源消耗。对比特币耗电量的估算差异很大,且随时间变化,而一些矿工使用的搁浅电力、过剩电力或可再生能源的占比不断上升,使情况变得更为复杂。明智的人们看法不一,具体情况也在变动;与其依赖任何单一数字,不如去查阅当前的、可信的信息来源。
诸如权益证明(proof of stake)之类的替代共识设计,通过使用经济抵押而非计算,以远少得多的能源保障着另一些网络。它们涉及不同的假设与权衡,而公平地比较它们本身就是一个话题。就比特币而言,工作量证明仍然是其机制,其安全性与发行时间表都与之绑定。