一种来自L1的审查攻击 及 防御手段
前文提到,在proof of buy中,我们在finalize L2 block的时候,会将这些L2 block header上传到L1上去。
但这迎来一个问题, 不管L1有多去中心化, 但具体在某个高度出块的时候, 一般而言总是只有一个矿池出的块最终被采纳的。 在这种情况下, 此刻出块的L1矿工,就具备对L2 block审查的权力, 具体而言,他自己可能就是既是L1的矿工也参与L2的挖矿,此时恰逢他自己在L1出块,他可以选择拒绝接收 那些goal比他还高的L2 block, 只打包他自己在L2出的块。
这种攻击方式无法随着L1的去中心化而降低被审查的风险,因为每个矿池都可能为了自己的利益选择拒绝某些L2 block。 长此以往, L2 的finalize 将会被L1的所有矿工所拿捏。
防御手段
我们可以做如下变动:
- 上传L2 block header到L1的时候, 不能明文上传,只能上传Commitment,这样L1矿工看不到具体内容便无法进行审查
- 当L1打包了所有 L2 矿工发来的 commitment并出块之后,L2 矿工将自己在L1 block上被打包签名的这些 commitment 在L2网络里广播出来,并证明这些commitment 在L1的某个block上可以查到的并且是自己生成的,很简单,只需要 open(block_header, random) = commitment, 这是所有L2全节点都可以验证出来的。
如此, 就可以在防止被L1审查的情况下 让 L1 帮助完成finalize L2 block了。
这里可以继续强调一下,L1帮助L2 finalize有个很大的好处是:防止L2被长程攻击和自私挖矿攻击
