第0章 引言
比特币(BTC)节点客户端在6月15日发布了最新的版本,Bitcoin core 0.16.1,本次更新有一部分内容是“Miner block size removed”,这一点被国内最知名的媒体平台们翻译错了,又因转载或抄袭的原因导致国内媒体几乎清一色地将此信息传播为bitcoin core0.16.1删除了区块大小限制——这意味着一次硬分叉。
本文解释“Miner block size removed”的真实含义。
第1章 bitcoin core中区块大小的限制
BTC和BCH都有区块大小的限制,现在的BTC区块上限是1M交易区块+3M见证区块,BCH区块大小上限是32M。本文重点解释BTC的区块大小限制,因为BCH的区块大小限制是非常简洁的,相对来说,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版本没有改变区块数据大小限制。
那这些bitcoin core 0.16.1版本改的“Miner block size removed”是什么东西呢?
第2章 bitcoin core的挖矿过程中构造区块大小的设定
比特币系统中,矿池在构造区块过程是允许自定义区块大小上限的,矿池通过调用一个函数来自定义区块大小上限,这个函数有两个参数。在bitcoin core 0.14版本中,这两个参数的名字叫(-blockmaxsize,DEFAULT_BLOCK_MAX_SIZE),其中前面这个blockmaxsize就是矿工自己可以自定义的区块大小上限值,而后面这个DEFAULT就是默认值,即如果矿池自己不自定义,则使用默认值。这个默认值,在隔离见证部署后就是4M了。
在2017年前,矿池就是通过这个自定义区块上限来打包区块的,最早矿池都自定义为500K,后来交易变多了,又统一改成了750K。其中还有一阵子,有一家矿池忘记了修改这个值,一直打包750K的区块,但全网已经堵的不行了,别的矿池都打包1M区块,这家矿池被骂成屎了。
在bitcoin core 0.15版本中,上述函数的这两个参数改了个名字,被改成了(-blockmaxweight,DEFAULT_BLOCK_MAX_WEIGHT),但通过代码映射的办法,依然允许0.14版本的那两个参数名字可以使用,即当矿池在使用bitcoin core 0.15版本时,也可以使用-blockmaxsize这个参数名来自定义区块大小,但系统会自动映射成-blockmaxweight。
在6月15日bitcoin core0.16.1版本发布时,上述的映射过程被删除了,也就是现在如果矿池使用的是bitcoin core 0.16.1版本的软件,将不在允许使用-blockmaxsize这个参数名,只能使用-blockmaxweight这个参数名。但矿池限制区块大小的业务逻辑没有任何变化。
这就是bitcoin core 0.16.1版本发布时的变更说明里描述的“Miner block size removed”里的真实含义。
第3章 给bitcoin core写版本变更说明的人语文不好
这次中文社区对Bitcoin core 0.16.1版本发布的变更说明的翻译错误,根本原因是英文原文就写错了,英文原文写成了“Miner block size removed”,应该写成“Miner block size's name had been changed”。
如果没有程序员的帮忙,估计没人能译对。我也是在程序员的帮助下才搞懂的。
第4章 bitcoin core 0.16.1版本是和以往版本兼容的
本次版本更新说明,中文社区还有一个广泛的翻译错误,将bitcoin core 0.16.1版本的兼容性译成了和以往版本不兼容,这是严重的翻译错误。
如果按翻译所说的bitcoin core 0.16.1不兼容以往的版本,那就意味着BTC将迎来一次硬分叉。
版本更新说明的原文是“Downgrading warning”,其真实描述的是兼容性指的是:使用bitcoin core 0.16.1版本生成的钱包文件——wallet.dat——是不能被以前的版本使用的,但以前的版本,如0.15,创建的钱包文件是可以被bitcoin core 0.16.1版本使用的。
这个翻译错误就属于中文译者不认真了,怪不得人家Core语文不好。
第5章 结束语
和老外交流真难啊,特别是要搞点技术类的交流。
网友评论