简介
无状态区块链:将账本的状态及交易的执行挪到链下处理,减小链上的存储开销
在开发支持智能合约的无状态区块链时,会存在以下问题:
智能合约所支持的交易中可能会出现随机的逻辑变化(?)
- 需要简洁的证明方法来保证链下交易执行的一致完整性
智能合约交易引起的读写量更大,在将交易信息上链提交时还需要额外的设计支持
- 对并行的执行货币交易支持有限
SlimChain:通过链外存储和并行处理来扩展交易的无状态区块链系统(利用链下存储节点来保存账本状态,模拟合约的执行)
可验证的事务执行算法
- 链下并行执行交易
- 计算辅助信息,证明执行的完整性
- 促使链上的共识节点进行进一步交易
链上临时状态
- 无状态链上交易验证
- 并发控制
- 事务提交
PMT(partial merkle tree)结构
- 不需要使用完整的MT结构,使得无状态共识节点能够维护链上状态树的根
SlimChain能够
- 处理异步网络中的并行交易(任意顺序)
- 支持分片(无关共识算法,许可链或非许可链)
并发控制方法
本系统同时支持两种并发控制方法
乐观并发控制Optimistic Concurrency Control
适用于数据争用较低的场景
可以使用交易预处理来改进OCC的表现
可序列化快照分离Serializable Snapshot Isolation
SlimChain
系统结构
- 存储节点:高存储高计算性能,同步链上提交内容,并负责维护链下状态性数据及执行交易
- 共识节点:偷懒的全节点,只保存部分数据,但需要负责出块
- 客户端
链上数据结构
基础的链上结构如下图
SlimChain中的链上结构如下
并行交易处理
交易执行和到达共识节点之间的延迟越长,冲突的概率就越高
交易上链
- $\pi$ 为merkle proof,$\pi_{write}$ 表示某交易写集合涉及到的merkle proof
- 下标$i$表示块高
- 下标$r$表示读操作
下标$w$表示写操作
$\tau_w$ 部分默克尔树,仅记录过去 k 个块中发生的写操作集及其默克尔路径
如图所示,k=2,意味着共识节点只保存最后两个块的PMT。假设目前块高为101,共识节点正在组织形成102号块
- 使用 $tx_3,tx_4$ 的 $\pi_{write}$ 补充 $\tau_w$ 缺失的节点
- 将写操作集合的内容更新到PMT中,生成新的merkle root,并创建新块102
- 删除掉 $\tau_w$ 中k之前的旧数据
交易并发控制
每个交易都被视为从与 $H_{old}$ 对应的块开始,并在存储它的块中被提交
- 使用OCC时,需要检查当前交易的读操作集合和写操作集合是否被最近提交的交易修改过
- 使用SSI时,需要检查当前交易的写集合是否被其他交易更新了,以及是否存在指向当前交易或源自当前交易的读写依赖
如图所示的例子,当使用OCC时$tx_4$与$tx_2$的$00$读写冲突,不能提交;当使用SSI时,不存在冲突,可以提交
节点同步
- 产生聚合证明:比较$tx_3,tx_4$的$\pi_{write}$,