摘要
第 46 届世界经济论坛达沃斯年会将区块链与人工智能, 自动驾驶等一并列入 "第四次工业革命".《经济学人》曾在 2015 年 10 月的封面文章《信任的机器》中介绍区块链 --"比特币背后的技术有可能改变经济运行的方式".
区块链之所以被称为信任的机器源于其分布式和不可篡改的两个核心特性, 这也是区块链有别于传统数据库的核心特性. 这里的分布式包含两层含义: 一是传统的分布式存储, 二是区块链的底层协议带来的协作性, 我们这里更多的是指代其分布式协作的能力.
党中央在 10 月 24 日下午就区块链技术发展现状和趋势进行第十八次集体学习时指出, 要抓住区块链技术融合, 功能拓展, 产业细分的契机, 发挥区块链在促进数据共享, 优化业务流程, 降低运营成本, 提升协同效率, 建设可信体系等方面的作用. 我们认为正是由于区块链 "可信的机器" 的特性使其有在社会的诸多领域发挥重要作用的潜力.
在区块链中主要通过共识算法, 智能合约, 治理, 跨链, 隐私等来实现其 "可信协作", 所以我们将从这几个方面并结合企业应用场景来分析底层技术的差异, 来帮助企业用户更好地做出选择. 同时我们也会从传统企业软件的可维护性, 性能, 开发工具, 扩展性, 软件协议等方面来进行分析和对比.
我们选择了市面上历史最悠久, 用户范围最广的几个开源底层进行对比.
FISCO BCOS 诞生于 2017 年, 由金链盟推出, 是标准的国产底层. 金链盟是由深圳市金融科技协会, 深圳前海微众银行, 深证通等二十余家金融机构和科技企业于 2016 年 5 月 31 日共同发起成立的非营利性组织.
CITA 是一个开源的区块链操作系统内核, 以高稳定性, 高性能, 高可扩展性为设计目标. CITA 开源项目由秘猿科技 Cryptape 于 2016 年发起. 目前由溪塔科技等 CITAHub 社区企业共同维护. CITA 采用微服务架构设计, 提供丰富的开发工具集, 灵活的区块链治理工具, 开发者可为不同类型的区块链网络进行二次开发或配置.
Hyperledger Fabric 是分布式账本解决方案的平台, 该平台以模块化架构为基础, 提供高度的机密性, 灵活性和可扩展性. 它旨在支持不同组件的可插拔实现, 并适应整个经济生态系统中存在的复杂性. Fabric 最早由 IBM 设计和开发, 2015 年将其源代码奉献给了 Linux 基金会的 Hyperledger 项目.
共识和交易流程
共识机制作为区块链的灵魂, 无论是公链还是联盟链, 共识机制都从根本上限制了区块链的交易处理能力和扩展性, 同时也是其分布式协作能力的基础. 共识是分布式系统中节点对数据或网络最终状态达成的协议. 由于网络环境和节点状态的不可控, 共识机制需要同时考虑性能, 可靠性, 安全性等多方面问题. 共识机制从大的方面, 可分为 Nakamoto Consensus 等无需准入的共识机制, 和 PBFT 等需要准入的共识机制两大类.
Nakamoto 共识在公链上应用广泛, 但是它的概率模型在提供较高可靠性的同时, 牺牲了效率. 在具体商业应用环境中, 许可机制已经保证了一定程度上的节点可信度, 这样的前提下, 用户更关心执行效率和最终确定性. 这是 BFT 类共识在联盟链中流行的原因.
下面先分别介绍 BCOS,CITA 和 Fabirc 共识技术实现, 我们再从性能, 应用场景, 扩展性和安全性等几个方面来进行对比分析.
技术实现
BCOS 共识机制效率相对较低
BCOS 的共识机制采用了传统的 PBFT 共识, 其共识流程主要包括 Pre-prepare, Prepare 和 Commit 三个阶段:
1.Pre-prepare:Leader 节点执行区块, 产生签名, 并将 Proposal 广播给其他共识节点;
2.Prepare: 共识节点验证 Proposal 并广播签名, 同时收集其他节点签名, 节点收集到 2f + 1 的签名后, 开始广播 Commit 包;
3.Commit:Leader 节点收集 Commit 包, 节点收集满 2*f + 1 的 Commit 包后, 更新本地数据库并广播给其他节点, 其他节点收到之后更新本地数据库.
下图为标准的一次 PBFT 的过程:
在区块链中因为共识节点之间需要统一 Commit 阶段的投票, 所以最后的 Commit 阶段略为不同: Leader 节点收到 2*f + 1 的 Commit 包之后会将最终的 Commit 包广播给其他共识节点来统一投票.
在整个共识流程中, 交易在 Pre-prepare 阶段执行一次, 在 Prepare 阶段验证一次, BCOS 中使用的传统 PBFT 流程为先执行再验证的模式, 包含了两个执行交易的时间长度.
CITA 采用高效的自主研发的共识协议
CITA 实现了根据区块链连续共识特点而优化的 CITA-BFT. 区块链是一个连续共识的过程, CITA 将交易的执行和共识进行拆分, 避免了两次执行的问题. 根据复制状态机的原理: 起始状态一致, 执行交易顺序一致, 执行过程是确定的, 三个条件都满足的情况下就可以保证最终结果一定会一致. 在区块链中起始状态由创世块来保证一致, 虚拟机是完全确定的, 所以只要保证交易顺序一致就可以保证其最终结果一定一致. 在区块链中 Block 的 preHash 已经包含了上个块交易处理之后的世界状态信息. CITA-BFT 对当前区块的交易顺序和上个区块的执行结果进行共识. 这样在共识过程中不需要去执行交易, 而只需要在共识完之后进行一次交易处理, 大大提高了整个链的吞吐量. CITA-BFT 是针对区块链连续共识的特点进行了优化, 采用了先共识后处理的方式, 使得共识的过程不必执行交易, 只需要共识完成之后执行一次交易即可. 经过验证, 在最简单的存证交易时, 共识性能有 35% 左右提升.
CITA-BFT 避免了共识协议最后一轮 Leader 广播的过程. 在传统的 PBFT 中在最后的 Commit 阶段, 需要 Leader 收到足够的 Commit 包并广播给其他节点. 区块链是一个连续共识的过程, 在 CITA-BFT 中, Block 中共识投票是上一个区块的投票, 所以合并了 Commit 阶段的 Leader 广播最终区块过程和下一个高度的 Proposal 阶段, 这样节省了一轮广播过程, 通过下一个高度 Proposal 的过程统一了 Commit 投票信息.
CITA-BFT 采用 Proposal 预处理技术使共识和执行能够并行进行, 极大地提高的系统性能. 由于联盟链在多数情况下, 网络状况良好能在一轮共识流程中完成共识, CITA 中引入了 Proposal 预处理的技术: 在 Pre-prepare 阶段, 节点在收到 Proposal 之后可以直接处理交易, 而不必等到共识流程完成, 等到共识流程完成之后再将共识结果通知交易处理器. 在传统的 PBFT 的过程中, 交易处理和共识是串行的, 引入 Proposal 预处理之后, 可以使得共识的 Prepare 阶段 Commit 阶段和交易处理并行进行, 大大提高了整个系统的吞吐量. 经测试, 对于简单的交易处理, 有 10% 到 20% 左右的性能提升.
在 CITA 中采用了 CompactBlock 的技术来压缩共识区块的大小, 提高网络带宽利用率. Block 中的交易已经单独广播过一次, 所以共识 Block 中只需要包含交易 ID 即可, 这样可以大大降低区块消息的大小. 经测试在网络条件较好的情况下, 对于简单的交易处理, 有 5% 到 10% 的性能提升.
Fabric 共识机制限制业务效率提升
Fabric 将其节点角色分为: 排序节点, 背书节点, 提交节点. 客户端首先将交易请求发送给背书节点, 背书节点执行后将 read/write set 及其签名返回给客户端, 客户端收集到足够相同的结果后, 将 read/writeset, 多组签名和交易请求组成签名后的交易, 发送给排序节点, 排序节点组成区块之后, 广播给提交节点, 提交节点验证 read/write set 和签名数是否满足, 标记结果并保存合法的结果到各自的账本.
在 Fabric 中由于交易的执行是非确定性的, 这点不同于 BCOS 和 CITA 的设计理念. 所以需要背书节点先执行交易, 并由客户端根据背书策略进行对比结果, 再发给排序节点, 最终由提交节点验证并更新各自的数据库. 我们可以理解为: 共识状态的过程是由客户端, 背书节点, 提交节点共同参与完成的; 排序节点只负责交易顺序的共识, 而不负责状态共识. 在交易状态共识和排序可以分别采用不同的策略. 比如交易状态可以采用超过 3/4 的状态一致, 而排序节点的共识使用传统的 Raft 或者 Solo 共识, 采用传统 CFT 共识即可满足多数场景. 这里的问题是交易中需要包含用户的签名, 以及多个背书节点的签名, 以及 read/write set, 这样导致交易非常大.
Fabric 在交易状态有冲突时, 例如 A 和B之间频繁转帐这种场景, 因为每笔交易都会修改 AB 账户的余额, 所以会造成交易冲突. 冲突交易每个块最多只能有一个交易被处理, 这将大大限制业务合约的场景.
性能对比
最佳 ">CITA 共识性能最佳
BCOS:
• 传统的 PBFT
• 共识过程中会重复执行交易, 共识效率较低
CITA:
• 先共识再执行, 只执行一次交易, 整体效率较高
• 优化 Commit 阶段的 Leader 广播过程, 减少共识时间
•Proposal 预执行技术使得共识和执行并行, 提高整体性能
•CompactBlock 技术提高带宽利用率
Fabric:
• 执行 (验证) 和排序可以采用不同的共识策略, 比较灵活
• 交易需要多个背书节点签名和 read/write 集合会导致交易非常大
对比可以看出 BCOS 采用传统 PBFT, 共识效率较低; CITA 采用了自主研发的 CITA-BFT, 共识和交易处理有 50% 以上的性能提升; Fabric 将整个流程拆分为执行, 排序, 验证, 增加了灵活性, 但是验证和执行的分离导致交易非常大.
应用场景
Fabirc 共识机制限制了业务场景
BCOS/CITA: 都是 BFT 类共识, 适合多数的联盟链场景, 由参与方, 监管方和可信第三方组成共识节点.
Fabric: 将共识的流程拆分为执行, 排序和验证, 具有更好的灵活性, 但是由此带来交易结构非常大, 而且冲突交易每个块只能上链一个交易, 大大限制了业务合约的场景. 比如对于一个统计投票的合约, 有 N 个投票者, 每个投票人员通过发送交易进行投票, 因为总的投票结果是共享状态, 这种情况下每个区块只能处理一笔交易.
扩展性
|
BCOS
|
CITA
|
Fabric
|
节点扩展性
|
方便节点的增删
|
方便节点的增删
|
背书节点增删方便,排序节点增删方便,
背书策略易修改,
排序策略易修改。
|
节点模块化
|
共识 / 执行耦合,不易替换和定制化
|
共识和执行模块分离,方便替换和定制化
|
执行、排序、验证分离,节点功能可以根据情况自由组合
|
安全性
|
BCOS
|
CITA
|
Fabric
|
执行共识
|
BFT 类算法只要保证 2/3+1 个节点诚实即可正常出块,保证 1/3 个共识节点诚实即可保证结果正确。
|
BFT 类算法只要保证 2/3+1 个节点诚实即可正常出块,保证 1/3 个共识节点诚实即可保证结果正确。
|
不同的背书策略安全性不同,既可以是安全性较高的背书节点全部通过,也可以是单一背书节点通过的策略。
|
交易排序上链
|
BFT 类算法只要保证 2/3+1 个节点诚实即可保证交易会上链
|
BFT 类算法只要保证 2/3+1 个节点诚实即可保证交易会上链
|
排序可以采用 Raft 或者 Solo 共识,Leader 节点具有较大权限可以拒绝交易。
|
交易记录的不可篡改
|
链式结构保证交易记录不会篡改
|
链式结构保证交易记录不会篡改
|
链式结构保证交易记录不会篡改
|
交易状态一致性
|
BFT 类算法只要保证 2/3+1 个节点诚实即可正常出块,保证 1/3 个共识节点诚实即可保证结果正确。
|
BFT 类算法只要保证 2/3+1 个节点诚实即可正常出块,保证 1/3 个共识节点诚实即可保证结果正确。
|
排序和验证都不进行最终状态的共识,由提交节点来验证交易,并分别更新各自状态。只有等待下一个相关交易读取状态或者客户端主动查询,由客户端判断状态是否一致。
|
可以看到, BCOS 和 CITA 都使用类 BFT 的共识, 所以在安全性方面分析现有的 BFT 协议即可, 有用比较高的安全边界.
对于 Fabric, 由于执行, 排序, 提交节点职能的分离, 且执行 (验证) 和排序可以分别采用不同的共识策略, 安全策略可以由用户自由把握, 客户端参与状态和执行的共识.
智能合约
智能合约一词有一定的误导性, 智能往往给人带来一定的神秘色彩, 就其合约功能本身来讲并无 "智能性". 在区块链出现之前, 所有的系统都是采用中心化的架构, 监管机构和用户无法验证和保证系统功能的正确性, 无法确保数据未被恶意修改, 无法保证数据的安全性. 由于区块链的出现, 使得在不依赖于第三方的情况下, 能够可信地进行交易, 而且交易可追踪无法逆转. 智能合约的核心含义在于: 在区块链基础上实现可信计算, 并由区块链协议保证的可追踪和无法逆转.
在比特币中交易主要用于点对点的现金支付, 以太坊由于引入图灵完备的智能合约被称为区块链 2.0. 虽然理论上以太坊上的智能合约是图灵完备的, 但是受限于交易手续费, 合约指令, 区块 Gas 上限, 节点可信度等, 公链智能合约并不适用于现有的企业开发.
联盟链由于节点数量有限, 且节点运营方可以采用高性能的硬件设备, 以及底层协议支持等, 更适合企业开发. 首先我们介绍三者智能合约的技术实现, 再分别从安全性, 易用性, 可用性三方面进行对比分析.
技术实现
BCOS 和 CITA 均支持 EVM 和预编译合约. 借助于 Ethereum 智能合约的完善的生态系统, 两者都在其基础之上做了定制化, 有丰富的合约编写和测试工具.
对于预编译合约需要开发者对区块链系统有一定的了解, 需要较高的门槛. 当前支持 EVM 的语言主要是 Solidity,Solidity 合约可以通过交易进行部署, 在调用时将合约代码加载到虚拟机中.
Fabric 的合约通过 ChainCode 的方式以 Docker 的方式进行线下安装, 然后通过交易进行激活. ChainCode 合约的部署相对较重, 但支持多种语言(Go,JavaScript 等), 合约的部署和更新以线下方式进行更新, 合约代码并没有进行共识, 可以将合约看成黑盒, 只需要保证其输入和输出正确即可, 并不关心其内部逻辑的具体实现.
由于 Fabric 采用了传统的语言进行合约编写, 虽然开发者不需要学习新的语言, 但是由于虚拟机的不确定性, ChainCode 的方式只适合 Fabric 的先执行再共识再验证的共识方式, 并不具备通用性.
安全性
安全性是智能合约有别于其他程序的主要特征, 这里的安全性, 包含确定性, 可验证, 可审计, 可追踪等特性.
由于 BCOS 和 CITA 在智能合约设计理念上接近, 我们将两者放入同一栏中.
|
BCOS/CITA
|
Fabric
|
确定性
|
完全确定
|
由于合约采用通用语言,合约执行存在不确定性,且执行环境有存在差异的可能性,所以不能 100% 保证合约计算的一致性和正确性。
|
可验证、可审计
|
链上部署、调用合约,合约代码保存在链上,可以对合约执行进行验证、审计
|
合约部署分别由背书节点独自部署和运行,不在链上进行部署和共识,链下共识,存在节点误部署和修改代码的风险,无法通过区块链协议保证合约的不可篡改,对验证和审计不够友好。
|
不可逆
|
区块链协议和数据结构保证
|
区块链协议和数据结构保证
|
可追踪
|
通过交易追踪合约的部署、调用、更新
|
通过交易追踪合约的激活和调用,但是合约代码变更不可追踪。
|
对比可以看出由于 BCOS/CITA 交易是链上执行的, 所以 BCOS/CITA 的智能合约更具有确定性, 可验证, 可审计, 不可逆, 可追踪的特点.
Fabric 在合约代码由背书节点各自部署和升级, 验证性, 审计性, 可追踪性无法保证. 但是由于在 Fabric 的设计理念中, 合约执行后再由客户端进行验证, 我们可以认为合约最终的结果是由客户端和背书节点共同决定的, 只要交易结果符合背书策略并且符合用户预期, 对于合约代码的验证性要求相对就没有那么重要了.
易用性
BCOS/CITA 在合约易用性上略胜于 Fabric
|
BCOS/CITA
|
Fabric
|
语言友好度
|
多数场景下使用 Solidity 语言,经过长时间发展,Solidity 已较为成熟,易上手
|
支持传统语言,易上手
|
工具链
|
两者都基于 Solidity 的工具链进行了深度定制化,工具链完善
|
传统语言,工具链完善
|
部署
|
通过交易,方便部署,链上部署
|
由背书节点通过 Docker 分别部署,部署成本高
|
调用
|
合约之间可以方便调用
|
合约调用必须在同一个 ChainCode 中
|
升级
|
通过部署新合约的方式进行升级
|
背书节点分别去升级
|
BCOS/CITA 支持以太坊 EVM 并且对其工具链进行深度优化, 对开发者更友好, 合约的部署, 调用, 升级都通过交易进行, 更轻量和方便.
可用性
|
BCOS
|
CITA
|
Fabric
|
复杂合约
|
通过设置区块交易上限使区块链可以处理复杂度非常高的合约
|
通过设置区块交易上限使区块链可以处理复杂度非常高的合约
|
背书节点分别执行合约,并不对合约时间和复杂度进行限制
|
并行计算
|
支持并行计算,但是需要在交易中预先设置冲突状态,场景有限且使用难度比较高
|
不支持并行计算,交易依次执行
|
不支持并行计算,交易依次执行。同一个区块中不允许有冲突交易,否则后续交易会失败
|
指令扩展
|
通过预编译合约进行指令扩展
|
通过预编译合约进行指令扩展
|
传统语言,指令丰富,不需要扩展。
|
定时任务
|
不支持
|
区块链内置合约定时执行功能
|
不支持
|
BCOS/CITA/Fabric 都可以应对企业复杂的业务逻辑, 支持比较复杂的合约计算和处理, 同时 CITA 支持链上定时任务.
性能
经过区块链底层技术最近几年的发展, 联盟链的性能已经不再是其最主要的瓶颈.
BCOS 官方文档并未提供性能数据, 我们只能根据第三方提供的数据来判断, 我们找到了两个相对可靠的信息来源. 中国信通院可信区块链最新评测 (2019 年 11-19 日),BCOS 单链 TPS 超 2 万. 在 2019 年 7 月底的一篇新闻稿 "当测试团队说区块链性能达到 10000TPS 的那一刻, 张开翔在微信群里给团队发出了人生中最大的红包.". 因为两次测试数据均未提供测试用的环境, 节点数, 使用的共识协议(BCOS 支持 Raft) 等, 推测这里可能是分别使用了不同的共识方法和节点数进行的测试.
CITA 在官方文档中最新版本的交易性能已经可以达到 15,000+ TPS, 数据来自 CITA 0.16 版本(2018 年 5 月 15 日), 在四台 32 核, 64G 的云服务器上部署 4 个节点, 每台服务器配置百兆带宽.
Fabric 官方并未提供其性能数据. 根据第三方提供的数据( https://arxiv.org/pdf/1801.10228.pdf ), 在 32 核 CPU,10 节点的情况下, 性能可以到 3400 左右. 根据这份报告背书节点数对性能影响并不大, 因为背书节点并不实际参与共识.
现阶段联盟的性能已经有了长足的进步, 相对落地场景而言, 性能已经不再是最主要的瓶颈. 同时国产联盟链在性能方面已经不输于国外的大品牌, 甚至已经领先于国外.
存储
区块链的存储从内容方面讲主要包括两个方面: 区块和交易存储, 世界状态存储. 我们先分别介绍各自的实现方式, 再从支持数据库类型, 存储效率, 可扩展性, 数据维护等方面进行对比分析.
实现方式
BCOS 的状态存储支持两种存储模式
对于区块的保存, BCOS 交易列表, 交易回执等都采用了传统的 MPT 方式保存. 对于世界状态, BCOS 采用了两种存储模式: storage state 和 MPT state.MPT state 支持 RocksDB 和 External 存储, MPT 存储在保存历史状态的同时, 最大化减少存储数据. Storage State 支持 RocksDB,MySQL,External, 使用 storage state 存储时, 牺牲了部分的可追溯性, 但带来了性能上的提升, 同时能支持 SQL 语句的查询和统计. 因为世界状态始终是可以通过交易进行还原, 所以对于牺牲部分可追溯性而换取性能的提升和状态查询是可以接受的.
CITA 支持 RocksDB,External 存储. 使用 MPT 保存状态, 使用 Simple Merkle Tree 保存交易和交易回执. 对于状态存储 CITA 选择了经典的 MPT 存储, 保存历史状态的同时, 最大化减少存储数据. 而对于交易和交易回执使用 Simple Merkle Tree 存储, 可以优化存储数据量和减少 Hash 计算.
Fabric 的区块存储, 同样采用了 MPT 的方式进行保存. 对于世界状态的存储支持 KV 和 CouchDB 存储, 在世界状态存储时, Fabric 不支持历史状态的保存, 同时有性能上的提升, 并支持丰富的条件查询和统计.
对比分析
|
BCOS
|
CITA
|
Fabric
|
分布式数据库支持
|
支持
|
支持
|
支持
|
交易 / 回执存储
|
支持 KV 数据库
|
支持 KV 数据库
|
支持 KV 数据库
|
交易 / 回执存储性能
|
使用 MPT 存储,性能一般
|
使用 Simple Merkle Tree,存储和计算性能略好于 MPT
|
使用 MPT 存储,性能一般。每个交易均需要保留背书节点的签名,交易数据要大很多
|
KV 状态存储
|
支持两种模式:
KV 数据库,保留历史可追溯;
SQL 数据库,不保留历史数据不可追溯,支持条件查询
|
支持 KV 数据库,保留历史可追溯。
|
支持 KV 数据库,不保留历史不可追溯。
支持 CouchDB,不保留历史不可追溯,支持条件查询
|
状态快照
|
不支持
|
支持快照,对世界状态历史进行裁剪,减少历史状态的存储
|
不支持
|
对比来看:
CITA 在交易的存储结构上做了优化和改进, 提供了快照功能对世界状态的历史进行裁剪.
BCOS 世界状态的存储模式上, 支持两种不同的模式, 允许在牺牲一部分状态可追溯性上, 提升性能和支持丰富的 SQL 查询.
Fabric 的世界状态存储不保留历史状态, 支持世界状态的条件查询.
我们认为在交易存储方面, 节点必须要保留历史记录, 而对于世界状态的历史存储, 可以通过交易进行还原, 在这种情况下 BCOS/Fabric 为用户提供较好的查询功能和较高的性能是一个不错的取舍.
治理
联盟链不同于公链的最大不同之处在于其治理方式的不同, 对于公链来讲由于其是开放的系统需要一定的经济激励来协调不同角色间的关系, 而联盟链由于节点是准入机制, 所以其治理方式与公链有非常大的不同. 对于联盟链来讲, 其治理主要包含: 节点管理, 帐号权限, 经济模型.
节点管理
对于 BCOS 和 CITA 来讲, 节点主要分为两类: 共识节点和普通节点. 共识节点负责共识出块, 普通节点只能同步数据并验证数据而没有打包交易的权力.
对于 Fabric, 节点分为背书节点, 排序节点, 提交节点. 背书节点负责执行交易并返回结果, 排序节点负责对交易排序并打包出块, 提交节点负责验证交易并更新状态.
|
BCOS
|
CITA
|
Fabric
|
共识节点
|
通过系统合约进行管理,节点管理员通过发送交易进行共识节点的增删
|
通过系统合约进行管理,节点管理员通过发送交易进行共识节点的增删
|
通过配置文件进行管理排序节点管理,节点管理员通过发送交易激活新的配置文件,通过 CA 来认证
|
普通节点
|
通过白名单和黑名单管理链接,通过 CA 来判断节点是否为普通节点
|
每个节点通过各自的白名单 / 黑名单来管理各自的普通节点,不判断普通节点身份
|
通过配置文件来管理背书节点和提交节点,Channel 管理员通过发送交易来激活新的配置文件,通过 CA 来认证
|
对于共识节点 BCOS/CITA 均采用了系统合约的方式进行管理, 节点的增删需要共识节点进行共识. 而 Fabric 的节点增删, 可以由节点管理员修改配置, 无需共识, 但是激活新的配置文件需要发送交易并进行共识.
我们认为通过白名单 / 黑名单的方式或者 CA 的方式管理节点身份, 均能满足联盟链的大多数场景, CA 在对节点身份的验证方面更加严格.
用户权限管理
对于联盟链来将, 联盟各个角色以及联盟内均需要比较复杂的权限管理, 这样不同的角色只能访问属于自己授权的资源.
在 CITA/BCOS 中都通过复杂的权限管理, 来对用户的交易权限进行管理, 包括发送交易, 创建合约, 合约方法调用权限等等.
Fabric 通过配置文件的方式 (Policy) 的方式进行管理用户的权限.
BCOS/CITA 权限管理通过交易的方式进行管理, 比 Fabric 通过配置文件的方式修改, 更加区块链化, 治理操作会保留痕迹.
经济模型
CITA 支持两种不同的经济模型
在公链中, 矿工打包用户的交易往往需要用户支付一定的手续费; 对于联盟链来讲, 情况有所不同.
|
BCOS
|
CITA
|
Fabric
|
免费模式
|
用户免费发送交易,但是会限制用户每个区块内交易复杂度,虽然免费但是也在一定程度上限制用户滥用资源
|
用户免费发送交易,但是会限制用户每个区块内交易复杂度,虽然免费但是也在一定程度上限制用户滥用资源
|
不考虑交易复杂度和交易数量,只要有权限,背书节点一定会执行,用户可以随意使用系统资源
|
收费模式
|
无
|
用户发送交易需要支付系统原生 Token 给出块节点,管理员可以通过系统合约调整共识节点出块权限
|
无
|
BCOS,CITA 和 Fabric 均支持向用户提供免费服务的模式, 同时在 BCOS/CITA 中会通过系统合约控制用户单个区块内对系统资源的使用情况, 防止对系统滥用.
而 CITA 又可以支持收费模式, 节点对用户交易精确计费并收取 Token 手续费. 而 Token 即可以是节点免费分配给用户, 也可以需要用户有偿使用, 这样可以更加精细地控制用户对系统资源的使用情况.
跨链和隐私
跨链和隐私方案, 距离生产环境依然有可优化空间
BCOS 引入了群组的方式, 使一个节点可以属于不同群组, 而群组的消息, 交易, 存储, 执行等等完全隔离.
Fabric 的群组概念和 BCOS 类似, 一个节点可以属于不同群组, 不同群组可以使用不同的背书策略.
在 BCOS 和 Fabric 中, 群组的数据和通信等都是隔离的, 并且可以使用不同的共识策略, 所以可以将其看成多链. 当前对于多链最大的问题在于链间通信, 两者在这方面均没有非常成熟方案.
在 CITA 中, 引入了侧链技术, 侧链和主链之间可以互相通信, 侧链技术距离生产环境依然有可优化的空间.
无论群组或者侧链等技术, 本质上都是一种多链技术, 当前多链技术只能解决节点的隐私问题, 暂时无法处理交易和用户级别的隐私.
CITA 已经开源其零知识证明和 SGX 的实现.
对于同态加密, 零知识证明, SGX 等等, 都处于发展阶段, 距离生产环境依然有可优化的空间.
密码学支持
CITA 在密码学支持上更全面
|
BCOS
|
CITA
|
Fabric
|
Hash 算法
|
Keccak
|
Keccak/blake2b
|
SHA3
|
签名算法
|
Secp256k1
|
Secp256k1/ED25519
|
Secp256k1
|
国密支持
|
支持
|
支持
|
否
|
对比可以看到 BCOS/CITA 均支持国密, 对国内监管需求较友好; 在密码学算法支持上 CITA 更全面, 除了支持常见的 Keccak/Secp256k1 之外, 也支持更安全性能更好的 Keccak/Secp256k1.
系统架构
CITA 采用了微服务架构
BCOS 和 Fabric 均采用了单一系统的架构, 这种架构要求节点必须在单一的物理机器上.
而 CITA 采用了微服务架构, 而且 CITA 也是全球第一个使用微服务架构的开源区块链. 采用微服务架构, 可以使节点不仅仅限制在单个物理机器上, 这样对于企业用户可以用更好的硬件设备去支持节点, 有更好的扩展性. 由于微服务间通过消息订阅进行通信, 企业用户可以方便地替换或者增加定制化的服务, 方便进行功能扩展.
开源协议
BCOS 的开源协议对商业应用不够友好
|
BCOS
|
CITA
|
Fabric
|
开源协议
|
GPL-3.0
|
Apache-2.0
|
Apache-2.0
|
这里简单介绍下相关的开源协议.
GPL 协议的主要内容是只要在一个软件中使用("使用" 指类库引用, 修改后的代码或者衍生代码)GPL 协议的产品, 则该软件产品必须也采用 GPL 协议, 既必须也是开源和免费. 这就是所谓的 "传染性". 由于 GPL 严格要求使用了 GPL 类库的软件产品必须使用 GPL 协议, 对于使用 GPL 协议的开源代码, 商业软件或者对代码有保密要求的部门就不适合集成 / 采用作为类库和二次开发的基础.
Apache Licence 也是对商业应用友好的许可. 使用者也可以在需要的时候修改代码来满足需要并作为开源或商业产品发布 / 销售.
由此可以看出, BCOS 的开源协议对商业应用不够友好.
语言实现
CITA 使用更现代的语言 Rust, 性能更高同时安全性更可靠
BCOS: 使用 C++ 进行开发, C++ 性能高, 但是由于其历史原因, 系统容易有内存安全的隐患;
Fabirc:Go 实现, 由于垃圾回收机制性能比 C++ 弱;
CITA:Rust 实现, 现在相对主流的区块链界的语言, Rust 在内存安全方面有保证, 性能可以和 C++ 媲美.
总结
经过以上的分析, 我们汇总其最主要的优缺点:
|
BCOS
|
CITA
|
Fabric
|
优点
|
• 两种不同的存储模式
• 智能合约方便易用
|
• 自主研发高效的共识算法
• 智能合约方便易用
|
• 支持 CouchDB 存储
• 共识协议更加灵活
|
缺点
|
• 开源协议对商业应用不友好
|
• 数据库不支持条件查询
|
• 共识和交易流程限制其业务场景
|
来源: http://blockchain.51cto.com/art/201912/608009.htm