比特币的硬伤是什么?
小崔带大家做一次思维实验。
一夜好眠,小崔准备去上班了,先买个煎饼果子做早餐。
小崔来到一个卖煎饼的摊位:大妹子,给摊个煎饼。
煎饼西施说:好嘞,0.000001(好烦哦,这么多个零)个比特币。
小崔说:好的,转过去了,请确认。
1分钟后,请确认。。。
2分钟后,请确认。。。
。
。
。
5分钟后,请确认。。。
。
。
。
8分钟后,煎饼已经吃完了。请确认。。。
。
。
10分钟后。煎饼西施说:哎呀,对不起,系统提示说刚刚那边交易所在的fork被丢弃了,咱们这笔交易失败了。您能重新再支付一次吗?
小崔脸儿都绿了:大妹子,我能把煎饼给你吐出来吗?算我没买过。
经过刚刚的思维实验,各位老友应该看出来比特币的硬伤是什么了吧?
对!就是交易确认的时间太长了,每次交易要10分钟才能确认成功,大宗交易为了确保无误,需要60分钟才能确认成功。
注:思维实验是物理界的词。不通过真实试验,仅仅通过思维层面的逻辑分析,就可以证伪一个定理。其中最著名的实验就是伽利略认为轻重两个物体下落速度应该是一样的。事实上,伽利略根本没有在比萨斜塔上扔过那两块儿砖头。
疯了吗?怎么会这样?
实在是没有办法,比特币的魅力就是去中心化。
先聊聊现行的货币体系下中心的作用是什么?通俗点儿说就是中央银行发行了货币,中央银行在货币流通过程中的作用是什么。
一个非常重要的作用就是做交易中介,确保每次交易都是有效的。你通过网上转账100块钱给隔壁老王,中间要经过中央银行做中介,确信这笔交易是成功的。
中央银行处理这样的事情是很快的,速度以秒计量,基本你点击转账后几秒钟,老王就收到这100块钱了。
因为这个过程中只有三方 -- 你、老王和中央银行系统。处理起来自然就快了。
那么,在去中心后的比特币世界,一笔交易的流程是怎样的呢?
你发出交易申请,这笔交易放入了比特币的云网络里面。这时候这笔交易根本就还没有得到有效确认。
必须等到10分钟,组成一个区块。
为啥要10分钟这么久?因为这个是一种权衡,如果把这个等待的时间改为10秒钟,就会造成更多的问题。10分钟是不得已的、合理的妥协。相关问题就专业了,姑且记住10分钟是合理的等待时间就好了。
说到这里,就可以解释为啥每次交易要等10分钟之久了吧。但是。。。还没说完,为什么等了10分钟最后还失败了呢?欲知后事如何,但听下面分解。
组成一个区块后,所有的旷工,开始针对这个区块进行计算,生成一个有效的唯一码。读者如果对生成唯一码这个事儿不太理解,可以查查更专业的资料来研究一下,这里就不详述了。
一旦生成这个唯一码后,这个区块就可以被确认了,一般来说上同一瞬间只会有一个旷工计算出这个唯一码。这时候就比较简单了,旷工算出来后马上会把这个唯一码公布出去,告知全网所有的旷工 -- 你们别算了,这个区块的账目我记录下来了。
这时候,如果一半的旷工确认说,算你小子好运。那么这个旷工的计算就被确认有效了,再有第二个旷工计算出来一个有效的唯一码也不做数了。
至此,这笔交易就真正有效了。
然而,总会出现不和谐的情况 -- 在那一瞬间,有两个旷工都生成了一个有效的唯一码。这可能吗?实在太可能了,比特币的核心问题就是一个数学随机数生成的问题,两台计算机同时生成一个合法的随机数这种事儿,实在是太可能了,且概率不低(真他娘的要命,概率还很高)。
这可怎么办呢?没办法,只能姑且认定两个都有效,于是这两个被确认的区块都被加入到区块链的末尾。(有效的交易区块加到区块链的末尾,这个专业了,需要再查查资料)
纳尼?区块链有两条尾巴了?这可怎么办?从此以后出现了比特币的异次元空间了啊?
别急别急,继续交易嘛。一次出现这样的同时计算出来两个唯一码的概率大,那么两次呢?
两次呢???那分叉的尾巴就2个区块长度了。可是2次瞬间计算出唯一码也有可能啊。那么继续。。。
三次呢???那分叉的尾巴就3个区块长度了。3次瞬间计算出唯一码的概率也太低了。继续。。。
四次呢???那分叉的尾巴就4个区块长度了。4次瞬间计算出唯一码的概率不亚于扔了4次硬币,都是立着的。
5次呢???
6次呢???
从概率学角度来说,6次的概率不亚于把一把零件往地上一扔,哗啦!组装出来一台手机。
因此,可以看出来,最多分叉会出现6个区块的长度并行增长的情况。
那么交易确认机制就有了,既然最多只可能并行6个区块那么长,那么把短的那个分叉抛弃掉,这样,就只剩下一个有效的区块链了吧。
啥啥啥???短的那个分叉扔了?不要了?
答案就是这样,扔了,不要了。所以,小崔刚刚等了10分钟,最后被告知得无效了,钱没花出去,得重新交易。
比特币的云网络:因为比特币的世界没有中央服务器,所有的数据存储在构成比特币世界的每台计算机,你的、我的计算机,这些计算机+比特币算法,就构成了比特币云网络。
那么问题能解决吗?据小崔分析,比特币和区块链的基因决定了这个硬伤是无法修复的,只能期望下一代加密货币的算法了。小崔这辈子是看不到了。