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

[复制链接]
10640 |0
发表于 2019-2-18 20:09:20 | 显示全部楼层 |阅读模式
白话区块链在《比特币矿工一天赚多少钱?》一文介绍过:比特币出块奖励包括两部分:系统奖励(也称Coinbase奖励)和交易手续费奖励(也称矿工费)。矿工打包交易到所挖出的区块里,才能得到该笔交易的手续费。
我们做一个类比,这个问题就非常好理解了:
挖出区块的矿工相当于是客车司机,除了系统会给客车司机奖励以外,客车司机每招揽一名乘客,就能得到一笔乘车费,客车司机好不容易抢到一次发车权,会拼命往车里塞乘客,直到满座(车的容量是有有限的)。
矿工都是理智的,按理说矿工为了利益最大化,在待确认的交易足够多的情况下,每个区块都会被矿工尽可能多地填充交易。为什么有的区块里,除了Coinbase奖励以外没有其他交易呢?事出反常必有妖,我们今天就来“捉妖”吧。

01
天下武功唯快不破


白话区块链在《如果两名矿工同时挖出新区块,出块奖励该给谁呢?》一文介绍了,当矿工挖出区块后,越快将区块发布出去对矿工越有利。
白话区块链在《一个经典的故事,让你3分钟搞懂比特币挖矿》一文介绍了区块的构造:一个区块主要由区块头和区块体两部分组成。区块头的大小,仅占80个字节,一个满载的区块为1M大小,是区块头的12500倍。
我们知道,数据越小,传播和接收就越快,所以挖出新区块的矿工,为了让区块能更快地在全网发布,会把区块头和区块体的信息分开发布,只有80字节的区块头就能以更快的速度传播给其他矿工。
根据上面的介绍,我们知道,当一个新区块被挖出,矿工会更快接收到区块头信息,然后再接收到区块体信息。

02
挖矿争分夺秒


这时候矿工有两种选择:
接收到区块头后,马上构造区块开始挖矿;
继续等待接收区块体,验证区块内所有的交易后,才开始挖矿。

从接收到区块头到接收并验证区块体内所有交易,这中间是有时间差的,我们假设这个时间差是10秒钟。如果这10秒钟选择等待,一方面矿机在空跑,需要耗能;另一方面挖矿是一场竞赛,“时间就是金钱”,矿工会争取这10秒钟时间,如果在这段时间内,找到了合适的随机数,就能挖出新的区块,得到比特币奖励。
选择在这个时间差内挖矿,就必须放弃打包交易。这是因为矿工没有验证上一个区块内的交易,无法确定上一个区块内打包了哪些交易,如果打包的交易和上一个区块重复了,那么即使矿工挖出了新的区块,也会因为重复打包已确认的交易而被判无效。这就是为什么有的区块链只有Coinbase一条交易(就是系统给矿工奖励的那条交易)的原因。
03
总结


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

『声明:本文为作者独立观点,不代表白话区块链立场,亦不构成任何投资意见或建议。』
作者 | 晏文春
出品|白话区块链(https://mp.weixin.qq.com/s/BPuVskvgKSnPymwGgWzzKw)
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表