第0章 引言
在11月份BCH的硬分叉升级时,产生了两个币,BCH和BSV。abc开发组为BCH添加了一个叫Checkpoint的东西,BSV社区各种嘲讽。本文解释Checkpoint到底是啥。
第1章 比特币节点如何验证一个区块
任何一个下载并安装运行的完整节点都会从比特币网络中获取区块,并验证区块,以此更新节点的账本。当一个节点通过p2p网络获得一个新区块时,都会执行验证程序,以识别这个区块是不是有效的区块。比特币区块的验证标准如下:
1、验证工作量证明,即验证区块头的哈希值小于当前目标值。
2、验证MerkleRoot是否是由区块体中的交易得到的,即重构区块Merkle树得到的树根,看是否和区块头中的hashMerkleRoot值相等。
3、验证区块大,即看区块大小是否在设定范围之内。(BTC是数据区块体不能大于1M,隔离验证区块不能大于3M;BCH是区块不能大于32M;BSV现在是不能大于128M)
4、验证是否只有一个Coinbase交易,即一个区块,矿工只能给自己奖励一次。
5、验证所有的交易,即遍历区块内所有的交易,检查是否是合法的交易。
以上就是比特币节点(BTC、BCH、BSV都一样)标准的验证区块程序,这部分代码叫CheckBlock函数。
第2章 增加Checkpoint检查点验证规则
比特币节点在绝大多数情况下都是按上面的标准的验证区块程序进行验证区块的,但可以加入额外的规则,就是加入一个Checkpoint。
Checkpoint就是节点验证区块中的一个补充规则。这个补充规则是:
Checkpoint就是指定一个区块高度的区块哈希必须等于某个哈希值。
Checkpoint是一个数据,这个数据就是一个区块高度值和对应的哈希值构成,所有Checkpoint会被存储在一个叫CheckpointData的数据块里。下面是BCH网络上的历史Checkpoint值。
我们可以看到,在11111高度就有一个Checkpoint,这是在2009年4月16日挖出来的,这估计是中本聪他们最早的几个人挖的。
上图中最后那一个Checkpoint就是11月15日BCH硬分叉时添加的,区块高度556767就是BCH和BSV分裂后BCH挖出的第一个区块高度,这个区块被BSV拒绝了。
Checkpoint是由开发组写入节点软件的,也可以是开发编写一个函数指定出现某种情况后就由函数添加一个Checkpoint。节点软件在验证区块时,就会搜索CheckpointData数据,以确定某一区块高度是否需要加入Checkpoint这个验证规则。
Checkpoint里指定的区块高度那肯定是在写入之前就已经挖出来的。
当节点软件搜索CheckpointData发现了某个区块高度是一个Checkpoint时,那这个节点在验证这一个区块时,就会在上一章的5条验证规则中加入第6条,即这个区块的hash值必须等于Checkpoint里指定的哈希值。如果不相等,那就是一个废块,会被抛弃掉。
第3章 Checkpoint有什么用?
一个节点只要承认了Checkpoint的区块为合法的区块,那就可以避免这个高度以之前的所有的区块被其他力量重组,特别是可以避免被51%优势算力攻击重组区块。
我们必须确认的是一个区块的哈希是无法伪造的。当指定一个区块高度就是某一个哈希值,这意味着这个区块高度的区块就是无法更改了。哪怕是你拥有超过51%的算力,也是不能让这些拥有Checkpoint的节点软件服从你更改这个区块。
任何一个区块中又包括了前一个区块的哈希值,这样就相当于执行Checkpoint的节点认定了指定的区块,也就认定了此区块之前的所有区块。
Checkpoint在一定程度上改变了最长链为有效链的原则,改成了只有包含了Checkpoint的最长链才是有效链。
Checkpoint可以用来部署协议分叉,所有节点都统一运行带有Checkpoint的完整节点软件,然后一旦Checkpoint的区块被挖出,那此后所有的协议就可以被统一更改。这也是UAHF的原理,这是BCH从2017年8月1日分裂出来后每一次分叉升级都使用Checkpoint来部署。
带有Checkpoint的协议变化,就是明确告诉整个生态在此区块高度后协议就会有变化了,你们要注意升级。
第4章 Checkpoint有什么不好?
需要澄清的是,很多人认为Checkpoint给了开发者更高的权力,我认为没有。因为节点软件都是开发者写的,Checkpoint只是开发明确标记了一个接下来协议会怎么改。这相当于我们写文章的人,使用加粗标红高亮来标注一个重点内容。Checkpoint是用来告诉矿工和其他生态节点,我们要明确改一些什么东西,并且改的这些东西还不允许通过51%算力来进行链上否决。
请注意,上面讲的是“链上否决”,就是一旦有算力选择认同了Checkpoint的节点软件,那无论这部分算力是多大,那这条带Checkpoint的链都是可以独立挖下去的,不可能会被更大的算力通过51%攻击的方式重组掉这个Checkpoint之前的区块。只能重组之后的区块。
这就意味着,Checkpoint本身是一个链下的治理工具。大家通过链下讨论是否接受Checkpoint以及之后的所有协议规则更改,如果接受,并且部署,那就没有回头路了。
所以Checkpoint有什么不好?那只能是针对热爱纯粹的通过链上算力投票的矿工来说是不好的,信算力有决定权的人会认为Checkpoint不好,而热爱链下治理的人则会认为Checkpoint是一个好工具。
第5章 结束语
祝世界和平,祝BCH、BSV社区和平共处,阿门。
作者:黄世亮
欢迎关注微信公众号:闪电HSL
网友评论