BrokerChain: A Cross-Shard Blockchain Protocol for Account/Balance-based State Sharding - INFOCOM 2022
1. 现有方案的局限性
1.1 热分片现象
Monoxide分片方案采用 异步共识组 的结构,每个共识组(即分片)独立处理一部分交易。然而,由于区块链的 账户部署机制,某些分片可能成为 热门账户、资产、Dapp 等的聚集地,导致跨分片交易非常频繁,负载显著高于其他分片,即 热分片现象。
1.2 热分片带来的问题
- 片内交易拥堵
- 跨分片交易确认时间受影响,冷分片被迫等待热分片处理
2. BrokerChain的设计目标
为了解决热分片问题,BrokerChain从两个方面进行优化:
- 尽可能让分片负载均衡
- 减少跨分片交易
3. 网络分片、交易分片与状态分片
- 网络分片:每个节点只与本分片的其他节点通信,减少通信开销,提高共识效率。
- 交易分片:不同交易被分配到不同分片处理,单笔交易只需被特定分片独立执行,不需全网验证,提高吞吐量,减少计算压力。
- 状态分片:将区块链的账户状态和存储数据划分到不同分片,每个分片只存储自己分片的账户数据,减少存储压力,提高查询效率。
4. BrokerChain的设计
4.1 两种分片
- M-shard(交易分片,Transaction Shard):负责处理交易(TX)。
- P-shard(状态分配,
- Partition Shard):负责维护账户状态,并调整分片的状态分布。
5. BrokerChain的运行阶段
5.1 身份建立阶段(Identity Establishment)
对应阶段:PoW 加入(图 ①)
5.1.1 过程
新节点需要通过 PoW(工作量证明) 机制加入某个分片(Shard)。在系统中,绿色的节点代表 诚实节点,红色的节点代表 可能的恶意节点。这个 PoW 机制确保了恶意节点不能轻易渗透整个系统。
5.1.2 原因
在一个分片化的区块链中,每个分片应该有足够的 诚实节点 来确保安全性。PoW 机制可以防止女巫攻击(Sybil Attack),即恶意用户伪造多个身份来破坏共识。
5.2 交易共识阶段(Transaction Consensus)
对应阶段:PBFT 交易共识(图 ②)
5.2.1 过程
每个 M-shard 处理交易,使用 PBFT 共识 来验证交易,并生成交易块(TX Block)。图中的蓝色和红色方框 代表交易块,它们在各自的 M-shard 内部达成共识。交易块会被不断生成,并传递到 P-shard,等待进一步处理。
5.2.2 细节解析
待上链交易池(左上角) 存储了当前所有待处理的交易。PBFT 共识协议(蓝色和红色框) 确保了所有 M-shard 内部的交易被正确处理,并形成新区块 B t − 1 B^{t-1} Bt−1。
5.2.3 原因
传统区块链(如比特币、以太坊)的交易确认需要 全网同步,而 分片区块链(Sharding)允许多个分片同时并行处理交易,提高吞吐量。但这也带来了 跨分片交易(Cross-Shard Transaction,CTX)问题,因此 状态划分阶段 需要优化账户分布,减少 CTX 发生的概率。
5.3 状态划分阶段(State Partitioning)
对应阶段:账户交易关系分析 + 状态图划分(图 ③ 和 ④)
5.3.1 过程
P-shard(状态分片) 从 M-shard 生成的 TX 块中收集交易信息,并构造一个 账户交易关系图(State Graph)。这个状态图 描述了哪些账户之间存在频繁交易。基于交易关系,P-shard 重新划分分片,以减少跨分片交易的发生。
5.3.2 细节解析
图③:构建账户交易关系图
这个图是一个 带权图(Weighted Graph):
- 节点(Node)= 账户
- 边(Edge)= 账户之间的交易关系
- 权重(Weight)= 交易次数
例如:
- 蓝色分片(#1)内的账户 4 与 6 之间有 3 笔交易。
- 红色分片(#2)内的账户 10 和 11 之间有 6 笔交易。
图④:状态分割调整
通过计算交易关系图,系统可以决定 哪些账户应该移动到不同的分片,以优化跨分片交易(CTX)。例如:
- 绿色账户在状态 #1 内与红色账户有较多交易,因此可能需要调整其分片归属,以减少跨分片交易的发生。
5.3.3 原因
跨分片交易的处理成本很高(需要多个分片协调)。通过优化账户分配,将交易最频繁的账户分配到同一个分片,可以显著提高效率。
5.4 状态重组阶段(State Reconfiguration)
对应阶段:PBFT 形成新状态块 + 迁移账户状态(图 ⑤ 和 ⑥)
5.4.1 过程
P-shard 运行 PBFT 共识,生成新的状态块 B^t。这个状态块包含 新的分片划分信息,并被广播到所有 M-shard。M-shard 根据状态块 B^t 重新调整账户的状态归属。
5.4.2 细节解析
图⑤:PBFT 确认新的状态分区
经过前面的状态划分后,新的状态分区方案需要达成共识(PBFT)。这个新状态块 B^t 会被广播到所有 M-shard,以便应用到下一个纪元(Epoch)。
图⑥:状态迁移
M-shard 依据 状态块 B^t 的信息,对账户进行分片调整。 例如:
- 之前 状态 #1 中的绿色账户被迁移到状态 #2,因为它与状态 #2 的账户交易更频繁。
5.4.3 原因
这是 整个优化过程的最终步骤,确保所有分片在新的纪元(Epoch t+1)中能够按照最优状态继续运行。状态的动态调整,可以适应不同时间段的交易行为,保持系统的长期优化。
6. 实际例子
假设我们有一个 包含两个分片(Shard #1 和 Shard #2) 的区块链系统,以及 三个账户(A、B 和 C)。
当前账本包含 三笔原始交易:
- TX #1: A → C
- TX #2: B → C
- TX #3: A → B
6.1 对比
Monoxide:
- Shard 1:A
- Shard 2:B、C
- Cross-Shard:TX 1, TX 3
- Intra-Shard:TX 2
两个问题:
- 分片1、2的负载不均衡
- 3笔交易中两笔是跨分片交易
BrokerChain:
- 将C拆成 C1 + C2,分别放置在两个分片中
- Shard 1:A、C1
- Shard 2:B、C2
- Cross-Shard:TX 3
- Intra-Shard:TX 1, TX 2
结果:
- 减少了一笔跨分片交易
- 两笔交易负载均衡
7. BrokerChain的账户分片机制
7.1 特点
- 账户地址相同:所有分片中的账户地址保持一致。
- 协议自动调整:整个流程对用户透明,无需手动管理多个账户。
- 优势:
- 减少用户负担:无需手动创建多个账户。
- 避免跨分片交易复杂性:一个账户在多个分片拥有不同状态,跨分片交易变为片内交易。
- 提高流动性和安全性:假设A的资金在多个分片上,即使某个分片有问题,A仍然可以通过其他分片访问到自己的资金。
7.2 nonce机制
BrokerChain采用了 以太坊的nonce(计数器)机制,其中:
- nonce 代表交易次数。
- 在这里是”账户+分片+nonce“全局唯一,全网全同,来表示某个账户在某个分片上唯一的交易状态。
例如:
- 在 Shard #1,A 账户的 nonce 是 10,表示 A 在 Shard #1 进行了 10 次交易。
- 在 Shard #2,A 账户的 nonce 是 5,表示 A 在 Shard #2 进行了 5 次交易。
8. mSST(Modified Shard State Tree)
8.1 结构
每个账户状态
S
μ
S_\mu
Sμ 被定义为:
S
μ
=
{
X
μ
∣
η
,
ω
,
ζ
}
S_\mu = \{X_\mu | η, ω, \zeta \}
Sμ={Xμ∣η,ω,ζ}
- X μ X_\mu Xμ (Account Address):账户地址
- η η η (Nonce):交易数
- ω ω ω (Value):账户余额
- ζ \zeta ζ (Code):账户的代码,表示账户类型(普通账户、智能合约账户)
8.2 存储映射向量(Storage Map)
m
S
S
T
mSST
mSST 还包含一个 存储映射向量(Storage Map),记录某个账户在哪些分片中存储:
e
=
[
e
1
,
e
2
,
.
.
.
,
e
S
]
,
e
i
∈
{
0
,
1
}
,
i
∈
{
1
,
2
,
.
.
.
,
S
}
e=[e_1,e_2,...,e_S],e_i∈\{0,1\},i∈\{1,2,...,S\}
e=[e1,e2,...,eS],ei∈{0,1},i∈{1,2,...,S}
- S S S 是分片的数量(Number of Shards)。
- e i = 1 e_i = 1 ei=1 表示账户存储在 Shard i,否则不存储。
通过查询Storage Map,可以快速判断某笔交易的状态(跨片 or 片内)。
8.3 mSST的结构
上图展示了mSST的结构,主要由3部分组成:
- 左侧:整个区块的一些状态信息(状态根、交易Merkle根、区块头……)
- 中间:主体(示例为Shard 1的mSST结构)
- 右侧:简化的Shard 1的状态信息
其中中间主体部分为mSST的具体结构,我的个人理解如下:
- 绿色的为分支节点,展示公共前缀。
- 灰色的为叶子节点,存储当前账户的具体交易信息。
- 交易账户由 根-叶子 这条路径连线所确定。
8.4 效率
mSST是一种高效的数据结构:
- 判断交易类型复杂度为O(1)
- 查询账户余额的复杂度为O(n),其中n为该账户所在分片数。
9. BrokerChain的跨分片交易处理
9.1 传统方法
- A 在 Shard 1 发送交易。
- Shard 1 预扣 A 200元,生成 CTX Proof 证明A有钱进行交易,并将Proof发送给Shard 2。
- Shard 2 验证Proof,给 B +200元,把 CTX Receipt 返回给 Shard 1。
- Shard 1 确认了 Receipt 之后,正式扣除 A 200元。
问题:
- 不同分片需要通信,会有网络延迟,极大降低性能。
- 可能导致分片负载不均衡,特别是当跨片交易数量多时。
9.2 BrokerChain的创新方法
引入 做市商Broker(可以理解为中间人):
- Broker 在 Shard 1 和 Shard 2 都拥有账户。
- 协助完成这笔跨片交易,直接将1笔跨片变成2笔片内,无需跨分片通信,即刻执行,极大提升了性能。