来源:Bitcoin Magazine;编译:五铢,金色财经
Rollups 近来已成为比特币扩容的焦点,成为第一个真正从闪电网络“抢走风头”的东西,在更广泛的关注度方面。 Rollups 旨在成为一个不受闪电网络核心流动性限制约束或限制的链下第二层,即最终用户需要有人提前分配(或“借出”)资金才能收到钱,或者中间路由节点需要通道余额来促进支付金额从发送者到接收者的全程流动。
这些系统最初是在以太坊和其他图灵完备系统上运行的,但最近重点已转移到将它们移植到基于 UTXO 的区块链(例如比特币)。本文不打算讨论目前在比特币上实施的现状,而是讨论人们长期追求的理想化Rollup的功能,这取决于比特币目前不支持的功能,即直接在比特币上验证零知识证明 (ZKP) 的能力。
Roll 的基本架构如下:单个账户(在比特币中为 UTXO)保存 Rollup 中所有用户的余额。此 UTXO 包含一个承诺,该承诺以 Merkle 树的 Merkle 根的形式存在,承诺 Rollup 中现有账户的所有当前余额。所有这些账户均使用公钥/私钥对进行授权,因此为了提出链下支出,用户仍必须使用密钥签署某些内容。该结构的这一部分允许用户随时无需许可即可离开,只需制作交易证明其账户是 Merkle 树的一部分,他们就可以单方面退出 Rollup,而无需运营商的许可。
Rollup 的运营者必须在交易中包含一个 ZKP,以便在完成链下交易的过程中更新链上账户余额的 merkle 根,如果没有这个 ZKP,交易将无效,因此不能包含在区块链中。此证明允许人们验证对链下账户的所有更改是否得到了账户持有人的适当授权,以及运营者是否没有恶意更新余额以窃取用户的资金或不诚实地将其重新分配给其他用户。
问题是,如果只有 merkle 树的根发布在链上,用户可以查看和访问它,那么他们如何将他们的分支放在树中,以便能够在他们想要的时候无需许可就退出?
在适当的Rollup中,每次确认新的链下交易并且Rollup账户的状态发生变化时,信息都会直接放入区块链中。不是整个树,那样太荒谬了,而是重建树所需的信息。在一个简单的实现中,Rollup中所有现有账户的摘要将包含余额,并且账户只是在更新Rollup的交易中添加的。
在更高级的实现中,使用余额差异。这本质上是对在更新过程中哪些账户增加了或减少了资金的摘要。这使得每个Rollup更新仅包含发生的账户余额更改。然后,用户可以简单地扫描链并从Rollup的开头“进行计算”以得出账户余额的当前状态,这允许他们重建当前余额的默克尔树。
这样可以节省大量开销和区块空间(从而节省资金),同时仍允许用户保证访问单方面退出所需的信息。rollup 规则要求将这些数据包含在使用区块链向用户提供的正式 rollup 中,即不包含账户摘要或账户差异的交易被视为无效交易。
处理用户提取数据可用性问题的另一种方法是将数据放在区块链之外的其他地方。这引入了微妙的问题,rollup 仍然需要强制确保数据在其他地方可用。传统上,其他区块链用于此目的,专门设计为作为 rollup 等系统的数据可用性层。
这造成了安全保障同样强大的困境。当数据直接发布到比特币区块链时,共识规则可以保证它绝对正确。然而,当它被发布到外部系统时,它能做的最好的就是验证 SPV 证明,即数据已发布到另一个系统。
这需要验证数据存在于其他链上的证明,这最终是一个预言机问题。比特币的区块链无法完全验证除了发生在自己区块链上的事情之外的任何事情,它能做的最好的就是验证 ZKP。然而,ZKP 无法验证包含 rollup 数据的区块在生成后是否真的被公开广播。它无法验证外部信息是否真的对所有人公开。
这为数据扣留攻击打开了大门,即创建对发布数据的承诺并将其用于推进rollup