比特币区块链是由一个个区块组成的,每个区块记录着交易信息。而“空区块”指的是那些几乎没有包含任何交易记录的区块,只有区块奖励。出现空区块的原因主要是矿工为了快速抢先挖出新区块,减少网络延迟带来的风险,有时会先发布一个空区块再补充交易。虽然空区块不会影响比特币的安全,但频繁出现可能会降低网络效率,理解空区块有助于更好地了解比特币矿工的挖矿策略和区块链运作。
比特币空区块是什么意思?
比特币空区块指的是在比特币区块链上偶尔出现的区块,其中不包含任何用户交易,只包含一笔CoinBase交易。这笔交易是矿工收取区块奖励所使用的。尽管这种区块看似“空”,但实际上并不是完全没有任何交易,因为每个区块的第一部分总是包含一笔CoinBase交易,用于将挖矿奖励分配给矿工。
这种区块的出现,一方面是因为矿工为了充分利用时间进行挖矿,避免与父区块中打包的交易发生冲突,选择不往区块里填充交易;另一方面,这也是一种矿池策略,通过提供不包含任何交易的区块模板来鼓励矿工尽快开采区块。
1、什么是空区块
加密货币挖矿其实是一个计算打包的过程,矿工们首先需要进行算力竞争,谁先解出区块难题谁就先获得了记账权,获得记账权的矿工需要把用户广播出来的交易信息打包到这个区块中,随后放到区块链上传递下去。
而如果矿工获得记账权后,并不在区块中打包交易信息,我们就将其称作为空块。空块上不包含交易信息,只是矿工利用它来获得区块奖励。这种情况下,由于不包含交易,所以也无法获得相应的交易矿工费/Gas费奖励,因此矿工只能获得最基础的爆块奖励。
2、什么是孤块
在区块链网络中,由于区块在网络中传输和广播是需要一定的时间,如果两个矿工几乎同时发现了同样高度的块,那么就会出现竞争关系。最终稍微晚一点诞生的区块虽然也是正常运算产生的,但由于“最长链”原则,这个稍晚一些的区块将无法成为主链的一部分,在比特币网络中,我们把这些挖得稍晚的区块叫“孤块”,是需要完全抛弃掉的,挖到孤块的矿工也无法得到相应的区块奖励。
孤块率越高将意味着挖到的无效区块越多,收入也会随之降低。因此如何降低孤块率成为矿池和矿工们会去思考的问题,例如ViaBTC微比特矿池通过自行研发的比特币客户端,对比特币网络广播和传输过程进行了技术优化,使得矿工能够更快地发现和广播比特币新的区块,降低了矿工挖矿的孤块率,保障矿工收益。
3、什么是叔块
在以太坊中,也有“孤块”这一现象的出现。但是由于以太坊的出块时间比较短,为了防止矿池算力过大控制挖矿过程,同时避免算力的浪费,如果主链中的区块愿意接受这些稍晚产生的“孤块”,那么它就可以成为叔块,被包容进接受它的主链区块中,而这部分挖出叔块的矿工也能获得相应的叔块奖励。
叔块机制的目的是为了更好地保护以太坊网络的安全。相较于比特币,以太坊的出块时间要短很多,这样很有可能会出现临时分叉,在这种情况下,孤块的大量存在会容易导致以太坊的主链可能不是“最重”的那条链,最终影响到主链的安全性,因此加入将“孤块”变成“叔块”的机制其实是一种更安全的行为。
这些挖出了包容叔块的区块的矿工能够获得相应的叔块引用奖励,大约为1/32的基础挖矿奖励。当然叔块的产生也会有一些限制,叔块必须是区块的前2层-7层的区块的直接子块,并且随着间隔越大,叔块奖励会越少,比如是前2层区块的子块也就是间隔1层可以获得7/8的挖矿基础奖励,间隔两层可以获得6/8,以此类推。
总体来看,对于矿工而言,空块的诞生会导致矿工费/Gas费的减少,孤块率过高也就是无效计算过多将直接导致收入减少,叔块引用将获得一定的额外的叔块引用奖励。所以矿工在接入算力时,最好应该考虑一些孤块率更低的矿池,从而更好地保障自己的挖矿收入。
空区块产生现状
针对矿工“挖空区块”的指控并不新鲜,2015年至2016年在比特币上一直存在——但这个问题的严重程度(尤其是在以太坊网络上)还是首次被提出。
近期,CoinFi一项对以太坊的研究显示,在9月中旬开采的空区块数量从通常的不到0.5%跃升至近3%。
经过分析,亚历克斯斯瓦内维克发现了两个矿池沉迷于“非法挖矿”,一个是全球第二大以太坊矿池F2Pool(鱼池),另一个是Etherdig。
根据Etherscan.io区块浏览器的数据,看看鱼池是否还在挖空区块。没有EtherDig程度那么高但确实还在挖。这是今天在6471202号高度开采的一个空区块的浏览器截图。还有更多:
鱼池在以太坊挖矿的份额为13.4%。
EtherDig的规模较小,但涉及的金额仍然很大。
根据Etherscan.io区块浏览器的数据,已有1695个空区块被EtherDig挖掘,而自75天前以来,它们都不包含经过验证的交易。
换句话说,EtherDig没有进行任何交易验证工作,却能够因此获利。
对于矿商来说,为什么不去收取交易费呢?
在此之前,比特币区块链上的比特大陆和它的蚂蚁矿池(以及BTC.com)就曾遭到类似指责,热衷于挖空区块的人注意到了这一点。
空区块的形成
空区块的概念
1、在比特币区块链中,每个区块通常包含多笔交易,这些交易不仅为网路增加价值,还支持比特币作为支付处理系统的功能。然而,空区块(也被称为「单交易区块」)只包含矿工的coinbase奖励,并未纳入其他交易,因此也放弃了额外的交易手续费收入。
2、为了鼓励矿工尽快开采区块,矿池会在新区块被定位后立即向矿工提供一个空白的区块模板(以减少挖掘下一个区块所需的时间,从而最大限度地提高硬体的哈希效率。),让他们可以迅速开始下一轮挖矿(即使此时尚未收到新的交易数据)。在矿池给完区块模板和写入交易的过渡期间(通常只有一到两秒),矿工可能会「运气极好」,利用这个空模板成功挖出一个新区块,从而形成空区块。
3、值得注意的是,空区块并不会对比特币网路造成威胁。即使区块中没有用户交易,coinbase奖励仍会被生成,这不仅激励矿工参与挖矿,还确保比特币的供应逐步接近其2,100万枚的上限。
空区块内的资讯
空区块虽然没有包含用户交易,但仍然记录了一些资讯:
● 区块头:
区块的基本资讯,例如版本号、前一区块的哈希值、时间戳
● Coinbase 交易:
唯一包含的交易,即矿工的奖励交易
该交易为矿工分配挖掘区块的奖励
● 默克尔树根(Merkle Root):
即使区块中没有其他交易,coinbase 交易仍会生成一个默克尔树根,用于证明交易数据的完整性
● 区块大小与重量:
虽然空区块的数据量较小,但仍有大小记录
● 矿工地址(若有标记):
某些矿工会在 coinbase 交易中嵌入自己的识别信息,例如矿池名称或地址
● 区块高度:
区块链中该区块的位置(例如第 871732 区块)
● Nonce 值:
矿工找到的随机数,用于解开工作量证明的数学难题(Proof of Work 的解答)
为什么矿工创建空区块?
当矿工在上一个区块生成后没多久,矿池会在新区块被定位后立即向矿工提供一个空白的区块模板(通常时间落在几秒内)时。此时,矿工面临两种选择:要么立即生成一个空区块以获得有保证的区块补贴(例如3.125 比特币),要么花时间排序交易以增加手续费收入,但冒着在完成之前被其他矿工抢先挖出该区块的风险。
这是矿工对「机会成本」的考量,若矿工花过多时间处理交易,而其他矿工率先完成该区块,则不仅无法获得交易手续费,连基本的区块补贴也会损失。相较之下,若生成空区块,虽然放弃了额外的手续费收入,但可以稳定地锁定补贴。
上述段落中,我们有说明空区块并不会对比特币网路造成威胁。网路上有人认为空区块就像「垃圾邮件」一般会对网路造成干扰,但这种看法并不完全正确。空区块确实不会处理任何待处理交易,但它们也不会造成混乱。相反的,这些区块也要通过 Proof of Work 机制,并为下个区块增加工作量证明的强度,为之前的所有区块提供了更高的安全性,同时维持了网路的完整性。
注:虽然空区块并不会对网路造成威胁,但倘若有高频率的空块可能表示网路没有充分发挥其潜力
比特币空区块对比特币有影响吗?
比特币空区块对比特币有影响,但这种影响相对较小。比特币空区块指的是区块中仅包含了创币交易的区块,不包含其他用户交易。这种现象主要发生在比特币的早期阶段,当时比特币链上的用户不多,导致大部分的区块都没有实际交易可以进行打包。
据统计自从比特币诞生以来,空区块只占比特币全部区块的10%左右,其中很大一部分是在比特币的早期阶段产生的。空区块即使存在,但也只是比特币总区块数的一小部分,因此对比特币的整体影响相对有限。
空区块的产生主要是由于矿工在网络环境和矿机情况的不同下,可能在收到完整区块模板后依然在空模板上工作很长时间。如果幸运地发现了一个区块,这个区块将不包含任何除区块奖励外的任何交易,因此不会有任何的交易手续费可以由矿工收取。这种情况对矿池会造成损失,因为空区块不包含任何交易费用,矿工只能获得最基础的区块奖励。
尽管空区块对比特币的影响较小,但它们反映了比特币网络的一些运作机制和矿工的经济考量。例如,在极短的时间内连续挖到区块的情况下,矿工与节点需要在极短的时间内将合理的交易打包在区块内,以避免成为多个矿工竞争父块/叔块的局面。
在这种情况下,采用节省时间、确定能对接上上个区块的方式打包区块,其中一个策略便是上传空白账本,即打包空块。这种策略虽然看似无意义,但实际上是基于经济考量的结果,旨在确保矿工能够获得最大的挖矿奖励。