区块链与状态爆炸

在许可链里面,每个节点都是可信的,所以一个节点是不是只要存储和它自身相关的数据状态就可以了,而不需要同步许可链里面所有的全球状态,这等于做了一个变相的分片。这样可能就在一定程度可以上缓解状态爆炸的问题。

但是如果假设一个极端的情况,许可链里面就两个节点,然后他们之间都面临状态爆炸的情况,那可能就需要通过别的方式去解决状态爆炸的问题了。状态数据压缩,根据状态修改的不同频率进行分级?

其它节点如何验证不在自身存储的数据呢?

就是一份数据状态不用所有全部节点存储,只存储在一部分节点中,不是自身存储的数据就直接向别的节点索取,因为是许可链,数据验证是不是就可以弱化了

1 Like

以太坊分片之后,每个节点还是需要存储所有片上的全球状态么?

诶,我理解以太坊的分片是交易分片,不是存储上的分片,为了提升交易速度的方案。许可链里面的节点也不一定都是可信的,不然也没有必要用BFT的共识。
一个节点只存储于自身相关的数据一般出现在隐私方案里,但是存在其它节点无法验证这笔交易的问题。
解决许可链状态爆炸,理解至少有两种方法。
一个是许可链可以根据业务需求,对保存时间做限定,比如一般商业系统的数据保存时间是2年,在2年以外的数据做冷存贮。
二个是做快照,把历史状态删除。保留历史块交易信息。
不知道楼主是否有其它更好方案 @janx

谢谢解答。其实我理解的这个问题是,当前全球状态的爆炸怎么办?
对于历史状态和历史交易数据我们可以进行删除或封存处理,但是冷存储和历史状态删除都不会对现有的全球状态的大小造成太大影响。

比较好奇的是,比特币的3G和以太坊的10G的全球状态数据,在主链性能大大大幅度提升的状态下,接近于状态爆炸的情况,这个时候该怎么办?

是我想的比较简单吗,对于 Jan 的这个问题:

用更牛逼的硬件设备就完事了=。= :rofl:
不过如上面所说,可以采用:

毕竟联盟链的安全性在于运行联盟链的节点自身的信誉,个人觉得历史数据没有那么重要?

另外,以太坊 2.0 的方案是有一个 Beacon Chain 作为主 shard,作为所有分片交易安全的锚点,分片会存储自己交易和状态并且定时 commit 到 Beacon Chain 里。但是我看到跨分片交易就非常复杂,需要分片 A 、B 、Beacon Chain 来回 commit 进行确认保证安全性,在考虑 finality 的情况下,据估计一次交易 24 分钟左右(主要是 Beacon Chain 上面需要确认两次)。

历史交易和历史状态,可以在全部节点达成统一意见之后进行快照然后删掉,但是如果全球状态本身处于爆炸状态是不是一点办法都没有?(除了让所有人用更牛逼的硬件设备?)

有些人会认为全部的历史交易还是非常重要的,因为后面加入的节点也可以通过历史交易进行全部的状态验算,但是我觉得在达成统一共识的状态下,从0开始和从10000开始并没有那么大的区别吧。

联盟链的话,不需要考虑这些吧…如果联盟链还有问题那就是联盟的问题…

联盟链有私钥保护节点身份,且 PBFT 类共识不会分叉,所以全节点对网络安全性不是很重要(联盟链不会有分叉攻击、伪造块等等)。

联盟链可以放弃全节点,定期持久化最新的 block hash 和状态摘要作为锚点,删除所有历史块。

历史和状态不是一个东西吧?
为啥楼上都在说裁剪历史,还是说我搞错了?

联盟链解决状态爆炸问题:
直接联盟所有节点对状态增加收费呀,用户增加一个状态该付多少手续费,直接所有节点平分。

既然只有有限个节点,那每笔交易消耗多少带宽/计算/存储这三种资源应该是能直接算出来的东西。
所以直接按交易收费,然后费用分给所有节点就可以了,不是吗?

状态的增长速率受 (1) system constraints(rent、block gas limit)和 (2) growth rate of adoption,这两方面因素影响。

若考虑到未来真正的 mass adoption,则 (2) 的作用应该远远超过 (1)。所以未来真到这一步的话,全节点不可避免地还是要扩存储容量的,要么垂直扩容(增大磁盘容量),要么水平扩容(分布式存储)。
这么想的话,又觉得无论采取什么设计,状态爆炸都是不可避免的问题。

1 Like

根据三角理论,许可链舍弃了去中心化,那么它就理所应当的应该获得性能上的提升

同意。我在想对状态存储收费,会促进状态的转移,状态的转移也是状态存储的一部分,一样会占用状态空间啊。即使注销了,那历史的阴影还会在啊。

我认为会对只存储最新状态的规模缩减有好处

那只能加硬盘了

那EOS sync的时候只能重新计算?

发一笔交易,不论状态生成还是状态转移,用多少资源就收多少费呗。
就像楼上说的,硬盘不够就加硬盘。

重要的是联盟链里就不存在一个公地问题了。
公链有公地问题是因为它是“公共” (permissionless)的,谁都能成为节点。

联盟链就不是“公共”的了,很大程度上是个私有的,所有节点付出的资源多少是可以算出来的。

联盟链就有点像阿里云了已经,只不过不是阿里云一方负担成本,而是好几方一起负担成本。

区块链

浅显的核心理解:以区块作为载体,将具有价值的数据进行存储,链接成为全网数据库,达到不可篡改的目的,进而实现价值的共识。
普遍的追求:去中心化,抗审查

状态

经过全网认可的数据集,不管是过去的,当下的,还是未来的。全网有意见不统一的,小到软分叉(协议升级),大到硬分叉,价值分裂,各自继续耕作在自己价值观的网络中。这些都是可能的。

  • 比特币UTXO系列:将整个交易集存储下来,然后复盘全网任何时刻的状态。(对比传统的数据库数据,不去存储数据历史的状态(status),只将整个数据的所有合法修改集进行保存(log)。
  • 以太坊Account系统:进行全网最终的认可的状态储存,而不存储交易过程。(对比传统的数据库数据,只存储当下合法数据操作以后认可的数据,而不存储数据的修改集。

状态爆炸的核心依然是为了维护去中心化的数据一致性问题。这里,试想,全网的状态能否通过某种技术和方法进行分发或者分布式存储(不影响矿工挖矿或者用户使用或者开发者构建生态),同时,提供途径进行全网数据的单份或者冗余份数统一,这样,状态爆炸带来的压力可以随着生态的扩大与之均衡化。

1 Like

许可链里的话可以假设节点都是诚实的,那么 是否可以考虑大量的状态只保存在链下(数据库),在链上只更新状态摘要,我有一个大胆的想法是:许可链layer2扩容。