作者:yola
时间:2019年4月21日
来源:高维空间
BTC和BCH都有区块大小限制,现在的BTC区块上限是1M交易区块+3M见证区块,BCH区块大小上限是32M。本文重点解释BTC的区块大小限制,因为BCH的区块大小限制是非常简洁的,相对来说,BTC因为部署了隔离见证,导致区块大小限制变得更复杂。
为什么会有区块大小限制?
区块是一组交易,这些交易经过验证,然后在比特币的公开分类账(即区块链)上共享。在货币流通的早期,设计一个区块来携带多达36 MB的事务数据。然而,在2010年,这被减少到1MB,以减少垃圾邮件和潜在的拒绝服务攻击对网络的威胁。DDoS攻击可以通过使用尘埃交易(数量微不足道的比特币交易)制造许多大区块来执行。尽管有1MB的区块限制,尘埃交易仍然可以进入网络,然而,由于矿工处理的区块数据较少,完成将这些数据导入链所需的时间也减少了。
然而,随着越来越多的交易被添加到比特币的区块中,这个限制在今天仍然存在,它离这条1MB的线就越近。这个问题是从这里开始的。一方认为,比特币区块的尺寸应该扩大,以适应那些信奉比特币的人们的浪潮。这方面的辩论认为,货币需要扩大规模,以产生大规模采用。另一方面,反对的人认为,增加区块大小将导致对处理能力的更高需求,而采矿将更加集中,因为硬件需求将随着块大小的限制而增加。
BTC的区块大小限制参数含义
在部署隔离见证之前,BTC的代码中使用一个参数叫MAX_BLOCK_SIZE,来约束区块大小,其值为1000000字节,即约为1M。在bitcoin core 0.13版本后,即开始部署隔离见证后,这个参数被拆分为三个参数,分别为:
MAX_BLOCK_SERIALIZED_SIZE=4M;
MAX_BLOCK_WEIGHT=4M;
MAX_BLOCK_BASE_SIZE=1M。
上述三个参数的具体含义是,
一个区块的数据字节大小,由原来使用MAX_BLOCK_SIZE约束为1M,改为一个区块大小由两个部分构成,一个叫交易数据区块,另一个叫见证数据区块;
其中交易数据区块由MAX_BLOCK_BASE_SIZE约束为1M;
而见证数据区块大小由MAX_BLOCK_SERIALIZED_SIZE约束为了“4M-1M”,即减去交易数据区块大小,实际值为3M。
MAX_BLOCK_WEIGHT主要是在以后的版本起作用。
这三个参数一直保留在bitcoin core 0.13和0.14版本的软件中,但在0.15.0版本这三个参数又变了。在bitcoin core 0.15版本中,删除了MAX_BLOCK_BASE_SIZE=1M,但区块数据大小的限制逻辑没有任何改变,只是改成了一个公式来约束,公式中使用的就是MAX_BLOCK_WEIGHT。
总结,BTC因为隔离见证的部署,区块数据大小限制改成了交易数据区块上限为1M,见证数据区块上限为3M,总区块大小上限为4M。这个限制逻辑在隔离见证部署后,一直到现在也没有变过,但具体实现方法,是有改变的。新发布的bitcoin core 0.16.1版本没有改变数据的区块大小限制。