Plasma Cash,一种新的 Plasma 设计

一种新的 Plasma 设计:

1)每一笔存款对应于一个独特的代币;通证是不可分割的,且不可合并。

2) 与将每笔交易按照txindex 的顺序存储在二进制 Merkle 树中不同的是,新设计中将每笔交易存储在稀疏的 Merkle 树中或 Patricia 树中,依据花费的代币 ID 进行索引。

在该 Plasma 设计中,用户需要提供证明以示代币的有效性,其中包括代币的所有历史交易,以及所有未花费该代币交易的不包含证明(non-inclusion proof),来证明该代币未被双花。

PlasmaCash--696x449

通俗来说,不包含证明指的是证明在 Merkle 树中的指定位置存在空对象。

假定代币数为 n ,区块数为 t ,则证明的数据大小为 t*log(n)。

Plasma 链操作员可以进行分片,因此从链操作员或用户的角度来看,系统的可扩展性几乎没有限制。如果类 plasma 系统(以及 channel 系统)处理高交易负荷的事务,大规模攻击可能会使区块链溢出以及造成用户无法退出或是对挑战作出回应。

这样的体系设计非常适合高吞吐量但处于低或中等状态的应用,例如小额支付。

下述 Plasma 退出机制设计不需要签名确认:

1)任何人可以通过提交代币所有权历史中的最后两个交易来将代币退出 Plasma 链(即正在退出 Plasma 链的代币 C 以及它的父类代币 P(C))

2)有三种方式对代币在 Plasma 链上的退出进行挑战:

(i)提供交易支出代币 C 的证明;

(ii)提供代币 C 之前交易支出 P(C) 的证明;

(iii)提供代币历史中P(C) 之前的交易 C*。

3)类型 (i) 和 (ii) 的挑战能够立即阻止代币在 Plasma 链上的退出。

针对类型 (iii) 的挑战,使用 Zk-snarks 进行不存在证明,除非父链愿意接受退出事务的 Zk-snarks ,否则将没有足够的信息来回应挑战。

因此需获取代币历史中的每次代币转移。

假设区块的数目为 t ,代币转移(即代币历史长度)为 h,那么所需的数据大小从 32tlog(n) 缩减至32hlog(n)+288 。另外可以通过递归 SNARK 证明具备存在证明的块号列表,这样做可以把数据大小再次缩减至 h*(log(t)/8)+288 字节(其中 log(t) 表示需要 log(t) 位来表示每个区块号,并且每个字节等于 8 个位 ,所以除以 8 )

Zk-snarks 指的是一种证明构造,借此可以证明人可以证明他拥有某些信息,允许证明人向验证者证明陈述是真实的,而不会泄露超出陈述本身有效性的任何信息。

交易进行时 Plasma 链上可能会包含不可用或是无效的数据,那么在 P(C) 与 C 之间可能会存在双花或是无效的花费,这需要更复杂的 Plasma 退出机制来解决这个问题。

整理翻译自:https://ethresear.ch/t/plasma-cash-plasma-with-much-less-per-user-data-checking/1298