布比并行快速的多链分片技术特性及实现原理 | 商用区块链BubiChain详解(三)

区块链技术逐渐从小众的极客圈子走向规模化商用。
从整体来看,区块链技术的规模化商用还处在相对初期的阶段,企业对区块链技术性能、易用程度的较高需求,与区块链技术本身的可拓展性瓶颈及较低的运行效率构成了当前限制行业发展的主要矛盾。
基于自身大量的商业实践和对区块链商用的探索与创新,布比打造了完全自主知识产权、高性能可扩展、产品化成熟的商用级区块链底层平台BubiChain。
商用级区块链底层平台BubiChain取得底层技术关键突破:应用开发友好的智能合约、安全高效的共识算法、可靠的隐私保护、并行快速的多链,以及可扩展的跨链技术等创新;实现了产品化重要突破:应用可快速构建、可视化运维、技术合规及资金账户体系等,形成完整的产品服务能力。
本文为商用区块链BubiChain详解系列文章的第三篇——布比并行快速的多链分片技术特性及实现原理,以下为正文内容。
1. 多链分片的体系结构
布比区块链实现多链分片技术,可根据不同业务场景需求对数据做切分,横向提高区块链的吞吐量。

布比区块链的多链分片技术是一种“二层扩容技术”,可从一条主链平滑地扩展多条子链,每条子链都负责部分计算和存储业务,即链的数量可以随着业务量和数据的增加而增加。主链负责管理子链,保障链的安全性;子链继承主链的安全性,并且承载业务运行,子链的数据增长不会影响到主链及其他子链的效率,有效实现了资源隔离。

布比多链设计了主链与子链双层体系,让区块链更容易扩展。布比多链将不同业务的交易处理、状态存储、交易下载和广播进行拆分,不同子链的节点处理各自的业务。
布比多链包括两种类型的链,一种是主链 Main Chain,负责子链验证节点选取、子链区块提案人选取、子链状态存储、恶意行为惩罚等;一种是子链 Child Chain,可以存在多个子链,根据不同业务特点搭建不同子链。不同类型、不同业务的主链与子链体现出多态特点。
布比多链还设计了多层体系化安全保证机制:在子链验证节点选举过程中采用混洗等机制,使得验证节点在子链的分布均匀化、随机化;设计了可校验的主链子链关键数据关联机制,在不提取子链全部数据的前提下,即可校验子链数据合法性;设计挑战者机制和子链区块确认机制,有效抵御贿赂攻击、恶意提交等攻击行为。
2. 多链分片的防重放攻击
为了防止重放攻击,布比多链提出了统一账号,只需要一个账号就能在多链之间发送交易以及转移资产。在多链场景下,理论上攻击者可以将同一份交易分别发送给不同的链以获取不当利益,从而形成多链之间的重放攻击。用户去查询账户信息时,仅需一个账号就能看到所有链的资产信息,使得重放攻击无法开展。

上图展示了防重放攻击的过程:普通用户Alice 发送交易,比如交易为Tx-1,内容为Alice转移10个资产给Bob。Alice对交易Tx-1进行签名,随后将交易发送给Main Chain。Main Chain通过Unified Identity—0x1000识别出这是发给自己的交易,因为只有Main Chain的id为0x1000,则打包交易Tx-1。
Hacker截取该交易并尝试重放攻击。Hacker 拷贝 Tx-1这笔交易并发送到Chain N,Chain N通过Unified Identity:0x1000识别出Chain N的id不是0x1000,判定该交易是无效交易。
3. 多链账本的数据结构
布比多链账本通过数据结构的优化实现高可扩展性,具体包括:统一账户结构、区块结构、交易树、收据树等。详细的账本结构如下:

布比多链可以视为同构链体系,采用全局统一账户结构,目的是让用户在只生成一对公私钥的情况下,即可在所有链上发起交易,且多链之间的交易不会有重放攻击问题存在。账户树包括了从地址到账户状态之间的映射, 账户存储树保存了与智能合约相关的数据信息。 账户树的根节点哈希值由区块保存(在 account_tree_hash 字段),标示了区块创建时的当前状态。每个账户都有一个账户存储树。
4. 挑战者机制设计
在布比区块链中,挑战者对子链进行监督,一旦发现子链提交的区块数据存在问题,即可向主链发送抵押金对子链发起挑战,并提交SPV信息用于演算校验。由于子链验证节点抵押了大量押金,一旦Challenger挑战成功,则恶意节点的验证节点押金将奖励给挑战者。通过这种激励方法鼓励所有节点参与子链监督。
如果恶意节点通过贿赂攻击方式攻击子链,则需收买该子链的所有验证节点或行贿挑战者,下面分别进行分析。首先是收买子链验证节点的情况,假设总的贿赂金为ε,则ε至少为验证节点的质押金之和Pt,否则验证节点没有作恶动机。其次是行贿挑战者情况,恶意节点需要找到所有的挑战者,考虑到任何一个节点都可以充当子链的挑战者角色,并且挑战者的奖励是Pt,挑战者有足够的动力去挑战,因此恶意节点很难对子链发起贿赂攻击。

布比多链挑战者工作过程如下:
挑战者发现当前同步的区块出现异常,同时发现主链已经收录此次区块信息,挑战者发起对异常区块的挑战。
挑战者将上一个区块的状态数据和此次交易数据打包组成SPV证明数据发送给主链合约去进行校验。
主链验证节点进行轻节点演算过程成功后,重新到子链中下载相关的SPV数据进行比对校验。
校验正确表示挑战成功,之后对该子链的验证节点保证金进行惩罚,并奖励Challenger。
主链确定提交的区块数据无效后,启动取消后续区块确认的过程,子链区块头确认在最后一个安全的区块头位置,直到重新提交正确区块信息,保证子链恢复健康运行。