术语表 /挖矿与共识
共识
- 共识是什么?
- 比特币中的共识是指:各自独立运行、遵循相同规则的节点就同一条链达成一致,这条链是累计工作量证明最多的有效链。
无人投票,也无人主事。每个节点都依照同一套规则检查每一个区块,然后追随累积工作量最大的有效链,因此一台从零开始同步的笔记本电脑能够重建出一直追溯到2009年1月3日的完全相同的历史。当您购买比特币时,正是这套机制在决定发给您的币确实属于您。
运作方式
共识是按固定顺序提出两个问题而达成的,绝不是通过投票。
第一个问题是有效性。节点收到一个区块后单独对其进行检查:签名、金额、默克尔根、矿工所声明的区块补贴、区块权重、时间戳。任何未通过检查的区块会被当场丢弃,产生该区块所耗费的电力多少则无关紧要。第二个问题是在有效选项之间做出选择。当两条相互竞争的历史都通过检查时,节点保留各区块头累计工作量总和最大的那一条,这与区块数量最多的那一条并不相同:由难度更高的区块组成的较短分支,胜过由难度较低的区块组成的较长分支。
请注意缺少了什么。节点从不交换意见,从不宣布偏好,也从不彼此计数。它们转发区块和交易,对收到的内容应用同一套检验,并因检验具有确定性而最终到达同一结果。共识是每个人各自独立运算的副产品,因此网络既没有可以被腐蚀的法定人数,也没有可以被传唤的委员会。
短暂的分歧属于常态。偶尔有两名矿工在相差不到一秒的时间内各自找到解,世界上一半的节点先看到其中一个区块,于是在几分钟内出现两个候选链顶。下一个区块会打破僵局,其中一条分支作为过时区块被放弃,其中的交易回到内存池。深层分歧才是值得关注的情形,只有当节点运行的规则不同时才会发生。收紧规则时,旧版软件仍然接受新版软件产生的一切内容,这就是软分叉:Taproot 于2021年11月以这种方式上线,没有造成任何分裂。放宽规则时,两组节点将永久追随不同的链,这就是硬分叉,2017年8月1日 Bitcoin Cash 分离时发生的正是这种情况。
购买比特币时为何重要
共识使得比特币余额真正属于您,而不是持有它的一方所作的一个承诺。
区块链就输出以及能够花费这些输出的密钥达成一致,它没有账户持有人的概念。您的币存放在交易所期间,共识看到的只是交易所的地址,别无其他,您对这些币的权利只是该公司数据库中的一行记录,靠合同法而非节点来保障。把币转入由您自己持有密钥的钱包,情况就反过来了:全球统一的规则直接承认您的花费权限,任何客服工单、冻结或破产都改变不了这一点。这就是自托管的全部论据,它是关于共识的陈述,而不是关于信任的陈述。
分叉让这一区别清晰可见。2017年8月1日自己持有密钥的人最终在两条链上都掌控了币,因为两条链继承了同一份输出历史。通过平台持有币的人则只能听凭该平台的处理,有几家平台花了数周才为新资产入账,有的则干脆拒绝支持。未来任何一次分裂也适用同样的逻辑。
共识的全球性是监管所不具备的。本站的231个国家指南在什么合法、什么必须申报、哪些平台会接纳您等方面差异极大,但这些都不会触及账本。在德国购买的币和在尼日利亚购买的币由同一套规则验证,存在于同一个 UTXO 集合中,对节点而言无法区分。跨越国境所改变的,是谁会向您出售,以及您应向税务机关缴纳什么,绝不是网络认定什么是有效的。
2013年3月比特币同时运行两条链的六个小时
区块225,430于2013年3月11日被挖出,它被一个版本的软件接受,却被前一个版本拒绝。
比特币0.8版把数据库从 Berkeley DB 换成了 LevelDB,在此过程中悄然去掉了旧数据库在处理大区块时所能获取的锁数量上的一项未公开限制。该区块超出了这一限制。运行0.7版的节点拒绝了它,运行0.8版的节点则在其上继续构建,于是网络同时存在两条链,持续约六个小时。其间有一笔约10,000美元的双花交易针对支付处理商 OKPay 得手。
这次的解决方式说明了任何协议文档都不会说明的事情。开发者请求矿池降级到0.7版,让限制更严格的那条链胜出,矿池照办了,放弃了自己已经获得报酬的区块。0.8.1版随后不久发布,对其所产生的区块设有500,000字节的临时上限,BIP50 则是作为事后分析而写成的。这一事件是一个标准例证:比特币的规则就是已部署的软件实际执行的规则,包括其中的错误;而当软件自身出现分歧时,必须由人来做出选择。
共识 vs 共识规则
共识是结果,共识规则是达成结果所用的标准。规则是写入代码的一份固定的有效性检查清单,对所有运行兼容软件的人都完全相同。共识则是把这份清单应用于已到达的区块后得出的不断变化的结果,因此两个诚实的节点可能暂时失去共识,在一个几乎同时出现的区块之后持有不同的链顶,而它们对规则的理解却完全一致。改变规则,就改变了可能达成的共识;不改变任何规则,随着新的工作量到来,共识仍每十分钟变动一次。