查看原文
其他

白话区块链入门069 | 为什么有的区块没有打包交易,是矿工忘记了吗?

白话区块链 白话区块链 2019-05-14

白话区块链

从入门到精通,看我就够了!

「白话区块链入门」系列让零基础的小伙伴也能轻松入门,欢迎大家在文末点赞留言,说说你最想了解的区块链小知识,参与有奖哦!

作者 | 晏文春
出品|白话区块链(ID:hellobtc)

白话区块链在《比特币矿工一天赚多少钱?》一文介绍过:比特币出块奖励包括两部分:系统奖励(也称Coinbase奖励)和交易手续费奖励(也称矿工费)。矿工打包交易到所挖出的区块里,才能得到该笔交易的手续费。

我们做一个类比,这个问题就非常好理解了:

挖出区块的矿工相当于是客车司机,除了系统会给客车司机奖励以外,客车司机每招揽一名乘客,就能得到一笔乘车费,客车司机好不容易抢到一次发车权,会拼命往车里塞乘客,直到满座(车的容量是有有限的)。

矿工都是理智的,按理说矿工为了利益最大化,在待确认的交易足够多的情况下,每个区块都会被矿工尽可能多地填充交易。为什么有的区块里,除了Coinbase奖励以外没有其他交易呢?事出反常必有妖,我们今天就来“捉妖”吧。

 01 
天下武功唯快不破

白话区块链在《如果两名矿工同时挖出新区块,出块奖励该给谁呢?》一文介绍了,当矿工挖出区块后,越快将区块发布出去对矿工越有利。

白话区块链在《一个经典的故事,让你3分钟搞懂比特币挖矿》一文介绍了区块的构造:一个区块主要由区块头和区块体两部分组成。区块头的大小,仅占80个字节,一个满载的区块为1M大小,是区块头的12500倍。

我们知道,数据越小,传播和接收就越快,所以挖出新区块的矿工,为了让区块能更快地在全网发布,会把区块头和区块体的信息分开发布,只有80字节的区块头就能以更快的速度传播给其他矿工。

根据上面的介绍,我们知道,当一个新区块被挖出,矿工会更快接收到区块头信息,然后再接收到区块体信息。


 02 
挖矿争分夺秒

这时候矿工有两种选择:

接收到区块头后,马上构造区块开始挖矿;
继续等待接收区块体,验证区块内所有的交易后,才开始挖矿。

从接收到区块头到接收并验证区块体内所有交易,这中间是有时间差的,我们假设这个时间差是10秒钟。如果这10秒钟选择等待,一方面矿机在空跑,需要耗能;另一方面挖矿是一场竞赛,“时间就是金钱”,矿工会争取这10秒钟时间,如果在这段时间内,找到了合适的随机数,就能挖出新的区块,得到比特币奖励。

选择在这个时间差内挖矿,就必须放弃打包交易。这是因为矿工没有验证上一个区块内的交易,无法确定上一个区块内打包了哪些交易,如果打包的交易和上一个区块重复了,那么即使矿工挖出了新的区块,也会因为重复打包已确认的交易而被判无效。这就是为什么有的区块链只有Coinbase一条交易(就是系统给矿工奖励的那条交易)的原因。

 03 
总结

我们总结一下:矿工打包空块主要的原因是,矿工为了充分利用矿机,在接收到新区块的区块头信息且还没来得及验证该区块内的交易,在这个时间差内,矿工进行挖矿,如果在这个时间窗口内,刚好挖到区块,矿工就会选择打包空块,发布区块。因为在不清楚上一个区块打包了哪些交易的情况下,矿工打包交易,可能会与前一个区块打包的交易相同,这将导致矿工挖出的区块被判无效(非法),有捡了芝麻丢了西瓜的风险。

矿工挖出区块后,如果明确某一笔交易没有被之前的区块打包,可以将这笔交易添加到当前挖出的区块,然后再发布吗?欢迎到留言区分享你的观点。

「白话区块链入门系列」互动有奖

  • 本文发布2小时内的第1位精选留言,奖励8.8元红包;

  • 指出本文事例、逻辑等重大错误、并提出优秀建议的留言,一经采纳,奖励50元

  • 本系列接受读者投稿,录用稿件每篇奖励300元。后台回复「投稿」获取详细信息。


往期内容精选

006 比特币的矿工和挖矿是什么意思?

014 虚拟货币价值的本质是什么?

015 神奇而有趣的比特币

018 被称为“区块链2.0”的以太坊是什么?

021 被称为“区块链3.0”的EOS是什么?

★后台回复「入门」获取完整目录!★


——End——


『声明:本文为作者独立观点,不代表白话区块链立场,亦不构成任何投资意见或建议。』

亲,给「白话区块链」加个“星标”

   👇 不错过重要推送哦 👇

 

亲,据说99.9%有品位的人都点了「好看」👇

    您可能也对以下帖子感兴趣

    文章有问题?点此查看未经处理的缓存