到底什么是区块链,怎么解释才能让老百姓都能明白?( 四 )


正因为奥数太难找 。每个区块平均要 10 分钟才能生成一个 。所以就能基本解决我在本章开头提出的第一个问题“如何同步账本?” 。只要有个 3、4 分钟的时间 。足以让所有在线的电脑同步到这个区块了 。那些不在线的电脑或者第一次运行客户端的电脑 。上线以后必须要先做一件事情 。就是从相邻的节点上获取最新的账本 。
请注意 。我用了“基本解决”这个词 。也就意味着 。并没有完全解决账本同步的问题 。这是因为总会有极小的概率两台矿机恰好同时(只要在网络上所有在线的节点没有完成区块链同步之前都可以算同时)找到奥数 。也就意味着同时抢到了记账权 。因为矿机实在太多了 。这样的小概率事件时不时也会发生一次 。同时抢到记账权的矿机都会将自己生成的新区块广播到比特币网络中 。
遇到这种情况 。比特币系统怎么处理呢?
在这种情况下 。相当于网络上的其他节点收到了两个合法的新区块 。因为网络节点的地域分布不同 。所以 。不同的节点收到这两个新区块的先后次序就会不同 。此时 。所有的节点会暂时保留两个新区块 。并且把区块链做一个临时的分叉 。如下图所示:

到底什么是区块链,怎么解释才能让老百姓都能明白?

文章插图
接下去 。比特币网络中必然又会有其中一个节点(矿机)抢到了记账权 。这时该节点就会将生成的最新区块接到其中的一个分支上 。那到底是接到新区块 1 上还是 2 上呢?系统规则是:这个节点先收到哪个区块 。就接到哪个区块上 。同时放弃另一个区块 。然后全网广播 。如下图所示:
到底什么是区块链,怎么解释才能让老百姓都能明白?

文章插图
比特币网络上的所有节点在收到最新的区块链后 。只要发现其中一个分支比另外一个分支多 2 个区块了 。就立即也放弃那个短的分支 。总之 。比特币网络永远只承认更长的那条分支 。你可能会想 。那如果小概率事件再次发生 。在区块链第一次分叉后 。又同时产生了两个新区块 。而恰好两个新区块产生在两个不同的分支上 。这时候 。其他节点收到的区块链还是两个一样长的分支 。那怎么办?很好办 。还是同样的规则 。只要分支一样长就暂时保留 。直到出现两个分支不一样长时 。就放弃短于 2 个区块的 。保留长的 。那个被放弃的分支中所有交易和比特币奖励都会被判定为无效 。
因为有了这个临时分叉的规则 。所以 。比特币玩家在完成一笔交易后 。不能立即认为这笔交易是成功的 。有可能会被取消 。必须要等到一定数量的新区块生成后 。如果交易依然没有被取消 。这才能放心地认为交易成功了 。那到底要等到多少个新区块产生才能放心呢?按照概率来说的话 。小额交易有这么三个新区块产生就够了 。但是大额交易的话 。为了更保险 。一般认为是等到 6 个新区块产生 。就足以放心了 。前面说过 。每个区块产生的平均时间是 10 分钟 。也就意味着 。一笔大额交易需要 1 个小时左右才能确认交易成功 。
但是小额交易确认的时间往往会更长 。甚至长达好几天 。听到这个你可能会有点儿糊涂 。刚才不是还说小额交易一般只要三个新区块产生就够了吗?怎么确认时间反而会更长呢?比特币网络刚刚诞生的头几年 。确实不会出现这样的怪事 。但是这几年随着交易量的猛增 。就会出现这种怪事了 。
为什么?先回忆一下每个区块的规则:
到底什么是区块链,怎么解释才能让老百姓都能明白?

文章插图
你的交易记录要被写到区块链上 。有一个前提:矿工将你的这笔交易记录打包到这个区块上 。你可能想问:为什么会不打包?难道系统规则还允许不打包吗?打包成功了不是还要给矿工交税吗?矿工好不容易抢到一次记账权 。怎么会有钱不赚呢?
是的 。允许不打包 。原因不是矿工不想赚钱 。而是“不可抗力” 。关键问题是每一个区块允许存储的数据量有限 。中本聪当初设计比特币系统时 。规定了每一个区块最大只能是 1MB 。一条交易记录大概是 0.25K 。那么一个区块最多可以储存 4000 多条交易记录 。如果在一个新区块产生的时段中 。发生的交易请求超过了 4000 条 。那就肯定存不下了 。我们可以算算 。这个量大概是一个怎样的交易频率 。每个区块的平均产生时间是 10 分钟 。也就意味着 。平均每秒钟的交易量如果超过 7 条 。那么就一定会出现排队等待打包的交易记录了 。这个交易频率实在很低 。要知道支付宝一秒钟大约要处理上万笔交易 。这一秒钟七笔交易对于全球来说 。实在是太不够用了 。

推荐阅读