论比特币和以太坊的“宕机”
原创:刘教链
五月伊始,比特币和以太坊两条市值第一第二的链就接连爆出所谓“宕机”的冷门。但细究起来,其中又有本质区别。下面我们就来说一说。
关于比特币“宕机”的消息是在5月8日爆出的。一天两次。要是笔者没记错的话,那天正好是gate上BRC-20模因币ordi的日子。东八区早上十点上的线。一时之间,引发集体性FOMO,比特币网络爆堵。
好巧不巧的,当天凌晨4点45分(UTC+8),在区块高度788686的地方,发生了两个矿池竞争分叉的事情(参考刘教链公众号2023.5.13文章《比特币被双花了吗?》,请格外注意,Fork Monitor记录的时间戳是UTC+0,所以是20:45)。也许是这次算力角逐,导致一个矿池产出的分叉被抛弃,造成部分交易被重新退回内存池,让本已拥堵不堪的网络雪上加霜。
另一个可能性则是因为有矿工挖出了空区块。导致实际可用区块空间减少,增加了排队队列的拥堵。比如就在7日深夜11点55分50秒(UTC+8),就产出了一个空区块788594。而它距离上一个区块788593的时间戳11点55分10秒(UTC+8)仅仅过去了40秒钟!
到了下午14点58分(UTC+8),区块高度788759,比特币网络被监测到“卡”了将近一个小时没有产出下一个区块。后来,直到一个多小时后的15点59分(UTC+8),区块788760才被计算出来。
谁料到了晚上20点57分(UTC+8),区块高度788791,比特币出块再次延迟。网络一直等到一个多小时后的22点03分(UTC+8),才找到下一个区块788792。
学习过“刘教链比特币原理音频课”[链接]的朋友应该明白,上述“无巧不成书”的事件真相,与很多媒体、社群中众说纷纭的以讹传讹想去甚远:
第一,出块延迟与BRC-20火爆导致网络拥堵没有什么直接关系。
第二,比特币网络的出块是概率性的,符合泊松分布。10分钟的出块间隔只是统计控制目标,而实际出块时间可能与此想去甚远。从上面的实际案例可以看出,这个时间间隔可能短至几十秒,也可能长达1个多小时。[1]
至于为什么比特币矿工会在那么多人花钱冲土狗的“好日子”打包空区块,放着高昂的手续费收入不赚?这是由矿池的工作机制决定的。矿池的算力其实是来自于接入的众多矿机。矿池只负责下发计算任务,和打包区块。矿机负责无脑计算。矿池通常会在收到区块后,立刻下发一个空区块让矿机先计算着,而不是等交易准备好再下发任务。因为如果矿池下发新任务慢了,那么多矿机就会仍然在上一个区块上面计算,这段时间的算力就被白白浪费了。所以,矿池会先下发一个空区块让矿机先算着,然后等准备好交易后,再更新任务让矿机计算。哈希计算是无记忆的,所以更新任务并不会影响爆块概率。
更巧的是,没过多久,12日、13日以太坊的PoS链也出现了“宕机”问题。
先是在5月12号的凌晨4点19分(UTC+8)的epoch(轮次) 200553附近,以太坊信标链等了近半个小时都无法最终化区块链[2]。这与设计规格要求的每epoch包含32个slots,每个slots也就是每个区块间隔12秒,这样每个epoch的时间应该是12 * 32 = 384秒即6.4分钟相去甚远。
还没等以太坊基金会的开发者们搞清楚原因,到了5月13号凌晨2点5分(UTC+8)的epoch 200757附近,以太坊信标链又一次延宕。这次等了超过1小时才恢复[3]。以太坊基金会发布了一个紧急补丁,但是却仍然未能搞清楚真正的原因是什么。
不能最终化,就意味着区块链的写入是未能最终生效的,存在被篡改的可能性。以太坊从PoW改成PoS之后,就抛弃了比特币采用的概率最终化方法,而是改用了显式最终化[4]。如何既要显式最终化,又要去中心化?为此以太坊引入了信标链、epoch等一系列的概念和设计。
笔者的这篇文章,把上面几次事件进行了还原和记录。这很重要。尤其是对于以太坊的两次延宕,由于epoch的延宕,事后不会在区块链上留痕,这与比特币区块时间戳会忠实记录下当时的延迟出块时间不同,因此就造成了我们事后追查以太坊最终化延宕历史的困难。
既然区块链抹去了这个历史,那就只能在文章里进行记述。
不同于媒体报道的含糊之辞,笔者给出了精确的epoch编号。但是,事实上,延宕并不是发生在这一个epoch,而是发生在前后一大段时间窗口内。那么,为何笔者上面的记述中要用这两个epoch呢?因为这两个epoch具有明显不同于前后正常最终化的epoch的特征,那就是它们的attestations(见证)显著地减少。正常是3000多,epoch 200553只有1792,epoch 200757只有1408。
计算机科学对于分布式系统的挑战所采取的对策,就是不断弱化问题寻求妥协解的过程。从单机数据库的ACID强一致性,弱化为互联网分布式系统的最终一致性(eventual consistency),再到比特币在拜占庭环境下的概率最终化(probabilistic finality)。中本聪共识的聪明之处就在于,巧妙利用了0.9的无限循环等于1这个知识,让比特币的区块链能够不断逼近于一致性(共识)。以太坊弃PoW而转为PoS,要把概率最终化重新强化为显式最终化,而同时又要保证系统能够在拜占庭环境中工作,不退回互联网的管控环境,这在理论和实践上都将面临未知的挑战。
教链总结:比特币出块的设计本身和PoW的特点就是概率最终性,符合泊松分布,短至几十秒,长达1小时,都是正常现象。以太坊PoS出块则试图实现显式最终性,但是最近两次原因不明的最终化失败,预示着在这条道路上探索的艰辛。
参考资料:
- [1] Here Is Why Bitcoin Transactions Take So Long. https://originstamp.com/blog/here-is-why-bitcoin-transactions-take-so-long/
- [2] https://www.coindesk.com/tech/2023/05/11/ethereum-mainnet-was-unable-to-fully-finalize-transactions-for-25-minutes/https://beaconcha.in/epoch/200552
- [3] https://www.coindesk.com/tech/2023/05/12/ethereum-resumes-finalizing-blocks-after-second-performance-hiccup-in-24-hours/https://beaconcha.in/epoch/200757
- [4] https://hackmd.io/@prysmaticlabs/finality
(公众号:刘教链。知识星球:公众号回复“星球”) (免责声明:本文内容均不构成任何投资建议。加密货币为极高风险品种,有随时归零的风险,请谨慎参与,自我负责。)