数据可用性在以太坊的升级角色是用来保存或者上传整个 Rollup 的所有交易数据。
嘉宾:QI ZHOU,EthStorage 创始人
整理:aididiaojp.eth,Foresight News
本文为 Web3 青年学者计划中 EthStorage 创始人 Qi ZHOU 视频分享的文字整理。Web3 青年学者计划由 DRK Lab 联合 imToken 和 Crytape 共同发起,会邀请加密领域中知名的青年学者面向华语社区分享一些最新的研究成果。
大家好,我是 Qi ZHOU,2018 年全职进入 Web3 行业,之前在谷歌等大厂做分布式系统开发,目前主要的工作集中在以太坊数据可用领域。我们今天的主题是《EIP-4844:开启以太坊数据可用的大门》。首先我会去介绍一下什么是数据可用,然后在数据可用的基础上介绍一下 EIP-4844 以及它的一些应用场景,最后再做一些总结。
EIP-4844 是以太坊坎昆升级中最主要的升级,受到了很多开发者甚至整个以太坊社区的关注。那么我们需要它解决什么问题?为什么它对接下来整个以太坊 2.0 升级路线图非常重要?要回答这两个问题,我们首先要从数据可用的角度去理解以太坊 2.0 主要做什么事情?
数据可用(Data Availability)的简写是 DA,它实际是以太坊 2.0 非常重要的一环。对于 DA 的定义有很多版本,这里借用 Dankrad 的定义是没有任何一个人能够阻止你去获取数据,尤其这个数据是用户通过交易来提交到 Layer 1 网络。在这个过程中,我们只信任以太坊协议本身,不需要再信任任何额外的协议,当然这需要当前以太坊完成升级后才能达到这样的目标。并且只有在以太坊的本身网络出现问题的时候,用户提交的数据才无法被其他人去访问。我们现在使用的数据上传机制叫做 Gossip 或者是叫广播方式,在 P2P 网络当中,任何一个节点听到了一个新数据的出现,那么这些节点都会去广播。或者是当一个节点听到其他节点拥有一个他不知道的数据的时候,它会相应的去下载。所以在现有的机制下,消息是逐步传递出去的。我们可以通过这种方式去来上传一些用户需要定制的数据。但是大家知道这个是效率非常低的,因为所有的节点都要去把新数据广播给其他节点,有非常多的通信冗余。
以太坊网络希望能够通过一种扩容的方案,使得用户在提交大量的数据的时候,其他节点不需要下载所有区块,也可以验证数据是可用的。大家可以通过一些非常有意思的技术,尤其是基于数据可用的采样,再加上高级的数据编解码的方式,就可以去验证数据在全网都被保存并且可以访问。Danksharding 也是以太坊非常著名的升级方案,它需要实现的目标是能够让每一个区块能够包含 32 兆的数据,并且可以达到 2.66 兆每秒的数据上传速率,这相当于现在以太坊数据上传速率的 18 倍。目前一些包括 GPU 的实现等,技术上还有非常大的改进空间,除了以太坊,也有很多其他项目也在构建它们的 DA 系统。
以太坊的升级路线是以 Rollup 为中心的,DA 在以太坊的升级角色是用来保存或者上传整个 Rollup 的所有交易数据。
Optimistic rollup 是 Rollups 的一种主要方式。Optimistic rollup 希望所有用户都能够访问到他们在 Layer2 的交易数据,并使得任何人都能够实现无准入的方式去构造它们 L2 的状态。任何一个节点都可以获取从创世区块到当前的所有数据。网络状态包含了每个账户的余额,每个智能合约的状态以及上面的具体数据。如果一个区块的提交者在作恶的时候,他可能会去篡改一些人的余额或者篡改一些 DeFi 协议的一些信息,比如说某一个用户在上面质押的资产数目。如果有人都能够通过重构的方式,并且通过链上交互式挑战的方式去来挑战这个提交者,那么大家就能够去把这个作恶的提交者踢出 Optimistic 的网络,这又叫欺诈证明过程。
能否通过 DA 访问 Layer2 数据,其实更加会影响 Optimistic Rollup 的安全。为了能够让 Layer2 能够继承以太坊的安全性,以太坊需要能够通过整个协议安全机制来上传大量的 Layer2 的数据。ZK rollup 相对会更安全一些,这也是为什么 Vitalik 认为长期来看,对于快速出入金的体验以及安全性来说,ZK Rollup 会有更好的优势。
Layer2 的提交者在上传数据时,还需要提交合法性证明,使得 ZK rollup 的提交者作恶的空间会更低。但还是有可能存在审查攻击,比如一些用户入金了之后,但是提交者不去把用户的一些交易或者退出的一些交易进行处理。我们使用 DA 技术也可以重构整个 Layer2 的状态,并且可以在 L1 强制执行用户的交易。虽然 ZK rollup 安全级别更高,但也需要 DA 技术能够更好进行抗审查方面的工作。
首先很多去中心化存储方案和 DA 在数据安全方面是非常不一样的。很多去中心化存储的数据理论上是被少数数据提供者保护的,但是这个数据并不是由整个网络协议进行保护。除了协议本身,因为首先数据在上链时,我要把相应的哈希交易等数据上链,那么这部分是由协议本身来保护。数据是否能够上传,以及数据能否被下载等,这些的安全性一般都是需要额外的信任机制。以 Arweave 为例,它在数据上传过程中,首先是用户提交一笔交易,这个交易包含了对应的哈希。一旦交易上了 Arweave 之后,用户可以挑选任何一个 Arweave 节点上传刚刚提交易数据,这个数据可以很大。但当我选择的节点不把数据分发到网络,这会导致数据可能就只有一个副本在这个网络里。在这种情况下,比如说我提交的这个交易有两部分,第一部分是交易本身,包括交易哈希,但是不包含数据本身。接下来上传的过程中并不能够让整个网络能够保护我的数据本身不会被攻击。那么这就是大部分如 Filecoin 和 Arweave 等去中心化存储方案的工作机制,我们需要额外的保护机制。在这种情况下,这个数据上传的过程其实是类似一个私人的方式,也就是说我去找几个比较熟悉的数据存储方去上传,并且希望他能够把这个数据分化到网络中。针对高价值的公开的交易数据,比如说像 Layer 2 交易来话,使用去中心化存储是有非常大的隐患。为了能够让大家比较清晰去区分数据可用和去中心化存储的区别,我稍微列了一下比较重要的维度。
第一是信任模型,对于数据可用来说,我的数据是否被整个协议保障的。比如以太坊本身在保证交易和交易数据安全性的同时,可以保证数据是可以被使用的。对于去中心化存储来说首先我要信任协议本身,同时我也要信任一些参与数据上传的数据提供方,那么这是额外的信任保证。第二是数据如何保存。在数据可用中,数据是被所有以太坊验证者保存的,他们都作为参与协议的一部分必须要去保存用户上传的数据,但是是通过一种叫做数据分片的方式来去保存的。在去中心化存储中,是某些数据提供商,但是并不保证所有的网络节点都能去参与数据保存的过程。所以对于数据的安全级别来说的话,数据可用技术更适合公开高价值的数据,去中心化存储更加适合一些私有数据上传。
DA 如果保存大量数据,它并不期望所有的验证者都会长期的保存用户上传数据。EIP-4844 现在只是保存 18 天的数据。那么对于去中心化存储来说,它的存储时间可以更长。比如 Arweave 号称是永久保存,Filecoin 也可以由用户和数据存储方来设置保存时间。
相对于现在的去中心化存储,数据可用一般会用一些编码方式如 Reed-Soloeon Code,它会引入一些额外的数据空间,哪怕丢失了非常多的数据,我们还是可以会恢复整个数据本身。
接下来我们讲一讲为什么会有 EIP-4844,首先大家可以去以太坊的官方网站查看 EIP-4844 的描述。EIP-4844 的描述中有两个非常重要的单词,分别是 simple 和 forward compatible。数据可用 Danksharding 从学术研究到整个的工程实现需要花很长时间,我预计可能还要两三年的时间才能够完全上线。但大家可以看到现在已经有非常多的 Layer2 网络已经在以太坊上在部署运行了。以太坊 DA 整个未来 DA 的数据保存和访问方案跟现在的 calldata 机制不一样,那么就会导致很多应用在未来的时候需要升级合约才能够充分的使用以太坊 DA 技术。去年 V 神表达了对 EIP-4844 进度的关心,他认为如果所有的 Layer2 未来都要根据 DA 升级合约,这是对 Layer 2 来说是非常不友好,因为每次升级合约都是可能会带来一些相应的风险。所以大家都在讨论能不能提供一个最简单的 DA,还是以 Gossip 版本的方式去广播数据。同时我们在这个版本基础上提供一个叫做向前兼容的功能,提供 EVM 的接口使得我们能够向前兼容未来以太坊 DA 的运作模式,这样就使得 Layer 2 的 L1 合约不需要专门针对以太坊 DA 的升级而升级,这也是以太坊在设计推出 EIP-4844 的时候所具有的非常重要的动机,就是希望通过整个协议的升级能够降低应用在使用 DA 技术的复杂度以及安全性。
整个 EIP-4844 有几个组件,可以用几个比较简单的话去描述。首先第一个是 Binary Large Object 叫简写叫 BLOB。它是以太坊 DA 的最小存储单元。再 CALLDATA 中,它是一个数据长度可变的方式,但是在 EIP-4844 的 DA 中,所有数据的大小必须是 128KB 乘以 N。当然我也可以下载或者上传一个自己的小的数据,但是它会自动去占满 128KB 整个的 BLOB 空间。一个交易可以提交多个 BLOB,但是每个 BLOB 是一个固定大小 128KB。这样的话主要是为了便于使用 Reed-Solomon code 编解码。
第二在 DA 网络中,BLOB 是通过一个在 CL 中的 Gossip P2P 网络进行广播和下载,但数据的上传性能其实是没有变化的,它只是解决一个向前兼容的问题。
最后,DA 提供两个接口,后面给大家会更好去解释一下这两个接口的应用。
当 EIP-4844 升级之后,以太坊实际上会有一个叫做数据可用的网络,这是一个新的组件,未来会通过 Danksharding 方式来实现。同时以太坊会有自己的合约,这里以 Rollup Contract 合约为例,当 Layer 2 想要把交易上传到以太坊时,它不会把交易放到 CALLDATA 当中,而是放到新引入的 BLOB,这里 BLOB 本身会包含用户想要上传的交易数据。同时这个 BLOB 本身并不会在以太坊当前的执行层网络去广播,而是放到以太坊 DA 网络里面去进行上传。在交易被执行的过程中,以太坊会保证这个 BLOB 所对应的哈希能够 DA 网络里面能够找到。但是在以太坊 EVM 当中,这些数据本身或者说 BLOB 是无法在里面直接访问得到的,但可以通过一个叫做 DATAHASH OPCODE 指令来获取这些数据所对应的哈希。虽然我访问不到这些数据的内容,我知道数据本身对应的哈希是可以在 DA 网络里面获取的。
在 Optimistic Rollup 挑战时,智能合约需要根据交易内容本身进行相应的挑战。这个时候的挑战交易会把 DA 网络里面对应的 BLOB 拷贝到它的 CALLDATA 中。Rollup 智能合约会检查之前上传的 BLOB 和这个 CALLDATA 是不是一一对应的关系。这个检查过程是使用一个叫做 Point evaluation Precompile 技术来检查一个挑战者所提交的 CALLDATA 对应的 BLOB 数据。
整个过程,Layer 2 网络在使用 DA 进行上传,然后通过 OPCODE 拿到 BLOB 数据所对应的哈希,但是我又不能访问它到它。当我具体需要访问的时候,我再去把 BLOB 数据拷贝到 CALLDATA 进行上传,最后通过上传之后数据我们可以去做具体的挑战。这是使用 EIP-4844 一个基本的模型。
分离数据本身和数据哈希的主要目的是它使得一个节点在不需要下载全部数据的情况下,能够保证通过数据所对应的数据哈希来保证我们可以使用数据,这个就是数据可用的采样技术。
本地运行的以太坊节点在看到一系列数据哈希的时候,怎么判断数据是不是真的存在?一种方式时我把所有数据全部去下载,另外一种方式我只需要通过随机采样。实际上在数据经过编码之后,我只需要对数据进行随机采样就能保证数据是可用的,而数据采样所需要的相对数据量本身来说是一个非常小的数量级。
我们可以通过 EIP-4844 来做一个 Layer2 去中心化存储模型,我们最近提出了一个可以通过数据可用来极大提升整个欺诈证明的交互过程,我们基本上可以通过极少的交互过程来证明 10 亿到 100 亿级别的链上指令计算。
第一是因为 EIP-4844 对整个以太坊协议做了一个非常大的升级,所以对于一些新的指令级别,比如说像我们刚刚提到的 OPCODE 0X49,Solidity 其实没有相应的支持。所以我们开发了一个智库,然后使用 Solidity 语言,并通过 Solidity 汇编的方式来支持新的 OPCODE。这样的话使得大家在没有 Solidity 支持的情况下就能够调用刚才 EIP-4844 数据哈希的指令。
第二个问题是为了降低所有数据存储开销,EIP-4844 会在 18 天左右时间里面会去丢掉数据。我们希望能够借鉴现在去中心化存储的机制能够使得这些数据更加长久甚至永久保存,所以我们构建了 EthStorage 项目,旨在通过以太坊存储费用来设立存储激励机制,并通过我们开发的存储证明算法来把这些存储费用分配给数据提供方。我们希望能够把以太坊的存储能力扩大 1000 倍,同时降低 1000 倍的存储开销。
【免责声明】市场有风险,投资需谨慎。本文不构成投资建议,用户应考虑本文中的任何意见、观点或结论是否符合其特定状况。据此投资,责任自负。