逃租攻击

概述

理性用户可以通过使用死 Cell 存储自己的数据,避开通胀税,从而架空 CKB 的经济学设计。

攻击步骤

  • 针对一些不经常需要修改的数据,P.S 在区块链场景下,这类数据可能会很常见
  • 用户首先存储到 Cell 中,形成状态数据
  • 然后用户把 Cell 标记为”已销毁“,获取 CK Byte 的流动性来避免通胀税
  • 如果用户的业务场景只是对不可变数据进行频繁的读取,那么完全可以从全节点的死 Cell 里面读取
  • 死 Cell 里面的历史数据的安全性,其实并不低于活 Cell 里的状态数据
  • 用户如果需要修改自己的数据,可以再次拷贝死 Cell 中的数据到一个新生 Cell 中

危害

  • 状态爆炸可能会得到控制,但是历史数据可能依然会爆炸
5 Likes

大家讨论一下

死 Cell 中依然保留了密码学的证据,Cell 死后,它的 Owner 依然可以去像大家证明他是这个 Cell 的所有者。所在在我看来,死 Cell 也好,历史数据也好,也大有应用场景,所以可以造成很多用户有足够的动机去挖掘各种可能。

Transaction 是不能通过 inputs/deps 引用 dead cells 的,也就是说合约中是无法访问 dead cell 的数据的。把数据写入然后马上又销毁等于是交一笔手续费占用了一块历史存储的空间。

1 Like

layer1的合约不能访问dead cell,在layer2可以吧?
Peter提的利用dead cell存储数据很可行,就是历史节点的中心化令人担忧。

虽然历史数据确实可以被读取,但是这应该是属于数据的可靠性验证,和数据安全性无关;

如果有 layer2 的应用去拿的数据来自 dead cell,那么这个应用会被用户拉黑,但是确实会出现用户在不知情的情况下被蒙蔽;

吃瓜群众 :watermelon: 等待大佬的看法

是的,在部分 layer2 用户看来,dead 和 alive 的 cell ,都只是硬盘上的可读数据。

dead cell 在 layer1 上使用肯定受到各种限制。但是,这不是我这里讨论的重点。

  1. CKB 的经济模型在我理解,是为了控制 live state 或者那些 “不知道是 live 还是 dead 的 state“,这些 live 的世界状态有些是没必要的,并且那些 “不知道是 live 还是 dead 的 state“ 会对压缩造成困难。
  2. 历史数据是可以压缩的。

dead cell 的数据就是失效的数据,除非你向用户证明这部分数据不关键(比如不是 udt 的账目数据),否则就可以被认为是架空的 layer 2。而向不同背景的用户证明这一点是困难的,因此只能不这么做来保全自己 layer 2 的信誉,因为只引用 live 的 cell 是很容易向用户证明的。

这其实涉及到的是用户画像与安全性边界的问题,这点 layer 2 需要很好把握才行,否则容易过度设定或者过度侥幸。

1 Like

我这里的说的情况没有那么复杂。dead cell 中的数据也是“很安全的不可篡改数据”,所以对很多应用场景来说能保证这一点就很有实用性了。

区块也是有自己的限制的,包括大小和cycles limit, 所以一定时间内的历史数据也不能无限制的增长。把数据保存到历史中只在有限的场景中有用,数据可用性更弱(全节点完全可以删掉),没有可编程性,所以dead cell中的数据和live cell中的状态不是等价的。使用dead cell保存数据,也需要付出成本,成本是live cell生命期的流动性和数据上链的手续费,手续费的高低主要取决于区块的限制。CKB经济模型的主要特点是状态具有成本,但是手续费与区块限制也都是CKB经济模型的一部分。

2 Likes

嗯,你完全理解了我的意思。对你的观点我也完全赞同。我所担心的还是历史数据的低廉,造成的历史爆炸,目前的主张是对区块大小要有严格的限制。