SharPer: Sharding Permissioned Blockchains Over Network Clusters
这个SIGMOD 2021上一篇关于区块链分片的论文。
本篇论文是针对有许可区块链(区别于公链,加入需要许可)的一个分片系统。
将整个系统根据有无恶意节点分为CTF网络(只存在崩溃节点数目f,不存在恶意节点)和BFT网络(存在恶意节点数目f)
其中在CFT网络中,节点数目为2f+1,在BFT网络中节点数目为3f+1
CFT网络
每个分片的节点都只维护自己分片内的账本。
每个分片有一个primary节点(用来发起提案)。
每个区块只包含一个交易。
片内共识
类似Raft协议。
1.客户端client发起request请求给primary节点
2.primary节点进行排序,将交易顺序+前一个区块的哈希+request打包为propose消息发送给所有的节点
3.节点收到后,验证交易的顺序,发送accept消息给primary节点
4.primary收f个accpet消息,加上自己就是f+1个accept消息,那么构造commit消息包含自己的签名,并将commit消息和交易内容写入区块,同时将commit消息发送给所有的节点。向客户端返回reply消息
5.其他节点收到commit消息,将commit消息和交易内容写入区块
如果client长时间未收到reply会发送request请求给所有的节点,如果节点已经执行这个交易就返回结果给客户端,否则发送消息给primary
跨片共识
1.client发送消息m给 其中一个分片i的primary节点 Ni
2.Ni确定m在分片i的顺序hi,发送propose请求给所有的参与分片的节点(包含hi,d=D(m),m)
3.其他节点收到propose后,确定该交易在自己分片k内的顺序hk后,发送accept消息给 Ni(包含h1,hk,d,r(发送节点的签名))
4.Ni收到每个集群f+1个节点的accept消息后发送commit消息(包含h1,h2,...hk,d)并进行签名给所有的节点
5.分片的从节点接受到COMMIT消息后确认编号hk之前的所有交易都已经COMMIT(即使之前没有ACCEPT,因为之前可能宕机了没收到),然后向区块链提交交易,执行,改变状态
由于通信链路存在延迟问题,同一分片内的不同节点对同一交易返回的顺序可以不同,因此Ni可能无法达成共识。作者采用的是发送super-propose消息给这部分分片的primary节点,各个集群primary节点收到super-propose后,会附加正确的执行顺序(本集群内)形成super-accept发送给所有普通节点,普通节点转发给Ni。一旦Ni收到了这部分分片的f+1个super-accept请求后,一切就回归正轨了
BFT网络
作者这里采用的是PBFT算法
讨论思路以及对跨片共识的改进和CFT的思路相同。就不再赘述
效果
主要是和其他分片系统比较吞吐量和时延。