不验证交易挖矿获利挖“空区块”是否罪孽深重?
如果说挖矿完全是为了盈利,那么为什么矿工们会把交易费弃之不顾?
在以太坊区块链开采的“空区块”数量急剧增加,自去年9月以来增加了637%。
蚂蚁矿池控制的比特币矿池最近也出现了“空区块”现象。蚂蚁矿池在10月5日挖了12个空区块,且相当规律。
这些挖空区块的矿池,要么被指责故意挖空区块以增加收益,要么被指责是为了攻击比特币网络的一种手段(尤其是蚂蚁矿池)。虽然与比特大陆2018年第一季度11亿美元的利润相比,这一数字微不足道。
而这么做的目的其实很简单——如果要矿工们在“什么都不做”还是“至少有很低的利润”中做选择,答案一目了然。
什么是空区块
空区块是指,矿工在不实际处理区块上的任何交易的情况下获得挖矿奖励。在这种情况下,就形成了“空区块”。越来越多的人参与这种自私的挖矿方式,很多矿工试图在不将空块广播到网络的情况下寻找下一个区块,从而使他们获得先机。
那么,为什么“间谍矿工”要挖掘空区块呢?事实上,这种做法源于矿工每天参与的算力竞争,在理想情况下,只有当区块被广播之后矿工才能开始挖矿。值得一提的是,区块链中的每个区块都包含了不同量级的数据,无论它们的限制是什么,对于矿工来说其实并没有必要准确地保存那些需要验证、并且要添加到区块链上的数据。
当矿工对所有区块数据进行编码时,验证就会发生,之后区块会被关闭、并在区块链上广播。对于下一个区块来说,这种编码是必不可少的。但是在广播这个动作之前,一些矿池已经开始进行私下挖矿,虽然在没有预先读取区块数据的情况下不可能创建哈希(hash),但是矿工却可以在交易发生之前从已有哈希中创建新区块。
由于创建的新区块中没有任何交易,所以这些区块并不能生效——因为如果交易数据中没有“不规则性(irregularity)”,而矿工则是通过矿池获得了算力。为了抢先一步,一些矿工找到一个新区块,并且尝试找到其继任者,但不会在矿池中广播。
由于以太坊开发人员的基数很大(接近25万),因此很难像比特币那样及时对核心代码进行调整。
空区块产生现状
针对矿工“挖空区块”的指控并不新鲜,2015年至2016年在比特币上一直存在——但这个问题的严重程度(尤其是在以太坊网络上)还是首次被提出。
近期,CoinFi一项对以太坊的研究显示,在9月中旬开采的空区块数量从通常的不到0.5%跃升至近3%。
经过分析,亚历克斯•斯瓦内维克发现了两个矿池沉迷于“非法挖矿”,一个是全球第二大以太坊矿池F2Pool(鱼池),另一个是Etherdig。
根据Etherscan.io区块浏览器的数据,看看鱼池是否还在挖空区块。没有EtherDig程度那么高但确实还在挖。这是今天在6471202号高度开采的一个空区块的浏览器截图。还有更多:
鱼池在以太坊挖矿的份额为13.4%。
EtherDig的规模较小,但涉及的金额仍然很大。
根据Etherscan.io区块浏览器的数据,已有1695个空区块被EtherDig挖掘,而自75天前以来,它们都不包含经过验证的交易。
换句话说,EtherDig没有进行任何交易验证工作,却能够因此获利。
对于矿商来说,为什么不去收取交易费呢?
在此之前,比特币区块链上的比特大陆和它的蚂蚁矿池(以及BTC.com)就曾遭到类似指责,热衷于挖空区块的人注意到了这一点。
空区块存在的好处
创建空块是有原因的。其中最重要的是尽快找到并挖出下一个区块。
例如,去年比特大陆的吴忌寒解释了为什么蚂蚁矿池生产了6个空区块,因为在引入隔离见证之后,矿机出现了问题。
吴忌寒2017年8月26日推特
“BCC/BTC联合开采在开采池中造成了大量的误差,而空区块是一种安全措施倒退的表现。现在问题解决了。”
在吴忌寒的推特之前,比特币网络上未经证实的交易增加到9万笔,待完成交易的内存池增加到100MB。
比特大陆的批评者表示,这两件事是有关联的——这家中国矿商和ASIC制造商“攻击”比特币,以支持比特币现金。
在需要收集任何事务之前,挖掘器可以通过从最后一个块获取散列来启动一个块,这可能是由于阻塞整个节点传播的中断造成的。
重要的是,由于各种原因,矿机可能在没有下载和验证链中的前一个块的情况下启动新的块。选择不将交易验证包括在内,意味着不会出现双花问题,从而使交易区块失效。
据CoinFi的首席数据科学家Alex Svanevik介绍,空区块开采起来要快得多。一个正常区块的平均开采时间为13.2秒,而空区块过去3个月的平均时间为14.6秒。
因此,从本质上讲,矿商有时会采取一种“更快”的做法,这意味着有时在下一个区块出块前,会出现空区块。
如果区块链的高度,(含出块的速度),可以作为检验一条链是否健康的标志(包括矿工盈利能力以及网络资源的使用),可以说,一个空区块,虽然没有交易验证,但它还有助于提高以前的所有交易的安全。
空区块存在的危害
以上就是空区块存在的一些合理原因,但这并不能解释为什么有些矿池选择只产生空块,比如EtherDig。
在以太坊池开采空区块可能被指责榨取系统。他们让别人去做块验证的苦差事,而自己在上面构建空区块,还拿钱。
鱼池和EtherDig的批评者表示,如果未来几周有更多矿商效仿,这种行为可能会影响网络性能。
然而,到目前为止,还没有迹象表明包含未确认交易的mempool与空区块的增长同步。此外,没有确凿证据表明空区块正在损害以太坊网络性能。每天大约有6000个区块被挖出,如下图所示:
Svanevik观察到:“接下来的几周内,我们肯定会对后续发展持续观察,包括空区块会对以太坊生态系统造成什么影响。”
Svanevik在调查中表示,鱼池和Etherdig两个矿池只挖掘区块链而不验证任何交易,会对以太坊造成了前所未有的威胁。数据显示,目前空区块的产生速度提升了15%,这意味着“间谍矿工”的总收入也增加了15%。
他认为,如果越来越多的矿工都挖空区块,那么交易时间可能会大幅增加,并且导致gas费用急剧增加。此外,如果这种情况持续下去,也会引发更多真正在处理交易的矿工选择退出,并且转投挖掘其他加密代币,甚至还可能影响以太坊的安全性。
在该调查发布后,鱼池向巴比特回应:
近期传播的矿池产生“空区块”会对以太坊造成威胁这一说法,是非常错误的,是作者对以太坊挖矿过程理解不透彻才做出了这样的结论。
实际上矿池在区块高度发生变化的时候,由于网络通信延时等,如果选择先计算交易再下发任务,这个时候矿机是有1-2秒钟在浪费算力。因此为了矿工利益不受损失,矿池会第一时间下发一个不带交易的任务,然后在1-2秒钟后再补发一个带交易的任务。如果在不带交易任务下发后的1-2秒钟,有矿机算出了符合难度的share,那么这个块就是空区块。
在etherscan上大家能看到,主流前三的矿池都是这种机制。另外矿池本身是不愿意产生空区块的,毕竟交易费也是一笔可观的收益。
对此,你怎么看?