去中心化的进击

我们自己发明的“透明保险箱签名记账余额开放协议”,已经完全可以应用在现有的交易系统里,即使这个系统是中心化的也没问题。因为我们在开头已经说了,区块链只是用于修复社会性缺陷。以银行会计为例,据统计有27.5%的会计从业者都曾在系统中录入错误的数据。只要在交易和授权这一层用上区块链的加密协议,再加上一个三方见证,就可以修复这种人为因素导致的社会交易缺陷。再进一步追问,银行体系也会犯错吗?从经济学角度讲,银行和国家的政策是博弈平衡的结果。在大经济环境的约束下,一个理性银行对个人作恶的投入产出太低,也就失去了作恶动机。但银行和政府的决策也是人定的,所以有时无心,有时也故意,这种人的错误可能积累放大,成为整个银行业的错误。最近10年来,银行正在失去其备受信赖的光环,也正是这10年,区块链登上了历史舞台。

回到2007年的次贷危机,就是典型无数个小错误叠加产生的大危机。当时互联网泡沫和911事件结束不久,美联储主席格林斯潘为保持经济增势将利率降到1%。如此低的借贷成本,大大刺激了投资业和房地产市场。本来无钱购房的消费者,现在能以极低的成本贷款买房。房产商何乐而不为?房产市场火爆,房价上涨,买家卖家都开心,毫无破绽。银行贷出去那么多钱,压力有点大,万一债务方违约怎么办?所以他把不同风险等级的资产进行打包,并购买对应的保险。这也没有任何问题,只要有保险公司接单,风险就能够转嫁。保险公司也很精明,接单前先对债务资产进行评估,调查下来发现有房产作为抵押,而且房价还一路上涨,债务风险非常可控啊。保险就是一个概率和心理的游戏,计算下来这笔生意大有赚头。结果银行一看又不乐意了,这钱不能让你白赚,我要把这些高质量债务打包成债券,高价卖给投资客岂不美哉。于是就产生了后来臭名昭著的抵押债务债券(CDO)。要知道投资客的素质参差不齐,在基金经理花言巧语的哄骗中,在周围房价蹭蹭上涨的刺激下,大笔买入这种债券。其实理性的看这样也没有太大问题,但是恶性循环开始了:买房客开始贪婪,贷更多的钱买本来负担不起的房子;房产经纪各显神通帮忙找房子、找贷款,只管成交;银行觉得反正债券能卖出去,风险可控,就大笔放款,审核放松;投资客一看房价这么高,有抵押的债券利息又可观,稳赚不赔啊,于是完成最后的接棒。在这个贪婪循环里,泡沫越来越大。终于有一天过度消费的购房者无力偿还贷款,大量抵押房拍卖流入市场,房价大跌。CDO债券的抵押物资不抵债,大范围违约,整个银行业深陷其中,无力自救。

2008年金融危机席卷全球,间接引发了更大范围的经济危机。从此各国央行人人自危。中国改革开放30多年的高速成长也面临考验。索性中国安然度过危机,10年后,时任央行行长周小川在2017年11月发文《守住不发生系统性金融风险的底线》,对后金融危机时代中国的应对做了小结。反观西方银行体系,就没有那么自信了。同样是11月,但是在危机刚刚爆发那年,也就是2008年11月1日,署名中本聪的人发表了一篇论文《Bitcoin: A Peer-to-Peer Electronic Cash System》,这就是后来所说的比特币白皮书。从此计算机科学向金融改造迈出了自信的一步。用爱迪生的话来说,这一步不仅是1%的灵感,更是99%的汗水。因为比特币技术不是凭空创造的,在这篇论文之前,加密交易协议和分布式系统都有了关键技术的储备。正如我们在“区块链中的数学”那个章节所介绍的。站在巨人们的肩膀上,中本聪完成了最后一步,也是至关重要的一步:通过一种公平的激励机制,创新的整合了前人的积累,形成真正意义上可以完全去中心化的账本系统。

面对这种突破式创新,银行业嘴上是积极拥抱,但内心却是抗拒的。货币与金融作为经济体里至关重要的资源,同时也代表了权力和利益。习惯了这种有利身份的金融从业者,一边给客户下跪,一边还不忘对比特币嗤之以鼻。终于有一些金融民工忍不住好奇,拥挤在陆家嘴的廉价食堂里讨论着这个新鲜玩意儿。此时计算机世界的疯子们,早已欢呼雀跃,他们口中的比特币,代表了真正的未来。当银行业终于发现大势无可阻挡时,只好半推半就垫着脚,小心翼翼踩进这片不知深浅的水塘。上来就自断双臂,调整货币体系是不可能的。那就先拿身边的小事来开刀。还真有一件事,银行自己都对自己不满意,那就是跨国汇兑。要问这种支付形式有多慢?你可以想象一下:你的小孩在国外留学,办理了当地的银行卡。今天他急着要买车,钱不够,需要你汇款过去。你收到消息立马出门走向银行,而你的老伴则提着压箱底的美金,直接叫了个车去机场。你顺利办完手续,银行告诉你要过几天才能汇到。这时老伴买了最快的那班机票,准备登机。你回到家,发消息给小孩,安抚他让他耐心等待。深夜你已入睡,而老伴的飞机也刚到达目的地。第二天早上醒来,你收到小孩的消息,现金已经收到。老伴说他休息一下,明天再回来。你一个人在房间里感到无助,打了个电话问银行的进度,他们说在流程中,会如期进行。又过了一天,到了晚上,老伴已经回来了。银行打电话来说审核需要补充一些信息,你淡淡回复到:不用审核了,钱我老伴已经亲自送过去了。

所以最早的区块链金融应用很多围绕跨境支付,比如Ripple。他作为国际支付中间商,使用XRP数字代币进行快速结算。技术上通过分布式账本建立了企业和传统汇兑中心的新式链接,提供了一套更高效,更低成本的方案。但因为承载这套服务的设备和数据被限制在其合作方联盟内部,所以很多人批评他过于中心化。在这种“联盟链”的系统里,没有币圈常说的挖矿机制,其初始化的1000亿枚XRP币是预设分配的:200亿会给予3个创始人,550亿目前还在托管账户,合作伙伴会瓜分一些,剩下Ripple公司(以前叫Opencoin)高管和团队持有不少,过了锁定期可抛售以获得利润。这种分钱的方式看上去比中央银行还要野蛮。但因为业务前景看好,其代币的市场认可度尚可。最近他们试图增加开放性,以顺应广义区块链的需求。但缺乏合理的“挖矿”和分配机制,即使账本网络对外扩张,新加入的算力节点如何分工和分享收益仍是未知数。国内互联网巨头们在试水区块链时也遇到类似的矛盾,加上中国对加密数字币的监管,区块链技术一直难落地。终于2018年6月25日,蚂蚁金服和渣打银行合作,推出以区块链技术为基础的跨境汇款服务。这个服务直接取消了代币形式,联盟链网络节点更加封闭,可以说是比Ripple更中心化的项目。立场决定态度,站在金融界视角设计的区块链项目,总让人感觉不够纯粹。

真正的区块链蕴含着更大的野心,这个野心不是改造银行交易业务那么简单。在全球化的视角里,中心化最大的风险是超越国家的系统性风险。也就是国家遭受重大打击,金融体系崩溃,记账系统瘫痪,交易无法进行。面对这种情况,简单的分布式,多机房可以解决硬件问题,但是仍然解决不好人的问题。所以区块链索性彻底放开账户管理的权限,所有人都可以参与见证。这些见证者是超越国界的先驱,但却被赋予了非常土的名字:矿工。银行业的区块链项目,没有甘于做矿工的,都想打造自己的平台。但银行又不可能推出真正去中心化的产品,因为他们是旧体系的受益者,这是经济规律决定的。所以去中心化的进击主力,将会是另外一群人。为了揭示比特币白皮书最深刻的内涵,让我们回到比特岛,继续那里的故事。

比特岛矿工事件

去中心化可以理解为对于人类社会缺陷的更深层修复,我们还是以比特岛为例来推演和放大这种缺陷。今天“比特岛”上发生了大事件,有一种恶意病毒肆意的传播。感染的人会记忆模糊,分不清敌友。他们疯疯癫癫,时而胡说八道,时而思维清晰,导致整个岛上没有一个人是可信的,包括阿稳和阿北。这时能够依赖的只有科学,所以钥匙和锁,以及数字签名都还正常工作。感染了病毒的阿北,开始胡乱记账:

2018年5月1日 17:30:00 阿稳支付给阿北1元,阿稳账户余额-3,阿北账户余额为3 ;
2018年5月2日 13:50:00 阿北支付给阿稳1元,阿稳账户余额-2,阿北账户余额为2 ;
2018年5月3日 11:35:00 阿北支付给阿稳1元,阿稳账户余额-2,阿北账户余额为2 ;

阿稳拿到账本简单计算就可以发现第三条支付之后的余额没有按规则变化,而如果自己擅自修改的话,阿北也可能不认账。所以阿稳打算把验证账本的权利,交给岛上剩下的意识清醒的人,以防阿稳自己哪天也感染了病毒。但是哪些人是清醒的?阿稳设计了一个小测验,做加减法。“透明的带锁带签名账本”被无限复制,分发给岛上所有的原住民,盒子上有100道题的算术小测验,原住民独立算完之后,跑到岛的中间比对答案。答案一致,且最快计算出来的,可以给自己的账户增加1元钱。这笔交易最后由帮他验证答案的其他原住民一起签名,达成共识。那些意识模糊,或者恶意捣乱的,因为测验答案不通过,所以被排除在账本见证权限之外。留下那批意识清醒的原住民在无需打开盒子的情况下检查这个“透明的带锁带签名账本”的合法性并投票。这些原住民就是矿工,获得的记账奖励就是挖矿,交易的投票验证就是共识机制。之前阿北胡乱记账的内容就因为不合法而被抛弃,仍然以上一周期的账本为准。比特币利用更巧妙的一种小测验形式,保证小测验的答案和账本的内容耦合在一起,当原住民算完小测验之后,他验证的那个正确账本也被锁定,无法篡改。感兴趣的朋友可以去阅读比特币的白皮书或者代码文档,到此为止,我们的加强版记账协议就和比特币一样做到了广义上的公开透明不可篡改。

原住民通过帮助阿稳和阿北记账,自己也积累了一些“小金库”。那些记忆模糊的原住民显然无法撼动这个系统,但是意识清楚的原住民中,也分裂出了恶意分子。因为每一笔记账经过钥匙和签名的双重保障,所以要篡改别人的账本内容是不可能的。而如果只是捣乱干扰验证,也并没有任何经济收益。但某一天这些恶意分子发明了一种重复消费(double spending)的诡计。邪恶原住民转账1元钱给友善原住民买一个香蕉,转账记录签名锁好交到岛中央进行验证。友善原住民看到记录后把香蕉交给了邪恶原住民。谁知邪恶原住民同时发起了另外一个转账,将同样的1元钱(尚未支付给友善原住民时的账本状态)转给自己,用自己的签名和锁锁上。这时在岛的中央出现了相互冲突的两个记账版本,这一元钱有的说支付给了友善原住民,有的说还留在邪恶原住民那里。见证者分为了两派,也都分别完成了自己的小测验。但是有效账本只能有一个,这时投票是唯一的方式。只要邪恶原住民相互串通好,超过50%的投票比例,就可以把白的说成黑的,完成这种“重复消费”攻击。比特币协议也存在这个风险,如果矿工严格按照现在的代码执行,那么哪怕发现了冲突的账本,也只能认可那个票数多的版本。

最后的攻防

比特币协议也存在重复消费的风险,如果矿工严格按照现在的代码执行,那么哪怕发现了冲突的账本,也只能认可那个票数多的版本。在中本聪的白皮书发布前,就有人提出各种不同的解决方案。最终比特币里使用一种叫做Proof of work (POW)的竞赛机制,这是在1999年就曾提出过的概念。他以计算机算力为门槛,尽量公平的让更多不同计算节点拥有平等的投票权,而避免被一小部分人掌握。中本聪巧妙的把这一机制和比特币奖励结合在一起。那个最有可能作恶的人,是付出最多计算资源的人,也是拥有最多记账权的人,同时是记账收益最大的人。所以既然靠记账就能赚大钱,为什么还要砸自己的饭碗,去攻击自己负责记账的交易系统?重复消费只能赚得一时,一旦被发现,交易者必然会转移到其他交易平台,原平台本来可观的记账收益将一去不返。本来掌握记账收益可以赚一辈子,那捡了芝麻丢了西瓜的事,聪明人绝不会干。这个机制再一次验证了,社会信任源自于经济学原理。一个老板招聘总经理管理公司,这个职业经理人不会以工资为主要收入。聪明的老板一定会将其收益和公司业绩挂钩,那最直接有效的方式,就是股权激励。

但没有作恶的动机,不代表就不会犯错。2018年10月5日,拥有比特币网络领先算力的蚂蚁矿池,就因其声称的网络原因,连续出了2个空块。这期间本来正常的交易无法完成,网络被阻塞了10几分钟。好比比特岛最聪明的矿工,最先算完100道算术题后,因为偷懒没有及时处理交易,还懒洋洋的说:真是个好天气,看来今天没有人买东西。谁知背后受影响的交易规模高达千万美元。这种类似拒绝服务(DDoS)的攻击方式,倒是黑客常用的手段。碰到这种倒霉事,比特币社区倒也没有办法。这种POW机制是否真的公平,我们会在后续章节继续深挖。那这次真的是意外,背后没有经济动机吗?如果单纯看交易支付,可能难以发现,要看支付后所购买的服务或商品到底是什么。万一这10分钟里有一笔交易涉及计时拍卖,那将有人因为交易阻塞而失去出价机会。如果这次出价拍卖,涉及生死攸关的药物或者维生设备,那可能会有人因此丧命。

这并不是凭空臆想,2018年8月22日下午,在以太坊知名拍卖游戏Fomo3D里,有人利用类似的拒绝服务攻击,赢得了最终将近300万美元的奖励 。首先fomo3D融合了倒计时拍卖和庞氏分层激励。每一轮游戏以24小时倒计时开始,接受任何以太账户下单充值。每次充值就是购买一种所谓的钥匙,可以增加倒计时30秒。如果充值停止,倒计时清0无后,最后一个下单的人将获得所有充值的50%奖金池。这本来是最简单的商品倒计时秒杀套路,很多老手玩多了已经不信了。虽然区块链解决了庄家机器人作弊的问题,但任然无法解决其中的逻辑陷阱。在倒计时还有1秒钟的时候,玩家有两个选择:不下单的话收益为0;下单的话有一定概率获得奖金池,如果下单成本不高,那ROI看上去会非常高。但实际上,下单的获奖概率是所有人在你之后都不跟单的概率。当人数达到1000人时,即使每个人都很忙,人均跟单概率只有1%,但是所有1000个人都不跟单的概率为: (11%)10000.004% (1-1\%)^{1000} \approx 0.004\%

这个不到万分之一的概率,除非是1块钱博200万,才值得投入。而且随着奖金的增加,参与人数提高,中奖概率将继续下降。可以说是稳赔不赚的买卖。为了改造这个问题,吸引老玩家上钩,fomo3D把庞氏骗局那一套引入进来。玩家充值买的不是一次性门票,而是具有分红效应的钥匙。之后所有的钥匙销售额,都将其中48%按比例上缴给累计钥匙持有者,再剔除奖金池的50%,最后2%交给开发者。但这个分红是一个递减数列,假设钥匙价格为1,你是第1000个买入者,那你的分红就是:

0.481000+0.481001+0.481002+0.481003+0.482000+ \frac{0.48}{1000} + \frac{0.48}{1001} + \frac{0.48}{1002} + \frac{0.48}{1003} \ldots + \frac{0.48}{2000} + \ldots

这个衰减是如此之快,到了第10000个人充值的时候,你的收入才是1.1元,利润率10%。如果不巧你是第10000个买入者,那要等到10万人下单后你也才赚10%。可见不论何时加入,即使等到规模扩大了10倍,也没赚到多少钱。所以理论上这是不应该开始,或者开始了就不应该结束的游戏。但那个下午,在游戏结束的最后3分钟里,居然只有一笔订单成交,所有其他的跟单者都被阻挡在外。这个唯一的订单地址拿走了奖池里的10469个ETH。但其实从6191898区块开始,就出现了黑客的账户1 。他的每一笔交易需要耗费360万或420万的gas,两笔交易加起来是780万gas,而ETH一个区块目前能容纳的gas总量是800万左右。因为黑客地址支付的gas费用高,会被优先选择打包,又因为它占的gas量大,所以两笔交易就能填满整个区块,容不下其他的交易。于是在交易消失的死亡3分钟里,在区块6191896与区块6191909之间,所有的节点都在打包这名黑客的交易。即便这些交易因gas超量失败无需付费,但也成功阻挡了其他跟单者的交易。而在此之前,他要掩护的才是同样由他控制的真正获奖账户0xa169。

区块链就像一个无人值守的法外之地,如果数学不好,在这里行走江湖是要吃大亏的。开发者社区就像部落里的民兵组织,自发集结力量,维持社区的安全。每天有大量优化区块链技术的提案被抛出来,而这种松散的民兵组织,在处理区块链技术升级时,显然效率是偏低的。

真理的意外流行

有没有办法避免这种攻击?我们虽然无法改变恶意矿工,但是至少我们可以隔离他们,产生分叉,将善良矿工保留在一个社群里持续运作。这里我们要介绍一种创新的意外流行算法(surprisingly popular),很多时候真理真的掌握在少数人手里。比如我们在街头调研,澳大利亚的首都在哪里,相信大多数人第一反应会是“悉尼”。但是我们现在多问一个问题:你认为别人的答案会是什么。就是这么一个小小的改变,带来了意外的效果。大部分人会认为自己的答案和别人的答案都是悉尼,而真正的内行人知道澳大利亚的首都其实是堪培拉,而且一般人会误以为是悉尼。还有一部分一知半解的,可能会觉得墨尔本是正确答案。通过两道问题的统计,只要有足够多内行存在,我们就会发现堪培拉会是那个“意外流行”的答案,也就是自己回答堪培拉的比例,要显著高于“以为别人会回答”堪培拉的比例。内行越多,这个意外流行的程度的就越大。只要10%的专家存在,就有足够把握获得正确的答案。

将这个算法应用到比特币协议中,矿工除了验证正确的那本账本以外,还需要留意异常的节点变化。进行”重复消费攻击“时需要在一段时间内将51%算力隐藏,在攻击者释放这部分攻击算力的时候,是有迹可循的。一种攻击方式是,平时对外同步正确的账本,攻击时突然拿出另外一个版本的账本。那么善良节点通过观察该异常节点前后账本间的矛盾就可以预判恶意攻击。另一种攻击方式是平时只维护那个攻击账本,不与外界同步,在攻击时直接释放攻击账本。那么善良节点对于历史不明的新节点要隔离同步,并行保存自己验证的版本,和那些新节点意外流行的冲突版本。最后在善良节点一致识别出攻击节点后,可以进行隔离分叉。这是一个全新的比特币升级协议,目前还没有人实现过,但可以预见的是,这将对系统产生更多额外的开销。

到底去中心化要到什么程度?对风险的防范是否要做到极致?目前比特币交易速度慢,成本高已经是其最为诟病的问题,这就是完全去中心化的代价。一个简单的交易,要动用这么多见证者,还要做那些无意义的算术题。过度的去中心化和风险预防显然会导致效率低下,资源浪费。一个人出门要带伞预防下雨,要带厚外套预防降温,要带现金随时消费,要带医疗包预防受伤,要带户口本预防突然警察查岗......那这样的生活就失去了意义。为了解决比特币这种负面作用,大量的升级协议,比如持币者权重(Proof of stake),委托权益共识(DPOS)等等,试图用更低的成本来达到群体的信任。他们的可信度是否服从经济规律,是否经得起人性的考验?我们拭目以待。

1. 0x18e1b664c6a2e88b93c1b71f61cbf76a726b7801

results matching ""

    No results matching ""