区块链真的必要吗

Catalogue
  1. 1. 你真的需要一个区块链应用吗?
    1. 1.1. 成本。全部的成本
    2. 1.2. 必要性
    3. 1.3. 替代
  2. 2. 区块链的现有难题
    1. 2.1. 处理性能
    2. 2.2. 扩展性
    3. 2.3. 系统安全
    4. 2.4. 数据库和存储系统
    5. 2.5. 可集成性
    6. 2.6. 智能合约
    7. 2.7. 其它

区块链技术需要继续克服的难点和其必要性的讨论。

你真的需要一个区块链应用吗?

成本。全部的成本

对于区块链技术而言,首先是维护成本。区块链要运行,必须有一定的投资。如果要安全运行,就必须设计出安全机制。而安全机制也需要成本。在目前而言,说区块链比”传统技术”更好的,主要是从安全性、透明性、不可更改(防伪)等特性上出发。那么,要维持这些特性,就必须维持一个符合区块链技术特性的系统——一个开放、分布式的、并且足够安全的数据库系统。

但是,维持这样一个系统,或者说同时达到这些目标,所需的成本非常昂贵。对于一个符合区块链技术特性的系统,首先要满足的是去中心化。这种去中心化的分布式不仅仅是“灾备”级别的分布式,而是系统中必须存在足够多个互不隶属,且独立决策的节点,并且记录区块链的权利在这些节点中以某些方式公平产生。也就是说,一个区块链系统中如果有100个份额的决策权,某个主体不能拥有51个以上。区块链系统不能由任何一个人说了算,至少要保证任何一个主体(或一致行动人)不占有超过51%的控制权。如果一个区块链系统全部或大部分由某个主体控制,那么和由该主体直接记录就没有差别了,为什么要用区块链呢?之所以用区块链,目的就是为了防止少数人操纵,是基于对个体的不信任。如果单一主体控制了区块链,区块链就失去了意义,甚至还不如由该主体维护的中心化系统效率高。

中心化并不一定代表着低效率。
在特定的范围内,中心化带来的资源集中式可以大大提升效率的。就以银联为例,银联是国内银行业清结算的中心,没加银行只需要和银联对接即可实现和所有银行的交易。若去中心化,每家银行需要和所有的交易对手去对接。Blockchain的去中心化,只能在特定领域(即不适合中心化的领域)发挥作用。

当然,对于为了提高效率,降低内耗的联盟链来讲,还是有一定的应用价值。
比如对银行来说:
银行是不会接受谁都能来参与形成节点的区块链的,如果违法违规的事件发生时,银行没有权利保护被受害人,老百姓是不会买账的。那么,银行就必须限制节点参与记账,有且只有银行的“亲信节点”能够记账。这样,就保证银行的命令和想法能被每一个记账人执行而不出漏子,也同时保证隔壁不会有新的记账人跳进你的链里来搞事。这就便是“中心化的”区块链了。

现在很多创业者们,说能用区块链解决信任的问题。我也不是想泼冷水…但是你们一没比特币那样大量的矿工和算力,二没金字塔顶端阶层的庞大信用,三没有木仓,这样的区块链就是无本之木,搞出来的应用还不如不用区块链简洁,除了忽悠风投好讲故事之外还有啥用啊?

必要性

必要性上面叙述了为了保证安全,必须投入大量成本。而成本又必须要来源于系统之外——不然的话,区块链就又变回了少数人操纵的游戏。而如此麻烦复杂的系统,真的是必要的吗?且不说金融系统目前有完善的解决方案,我们就谈一点:如果一个比特币交易所(或者:银行),哪怕采用了“区块链”技术,你还是要先信任它。不管这家高大上的机构采用了何种技术,你首先要把钱交给它。

当你把钱交给它以后,意味着你已经信任它了——那么,它采用什么技术,还有什么关系吗?(有的吧,比如说用了这个科技才会得到信任?)且不论用区块链记录股权是否合理,购买一家公司的股权,说明已经认可了这家公司的股权合同。至于这家公司以后命运如何,至少当你决定买下这股权时,已经决心承担持有期间的风险。此时,其实最大的风险已经被你接受,至于权益是以何种形式记载,无论是记载在羊皮纸还是区块链,只是形式的区别。真正重要的是你已经确立了权益关系。因此,在使用区块链进行所谓股权交易时,只是简化了股权交割和股权证明保存的步骤。或者说,保证你的股权证不会丢失或者被盗。当然事实上使用比特币记录股权是非常危险的,比特币私钥随时可能丢失和被盗——还不能补发,这和你丢了A股账户卡那张破纸完全不是一个性质。如果你的权益私钥丢失了,你就事实上失去了对公司权益的所有权。更不要说区块链系统的成本还包含学习成本!

替代

相比区块链这个复杂脆弱成本高昂的系统,现有的系统在处理很多问题上已经足够好了。现在的证券、银行的电子交易系统,虽然还有这样那样的问题,但能保证起码的安全,并有相当的效率。交易所的系统处理都是微秒级撮合,最快的日内选手也能发挥优势。而区块链为了保证安全,至少也要异步处理,延迟个半分钟吧?——这样效率的损失,究竟有否必要呢?

参考:Velaciela

区块链的现有难题

处理性能

如何提高交易的吞吐量,同时降低交易的确认延迟。
目前,公开的比特币区块链只能支持平均每秒约 7 笔的吞吐量,一般认为对于大额交易来说,安全的交易确认时间为一个小时。小额交易只要确认被广播到网络中并带有交易服务费用,即有较大概率被最终打包到区块中。

因为在当前的算力下,对于6个区块(1小时)以前所记录的区块基本没有可以更改的可能性。

区块链系统跟传统分布式系统不同,其处理性能无法通过单纯增加节点数来进行扩展,实际上,很大程度上取决于单个节点的处理能力。高性能、安全、稳定性、硬件辅助加解密能力,都将是考察节点性能的核心要素。

一方面可以将单个节点采用高性能的处理硬件,同时设计优化的策略和算法,提高性能;另外一方面将大量高频的交易放到链外来,只用区块链记录最终交易信息,如 闪电网络 等。类似的,侧链(side chain)、影子链(shadow chain)等的思路在当前阶段也有一定的借鉴意义。类似设计可以很容易的将交易性能提升 1-2 个数量级。此外,如果采用联盟链的方式,在一定的信任前提和利益约束下优化设计,也可以换来性能的提升。目前,开源区块链自身在平台层面已经实现普通配置,单客户端每秒数百次的交易吞吐量(参考后面的 性能评测数据),乐观预测将很快突破每秒数千次的基准线,但离现有证券交易系统的每秒数万笔的峰值还是有较大差距。另外,从工程设计和平台部署上,都存在一些可以优化的地方。

注:VISA 系统的处理均值为 2000 tps,号称的峰值为 56,000 tps;某支付系统的处理峰值超过了 85,000 tps;某证券交易所号称的处理均(峰)值在 80,000 tps 左右。

扩展性

常见的分布式系统,可以通过增加节点来扩展整个系统的处理能力。对于区块链网络系统来说,这个问题并非那么简单。

网络中每个参与维护的核心节点都要保持一份完整的存储,并且进行智能合约的处理。因此,整个网络的总存储和计算能力,取决于单个节点。甚至当网络中节点数过多时,可能会因为一致性的达成过程延迟降低整个网络的性能。尤其在公有网络中,由于大量低质量处理节点的存在问题将更明显。信息量越大, 交叉验证所需的时间越长,效率也会也会越地下。所以,区块链解决了信任问题,但带来了成本的上升和效率的下降。

比较直接的一些思路,是放松对每个节点都必须参与完整处理的限制(但至少部分节点要能合作完成完整的处理),这个思路已经在超级账本中启用;同时尽量减少核心层的处理工作。
在联盟链模式下,还可以专门采用高性能的节点作为核心节点,用相对较弱的节点作为代理访问节点。

系统安全

区块链目前最热门的应用前景是金融相关的服务,安全自然是讨论最多、挑战最大的话题。

区块链在设计上基于现有的成熟的密码学算法。但这是否就能确保其安全呢?
世界上并没有绝对安全的系统。系统是由人设计的,系统也是由人来运营的,只要有人参与的系统,就容易出现漏洞。
可以参考,著名黑客米特尼克所著的《反欺骗的艺术——世界传奇黑客的经历分享》,介绍了大量的实际社交工程欺骗场景。

有如下几个方面是很难逃避的:
首先是立法。对区块链系统如何进行监管?攻击区块链系统是否属于犯罪?攻击银行系统是要承担后果的。但是目前还没有任何法律保护区块链以及基于它的实现。

其次是软件实现的潜在漏洞是无法避免的。考虑到使用了几十年的 openssl 还带着那么低级的漏洞(heart bleeding),而且是源代码就在大家眼皮底下。这背后曾经发生过啥,让人遐想连篇。对于金融系统来说,无论客户端还是平台侧,即便是很小的漏洞都可能造成难以估计的损失。

另外,公有区块链所有交易记录都是公开可见的。搞大数据的人听了是不是开始激动起来了,确实,这里面能分析的东西还真不少,而且规模够大、影响力够大……实际上,已有文献证明,比特币区块链的交易记录最终是能追踪到用户的。
还有就是作为一套完全的分布式系统,公有的区块链缺乏有效的调整机制,一旦运行起来,出现问题也难以修正。即使是让它变得更公平、更完善的修改,只要有部分既得利益者合起来反对,那就无法加入进去。这让比特币本身的价值也蒙上了一层阴影。

此外,运行在区块链上的智能合约应用可能是五花八门的,必须要有办法进行安全管控,在注册和运行前需要有机制进行探测,以规避恶意代码的破坏。2016年6月17日,发生 DAO 系统漏洞被利用 事件,直接导致价值 6000 万美元的数字货币被利用者获取。尽管对于这件事情的反思还在进行中,但事实再次证明,目前基于区块链技术进行生产应用时,务必要细心谨慎地进行设计和验证。

数据库和存储系统

区块链网络中的块信息需要写到数据库中进行存储。观察区块链的应用,大量的写操作、hash 计算和验证操作,跟传统数据库的行为十分不同。当年,人们观察到互联网应用大量非事务性的查询操作,而设计了非关系型(NoSql)数据库。那么,针对区块链应用的这些特点,是否可以设计出一些特殊的针对性的数据库呢?

levelDB、RocksDB 等键值数据库,具备很高的随机写和顺序读写性能,以及相对较差随机读的性能,被广泛应用到了区块链信息存储中。但目前来看,面向区块链的数据库技术仍然是需要突破的技术难点之一。笔者认为,未来将可能出现更具针对性的“块数据库(BlockDB)”,专门服务类似区块链这样的新型数据业务,其中每条记录将包括一个完整的区块信息,并天然地跟历史信息进行关联,一旦写入确认无法修改。所有操作的最小单位将是一个块。

可集成性

在相当长的一段时间内,基于区块链的新业务系统将与已有的中心化系统共存。
两种系统如何共存,如何分工,彼此的业务交易如何进行传递?
这些都是很迫切的问题。这个问题解决不好,将是区块链技术落地的很大阻碍。

智能合约

智能合约可视作一段部署在区块链上可自动运行的程序,其涵盖的范 围包括编程语言、编译器、虚拟机、事件、状态机、容错机制等。

虚拟机是区块链中智能合约的运行环境。虚拟机不仅被沙箱封装起来, 事实上它被完全隔离。也就是说运行在虚拟机内部的代码不能接触到网络、文件系统或者其他进程。甚至智能合约之间也只能进行有限的调用。智能合约本质上是一段程序,存在出错的可能性,甚至会引发严重问 题或连锁反应。需要做好充分的容错机制,通过系统化的手段,结合运行 环境隔离,确保合约在有限时间内按预期执行。

其它

区块链提供的新应用和新的业务场景,也带来了对很多具体的运营问题。
例如:

  • 智能合约的合法性、安全性和可执行性;
  • 如何将现实中的合约和条约对应为电子合约;
  • 分布式系统的伸缩可靠性和数据迁移;
  • 对存储系统新的挑战,特别是性能。

参考:yeasy