Skip to main content

一个错误的区块链故事

号外:刘教链超级小白课第6期(预计2025年1月份开课)开始招生了,998/人,课程大纲和报名办法详见《刘教链超级小白课》。

最近教链看到有人用一个故事来讲述区块链的工作原理。这个故事在过去几年也经常被人拿出来讲。甚至可能还曾经被写入一些书或者被拿到课上去讲。但是这个故事其实有关键错误,今天教链就要来谈一谈。

这个故事原本是这样讲的:

古代有个村庄。村庄里的人们相互交换劳动作物,比如食物、器具、手工制品等等。开始,他们选出一个最可信的老先生来帮大家记账,每次交易就要到老先生面前去交易,由老先生来帮忙记录。这就是中心化记账。

但是中心化记账就有中心化风险。比如老先生有私心,篡改了账本。或者遇到了天灾,账本失火被烧了,等等。于是村庄里的人们就改成去中心化记账。

办法就是每人都拿一个自己的账本。每当有任何两个人发生交易,就给全村人稍信儿告知此事,然后所有人就都在自己的账本上把这个事给记录下来。

这样的好处很明显。任何人如果自行篡改自己的账本,别人可以很容易发现他的账本和其他人记得不一样。如果有一些人不小心把账本弄丢了或者损坏了,因为其他人手里都有同样的记录,所以很容易就可以恢复,而村庄里的交易不受任何影响。

故事讲完了。结论,区块链就是共同记账。

很可惜,这个故事,这样讲区块链,讲得是错误的。

关键的错误就在于,把共同记账讲成了人人记账——每个人各自记自己的账。

这样一来,这个关键错误就导致了重要问题的缺失:对账本的共识是如何形成的?

可以说,这个故事讲的东西,不是最重要的部分。而缺失的部分,才是中本聪2008年比特币白皮书中所讲的关键。

说这个缺失的重要问题是“共识”,还是太过抽象。大多数人可能仍然很难理解其中究竟是何问题。

具体地,就是中本聪在白皮书里所说的,如何避免重复花费(double spending)的问题。

这个问题再深入一层,就是交易定序的问题。

再深入一层,就是时钟同步性问题。

深入到底,就是全局时间问题。

拿上面故事的场景为例:

周一早上8点半,张三给李四转了1个BTC,换走了李四手里的货物。他让张小丫给全村人送信儿说,8点30分,张三给李四转了1个BTC,大家记一下账!

8点40分,等李四走后,张三赶紧又让王小虎赶在张小丫前面,给全村人送另一封信儿说,8点,张三把1个BTC转给了他媳妇儿,大家记一下。

结果绝大部分被王小虎抢先的村民都在自家账本上记上了,张三已经把1个BTC转给了媳妇儿。等张小丫姗姗来迟的时候,大家对照账本一看,张三的1个BTC已经没有了,那么这个张三给李四转1个BTC的事儿,就无效了。

无效了,就不予记录。

不予记录,李四就被张三欺骗了,白白损失了货物,却没有得到BTC。

你可能会疑问,为什么不可以记作张三欠李四1个BTC。这就是负债。如果允许负债记账,那么就相当于BTC可以无限超发了。

有聪明的朋友会讲了,说可以让张三拿一个大喇叭直接对全村喊话呀!

当假设有一个大喇叭存在的时候,我们就已经做出了一个极其关键的隐含假设,全村人都有完全同步的钟表,这些钟表的时间完全一致,这样他们才可以根据听到张三喊话的时间,来确定张三发出交易信息的先后顺序,究竟是先转给了媳妇儿,还是先转给了李四。

还有就是如果张三先后大喇叭喊出两条交易信息,先喊的一定先被所有人听到,后喊的一定后被所有人听到。

第三点就是张三喊得话,全村人都能听到且听清并正确记录,不存在当时下地下室、睡觉了没听见的情况。

而在互联网上,上述三点关键假设或者说条件,都是不具备的。

第一,互联网上所有的计算机不能确保具有一致的时间。第二,互联网上从一台计算机给另一台计算机发消息,先发出的信息可能后到达,而后发的信息可能先到达。

中本聪的做法很有创意。他让整个地球村想参与记账的人来抢一个喇叭,也就是广播权。

谁抢到了喇叭,谁就可以把过去一段时间(平均大约10分钟)的所有交易信息汇总,广播给全村人。

怎么才能抢到这个喇叭呢?那就要算一道极为困难的数学题(具体讲就是逆算哈希值)。谁抢先解出了正确答案,谁就可以抢到喇叭进行广播。

为了让人们有动力去解题和抢喇叭,于是又规定,谁成功抢到喇叭并正确广播,就奖励给谁这些交易中包含的手续费,并附加上一个额外的BTC增发奖励。

这就是工作量证明(PoW, Proof-of-Work)。

上述所有逻辑是环环相扣,缺一不可的。

缺了任何一环,整个逻辑链条就断裂了。

逻辑链条断裂了,去中心化也就退化成了中心化。至少,引入了中心化故障单点。