共计 3833 个字符,预计需要花费 10 分钟才能阅读完成。
2016 年年初,Eris Industry 最早把 BFT 的共识引入到区块链中,创造了许可链。秘猿科技创始人等在 Ethfans 做了很多次 Meetup,当时讲了为什么我们需要许可链。简单来说,在比特币的区块链上我们实现了不记名资产,但是在很多金融场景里面我们会需要很多记名资产。我们需要知道资产是登记给谁的、身份是明确的、可追溯的,而不是一个完全匿名的环境。区块链如果要真正做到商业落地,身份融入区块链是一个必要条件。所以,在 2016 年初,我们设计与开发了企业级高性能区块链内核 CITA,并于 2017 年开源。CITA 从开源至今已经有超过 10 个版本的稳定迭代,目前已经有包括招商银行,中钞区块链研究院等多家银行和国有大型机构使用 CITA 搭建自己的底层架构。(P.s 本文首发于 2016 年 6 月的个人博客 )
秘猿科技区块链小课堂第 4 期
出世
2007 年,中本聪踏上征程,开始寻找困扰密码学爱好者多年的一个问题的答案:我们能不能在数字世界中构建一个点对点的现金系统?
2008 年,在一群密码朋克的聚集地 metzdowd 邮件列表上,比特币白皮书悄然问世。这篇划时代的论文算上引用只有短短 9 页,简洁明了的描述了一个前所未有的系统。
2011 年,我从正热衷于挖矿的好友那里听说了这个项目,但真正引起我极大兴趣的,是名为 Paul Bohm 的用户对 Quora 上一个提问的回答,他在文章中将比特币和拜占庭将军问题联系到了一起。这篇文章为我打开了一个新世界的大门,这个世界的基石不是密码学货币,而是区块链。(最带劲的是,这个世界没有奇怪的防沉迷系统 …)
区块链实际上是一种新型的分布式数据库。这个数据库与以往的分布式数据库之间最大的不同,在于它能够容忍所谓的拜占庭故障。拜占庭故障是一种最宽松的故障类型,节点被黑客控制所能表现的任意行为也是一种拜占庭故障。可以容忍拜占庭故障的分布式数据库,只有在网络中的多数数据库节点同意时,才会执行客户端请求的操作。换句话说,没有任何一个单一节点,或者容忍数量之内的多个节点,可以擅自修改这个数据库里面的数据,因此即使这些节点被黑客恶意控制,他也无法写入错误数据或者篡改以前的数据。
这样一个不能被篡改的共同维护的数据库,记录的是从数据库开始运行以来所有的操作和数据。任何人都不能否认这些数据的真实性,它是一个唯一的可信数据源,可以作为其它需要信任的业务的基础。它将一座座的信息孤岛连接成了一个完整的世界。有了这样一个数据库我们就可以创造出许多以前不可能存在的应用。中本聪用这个数据库记录了一个现金账本,于是比特币诞生了。在这样一个由遍布全球的节点共同维护的网络上,每一笔转账记录实际上都可看作数据库中的一个操作:把 A 的账户余额减少 100,再把 B 的账户余额加上 100。
如果在数据库里面记录谁拥有多少股票,我们就得到了一个股权登记系统,如果在里面记录域名和 ip 的对应关系,它就变成了一个域名注册系统。最棒的是,这些数字形态的股票,域名,各种各样的资产,还能够在这个 7*24 小时持续运行,无人可篡改,多地备份强力容灾的系统上自由流转!
共同维护一个数据库,也就意味着无需对账,降低了结算清算的成本。资产可在网络中轻松流转,交易摩擦几近于零。而数据无法篡改的性质,又完美的响应了监管机构的要求,根据摩根士丹利的分析,仅这一项就能为银行节约百亿美元规模的合规成本。
“完美。”
成茧
可惜事情并不如想象的那么简单。在比特币之后,人们按照这些想法在公有链上进行了一系列的尝试(染色币,二代币,etc.),却渐渐的发现,区块链的万里晴空上,还飘荡着两朵乌云。
第一朵乌云,是区块链的性能问题。以比特币为例,目前整个系统的吞吐量最大为每秒 10 笔左右(与单笔交易数据大小有关),而一笔交易需要至少 10 分钟才能得到确认响应(更严格的标准下需要 60 分钟)。这样的表现远远没有达到诸多场景下的实用标准。
乌云之二,是所谓的确定性问题。确定性的意思是,当你得到一笔交易的确认响应之后,这笔交易应该就算是最终确定,永远不能撤销了(除非法院判决之类的事情发生)。如果不能保证这一点,我们无论如何无法将房产股票这些资产放到链上进行流转。
无论是工作量证明 PoW,还是权益证明 PoS,实际上都是由制造后面区块的人,不停的对之前的每一个区块进行投票。以 PoW 为例,每个新制造的区块是一票,算力高的人,将获得更多的投票机会。由于投票一直在持续,永不结束,因此理论上每个区块都没有最终确定,因为后面还有无穷多的票可以用来否认它的有效性。现实中,投反对票的成本与被投票区块的年龄有关,年代越久远的块需要越多的反对票才能推翻(也就等于需要越多的算力)。只要区块中包含的交易价值够高,高过推翻这个块所需要的成本,攻击者就有动力去实施这样的进攻。
无论是性能问题,还是确定性问题,根源都在于公有链的共识算法设计上。公有网络的本质决定了,网络上的节点都是匿名的,没有真正的身份,所以公有链的共识算法必须基于这一点来设计,如果不能正确的限制匿名节点,很容易就会陷入女巫攻击的汪洋大海。还是以比特币为例,因为节点都是匿名没有身份,中本聪天才的将原本设计用来防垃圾邮件的招数,工作量证明用于出块节点的选择,再由之后的出块节点对前面的区块投票,以算力的限制代替了节点身份的限制。
虽然在比特币之后,又有包括 GHOST, Inclusive Blockchain Protocol 等各种改进出现,但是受制于匿名网络这道深层的藩篱,区块链的性能问题并没有根本性的进步 – 以太坊的共识设计可以算是代表了当前的最高水准,也仅仅做到了平均 15 秒的时延(区块间隔),吞吐量也依然停留在个位数每秒。更糟糕的是,无论哪一种研究,都没能给出确定性问题的解决方法。
随着研究的深入,我们发现,从更底层去看,区块链实际上是融合了点对点网络,密码学签名,哈希数据结构,以及共识算法的一种新型技术组合。点对点网络保证了无单点故障甚至多点故障,密码学签名使得每一个操作都可鉴权可审计,哈希数据结构使得所有的数据融为一体,无法单独修改其中的一点,而共识算法则是所有节点能形成合力的关键。这个组合模式才是区块链的本质。我们也许应该回头看看,在这个框架之下,什么是可以改变的。
于是就像经典物理天空的两朵乌云给世界带来了相对论与量子力学,区块链也迎来了新的思路。
化蝶
当我们坐下来重新审视区块链的大部分应用场景时,会意识到一个特点:无论是房产,股票还是域名,都与身份有关。在这些场景里面,我们必须先明确的知道谁是谁,然后才能把某种资产登记在他的名下。换句话说,我们要处理的问题是记名资产,而不是中本聪在比特币白皮书里所说的,现金,一种不记名资产。
如果将区块链用于记录记名资产,这个网络上的用户自然不再是匿名,于是其中的共识算法只要针对一个非匿名的网络来设计。只要修改后的共识算法依然能够容忍拜占庭错误,那么一个由这样的共识算法,哈希数据结构,密码学签名以及点对点网络所组成的体系,依然是区块链,它保留了区块链的所有优点。
而非匿名网络中的拜占庭容错(简称 BFT)共识算法已经是一个硕果累累的领域。以 Leslie Lamport 在 1982 年发表的 <The Byzantine General’s Problem> 为开端,老爷子给同步网络中的拜占庭容错共识轻轻的划了一条不可逾越的边界。接着 Fischer, Lynch, Paterson 在 1985 年发表的 <Impossibility of Distributed Consensus with One Faulty Process> 又否定了异步网络中拜占庭容错共识的可能性,给这一领域又套上一条枷锁。直到 2001 年 Castro 和 Liskov 在 <Practical Byzantine Fault Tolerance> 发出一声呐喊使得人们发现,证明了不可能又怎么样,一个实用的算法不需要面面俱到!于是更多的实用性算法如雨后春笋般涌现,拜占庭容错共识算法无论在时延还是吞吐量上都有了巨大的进步。
这些现成的 BFT 算法还有另外一个好处,由这一类共识接受的交易是完全确定的!每一笔交易在经过身份可信的节点验证之后就永久固定下来,再也不能被推翻。于是很奇妙的,对需求的分析将匿名的藩篱化解之后,区块链的性能和确定性两大问题也随之消散。不仅如此,由于网络上用户的身份可知,诸如 KYC/AML 之类的常见合规需求也变得十分容易。
一个这样的区块链系统,其中可能有数十个可信节点承担维护网络共识处理用户请求的任务,其它节点可以是代表用户自己的节点,也可以是中间服务商运行的节点,为用户设备上的轻节点提供服务,还可以是监管机构运行的节点,监督整个网络中的交易数据。这样的区块链系统和公有链并无本质上的不同,只有管理上的差别:公有链允许任何匿名用户随时加入退出,而我们的新型区块链系统则只允许通过身份认证的用户加入网络,这样的区块链可以被叫做许可链,又可以依照其中节点的所有权而划分为联盟链(节点由一个企业联盟维护)或是私有链(节点由单个企业维护)。
启程
公有链与许可链服务于不同的场景,不同的目的,在未来会扮演各自的角色。我们觉得在很多场景会需要有身份,许可链是一个自然的,有身份的区块链系统;许可链和联盟链,它的共识范围更小,适合更多的场景。所以,基于这两点,许可链还有很大的潜力和探索空间。这也是秘猿科技 Cryptape 成立的目的。我们相信,这些产生信任的机器可以为这个世界尤其是这个国家带来巨大的价值。