背景介绍
2020 年 10 月,Vitalik 发布了文章《以 Rollup 为中心的以太坊路线图》,确定了为 Layer2 Rollup 扩容协议保驾护航的基本思路:将执行层和数据层分离,以太坊共识层为其提供安全保障。随后,以太坊分片技术也基于这个路线图进行了几次变更。
围绕扩容和分片,以太坊社区逐渐浮现出了模块化结构、数据可用性、EIP-4844、EIP-4488、data blob、Danksharding 等各种术语和提案让人应接不暇。这些术语之间的关系是什么,又是如何提高 Rollup 的扩容效率的?
在 ECN(Ethereum Community Network)podcast 第 2 期中,imToken Labs 的研究员和开发者、前以太坊基金会研究团队开发者 Nic Lin 分享了 EIP-4844 的基本逻辑,以及它与以太坊分片技术开发路线、Rollup 扩容之间的关系。
以下为部分内容摘录,详情可搜索 ecnpodcast.fireside.fm 进行了解。
内容摘录
问题一:在 Rollup 的语境下, DA(Data Availability)指什么,为什么 Rollup 需要上传 DA 到 Layer1?
Nic Lin:如果目前我们已经熟悉 Layer1 这条链,那其实根本不会意识到 DA 这个问题。因为资料本身就是全都在链上,我们每个区块、每一笔交易的资料在每个节点都可以看到,所以我们根本不会意识到资料不可用这个问题。
但是,比如说 Layer1 的区块时间是固定的 12 秒、13 秒,它的 Gas limit 就像现在是 3,000 万,最多就是这样。所以如果你想扩容的话,不可能让所有 DApp 和团队都把交易在 Layer1 执行。
所以,从很早以前就讲的 Scaling solution 就是我们进到 Layer2,把执行和资料等搬到链下去,而不是在 Layer1,因为 Layer1 太贵太慢,要跟大家去竞争,资源很稀少。过去就有很多不同的扩容方案,比如 Sidechain、Plasma 和 Rollup,中间其实有几个关键的改进,我习惯把 Sidechain、Plasma 和 Rollup 看作一个演进的路线图。
相比来说,Sidechain 现在是最不安全的,Plasma 针对 Sidechain 的改变就是它把中心化权力很大的 operator 的角色去掉并换成了智能合约。而 Rollup 针对 Plasma 解决的是资料不可用的问题。
Plasma 其实把资料都是交给 operator,operator 虽然不能随意地把钱拿走,或者说它如果做坏事的话,你可以自己离开 Plasma,这是它的优点,因为它把这些规则都写在了智能合约里面。但是如果 operator 今天把资料藏起来的话,你就不能自己来产生一些证明。比如在 Plasma 上有多少钱,因为你需要通过实际的交易资料,才能计算出现在有多少钱,但如果这些资料都在一个中心化角色手上的话,还是有攻击的风险。
Rollup 的解决方法就是把资料都上传到 Layer1,但并不在 Layer1 上去执行交易,而是把交易的执行搬到链下,即搬到 Layer2。
问题二:EIP-4844 所引入的 shard blob transaction 有什么特点?
Nic Lin:基本上 shard blob transaction 就是为了 Rollup 所设计的。由于 calldata 的目的不符合 Rollup 的目的,成本又太高,因此对 Rollup 来说,设计一个新的交易类型,专门给 Rollup 来存放他们的资料。
所以在 shard blob transaction 里面,它比一般的 transaction 多了一个 blob 栏位,用于让 Rollup 来存放它们的资料。这个 blob 有以下两个特性:
blob 的资料不像 calldata 一样能够被合约存取到;
blob 的资料有一个保存期限,它不会像 calldata 一样,只要资料存放到 calldata,所有节点就必须要永远保存它。
问题三:在 Devcon VI 的一场由 Ethereum Magicians 负责的协议路线图会议中,Vitalik 提到 EIP-4844 引入了点取值和 blob 的概念,这使得 Layer2 可以设置一次代码后就能写入并发布……以及无论我们以后如何胡乱设计分片,只要符合参数,Rollup 都可以轻松做一些调整而不再需要做重新架构。怎么理解他所说的这一点,Rollup 方案集成这个交易类型之后会对它有一些什么长期的影响?
Nic Lin:他讲的可能是 proto-danksharding 是 danksharding 的一个准备。当切换到danksharding 后,proto-dansharding 已经为 Layer2 做好了一些必要的准备,Layer2 其实不会受影响。
不管你未来怎么设计 Layer1 ,做到怎样的 sharding、danksharding 或者有什么新的 sharding 出来,无论 Layer1 怎么改变,其实对 Layer2 来说都没有任何影响。只需要你确保这些资料真的可以用就好了。
所以,我们今天先在 proto-danksharding 里面做好了一些改变,这些改变就包含引进 shard blob transaction,让 Rollup 知道说,你未来不必再把资料放到 calldata,而是直接放到 blob 里面就好了。剩下就是,我会帮你确保说 blob 都是可用的。
未来 Layer1 怎么去改变设计,我只要能确保 blob 资料是可用的,Layer2 就不用再做任何改变了,因为你已经提前做好了改变,只需把资料放到 blob 就好。应该说 Layer2 就是 future-proof 的,你不必担心说还要搭配未来 sharding 设计,再去看把你的资料上传到哪里,以及会不会有任何安全性的影响。