比特币为什么到不了帐(比特币不到账)

用过钱包或者交易所交易比特币的用户,应该对交易的实时性深有体会:

发起转账后,需要过至少10分钟的时间,有时甚至半个小时、几个小时,才能完成一笔交易。

其实,发起转账后需要大概10分钟才能完成交易,是因为比特币机制就是这么设计的,不可更改的;

而有时候延迟半小时、几个小时才能完成交易,是因为交易的量实在是太多了导致的(其实这种情况也是由于比特币机制设计的缺陷导致的,但是理论上是可以修改的,后面我们会聊为什么不修改成支持很多人交易的机制)。

我们今天先聊为什么需要花10分钟才能完成一笔交易。

大家可能联想到,一个区块的出块时间平均为10分钟:比特币挖矿为什么10分钟挖出一个区块?,其实,实际上10分钟完成一笔交易也就是因为出块时间的原因。

在通俗易懂第一课 | 简单了解比特币交易过程文章中,我们曾贴出过这张图片:

这张图片的意思是:红色矿工解答出了代号为20014的数学题,获得了将他自己打包好的20014号区块加入主链的权力。

在那篇文章下方,我曾写了这样的声明:

声明:为了理解流程,我按照“验证交易、获得权力、打包区块”的流程讲解的,但实际上,是每个矿工在得知前一个区块被人抢走之后,马上打包下一个区块,只是马上打包的下一个区块并是不被认证的区块,区块里包含了这段时间的未确认交易(未确认交易,以后会提到这个词,很重要),并开始答题,第一位得出答案的矿工,广播全网,得到认证,加入到主链中。

实际上,流程并不是①验证交易②获得权力③写入区块④发币。

正确的挖矿流程应该是这样的:

①一边验证在交易池中已有的未确认交易,一边计算数学题,一边收集新的未进入交易池的未确认交易作为下一个区块的候选验证交易,一边持续监听全网是否有人比自己先算出结果。

②解出答案,打包区块,全网广播区块,并将自己打包的区块加入到自己保存的主链中;或者是发现有人先算出来结果,那么就将别人广播的区块加入到自己保存的主链中。

用个例子来说明:

假设此时全球所有矿工都在解第20013号区块的数学题(比特币矿工在解什么数学题?),我们假设矿工A也参与其中,那么从20013号数学题开始解题,到开始解20014号数学题,我们分为两个时间段:“解20013号数学题的过程中”、“20013号数学题被解答了”,来详细了解矿工A做了什么事:

(一)解20013号数学题的过程中

矿工A需要做:

1、解题。

拼命计算第20013号数学题。

2、验证交易。

矿工A需要验证几百条未确认的交易的合法性、真实性。这些交易从哪来?是在20012号区块结束之后、20013开始时,矿工A整理了到20012号区块结束时所有的未确认交易,此时矿工A做了个优先级排序,挑出几百条,作为了打包20013号区块时附带的交易。

3、收集交易。

在矿工A拼命计算20013号数学题的过程中,肯定会有普通用户在用钱包交易比特币,于是,这些新产生的交易在很短的时间内被传达到矿工A这之后,矿工A由于已经定了20013号区块想包含哪些交易记录了,新来的交易只能放在之后的区块中验证了,所以矿工A先将这些新的未确认交易记录存储在他自己的交易池中。

4、监听区块。

矿工A一边拼命计算20013号数学题,一边监听全网是否有人已经先解答出来。结果有两种,一种是矿工A第一个解答出来了,另一种是监听到别人先解答出来了。这两种情况,我们继续说:

(二)20013号数学题被解答了

· 如果矿工A是第一个解答出来的,他需要做:

1、立刻将他自己准备的区块广播到网络中,让其他矿工知道。

2、将自己的区块写入自己之前准备好的主链中。

3、开始建立第20014号区块,此时,全球任何矿工一旦收到了矿工A发出的20013号区块,都可以开始迅速建立20014号区块作为候选。只是这些20014号区块都是候选区块,都是无效的,必须要等解题成功并被其他矿工验证之后才算有效。

4、从交易池中挑出要放入20014号区块的几百个交易,开始验证。(交易池中包括了老的未确认交易,以及在计算20013号数学题新生成的新交易。)

5、马上开始准备第20014道题的计算。

·如果矿工A不是第一个解答出来的,他需要做:

1、立刻丢掉正在计算的20013号数学题。

2、立刻放弃自己建立的20013号候选区块。

3、将“计算20013号区块过程中,现实世界产生的新交易”放入交易池中。

4、将自己准备的20013号候选区块中的交易挪出,并对比真正生效的20013号区块里面的交易信息,如果自己生成的20013号候选区块里,有一些交易已经存在于别人发过来的真正生效的20013号区块中,那么这些交易已经是被验证过的了,那么矿工A需要把这些交易删掉,然后需要将自己生成的候选区块中剩余未出现在真正生效的20013号区块中的交易,重新放入交易池中,以保证自己的交易池都是未确认的交易。

5、差不多处理好了,于是矿工A迅速建立第20014号区块。(其他矿工也能建立20014号区块,只是,这些20014号区块都是候选区块,都是无效的,必须要等解题成功并被其他矿工验证之后才算有效。)

6、从更新之后的交易池中,挑出准备打包到第20014号区块的几百条交易。

7、开始循环【解题过程中】的几个步骤:解第20014号区块的数学题、验证交易、收集交易、监听区块。

至此,一个大流程就完成了。20014区块、20015区块,甚至之后的所有区块,都是这个流程,如此往复循环。

理解之后,你就会发现,如果张三和李四的这笔交易是在矿工们计算第20013号数学题时发起交易的,那么这笔交易肯定不能被记录到20013号区块中,因为矿工们早已在20012号答题结束之后选好了哪些交易该进20013号区块。所以这笔交易目前是被矿工们收集了而已,需要等矿工们开始计算第20014号数学题时,这笔交易才能被验证,然后等20014号数学题解答之后,这笔交易才能真正地被认为是合法的交易,然后钱包才能真正地将10个比特币(张三和李四的比特币交易过程)的余额展示给李四。

细心的读者可能会发现几个问题:

· 为什么一个区块放几百条交易?为什么不能放几千条几万条交易?

· 10分钟完成交易,和半小时、一小时完成交易,有什么区别?

· 交易慢,就是网络拥堵吗?

· 矿工是如何验证交易的?

这些,我会在之后讲到。

如果当你看完这篇文章,仍有不懂的地方,请在下方留言,我会尽量解答你的困惑。