复制成功

分享至

主页 > 数字货币 >

Kernel Ventures:一文解析 DA 和历史数据层设计

2023.11.29

作者:Kernel Ventures Jerry Luo

TL;DR

1.早期公链要求全网节点保持数据一致性,以确保安全与去中心化。然而,随着区块链生态的发展,存储压力不断增大,导致节点运营出现中心化的趋势。现阶段 Layer1 急需解决 TPS 增长带来的存储成本问题。

2.面对这一问题,开发者需要在兼顾安全性,存储成本,数据读取速度与 DA 层通用性的前提下,提出新的历史数据存储方案。

3.在解决这一问题的过程中,许多新技术与新思路涌现,包括 Sharding,DAS,Verkle Tree,DA 中间组件等。他们分别从减少数据冗余与提高数据校验效率等途径出发,尝试优化 DA 层的存储方案。

4.现阶段的 DA 方案从数据存储位置出发大体分为两类,分别是主链 DA 与第三方的 DA。主链 DA 分别从定期清理数据与对数据分片存储的角度出发,以减小节点存储压力。而第三方 DA 设计需求均旨在为存储服务,对于大量的数据有合理的解决方案。因而主要是在单链兼容性与多链兼容性之间进行 trade-off,提出了主链专用 DA,模块化 DA,存储公链 DA 三种解决方案。

5.支付型的公链对于历史数据安全有极高的要求,适合使用主链作为 DA 层。不过对于运行了很长时间而又有大量矿工在运行网络的公链,采取不涉及共识层又兼顾安全性的第三方 DA 会更加合适。而综合性的公链更适合使用数据容量更大,成本更低又兼顾安全性的主链专用 DA 存储。但是考虑到跨链的需求,模块化 DA 也是不错的选项。

6.总体上来说,区块链正在朝减少数据冗余以及多链分工的方向发展。

1. 背景

区块链作为分布式账本,需要在所有节点上都对历史数据作一份存储,以确保数据存储的安全与足够去中心化。由于每一次状态变动的正确性都与上一个状态(交易来源)有关,为了确保交易的正确性,一条区块链原则上应当存储从第一笔交易产生到当下交易的所有历史记录。以以太坊为例,即便按照平均每个区块 20 kb 的大小估计,当前以太坊区块的总大小也已达到 370 GB,而一个全节点除了区块本身,还要对状态和交易收据记录。算上这部分,单个节点存储总量已超过 1 TB,这使得节点的运营向少数人集中。

Kernel Ventures:一文解析 DA 和历史数据层设计

以太坊最新区块高度,图片来源:Etherscan

2. DA 性能指标

2.1 安全性

区块链相对于数据库或者链表存储结构而言,其不可篡改性来自于可以通过历史数据对新产生的数据进行校验,因而确保其历史数据的安全性是 DA 层存储中首先要考虑的问题。对于区块链系统数据安全性的评判,我们往往从数据的冗余数量和数据可用性的校验方式进行分析

冗余数量:对于区块链系统中数据的冗余,其主要可以起到以下作用:首先,如果网络中冗余数量越多,当验证者需要查看某个历史区块中的账户状态以对当下某笔交易进行验证的时候,其可以得到最多的样本进行参考,从中选取被大多数节点记载的数据。而在传统的数据库中,由于只在某个节点以键值对的形式存储数据,要更改历史数据只用在单一节点进行,攻击成本极低,理论上说,冗余数量越多,数据的可信程度越高。同时,存储的节点越多,数据相应越不容易丢失。这点也可以对比存储 Web2 游戏的中心化服务器,一旦后台服务器全部关闭,就会出现彻底闭服的情况。但是这个数量也并非越多越好,因为每一份冗余都会带来额外的存储空间,过多数据冗余会给系统带来过大的存储压力,好的 DA 层应该选择一种合适的冗余方式在安全性和存储效率中取得平衡。

数据可用性校验:冗余数量保证了网络中对于数据足够多的记录,但是要使用的数据还要对其准确性和完整性进行校验。现阶段的区块链中常用校验方式是密码学的承诺算法,既保留一个很小的密码学承诺供全网记录,这个承诺由交易数据混合得到的。而要检验某条历史数据的真实性时需要通过该数据还原密码学承诺,检验这个还原得到这个密码学承诺是否和全网的记录一致,如果一致则验证通过。常用的密码学校验算法有 Merkle Root 和 Verkle Root。高安全性的数据可用性验证算法只需要很少的校验数据,可以快速的对历史数据进行校验。

2.2 存储成本

在确保了基础安全性的前提下,DA 层下个需要实现的核心目标便是降本增效。首先是降低存储成本,在不考虑硬件性能差异的情况下,也就是降低存储单位大小数据造成的内存占用。现阶段区块链中降低存储成本的方式主要是采取分片技术以及使用奖励式存储以确保数据被有效存储基础上降低数据备份数量。但是从以上改进方式不难看出,存储成本与数据的安全性存在博弈关系,降低存储的占用也往往意味着安全性的下降。因而一个优秀的 DA 层需要实现存储成本与数据安全性之间的平衡。此外,如果 DA 层如果是一条单独的公链的话,还需要通过尽量减少数据交换所经历的中间过程以减少成本,在每一次中转过程都需要留下索引数据以供后续查询时的调用,因而越长的调用过程就会留有越多的索引数据而增加存储成本。最后,数据的存储成本直接和数据的持久性直接挂钩。一般情况下,数据的存储成本越高,公链越难以对数据持久化存储。

2.3 数据读取速度

实现了降本,下一步便是增效,也就是当需要使用数据时将其迅速从 DA 层中调用出来的能力。这个过程涉及两个步骤,首先是搜寻存储数据的节点,这个过程主要是对于未实现全网数据一致性的公链而言的,如果公链实现了全网节点的数据同步,便可以忽略这一过程的时间消耗。其次,现阶段主流的区块链系统,包括 Bitcoin,Ethereum,Filecoin 中,节点存储方式为 Leveldb 数据库。在 Leveldb 中,数据以三种方式存储。首先是即时写入的数据会存储在 Memtable 类型文件中,当 Memtable 存储满了后则会将文件类型从 Memtable 改为 Immutable Memtable。这两种类型的文件均存储在内存中,但是 Immutable Memtable 文件无法再做更改,只能从中读取数据。IPFS 网络中使用的热存储就是将数据存储在了这个部分,当要调用时就可以快速从内存读取,但是一个普通节点的移动内存往往都是 GB 级别,很容易就会写慢,并且当节点出现宕机等异常情况后,内存中的数据便会永久丢失。如果希望数据持久存储,则需要以 SST 文件的形式存储到固态硬盘(SSD),但读取数据时需要先将数据读到内存,因而大大降低数据索引速度。最后,对于采取了分片存储的系统,其数据还原时需要向多个节点发送数据请求并进行还原,这个过程也会降低数据的读取速度。

Kernel Ventures:一文解析 DA 和历史数据层设计

Leveldb 数据存储方式,图片来源:Leveldb-handbook

2.4 DA 层通用性

随着 DeFi 的发展,以及 CEX 的种种问题,用户对于去中心化资产跨链交易的要求也不断增长。而无论是采取哈希锁定,公证人还是中继链的跨链机制,都避免不了对两条链上历史数据的同时确定。这个问题的关键在于两条链上数据的分离,不同的去中心化系统中无法实现直接沟通。因而现阶段通过改变 DA 层存储方式提出了一种解决方案,既将多条公链的历史数据存储在同一条可信的公链上,验证的时候只需要在这条公链上调用数据即可。这需要 DA 层能够与不同类型的公链建立安全的通信方式,也就是 DA 层具有较好的通用性。

3. DA 相关技术探索

3.1 Sharding

  • 免责声明:数字资产交易涉及重大风险,本资料不应作为投资决策依据,亦不应被解释为从事投资交易的建议。请确保充分了解所涉及的风险并谨慎投资。OKEx学院仅提供信息参考,不构成任何投资建议,用户一切投资行为与本站无关。

    加⼊OKEx全球社群

    和全球数字资产投资者交流讨论

    扫码加入OKEx社群

    相关推荐

    industry-frontier