N

N

E

E

W

W

S

S

区块链开发中为什么有的区块没有打包交易

2019-02-18 14:57:24

  比特币出块奖励包括两部分:系统奖励(也称Coinbase奖励)和交易手续费奖励(也称矿工费)。矿工打包交易到所挖出的区块里,才能得到该笔交易的手续费。

  我们做一个类比,区块链开发的这个问题就非常好理解了:

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

  矿工都是理智的,按理说矿工为了利益最大化,在待确认的交易足够多的情况下,每个区块都会被矿工尽可能多地填充交易。为什么有的区块里,除了Coinbase奖励以外没有其他交易呢?

区块链开发

  1、天下武功唯快不破

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

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

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

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

  2、挖矿争分夺秒

  这时候矿工有两种选择:

  接收到区块头后,马上构造区块开始挖矿;

  继续等待接收区块体,验证区块内所有的交易后,才开始挖矿。

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

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

  3、总结

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

本文链接:http://www.ysjqkl.com//news/32.html