比特现金是否应该缩短区块间隔时间?

2305 天前
18179
闪电HSL

来源:闪电HSL    文章作者:闪电 黄世亮

火讯财经注:比特现金BCH社区因为多中心化的烦恼而天天吵架,现在又对10分钟一个区块是否需要改变,而陷入了新一轮的争论之中。本文不去探讨究竟哪方的意见更好,只是单纯的讨论BCH缩短区块时间的各种优劣之处。

第0章 引言

比特现金BCH社区天天吵架,多中心化的烦恼。现在又吵到了10分钟一个区块是否需要改变。争吵的各方都是BCH的死忠粉,都为了BCH好。

本文讨论BCH缩短区块时间的优劣。

 

第1章 比特币区块间隔时间的设定

比特币一开始设计就是将区块生产间隔时间设定为平均10分钟,并不是严格的10分钟。10分钟这个时间是一个统计上的平均值,设定原理是这样的:

比特币系统会每隔2016个块检查全网挖出前2016个块的区块平均间隔时间,即2016个块的总时间除以2016。系统有一个“难度值”的设定。如果这个平均间隔时间大于10分钟,则系统会将“难度值”调低,以希望下一个2016个块的生产周期的区块间隔时间尽量逼近10分钟。如果这个平均间隔时间小于10分钟,则系统会将“难度值”调高。

这么设计直接影响比特币的产出速率,比特币总量设计为2100万BTC。平均10分钟产出一个块,一个块的区块奖励是50BTC,每挖出剩下的一半时,区块奖励就减少一半,约四年会发生一次减半,现在已经发生了2次,目前一个区块奖励是12.5BTC/BCH。这样下去,大约到2140年会全部产出2100万BTC/BCH。

比特现金BCH现在不是使用上述2016个区块来调整难度,而是使用了另一个算法,叫DAA逐块调查难度值,目的是在算力波动大的前提下,让区块平均出块时间更趋进10分钟。

币的产出速率事关行业发展的时间窗口,这个是很重要的,但为什么是10分钟一个块,这个其实很难计算其合理性。不过,这次BCH讨论缩短区块时间,并不影响剩下的币的产出速率,所有参与讨论的人在这个目标是一致的。缩短区块的支持者也是要将区块奖励同比例下调,以保证币产出时间不受影响。

莱特币的区块间隔时间是2.5分钟。以太坊的区块间隔时间是平均15秒,但以太坊产生了大量的孤块,而且孤块在系统中还是合法的,有区块奖励但不打包交易,浪费。BTS更短,但使用的共识机制是DPOS,EOS最短0.5秒。

下面我们分析区块间隔时间具体对什么有影响。

第2章 区块间隔时间影响用户体验

比特币是通过“确认数”来保证安全性,所谓的“确认数”就是认可你这笔交易的区块数量,区块是矿工挖出来的。安全性和确认数是呈正比的,我们一般认为比特币(BTC和BCH)六个确认就是100%安全,以太坊36个确认就是100%安全。也就是比特币是1小时就可以达到100%安全,以太坊是9分钟。而实际情况是,比特币1个确认的安全性已经在绝大多数场景达到了100%,比如你往绝大多数交易所充值就只需要1个确认。而以太坊12个确认就满足了大多数场景的安全性。并且如果你是小额支付,在熟人圈的支付,零确认已经100%安全了。现实生活中绝大多数支付场景也是0确认就够了。

但人总是希望越短时间越好,太长的确认时间用户就不耐烦。这是支持缩短BCH区块间隔时间的最大理由了。

使用BCH的不但有人,未来还会有大量的智能合约。BCH上的智能合约的运行会依赖于BCH链上的区块数据。如果10分钟一个区块,那合约的合理设计就是执行时间要大于10分钟。这对很多合约来说,是不合理的。

这个不是特别好理解,我举个例子,合约A是一个赌资判罚合约,合约B是一个打赌合约,即B是判断谁输谁赢的合约。两个人各将1BCH发给一个合约A打赌,打赌结果通过合约B调用合约A,合约B将打赌结果作为参数传递给合约A,让合约A来执行赌资的归属。合约A的成立就必须在得到BCH区块对这两个人的交易的确认才能成立,但如果合约B的执行时间小于10分钟呢,打赌的结果都出来了,但赌资的判罚却要等10分钟。这样的用户体验并不好。

反对缩短的理由主要寄期望于零确认的安全性的推广。还有另外一种技术,就是弱区块,weak block,应该也能帮上忙。不过,这些都还有待程序员去写代码。

第3章 区块间隔时间影响挖矿多中心化

挖矿是这样的,系统会给出一个目标值,这是一个数,比如前面有18个零。挖矿就是找出一个小于这个目标值的随机数,比如前面有19个零。找到了,就挖到了区块。

这个随机数是对矿池对最新高度的区块链进行哈希得来的。矿池先构造一个最新的区块,并且将这个区块连并之前所有的区块进行哈希,哈希一次就对比一次目标值,如果不小于目标值,就调整他构造的最新区块中的一个叫Nounce值的随机数,再哈希。

显然一台矿机来哈希,你要试出满足目标值的Nounce值,那真是要慢死了。但矿池可以将不同的Nounce划分给不同的矿机来试。比如矿池一共有1000台矿机,将0到1000,给第1台试;10001到2000给第2台试……

这样的结局就是目标值前置的零越多,为了在相同的时间里挖到区块,需要的矿机数量就越多。而如果有一个矿池长时间挖不到块,比如一年才挖到一个块,那就容易倒闭。这样的结局就是,随着目标值前置的零越来越多,小矿池就越不容易生存,挖矿就趋向于中心化。也就是全网算力越多,挖矿将越趋向于中心化。

缩短区块间隔时间,是有利于缓解随着算力的增长带来的挖矿中心化倾向。因为缩短区块间隔时间,意味着生产一个区块的目标值的前置零数下降,小矿池挖到一个块的时间周期就会更短,这样有利于小矿池的生存。

但是这只是一种推理,事实上能否带来更多中心化是不知道的。而且无法使用实验来验证,这是这个推理无法得到广泛认可的一个很重要的原因。

而且这种缩短时间只是一种权宜之计,如果缩短5倍时间,但算力涨上5倍之后,缩短区块时间带来的多中心化效应就消失了。

为了这一点可能的多中心化的,而改变区块时间,应该是不合理的。

第4章 区块间隔时间影响孤块率

如果同一时间,有两个矿池都挖出了一个块,那必然会有一个孤块。也因此,矿池之间需要建立比一般的P2P网络更紧密的联系,以及时发现别的矿池是否挖到了区块,从而更及时更新自己的挖矿高度,以避免浪费挖矿时间。

孤块率和网络硬件基础设计相关,越快的网络,就越能更快地发现同行是否挖到块,从而降低孤块率。而越大的区块,传播时间越长,就越容易造成同行发现时间更长,就会增加孤块率。

在完全相同的硬件基础设施下,以及相同区块大小下,区块间隔时间缩短了,会提高孤块产生的概率。区块总量多了嘛。大家发现最新高度的时间也缩短了。

而越长的区块间隔时间,在追求相同的孤块率下,可以支撑更大的区块。假设矿池追求孤块率达到0.1%,即1000个块有一个孤块。如果区块间隔时间是10分钟,全网可以传播最大区块可达到1G区块,而时间下降几倍,意味着最大区块尺寸就得下降。

这就是奥本聪说的区块间隔时间影响可扩展性的关键理由。

但10分钟是否是最合理的设计,也就是说有没有可能8分钟,5分钟……也能是相同概率的孤块率。这个问题其实是可以测试的。

直接在全球部署1000个节点,然后相互广播1G的区块,设置不同的区块生产时间,就可以直接测试出网络延迟造成的不同的孤块率。但目前没有团队去做这样的测试,只要拿出可靠的测试结果,才更有说服力。

以太坊的区块间隔时间是15秒,这个太快了。以致于以太坊的孤块率非常高,以太坊称为叔块,这些叔块在以太坊协议中是合法的,但却不打包交易,却需要支付给矿工奖励。

孤块应该尽可能降低,否则就不叫区块链了,应该叫区块树。

第5章 区块间隔时间影响51%攻击能力

在各种条件都相同的情况下,越长的区块时间,生产一个区块的成本就越高。那越短的区块时间,就显然降低了51%攻击的成本。

现在假设10分钟,对阵2分钟,所有其他条件都一样。全网有一个持有51%算力的坏蛋矿工,准备51%双花一笔交易。

这个坏矿工先花出去一笔交易,在得到一个确认后,开始发起51%攻击。因为持有51%算力,那他拼命算,假设算到3个块,就超过了其他算力成为最长链。那10分钟的区块间隔就需要40分钟的双花时间,而2分钟,则只要6分钟。这样的攻击成本完全是两个维度的。

但10分钟的安全是不是安全系数过高呢?51%攻击的安全隐患是不是被夸张了呢?毕竟莱特币2.5分钟也没啥问题,各种币都越来越短的区块时间,其实都挺安全的。

这又需要一大票计算,而且还无法做测试,麻烦。

第6章 区块间隔时间影响SPV钱包的使用

比特币是有SPV验证的,SPV钱包一般是会装在手机上,只保存所有的区块头。现在区块头是80字节,一天144个区块,一年会产生144*365*80/1024=4.1M的区块头数据。 现在是10年了,现在SPV钱包要下载41M的区块头数据了。

如果缩短区块时间,意味着区块数量大大增加,也意味着区块头数据大大增加。比如缩小到2分钟,则一年会新增区块头数据5倍,即一年将产生 4.1*5=20.5 M的区块头数据,10年就是205M。这样会导致SPV钱包比较难用。

这是一个可量化的数据,我们的手机4G网络包月是1G已经普及了,但还是很贵的,手机内存对付几百M的数据,我觉得问题不大,但网络流量吃紧。

第7章 结论

我是个保守主义者,我个人的态度是,目前不支持缩小区块间隔时间。在没有更充分的安全性验证之前,不宜作更改。

 不过我的认证都是在逻辑上的,并不是建立在实验和数学上的,我们需要更多的实验测试和数学证明。

第8章 结束语

如果你喜欢多中心化,就加入比特现金社区吧,BCH粉天天吵架。