BrokerChain: A Cross-Shard Blockchain Protocol for Account/Balance-based State Sharding
我总感觉这篇文章不完整,缺少一些东西。或者说有些地方并没有详细说。比如状态图的构建,网络重分片的的配置过程。都直接忽略了。
Motivation
1 跨片交易不可避免的发生,如何降低跨片交易的数量
2 存在hot shard的现象,如何让负载更加均衡。
减少跨片交易
- duration-limited eventual automicity
- starte-partition
- account-segmentation
Overview
在brokerchain中存在两种shard
-
M-shard 负责打包交易出块 有S个
-
P-shard 负责划分账户状态 有个一个
-
在shard内部使用PBFT协议进行共识。M-shard在新的epoch中创建的第一个tx blcok 要跟在state-block B t B^t Bt 之后。
-
P-shard持续接受从M-shard生成的区块并更新所有账户的状态图,当所有区块生成结束,状态图固定后,执行状态图的划分,达到各个shard 负载均衡。
-
p-shard 对状态区块进行共识
-
M-shard 根据 state block 对状态进行冲新划分。
state-graph partition
状态图划分,对整个网络成状态图,图上的边是两个用户之间的交易数量,点的权值是一个用户交易的总数量。
使用Metis 算法将状态图进行划分。
account segmentation
这个和一个用户对应多个庄户地址有区别,在不同的shard中,一个用户使用相同的账户地址,存放在不同的shard中。
BrokerChain protocol stores the deposits of an account located at different shards with the same account address.
- 这样做可以减少夸片交易的数量。
- 能够缓解 hot shard问题
Modified Shard State Tree
使用一个修改过的分片状态数来存储用户状态。
ψ \psi ψ 是一个 0 -1 数组,1 代表此账户在这个分片中有存储。 ψ = [ e 1 , e 2 , . . . , e s ] \psi = [e_1,e_2,...,e_s] ψ=[e1,e2,...,es]
一个用户的账户状态通过下面的进行描述
X μ X_{\mu} Xμ 代表了账户地址, η \eta η 代表了账户的nonce, ω \omega ω 代表value, ζ \zeta ζ 是账户状态 code字段
不同的shard 维护不同的 mSSTs,主要是每个local mSSTs 的value nonce code字段不同。
跨片交易处理
要成为broker,首先要保证有足够多的资产才可以成为broke。
要设立一定的激励机制鼓励账户成为broker
成功的跨片交易处理
首先账户A 发出一个原始的交易,交易是给B转v的钱,并指定broker c、token-lock duration H l o c k H_{lock} Hlock
H l o c k H_{lock} Hlock 是为了交易在shard1上链后等待足够多的时间才可以使用这笔钱,延迟确认,尽量避免交易需要被回滚的情况。
η \eta η 代表A和C的nonce
当收到叫一个 θ r a w \theta_{raw} θraw broker创建一笔交易 θ 1 \theta_1 θ1
交易 θ 1 \theta_1 θ1上链时,当前的块高度为 H s o u r c e H_{source} Hsource,但是交易中的钱在 [ H s o u r c e , H s o u r c e + H l o c k ] [H_{source}, H_{source} + H_{lock}] [Hsource,Hsource+Hlock]之间被锁定,broker会发送产生一笔的交易 θ 2 \theta_2 θ2 ,只有当shard2在shard1的高度小于等于 H s o u r c e + H l o c k / 2 H_{source} + H_{lock}/2 Hsource+Hlock/2 时,交易才会被接受。
失败的跨片交易
shard1的高度到达 H s o u r c e + H l o c k / 2 H_{source} + H_{lock}/2 Hsource+Hlock/2 时,shard2还没有收到交易 θ 2 \theta_2 θ2 ,shard2会认定这个跨片交易失败,并且极有可能是broker私吞了这笔钱。 shard2会将 θ 1 \theta_1 θ1 加入区块中,并提供一个失败证明 γ \gamma γ给 source shard,source shard 将会把 γ \gamma γ 加入高度小于 H s o u r c e + H l o c k H_{source} + H_{lock} Hsource+Hlock 的区块中。
如果 γ \gamma γ 在广播给source shard的过程中丢失,会重新进行广播。 这又是语言建模,也不考虑实际的广播轮次。
token-lock duration H l o c k H_{lock} Hlock 设置多大,设为平均夸片交易处理时间的 20倍。
Duration-Limited Eventual Atomicity
在 monoxide 的relay机制中,不要求有时间的限制,所以一个跨片交易可能等待很长时间,但是在borkerchain的设计中就要是有限时间的等待。
这篇文章有一些问题:
- 没有更细的讲述整个状态图应该如何进行划分。
- 没有细节的分析,将一个夸片交易拆分成两个片内交易究竟快在哪里?没有更加细致的解释。