区块链爱好者(QQ:53016353)
比特币的很多技术点都不是中本聪的原创。比如基于“工作量证明(Proof-of-Work)”的共识达成机制是Adam Back 在 Hashcash 里提出来的,将全部交易计入一本总账、并给交易打时间戳来防范双花攻击(double-spend attack)的思想是 Wei Dai 的 b-money 和 Nick Szabo 的 Bitgold 提出来的,更不用说比特币网络是零优化的大水漫灌式P2P网络,仅就 P2P 技术而言,很多方面还赶不上2001年出现的 BitTorrent 。
但是有三个技术点绝对是中本聪原创,一个是区块链的设计,一个是区块链,一个是智能合约。而这三个设计是极为天才的,被斯坦福大学密码学和计算机安全教授 Dan Boneh 评价为“extremely brilliant”,“必将激发无穷的创新”。
当然,但中本聪最了不起的地方并不是这三个单点创新,而是将所有这些技术点跟密码学货币自身特点相结合,设计了一套“惩恶扬善”的经济激励制度,将技术创新与制度设计糅合成一个严丝合缝的体系。
在这个体系里,任何人都可以建立一个匿名节点,编写破坏性的代码,然后实施匿名攻击,即便你攻击得手、偷来大笔财富,也不会暴露身份,所以可以逍遥法外。
这个系统赤身裸体,开门揖盗,任由你攻击破坏,甚至如果你成功的突破防线偷来一大笔财富,整个比特币体系不但不会惩罚你,还会坚定的保障你的赃款。然后悬赏100亿美金,运行七年,至今为止,在主干区块链上,没有发生一起成功的攻击,一次都没有。
中本聪把比特币设计得跟数学原理一样漂亮,很多后来者连抄都抄不到这个水平。我想这就是为什么加州大学洛杉矶分校的金融学教授 Bhagwan Chowdhry会提名中本聪为2016年度诺贝尔经济学奖候选人。我相信中本聪在比特币里的很多设计思想,以及整个比特币开发者社区所做的大量改进,不仅是区块链的开山之作,而且也会成为IT系统设计的一个创新思想源泉。
区块链 的设计就很值得玩味。在《什么是区块链》一文中对其设计方案进行了介绍。本文要讨论的是区块链 的优点和不足。
中本聪为什么要把比特币设计成这样呢?考虑到他应该也不是从未来穿越回来的人物,以常理推论,他一开始应该也是从基于账户的系统出发来设计的,但他后来决定切换到区块链方案,一定是遇到什么问题。
很遗憾,比特币的源代码里找不到这些问题的答案。比特币的开发始于2007年5月,目前在Github 上最早的一版比特币源代码是2009年9月16日中本聪 push 上去的 0.1.5 版,但其中 区块链 的设计已经成型。
后来有人翻出自己的老邮件,找到了比特币2008年9月版的代码。那份代码是比特币区块链上线之前几个星期发布的,应该非常接近比特币创世纪运行的那个版本。可如果你仔细去看的话,其中 区块链 也已经定型。我们注定无法通过代码考据来发现 区块链 的设计脉络了。
其他文献材料呢?也不行。中本聪在发表比特币之前,主要是与一些密码学专家邮件交流,这些邮件外界看不到。而他积极参加论坛讨论,主要发生在比特币已经发表以后。我找不到他在 区块链 设计形成过程之中发表过任何相关的只言片语。
既然这些办法都不行,我们就只好靠猜了。
我猜测,中本聪一开始设计比特币时,也采用了账户方案。但在2007年下半年或2008年上半年的某一个时刻,中本聪发现基于账户的方案有问题,于是创造了 区块链 方案。
那么基于账户的方案会遇到哪些问题呢?
如果采用基于账户的方案,可以肯定的是,你需要一个数据库。这个数据库能够让你很方便的查到张三、李四各自的账户余额。
而 区块链 方案当然也需要一个数据库,这个数据库记录着当前系统里每一笔“没有花出去的交易输出”,也是就比特币。当节点接收到一笔交易的时候,它需要去 区块链 数据库里查,看看这笔交易所引用的 区块链 是否存在,它的收款人(拥有者)是不是当前新交易的付款者。而交易结束之后,数据库要做相应的更新。
首先要明确,无论是账户数据库还是 区块链 数据库,必须是分散的,每结点一个克隆,一定不能是中心化的。如果比特币系统有一个中心数据库,不管你有多少节点,每一笔交易都要跑去中心数据库验证一下、然后再执行“转账”的事务操作,那就完全谈不上“去中心化”,比特币就毫无价值了,不如老老实实用支付宝。
既然都是每个节点克隆一个数据库,根据交易过程同步修改,那么一个账户数据库跟一个 区块链 数据库,又有什么分别呢?
进一步思考,我们会发现还是有很大分别。
首先,长期来看,账户数据库会无限膨胀,而区块链 数据库体积会小很多。
要知道,比特币是个匿名体系,它的账户就是“地址”。每一个比特币用户可以拥有几乎无限多的地址,在比特币系统来看,它完全不知道两个地址背后对应的是不是同一个人。