分布式系统最大的难度是对不确定问题的处理。如何在不确定性的状态下得到确定性结果?中本聪克服了一系列困难,很好地解决了这一问题,这令人叹为观止。我看过加密货币领域的很多项目,不少项目出问题的原因在于对不确定性的理解不足。从理解比特币系统入手,是找到处理不确定性问题方法的一条捷径。只是我水平有限,不能概括中本聪的全部处理方法。
如何记账
记账,如果要形成账页,一个方法就是定时出账。中心化系统是一个人记账,这不用争;分布式记账则意味着可以多人记账。为什么你能记账,而我不能记账?这里有一个公平性的问题。不公平就没有人玩,这一点极其重要。大部分失败的项目是没有处理好公平性的问题。人的参与是不能强迫的,不确定处理的第一个问题是公平性,只有在公平性的基础上才能完成随机性问题的处理。
谁有记账权
这是一个不确定的问题。中本聪选用了亚当贝克的哈希算法。他预先设定一个哈希值,叫难度值,然后采用博弈的方法,谁先算到这个值,谁就有记账权。显然,这实现了在数学面前的人人平等。
如何保证10分钟左右出块
问题又出现了,对于难度值的计算,时间是不确定的。从现在的实践看,计算出这个难度值的用时在十多秒到两个小时之间。哈希算法是数学问题,其结果是符合泊松分布的,不需要处理。不确定性的产生是由于算力是随机加入的。在同等难度下,当算力加大时,出块时间就会变短;当算力减少时,则出块时间就会变长。中本聪处理这个问题的方法,是将2016个区块的总耗时累加,然后除以2016,看看和10分钟相差多远,据此来调整难度值,从而保证在算力随机加入和撤出的条件下,出块时间稳定在10分钟左右,避免系统崩溃。算力越大时,系统崩溃的可行性越小。这么多年比特币都没有崩溃,这真了不起。算力的随机性和出块基本保持线性,这是一个值得多讨论的问题。下面举两个例子。
张建的Fcoin的失败
张建提出了“交易即挖矿”的交易模式创新。他的FCoin 交易所2018.5.21上线,瞬间吸引了众多投资者。2018年6月13日,在FCoin正式上线交易的第15天, 24小时交易量达到288亿人民币。不仅位居全球榜首,还超过了排名第二到第七的OKEx、币安和火币等6家交易所的总和,也因此被圈内人士戏称为“宇宙第一所”。但是,平台币FT价格自6月13日创下1.2567美元的最高点之后,开始连续多天暴跌;随即平台交易量持续萎缩。6月18日,FCoin发布平准基金申购公告,希望利用平准基金,通过公开市场操作维护它的平台代币FT价格,但并未奏效。而后的一系列操作都没能挽救其失败的命运。
问题的根本原因在于张建学艺不精,没有理解中本聪的算力的随机性和出块基本线性的原理。体现在张建的项目上,用户是随机进入和交易,所送的币的数量无法保持线性送出,送币和用户的随机性同步,由于承接力是有限的,当送币量大,一定承接不住,造成砸盘,导致崩盘。这十分可惜,一个重大的设计漏洞毁了项目。
比特币每天都在送币,但并不影响币价,为什么?因为这是一个确定性的事件。资本市场对于企业增发股票都会在除权日的当天,调整股票的开盘交易价格来对应。因为股票的增发是不确定的事件,要根据股票增发的数量对股票重新估值和定价。
一个自动系统必须有负反馈机制,用以对抗不确定性。中本聪的线性发币的方法是一个标准的负反馈方法。其方法对所有的加密货币的激励设计都有启发意义。失败比成功容易,参照失败者的足迹来探索成功者的道路无疑是捷径。
受此启发,可以用此原理来稳定比特币,以保证比特币增长趋势的形成。
如何让巴菲特买比特币
我在“请出中本聪迎接新时代”(http://chainlees.hk)的第12章中,介绍了稳定比特币币价的方法,就是受中本聪此原理的启发。巴菲特的主要观点是比特币无法估值,只有投机价值而无投资价值。如果比特币可以维持上涨,并且可以用上涨曲线预测,比特币就具备了可预测的确定性,就符合了巴菲特所要求的可估值性。符合了传统投资界的胃口,比特币才能大涨。原理就是把把用户购买和卖出比特币的随机性,变成比特币的确定性上涨。此原理对于加密货币是通用的。限于篇幅这里不详细介绍。
用人性解决拜占庭将军问题的不确定性
拜占庭将军问题的提出者是莱斯利兰波特(Leslie Lamport),他是分布式系统的先驱和奠基人之一,2013年的图灵奖获得者。而当时对这个问题,体现最高水平的解决方案是PBFT(实用拜占庭容错Practical Byzantine Fault Tolerance),作者之一是芭芭拉·利斯科夫(Barbara Liskov),2008年的图灵奖获得者,而PBFT只能在很小的网络中运行。中本聪用了一个非常简单的办法比肩和超越图灵奖得主们的算法。其实这是最长链问题。如何保证作恶链不超过诚实链,有数学专家证明过中本聪的方法在数学上不完备,中本聪的成功似乎纯属运气。其实中本聪说过:“只要诚实节点集体控制着比任何一组合谋攻击节点更多的CPU算力,系统就是安全的。”当作恶的收益小于诚实的收益,人们选择不作恶。数学家没有算出数学后面的人性。
经济学是研究人性的,也是研究随机条件下的选择性的。数学公式中没有人性,一旦数学公式中出现了人性参数,意味着出现了不确定性的参数,公式就失去了意义。中本聪的实践告诉我们,人性大于数学。反过来说,“如当作恶的收益小于诚实的收益,人们选择不作恶”,这种人性成为定理,人的随机性就在特定公式中消失。这类的例子很多,也就是必须用规则限制人性。比如港币的稳定机制,就是将随机性控制在7.75-7.85兑换一美元的范围。这就极大限制了人的随意性造成的影响。
中本聪的高明在于对人性的理解。
用概率方法解决分布式系统的一致性问题
比特币没有统一的中心化节点,如何做到账本的正确?中本聪认为10分钟交易数据可以到达所有分布式记账节点,每十分钟的账目组成一个区块,由算出哈希值的记账节点负责记账,同时验证前面区块的节点记账是否正确。要验证多少区块就可确认账本结果是正确的?中本聪创造性地运用了概率理论。中本聪认为只要在错误或恶意算力占比不高于10%的情况下,我们就只需要在交易进入区块后再延长5个区块即可认为账本正确。就是6个区块确认。14年的实践证明六个区块确实没有出现过问题。
现在的算力巨大,10%的恶意算力很难出现,考虑到空块的存在可能导致分叉,Coinbase交易所建议3个区块确认就可以了。中本聪的方法是对传统的分布式最终一致性的突破,他用概率解决了一致性问题,这应该是首次吧。如果一个分布式系统,没有中心同步节点,也不是概率性的确认,那么这个分布式系统在数学上是不完备的,因此不具备账本的可靠性。这类的加密货币项目很多,读者可以自行比较。今天没有失败,不意味着未来不会失败。这句话说得很重。
这是一个非常重要的问题,也可考察非账本类的项目,比如对于中心化的云存储,由于有中心化的调度,有3个备份就可以。对于没有中心化调度的分布式存储,应该是多少备份?如果到了6个或者更多才有可靠性,那还有经济性可言吗?
用中心化账本使得分布式系统记账有了数学完备性
分布式账本意味着大家都可以记账。但是如何保证不记错帐?显然所有记账节点的账本都必须相同。这就要求有规则。大家都把账记到最长链上,并且最长链的记账要经过六个区块确认。新的区块被用P2P的方法同步到所有的挖矿节点。中本聪在整个记账过程中都在与不确定性作斗争,唯独保留了中心化账本。数学家证明只有中心化账本才有数学的完备性,记账可以不是中心化的,验证可以不是中心化的,而账本必须是中心化的。这意味所有的账本互为拷贝。
去中心化是一个含糊的概念。应该明确地说,中本聪的高明之处是利用分布式的方法,实现了中心化的账本。为什么绕了这么大一个弯?因为这是为了公平。人人可以参与的公平,最长链原则是公平,用6个区块确认是公平,显然一个节点发币不公平。
对人性的深刻洞悉,采用公平的方法对抗不确定性,这合天道、合人性。
设计全局“顺序时钟”来对抗时间不同步
对于分布式系统,如何做到数据最终一致性?有中心化的调度节点,一切就都变得容易了。人们可以设计一个时钟,大家按这个时钟同步。比特币没有中心化节点调度,指定格林威治时间并不能保证所有的电脑时间同步。显然此路不通。中本聪十分简单地设计了区块高度,这是系统唯一的“时钟”,走得最快的就是准确的,即最长链原则。
区块高度的概念被后续的加密货币项目广泛采用。软件编程过程中没有长宽高的考虑,只有时间,而在比特币系统中,时间的不确定处处可见,比如哈希算法的博弈等。设计区块顺序排列,并提炼成区块高度,以此来巧妙地对抗时间的不确定性,是一个非常自然的想法,也是十分简单和高明的方法。
节点自由进入和退出以及节点的博弈关系对抗联合作弊
比特币的节点是自由进出的。有加密货币项目采用固定节点方法,含有指定的意思,我们必须信任这些指定节点。这是非常不确定的事,我们无法证明他们不联合作弊。比特币的节点记账是博弈产生的,概率算法保证无论是竞争还是联合,都不可能作弊。这个方法去掉了对人性的信任,对抗了人性的不可靠,是任何一个加密货币系统都要考虑并解决的问题。
对抗互联网底层攻击的非对称加密
这是中本聪的老本行技术,即使比特币是明码传输,你都拿我没辙。对于比特币之后的一些加密货币,采用了账户系统结构,他们不得不在传输过程中加密。
没有中心节点的调度,中本聪最终的对抗方法
没有中心化节点的调度,就存在区块的确认时间的问题了。目前时间最快的是BSC,即币安智能链。它的确认时间是3秒一个区块,11个区块确认要33秒以上,不要说对21个固定节点存在不可靠猜疑,就是这个时间也比中心化慢了一个数量级。比特币系统的确认时间需要一个小时以上,这将如何用于支付应用?后期在比特币论坛中,人们对扩展应用的问题越提越多,这些都是比特币系统解决不了的。如果解决这些问题,就会降低系统的可靠性。所以中本聪一走了之,彻底消除了结构改变引起的不确定性。
这件事隐含着一个道理,由于中本聪都不做的一层支付,别人做这个有戏吗?所有的支付要放在二层解决,而不应该放在一层主链之上。主链要单纯,就是只完成发币这一件事。因为发币没有竞争对手,支付的效率如果不超越Web2就没有竞争力。
完美系统有瑕
比特币在历史上曾经发生了海底电缆断网,2018年某一天下午15:30,中国的海底光纤突然出现故障,国际出口被阻断。然而,整个比特币网络仍旧正常运转:国内的矿池、矿场照样在挖币;国外的矿场、交易所继续正常挖币和交易。于是形成了中国区和中国区外两个区的采矿。两个多小时后断网故障修复,由于中国区的算力大,很快中国区成了最长链,中国区外的记账都无效了,交易都退回到交易池中。好在时间不长,只有两个多小时,因此没有引起大的问题。但是如果是几天呢?许多交易已经被确认为正常交易,很难恢复到确认交易前的状态。硬要恢复到,可能在商业上会有混乱和争议出现。
对于互联网底层故障最好的办法就是比特币系统停摆,不知道当年中本聪的警报系统是否有这个功能,但是他最后还是移除了警报系统。
中本聪和比特币的运气真好,现在94%的币都挖出了,算力的分配比较均匀。人算不如天算,祝福比特币好运!
但是被废的链造成记账者的损失,当时价值很小,无所谓,现在则很大,应该补偿,钱从哪来?以太坊是叔块补偿,做得好。
体会
做加密货币项目,如果没有研究透比特币,就会事倍功半。后来许多人的项目不成功,就是没有学会走就开始跑了。我们花费了14年,除了比特币,尽管有很多好的创意,但是不能与互联网的整体进步相比。目前还没有一个项目比FTX爆雷对主流的影响力大,而FTX还是一家中心化的交易所。