为什么IBM的Hyperledger不是真正的区块链?它其实是一个Kafka的排序服务


国内很多上报国家区块链名单的公司不少使用了IBM的Hyperledger,其实Hyperledger不是真正的区块链。下面是在金融行业建立交易系统和交换主干方面拥有15年的经验的Stuart Popejoy的文章:
早在2016年,企业“私有区块链”就是一个新的,不熟悉的想法。私人许可的区块链空间中没有多少主要参与者; 一个很有名的是IBM,他将Hyperledger Fabric带入了沃尔玛、雀巢和Aetna等许多企业。
您会认为IBM品牌的突出和历史将导致其区块链技术的广泛采用,但相反,采用一直缓慢,大多数解决方案仍然处于新生概念验证阶段。这表明许多IBM的企业客户并不满意。
原因可能是从根本上讲IBM的Hyperledger 并不是真正的“区块链”,它所提供的功能难以使用且难以扩展

当我在2016年在摩根大通工作时,我领导了一个新兴技术集团,该集团研究和审查了该银行潜在用途和战略投资的区块链。当时,我们对Hyperledger,Axoni,Symbiont,Tendermint,Ripple的早期版本进行了深入分析和以太坊。
我的团队发现,市场上的区块链选项在技术上对于真实的企业用例来说是低于标准的。这些技术问题包括将代码编译为计算机“字节码”,这使得业务逻辑难以理解 、难以检查审计 , 运行得如此之慢以至于无法比传统数据库更好地执行有用的业务事务

因此,我们在查看区块链供应商时,提出了一系列问题。问题如下:

  • 这个区块链使用什么语言?
  • 语言是为安全而设计的吗?
  • 系统能否轻松表达复杂的业务规则?
  • 您能否升级合同,即建立任何合同的治理制度?
  • 系统可以与外部区块链交互吗?
  • 系统是否可以添加参与者(节点)而不会显着降低性能?

使用这些问题作为框架,我认为IBM区块链系统从根本上缺乏一些架构元素。

什么区块链是和不是
为了真正了解IBM的区块链无法满足的地方,我们需要查看区块链本身的定义。 区块链是一个分散的分布式数据库,是一个不可变的事件或交易分类账,其中真相由共识机制决定 - 例如参与者投票同意所写的内容 - 以便没有中央机构仲裁真实情况。
IBM 对区块链定义截取了 区块链的分布式和不可变两个元素,但省略了分散的共识 这是因为IBM Hyperledger Fabric 根本不需要真正的共识机制

相反,它建议使用名为Kafka的“排序服务”,但如果参与者之间没有强制执行加密安全投票,则无法真正证明代理是否篡改了分类帐。实际上,IBM的“区块链”只不过是一个美化时间戳的条目列表

IBM的架构暴露了因为需要极少量恶意协调而导致的潜在漏洞。例如,IBM 在“网络内部” 引入了带有验证器签名的公钥加密,这从根本上使比特币和其他真正的区块链的安全模型无效,网络永远不要介入用户外部提供的公钥签名。(banq注:因为人由好坏,坏人也会提供签名)

在Hyperledger节点中,唯一重要的签名是验证器,而用户签名消失在通过网络复制的“RWSet”中的任意数据中(参见下图)。


IBM由于其复杂的架构,它们的性能数字非常快速且松散。区块链的架构或形态很重要,因为它控制信息在数字分类帐上的移动方式。
IBM平台架构很复杂,涉及非均匀节点,不可靠的智能合约和许多故障点。在安全方面,其架构仅在系统内提供保证,这意味着总有可能让人产生破坏用户的意图。
此外,IBM Hyperledger Fabric声称的性能数据具有误导性。Hyperledger使用多链环境(他们称之为“渠道”)作为其机密性/网络安全性的一部分。但是,它们的事务不能跨通道复制,这意味着应从性能的角度独立评估每个通道。

在查看各个渠道时,IBM的系统难以达到800 tps以上,但即使是16通道配置也几乎不能超过1500 tps,延迟时间可以达到10-20秒的吞吐量。

因此,要实现IBM的最高性能,您必须部署多个需要额外配置的通道,以实现最大性能(仍然不能超过1800 tps),延迟时间飙升至10-30秒范围。此外,现实生活中的多渠道网络部署起来也非常复杂,因此不太可能真正在商业中使用。


为什么智能合约很重要
最后的考虑因素包括用于在区块链中编程命令的智能合约语言。智能合约不仅仅是一段代码; 它是业务逻辑的代表。
智能合约可以确保区块链上的房屋安全,确保数字身份,甚至只代表购买和销售旧电视的人之间的托管交易。重要的是,智能合约是可靠的,并始终按照它的意愿行事。
在区块链上构建任何东西时,您需要能够通过智能合约来表示您想要做的事情(购买,出售,打包数据等)。您的语言使用起来越简单或越简单,您构建所需内容的速度就越快,并且会在利益相关者面前展现出来。
IBM Hyperledger Fabric智能合约(“chaincode”)可以用许多编程语言编写,包括通用Javascript或Go。支持多种语言似乎是有益的,因为它允许人们在不必学习新语言的情况下获取区块链。
但是,在已经了解通用语言的程序员的便利性与特定于域的语言提供的安全性和安全性之间存在权衡。智能合约语言必须是专门设计的,并且设计安全:如果代码有缺陷或不正确,因为它不是为区块链设计的,那么数百万美元可能会丢失。

最后,如果编程语言是通过用户友好性来衡量的,那么Hyperledger的编码并不是很简单。为了说明经典的程序员编码告诉计算机说“你好世界”,你需要150行代码。