FISCO BCOS和以太坊差异综述

FISCO BCOS源起于2016年中,在金融区块链合作联盟(简称金链盟)成立后,联盟内组建了对底层平台技术的研究课题组,开展区块链底层平台的方案设计,技术选型和开发实施。

本着“避免重复造轮子”的精神,我们考察了几大区块链开源平台,其中用户众多,社区活跃度高,技术发展较成熟的以太坊进入了视野,以太坊对智能合约的支持是标志性的亮点,便于实现复杂的金融业务逻辑,所以课题组选择了以太坊开源平台为技术原型,进行深度开发重构,打造符合金融场景的联盟链平台。

秉承“来自社区,回馈社区“的社区精神,以及遵循GPL v3.0开源协议,随着底层平台的成型,金链盟成立底层平台开源工作组,将命名为FISCO BCOS的联盟链底层平台向广大社区完全开源,并加入丰富的技术文档,开发者SDK,使用案例,知识库等,和社区共同发展,推进技术研究和应用落地。

FISCO BCOS最初源自以太坊C++版本,社区里对以太坊已经有所研究的技术人员可以根据之前的经验快速理解和上手,也可以复用以太坊社区已有的大量技术资料。

同时,FISCO BCOS也根据金融场景对安全、功能、性能、监管合规的要求进行大幅的修改,和以太坊已经存在较大的差异,FISCO BCOS和以太坊是面向不同领域的产品,在和社区开发者交流的过程中,经常会讨论到两者的区别和联系,本文把相关的讨论总结如下。

  • 去除代币:FISCO BCOS去掉了代币逻辑,在生成区块时不会发行和奖励代币。Account数据结构里的Balance已经失去了原有含义,不要再关注和使用。在商业逻辑中,建议开发者采用智能合约定义自己的资产类型和交易规则。去除代币的原因是,希望联盟链参与者利用区块链的分布式账本技术、密码学等底层技术特性,开展创新的金融业务,提升运营效率,降低业务成本,而不需要依赖代币发行获利。

  • GAS控制:FISCO BCOS保留了智能合约引擎的gas控制逻辑,以保障计算安全,针对每个区块里的每个交易能消耗多少gas,在系统合约的maxBlockHeadGas和maxTranscationGas进行配置(参见使用说明的systemcontract/ConfigAction.sol),默认取值较大,开发者依旧可以用以太坊类似的方法对合约消耗的gas进行评估,以计算每个block里最多能包含多少个交易。最后,由于去除了代币,Gas的消耗不和代币挂钩。

  • 共识算法:FISCO-BCOS不再采用ethash等挖矿算法,没有“矿工”的角色,不需要挖矿。FISCO BCOS基于插件化的共识机制,实现实用性拜占庭容错(PBFT)共识算法,以及信任leader的Raft算法,使用者可根据需要进行插件化的配置。联盟链共识算法速度更快,交易延迟低,不需要消耗大量的计算资源,产生的交易数据一致性高,一旦生成,就具有高度的事务确定性,更适合用于金融场景,能达到秒级出块,无分叉快速确认的效果。

  • 准入标准:和以太坊允许全网自由接入不同,做为联盟链平台,FISCO-BCOS在组网时结合网络策略和节点身份等措施实现准入控制,需要经过类似“联盟委员会”或运营方的准中心化机构审核批准,或者由链上已经接入的多方进行分布式审批核准,新节点才能接入到商业网络中来,避免了未经授权的恶意节点接入,以更好的保护信息安全。准入控制的元素包括节点IP,节点标识,CA证书等,配置流程相对较繁琐和严谨,请按使用手册仔细操作,否则可能出现组网问题。

  • 节点发现: FISCO-BCOS不使用种子服务器和uPnP技术自动发现其他节点,需要精确的配置联盟链里其他的节点,才能进行互联。

  • 帐号管理:以太坊可以在节点上管理keystore,包含账户的私钥,FISCO-BCOS把私钥管理和节点彻底解耦,放到业务客户端。当以太坊节点包含keystore,可采用sendTransaction接口进行交易,需要用account.unlock指令解锁帐号,在节点上对交易进行签名,这个时候如果网络防护不当,会有一定的安全隐患。FISCO BCOS不再使用sendTransaction,而采用sendRawTransaction,由掌握私钥的客户端进行签名,安全性更高。由于去币和帐号管理的修改,FISCO BCOS也不支持原有的客户端”钱包“的概念。

  • 身份标识:以太坊上采用公钥形式,节点、帐户可匿名。联盟链出于合作和监管的需求,要求所有参与者身份可知,包括交易帐号和节点标识等,FISCO-BCOS结合PKI体系和链上合约的方式确认和公示身份,各帐号在链上的操作和交易均可揭示身份,无法抵赖。

  • 存储安全:FISCO-BCOS对存储在硬盘的区块、交易、数据都可以采用高强度的算法进行加密,密钥可能独立管理,以彻底保障数据安全。

  • 权限体系:FISCO-BCOS实现了接口级的权限控制,可以定义某一个帐号是否可以部署合约,是否能调用某一个合约的某个接口,结合智能合约内部图灵完备的逻辑,可以实现全方位的角色和权限控制,在商业环境尤为重要,用于实现各司其职,DO分离,以及对人员和业务的审计管控等。

  • 依赖代码库:FISCO-BCOS引入了更多的特性,也没有严格同步以太坊主网Cpp分支,对各种底层库的依赖已经和主网有所不同,从源码编译FISCO-BCOS和安装部署时,请参照使用手册,按FISCO-BCOS指定的依赖库列表和版本号进行环境的初始化。

  • 接口字段:举例,以太坊的交易采用nonce去重,nonce要求严格递增,意味着客户端需要等待上一个交易确认后才能发起下一个交易。为支持客户端并发的交易,FISCO-BCOS采用randomid代替nonce,客户端生成不重复的随机数写入交易,节点则可以并行处理且交易防重放。另外还有其他的一些交易字段差异(持续修改请参考代码),导致交易数据结构和以太坊已经不兼容。

  • SDK和工具: 由于接口字段差异,以及AMOP等扩展通信协议的加入,FISCO-BCOS的客户端SDK以及运维管理工具和以太坊也有所不同,必须采用FISCO-BCOS github上发布SDK和工具,目前已经有java版(源自web3j)和nodejs版,其他语言版本陆续开发中。FISCO-BCOS没有支持Truffle,Mist等以太坊社区使用的工具,FISCO-BCOS项目自带的工具基本能满足开发和生产需求,如有其他需求,请反馈给FISCO-BCOS开发团队,以共同完善。

  • 合约编译版本: FISCO BCOS对EVM进行了指令扩展,同时以太坊主网的智能合约陆续增加了一些指令,FISCO-BCOS会关注主网的进展,如关键性更新会进行整合,在整合前的一段时间内,FISCO-BCOS的智能合约版本和以太坊主网会有所区别。编译合约采用的编译器也有所不同,请使用FISCO-BCOS项目中提供的fisco-solc(参考使用手册1.2.2 安装FISCO BCOS的智能合约编译器)。

  • 合约管理:FISCO-BCOS引入CNS(Contract Name Service)机制,对智能合约进行命名和寻址,以简化业务开发者对合约的管理,依托CNS,开发者可以精细的管理合约的版本号,执行灰度升级等操作。CNS的功能也整合在FISCO-BCOS的客户端里。

  • 监控运维:FISCO-BCOS在交易处理、共识等全流程都进行了埋点,针对性能数据、异常情况输出大量的日志,便于专业运维团队监测和把控运行情况,进行运营管理和性能调优。

  • 其他: 在代码级别,对原有代码结构进行重构,优化各消息队列,并行验证交易,HASH计算优化,修正稳定性问题等,不直接体现在接口和功能上。

    在功能上,增加了AMOP消息协议,多链并行计算架构和热点帐户解决方案,以及大量的业务案例,详细信息请参见GITHUB上的使用说明和知识库。

综上所述,FISCO-BCOS在以太坊的基础上进行深度的定制、重构、优化,以达到金融级的安全和性能表现,通过系统合约等方法极大的丰富了区块链的可治理性,并面向工业级运营运维,丰富了工具和监控信息,满足了金融业对软件质量的高标准要求。

依托金链盟和开源社区的力量,FISCO-BCOS尚在高速发展中,在隐私保护,密码学算法,存储容量和并行计算等方面大幅优化和增加新的特性,并开源发布,以满足业界对区块链和联盟链底层平台的需求,更好的推进应用落地,FISCO-BCOS已经走出了一条安全可控、自主成长的开源之路,对FISCO-BCOS有任何的反馈,请关注github项目和加入社区群,深入交流讨论。

如果您觉得本文不错,欢迎戳这里给FISCO BCOS打star:star:。