Nakamoto Consensus指Bitcoin在没有中央裁判的情况下形成共同有效交易历史的方式。Full Node,即运行软件、独立验证规则的计算机,先排除无效区块,再从有效分支中选择累计工作量最大的分支。后续确认在一定安全假设下提高支付的可信度,并不会让记录立即变得不可逆。
安娜给彼得付款,也可能再签署一笔交易,把同一笔资金付给伊娃。这里的签名,是用私钥这个秘密数值,生成可以验证的付款授权证明。其他人无须知道这个秘密,就能检查签名。两份签名都可能真实,但两笔付款不能同时存在于一份有效历史中。彼得和伊娃甚至可能按相反顺序收到消息。因此,Bitcoin不仅要验证签名,还需要就顺序达成一致,防止双重支付。Nakamoto Consensus结合规则、Proof of Work、分支选择和矿工奖励。中本聪的白皮书是最初介绍Bitcoin的技术文档,并没有使用这个后来出现的名称。 [1] [4]
彼得的Full Node不是一张选票。区块把交易组成一批,加入共同历史记录。交易输出则记录一笔金额,以及之后花费这笔金额必须满足的条件。它是自行检查交易和区块的程序:将要花费的交易输出是否仍未花费,花费条件是否满足,新生成的bitcoin是否超出规则允许的数量。矿工可以提出区块,却不能随意绕过检查。无效区块即使背后有大量工作,也仍然无效。分支选择只在有效候选之间进行;共同历史以参与者使用兼容规则为前提。 [2] [3]
如果每台联网电脑都有一票,攻击者就能制造许多看似独立的参与者,这叫Sybil Attack。Proof of Work不数名字,而把分支的权重与可验证的计算工作联系起来。矿工反复计算哈希,也就是数据的数字指纹,寻找符合规定条件的结果。尝试需要能源和设备,而验证成功结果很容易。仅仅增加网络身份不会增加工作量;这里既不查身份证,也不是让所有节点投票。 [1] [4]
矿工组装候选区块,改变区块头中的数据。区块头是区块的紧凑摘要,矿工要找到一个哈希,其数值小于或等于有效目标值。这不是求解有用的方程或破解加密,而是在寻找罕见结果。两个矿工可能几乎同时成功:部分网络先看到一个区块,另一部分先看到另一个,于是短暂出现两条有效分支。这本身不是故障。在区块正常传播的条件下,后续工作使节点逐步收敛到更强的分支。 [1] [8]
分支的强度由chainwork衡量,即根据每个区块的目标值计算出的工作量之和。它不是电表,也不记录矿工实际尝试了多少次。一个矿工可能马上走运,另一个却等很久;只要目标相同,两者的有效区块就具有相同权重。Full Node选择可获得的有效分支中总量最大的那条。因此,“最长链”是最多工作量的简称,不一定指最多区块。切换分支称为重组;被放弃区块中的支付只要仍有效,就可能再次被纳入。 [1] [2] [3] [7]
安娜的支付一旦进入被接受的区块,就有一次确认,此后每增加一个区块就多一次。要替换这段历史,竞争分支必须追上它的工作量。在诚实算力占多数、区块传播足够及时的前提下,成功改写的风险通常随着确认深度增加而降低。这就是概率最终性:信心逐步增强,而非数学上绝不可能改变。彼得等待多少次确认,也取决于支付金额和风险。没有一个通用数字能保证所有情况下都安全。 [1] [4]
如果更快的机器加入后条件不变,区块就会出现得更快。因此,Difficulty Adjustment在主网每2016个区块后,根据之前的时间戳重新计算目标值。它追求平均每十分钟一个区块,这一段大约两周。但单个区块可能早得多,也可能晚得多。触发调整的是区块数量,不是日历日期;如果大量算力突然消失,到达下次调整点可能要更久。这既不是即时调节器,也不是准确的时钟。 [2] [8]
新发行的bitcoin,也就是区块补贴,加上交易手续费,奖励矿工产生最终留在被接受历史中的区块。这鼓励矿工延伸历史,却不能代替安全假设。多数算力可以重组有效分支、排除支付,并尝试撤销攻击者自己的花费。但它不能迫使Full Node接受无效签名、超额发行或未经授权花费他人资金。50%也不是安全开关:部分攻击在低于该比例时仍有成功机会。奖励的存在本身不会自动产生诚实。 [1] [2] [3]
回到彼得的例子。如果攻击者控制他节点的所有连接,就能向他展示不完整的情况。Eclipse Attack正是这种网络隔离;此时确认次数的意义,可能不同于与其他网络节点保持良好连接时。网络分裂为互不连通的部分,也会妨碍一致。因此,安全不仅取决于攻击算力比例,还取决于消息传播和诚实验证。Bitcoin Backbone研究明确建模这些条件。只有算力百分比、没有网络假设,无法完整说明安全性。 [4]
经典BFT (Byzantine Fault Tolerance)方法研究如何在部分参与者故障或作恶时仍达成一致,通常预设成员已知的群体。OM (Oral Messages)和PBFT (Practical Byzantine Fault Tolerance)等方法各有假设及消息交换规则。Bitcoin用工作量和历史的概率收敛处理开放参与问题,并非只是给这些方法改名。同时,选择更强的有效分支不会自行改变有效性规则。修改规则需要参与者采用相应软件和兼容条件。矿工帮助决定哪份有效历史继续延伸,而不是决定所有人必须把什么视为有效。 [5] [6] [9]
要获得更完整的理解,请将本词条与以下词条结合阅读: Bitcoin, Proof of Work, Difficulty Adjustment, 共识规则, 挖矿, Full Node. 反向关联还来自: Bit Gold, Reusable Proofs of Work, Byzantine Generals Problem, Sybil Attack.