速览无状态Rollup的优势与潜在问题
注:原文来自OneTrueKirk在ethresear.ch发布帖子。
这是我第一次在这里发布主题帖子,如果在任何方面有所冒犯,我深表歉意。我一直在思考这一想法(Stateless Rollups),主要是针对我们的借贷协议的专用 rollup, 但希望它可以普遍适用,感激所有反馈。
TLDR:
只发布状态根,不发布calldata。
(MarsBit注:Calldata是合约交易中的数据部分的值,不能被修改。)
细节
如果不使用以太坊作为数据可用性层,通过将完整状态作为calldata发布,而只将状态根发布到主网,会怎么样?主要好处是减少存储在以太坊上的数据量,从而减少用户在L2上交易的成本。即使有EIP-4844,blobace也不是免费的。
主要的风险是数据保留攻击(Data Withholding Attack),即提议者发布一个有效的状态根,但从其他rollup节点扣留完整的数据,以垄断未来的区块生产或挟持资金。为了防止这一情况,诚实的节点必须质疑任何没有对等方可以提供数据的状态更新。Arbitrum式的互动欺诈证明可以用来迫使提议者在主网上披露完整的状态,但如果根是有效的,仍会导致挑战失败,因此,即使在失败的情况下,挑战的成本也要低。
(MarsBit注:数据保留攻击(Data Withholding Attack)是指攻击者在访问受保护的数据时,故意不返回全部数据或者返回错误的数据,以达到欺骗或者破坏的目的。
如果挑战失败的成本很低,那么即使诚实的提议者正确地点对点传播了状态数据,也可能会强迫他们支付将所有状态数据发布到主网以防御挑战的费用,从而使诚实的提议者感到痛苦。发起挑战的成本必须与防御成本成正比,以确保无法以这种方式攻击诚实的提议者。
在最坏的情况下,如果攻击者可以花1美元让诚实的提议者损失1美元,他们可以迫使提议者放弃,让他们的区块恢复。随后,一个新的诚实的提议者可以竞标,除非攻击者可以对所有潜在的诚实提议者重复攻击,其中包括所有有资金的人,否则他们不能造成永久停机。有可能增加另一个条款,当一个有效区块被敲定后时间过长,挑战的成本就会上升。这样一来,挑战一个不诚实的提议者很容易,但不可能长期停止状态转换。
更为乐观的是,如果节点在点对点之间传播数据,他们可以决定自己的数据备份和可访问性解决方案,而用户最好在本地存储他们自己的状态转换所需的数据。在一个特定的应用程序的背景下,我考虑过与EVM完全不同的方式对rollup状态进行编码,以对此进行优化。所有与特定用户账户相关的状态都可以被编码为相同的哈希值,因此,用户可以更容易地验证自己账户的变化,而不需要知道全局状态(即确认你在交换中收到了你想要的代币数量,而不需要担心具体来自何处)。
总结
我很想听听大家的想法,也希望大家能提供相关工作的链接。 与普通的 optimistic rollup不同,在 optimistic rollup中很容易确定所提交的calldata是否与主网的状态根相匹配,以及两者是否有效,但仅从状态根中不可能知道一个更新是否有效,因此需要仔细考虑挑战期和griefing(即恶意行为)的经济学问题。