BU(Bitcoin Unlimited),顾名思义,设计目标就是要让区块大小的硬性限制彻底消失,转而使用另外几个参数来试图对区块大小进行软调节。
在一个使用BU的网络中,BU矿工能够任意设定自己挖出的区块大小,其它使用BU的矿工和节点,收到BU矿工产生的这样的区块之后,不会像现在这样,直接拒绝掉这个大区块。而是根据BU软件里一个用户可调的,叫做AD(接受深度)的值,来决定是接受还是拒绝:假如接下来在这个大区块后面跟上了数量超过自己设置的AD的值那么多个区块,而且那个大区块所在的链还是算力最大的,那么这个BU节点就会决定接收刚才这个挖出来的大区块和它之后所有的区块,并把这种状态保持24小时。
比如,现在几乎所有支持BU的矿池,使用的设置都是EB1/AD6,这个设置的意思就是,假如我矿池的节点收到的区块大小超过1M,那么我就先不决定是否接受这个区块,如果这个超过1M的区块上面又盖了6个区块,而且这条链上面累积的算力仍旧是最大的,我才接受它, 如果这个条件一直得不到满足,那么我这个矿池就不接受这个区块所在的分叉。
但是这种做法,极容易让整个网络处于持续分叉状态,导致一系列可能的攻击和网络不稳定。
1.网络硬件条件好的大矿池可以通过挖大矿块,来让网络条件不好的小矿工出局。在现在的比特币网络架构下,大矿工想打压小矿工,理论上唯一肯定有效的办法就是孤立掉小矿工的块,这种做法要保证长期持续成功,需要发动攻击的矿池控制超过50%的网络总算力。但是在BU网络里,只要大部分算力能接受的区块比被攻击的小矿工大,攻击者就可以挖一个大部分算力能够接受而被攻击矿工不能接受的区块,把小矿工赶到小算力链上。比如大部分算力能够接受10M,而一个小矿池只能接受8M,攻击者就可以通过挖一个9M的块,把被攻击的小矿池赶到小算力链上。
因为BU节点都在自己挖出的区块中写入自己最大能接受的区块大小,发动攻击的人甚至可以只需要占网络比例很小的算力就能把网络分裂,让一部分矿工挖出的币变得一文不值。
2.如1中说的那样,BU网络随时有可能被分叉。由于每个矿工的AD值不同,所以当一个大区块出现时,很多矿工并不会转移到这个大区块所在的分叉上,而是继续在自己原来挖矿的分叉上接着挖,直到大区块所在的链上积累了超过它AD值数量的区块之后,才把自己正在挖的分叉抛弃,而转移到大区块所在的分叉。这样子原来在被抛弃分叉上交易被确认的用户,它的交易也会变成被网络不认可的,持续存在被双花的可能。
还有比较复杂的像“迟滞区域攻击”这种攻击,这里就先不讨论了。