迅雷链(Thunder Chain)是由迅雷旗下网心科技打造的超级区块链平台,是全球最大规模ToC区块链商业生态,赋能实体经济,致力于成为ToC现象级区块链应用的摇篮。迅雷链具备全球领先的百万TPS高并发、秒级确认的处理能力。
迅雷链使用创新性的同构多链框架,支持水平扩展,每条链运行相同的程序,负载均衡算法负责路由,提高系统整体吞吐量和处理能力。
同时迅雷链底层实现是自主研发的区块链开发框架,其中实现了区块链相关的通用功能,共包含11个模块:路由模块、跨链模块、订阅通知模块、共识、账户管理、请求池、智能合约、数据存储、密码学、网络通信、通用模块。框架在设计与实现中,对系统功能的扩展做了充分的考虑,因此迅雷链很容易做功能上的扩展。如支持多种特殊交易格式、支持扩展数据资产类型等。这使得迅雷链拥有持续交付能力,不断对区块链的性能、存储、虚拟机、业务支持等方面存在的问题进行优化和创新,领跑和推动全球区块链技术和行业的发展。
迅雷链区块链框架为区块链行业提供了一套比较完善的区块链解决方案,同样作为区块链框架,业内比较早期的石墨烯框架当时也引起了广泛的关注(石墨烯是Dan Larimer用C++实现的一个开源的区块链开发框架)。
石墨烯框架中设计和实现了区块链的基本功能,如DPOS共识、P2P,对象模型、存储、插件机制等多方面的内容。在石墨烯框架上,结合业务进行二次开发,可以实现满足特定业务功能的区块链。bitshares、steemit和EOS都是基于石墨烯框架实现的。下面介绍石墨烯框架的区块结构、存储、共识算法方面的内容。
区块结构
链式区块的基本数据结构都是一棵树(考虑有分叉的情况),石墨烯的区块链也不例外,一个区块中包含上一个区块的id,每个区块的id为区块内容的MAC。
石墨烯的区块链中,每个block由block header和transaction list构成。block header中包含previous、block_num、digest、witness和transaction_merkle_root等主要内容。其中previous为前一个块的id,digest为块id,witness为出块者。transaction list为本块打包的交易集合,transaction list的结构与其他区块链不一样。石墨烯的transaction list中的每个transaction并不只是一个交易的操作,而是支持多个operation的集合。一个operation是一个基本操作的定义,如转账、投票等。一个transaction里可以包含多个operation。但是这些在一个transaction里的operations依然保持事务的特性,也就是在同一个transaction里的operation要么都执行,要么都不执行。石墨烯区块链没有独立的虚拟机,不支持智能合约。所有操作都由operation来定义,如gas计算、撮单等。如果需要扩展operation,只需要实现相应的接口即可。
存储
石墨烯中的存储使用的是文件存储。也就是说石墨烯中所有数据都以文件的形式进行组织和管理,并没有使用数据库。这样的存储选择有着明显的特点,框架需要实现数据的管理功能,石墨烯框架在启动和运行时,需要将大部分数据加载到内存,因此对内存的要求非常之高。石墨烯框架中定义了对象模型和索引模型,所有的对象实例都有一个全局唯一的id编号,如图2所示。
一个对象编号包括三部分内容,space_id、type_id和id。space_id标识是否协议对象,正常都为1,type_id表示对象类型,id为此类型是第几个创建的实例。space id 占最高 8 位, type id 占中间 8 位, 最低 48 位是 id。如一个账户的对象id为1.2.12376。石墨烯的对象索引实现其实使用的是vector和map,由于所有的索引数据都会加载到内存,所以B+树无法发挥减少IO的优势。
共识
石墨烯的共识算法使用的是Dpos,系统中最重要的角色是witness和committee。 witness是通过投票产生的,系统有个witness维护时间周期,没到周期进行一次witness、committee等的更新。Committee由得票最多的11个人组成,Committee的职责是修改系统参数,无法左右出块。Witness负责出块。
其中投票统计和洗牌过程决定了出块的witness。
在收到一个new block时,如果new block前一个block不是当前块,并且块高高于当前块高会进行分叉判断和处理:
1)找到两个叉的LCA。
2)回滚到LCA。
3)沿最长链,依次push_block()。
石墨烯通过记录每一步的undo日志,实现了操作的回滚。每出现切换分支时,先找到最近公共祖先进行回滚操作,然后执行新的block的操作。
石墨烯的共识中,并没有对数据状态进行共识,只对操作序列进行共识。也就是说,如果出现某个节点的数据状态不一致,只有事务还能正常执行,那么这些不一致并不会被发现,也不影响整个链的运行。
迅雷链与石墨烯
上面介绍了石墨烯的主要部分的实现细节,同样作为区块链开发框架,下面从多个方面来比较两个框架。
1)共识
迅雷链的共识算法是优化过的PBFT算法,只有通过超过2/3的验证节点的投票,才达成新块的共识,不会出现分叉的情况。相比于石墨烯而言,迅雷链有最终确定状态。只有交易被打包上链,那么这个交易就是一个最终被确定的交易,不会出现回滚或分叉的情况。比特币的6个块的确认时间或石墨烯的最长链,从理论上都不是最终被确定的,与迅雷链在这点上有着本质的区别。与此同时,迅雷链的共识机制也是交易秒级确认的基础。
2)智能合约
石墨烯框架作为一个底层框架,封装了区块链底层功能,也提供功能的扩展机制,但其并不是一个可编码、图灵完备的区块链,不支持智能合约。实现一个DAPP,需要在石墨烯框架上做二次开发,但是开发和维护成本都比较高。迅雷链底层实现了可编码、图灵完备的VM,同时迅雷链的智能合约兼容EVM,支持Solidity。在迅雷链上做DAPP的开发和部署非常简单,只需要编写相关的业务代码即可,不需要深入了解底层区块链的实现。迅雷链正在不断完善VM,优化智能合约的安全、审计、开发工具等功能。
3)性能
石墨烯的共识采用的是Dpos,从算法层面性能要优于PBFT,是牺牲了一定的一致性得到性能的提升。石墨烯框架作为底层框架,本身没有水平扩展的能力,要做到水平扩展需要进行二次开发。迅雷链是同构多链框架,可根据需求进行水平扩展。比如迅雷链有1024条链,路由规则使用的是简单取模,将地址空间平均映射到1024条链上,当需要从1024条链扩展到2048条链时,我们将原来的每条链扩展成为2条,如1号链扩展后为1号链和1025号链。地址空间的映射规则将原本映射到1号链的地址平均映射到1号链和1025号链上。这样的设计支持无限次扩展,并且对链的变动非常小。迅雷链的同构多链框架使得迅雷链可达百万TPS,并且支持弹性扩展。
4)功能扩展
作为区块链底层框架,支持功能方面的扩展非常重要。区块链最终是要服务于各行各业,就会有各自的特性功能需求,这也要求底层框架要有强扩展性。石墨烯框架是比较早期的区块链框架,当时的区块链技术更多的是解决数据资产相关问题,所以在功能扩展性上面支持得不够。目前有一些项目是基于石墨烯实现的,如bitshares、steemit和EOS。基于石墨烯框架进行功能扩展,必须深入了解石墨烯框架的代码实现,虽然石墨烯框架中提供了插件机制,但插件能支持的功能非常有限,只适合做监控、数据上报等周边功能。另外石墨烯框架不支持智能合约,也就是不可编程的、非图灵完备的。这决定了基于石墨烯框架的区块链,面对版本升级、功能迭代都非常困难。迅雷的区块链框架充分考虑了功能性扩展,同时支持智能合约,实现了可编程的、图灵完备的VM,还支持交易格式的扩展。传统区块链的交易格式只支持资产转移相关功能,迅雷链将来会对交易格式进行扩展,以支持更多类型的交易。
5)生态
区块链的发展需要一个健全、良性的区块链生态,石墨烯是比较早期,目前一些项目是基于石墨烯框架实现,如之前提到的bitshares、steemit和EOS。这些项目是为了解决某个特定领域问题,对框架进行了二次开发,虽然使用同一个底层框架,但应用之间依然是孤岛的存在。迅雷链正在引领区块链3.0时代,建设一个区块链生态,解决行业难题,积极推动中国区块链事业。迅雷在区块链生态建设上有着天然的优势,迅雷星域云的共享经济和区块链技术高效利用普通用户闲置的带宽、存储、计算等资源,降低计算与存储的成本。
6)应用落地
区块链技术最终还要支撑实际业务,迅雷链采用独创的同构多链框架,请求秒级确认,达到百万TPS,这为支撑应用落地提供性能上的保障,同时迅雷的共享经济生态为充分利用c端闲置资源,降低了计算和存储的成本。极大的有助于解决区块链行业费用昂贵、性能与存储瓶颈的技术难题,实现企业级应用的落地。迅雷还举办了“2018迅雷全球区块链应用大赛”,赛题涉及区块链+公益、医疗、教育、社交、交通出行、商品鉴伪、版权等领域。目标是寻找国内外区块链领域具备创新能力的优秀人才以及项目。大赛向所有参赛者开放迅雷链,企业和个人开发者可以轻松上链,使自己的产品和服务具备可信、公开、透明、可追溯的特性,开发成本、迁移及维护工作量大幅降低,并提升业务效率,从而可以自主构建多种新型区块链应用,实现场景铺展。