共识规则决定 Bitcoin 可以接受哪些交易和区块。每个 Full Node,也就是独立验证网络的程序,都会自行执行这些规则。例如,它会检查同一笔资金是否被重复花费、用 Bitcoin Script 语言写下的支出条件是否得到满足,以及区块是否具有有效的 Proof of Work,即找到挖矿问题解答的证明。它还会检查新生成的比特币数量。算力更强,并不意味着矿工可以绕过这些规则。
假设有人把先前一笔付款中的同一笔资金,先用来付给你,再用来付给商店。这两次支出不可能同时属于有效的历史。为了检查这一点,节点会追踪交易输出,也就是记录金额及其支出条件的数据。节点收到区块后,检查的是区块是否符合自身运行的规则,而不是谁推荐了它。检查内容包括被花费的输出是否可用、Bitcoin Script 的条件及所需签名、Proof of Work,以及矿工报酬是否超过许可范围。违反规则就会遭到拒绝。企业支持或网络投票中的多数,都不能改变这个结果。 [1]
矿工选择交易并寻找符合要求的区块,Full Node 则独立验证结果。开发者可以提出修改并发布软件,但发布软件本身不会改变其他节点的规则。节点运营者自行选择运行哪款软件。这个选择决定的是自己的节点接受什么,而不是要求所有其他节点接受什么。 [2] [1]
节点还有针对未确认交易的规则:哪些存入 Mempool,也就是本地保存的待确认交易集合,哪些转发给其他节点。这些本地规则称为 policy,可以比共识规则更严格。因此,交易被内存池拒绝,并不等于它放进区块后也无效。验证区块时,不会套用交易转发策略。 [3]
Soft Fork 会收紧规则:符合新规则的区块也符合旧规则。不过,旧节点不会检查新增的条件。Hard Fork 则可能允许旧节点会拒绝的区块。激活机制有助于协调变更,但既不保证所有人同意,也不能代替运营者决定使用哪款软件。 [4]
运行自己的 Full Node,就可以自行验证收到的区块,而不必依赖区块浏览器网站。节点可能知道多个分支,也就是同一段历史的不同后续发展。它在有效分支中根据 chainwork 作出选择:按照各区块的挖矿难度计算其对应工作量,再将这些工作量相加。这既不是对实际耗电量的测量,也不是简单地数区块。更多工作量不能成为违反规则的理由。节点要得到相同结果,就必须在不常见的情况下也一致地执行规则。程序错误可能使它们对哪些区块可以接受产生分歧。 [4] [5]
节点可能因为手续费过低而拒绝转发一笔交易。但如果矿工将它纳入区块,且交易和区块都符合共识规则,节点就会接受该区块。相反,如果矿工领取的金额超过允许生成的新比特币(称为 Block Subsidy)与区块内交易手续费之和,即使 Proof of Work 有效,节点也会拒绝区块。区别在于拒绝的原因,而不是矿工的名声。 [3] [1]
要获得更完整的理解,请将本词条与以下词条结合阅读: Full Node, Soft Fork, Proof of Work, Bitcoin Core, Bitcoin Script, Mempool. 反向关联还来自: 21 Million, Soft Fork, Hard Fork, BIP (Bitcoin Improvement Proposal).