当前位置:主页 > 区块链新闻 > 正文

tp钱包下载入口|LXDAO技术详解:坎昆升级

以太坊在完成上海升级后,成功从PoW过渡到了PoS协议。另一个大的升级是EIP-4844,也称为Proto-Danksharding,旨在提高基于以太坊rollup的可扩展性,测试环境于2024年1月17日开始进行。EIP-4844也为全扩容方案Danksharding做好了准备。这次升级的重点是对EIP-4844升级进行深入分析,分析了EIP-4844升级带来的影响。EIP-4844引入了blob交易,动态调整gas费,提高Layer2的吞吐量,降低gas费。在DankSharding完成后,以太坊主网将成为Layer2的DA层,负责性能提升。#长话短说#以太坊完成升级,引入EIP-4844升级,提高可扩展性,降低gas费,准备全扩容方案Danksharding。EIP-4844引入blob交易,提高Layer2吞吐量。完成后以太坊主网将成为Layer2的DA层。2024年1月17日测试环境升级,预计3-4月主网升级。#坎昆升级简介#EIP-4844升级内容深入分析,影响分析。EIP-4844带来的动态调整blob费用,提高Layer2吞吐量,降低gas费。#影响#以太坊主网成为Layer2的DA层。DankSharding完成后,以太坊主网负责性能提升。#总结#EIP-4844升级使得以太坊走向区块链方向,将成为Layer2的DA层。DankSharding的完成将进一步提升性能。

长话短说

在以太坊完成上海升级后,以太坊已成功从PoW过渡到了PoS协议。以太坊路线的另一个大的升级是EIP-4844,也被称为Ptoto-Danksharding,这次升级旨在提高基于以太坊rollup的可扩展性,自2024年1月17日开始进行测试环境升级。本次升级也为以太坊的全扩容方案Danksharding做好了准备工作。论文将介绍坎昆升级的内容,其中重点对EIP-4844升级进行深入分析,同时也分析了EIP-4844升级所带来的影响。

本文中代码使用geth(执行层)和prysm(思想层)的实现。

#01坎昆升级简介

坎昆升级最近有了新的进展,确定会在2024年升级,测试环境将在1月17日进行,主网升级预计会在2024年3-4月。作为以太坊生态的下一个主要叙述,此次升级肯定会受到极大关注。

坎昆(Cancun)是墨西哥的一个城市,也是Devcon3的举办地,作为以太坊升级的传统,这次执行层的升级代号就是坎昆。这次升级将会涉及到辩论层的升级,引导层的升级代号是 Deneb,完整的升级代号是这两个代号的结合:Dencun = Deneb +​​ Cancun。

这次升级包含的内容很多,执行层和思想层分别需要实施的EIP如下:

  • 执行层
  • EIP-1153
  • EIP-4788
  • EIP-4844
  • EIP-5656
  • EIP-6780
  • EIP-7516

  • 磋商层
  • EIP-4788
  • EIP-4844
  • EIP-7044
  • EIP-7045
  • EIP-7514

这次升级的主角就是EIP-4844,其他的升级要么是为它服务,要么是一些小修改小补。在本文中,我们重点来研究EIP-4844升级的细节,以及升级之后带来的影响。

EIP-4844也被称为Proto-Danksharding,这个名字来源于Protolambda和Dankrad Feist研究员。以太坊最终的数据扩展方案是Danksharding,EIP-4844是Danksharding的前期升级。这次升级的主要目的是提升rollup层的可扩展性,并且为后续的DankSharding升级做好准备。

#02

了解坎昆升级,你需要知道

2.1 数据可用性(DA)

在区块链中,不要信任,要验证是一个基本的原则。每个区块链节点都可以保存完整的数据,可以通过重新执行交易来确定所有数据的真实性,通过独立地验证这些数据,就不用管其他的节点是否在作恶。

数据可用性是指在验证区块是否正确时,所需要的数据能够公开可获取。对于目前的以太坊架构来说,这个很容易实现,因为每个节点都可以保存所有的数据,缺少数据的区块会被丢弃,对于所有的节点来说,数据是可用的,这是区块链的一个特性,数据可用性是区块链的安全保障。

对于Layer2 rollup,能证明区块合法有效的数据都会上传到以太坊,它们的数据可用性需要遵循以太坊来保证。

于是就带来了两个问题:

  • 所有的Layer2都向以太坊提交坊数据,会产生gas费持续保持在高位
  • 以太坊本身的存储能力有限,否定了Layer2的发展

以太坊需要一种不牺牲数据可用性,同时又能够让Layer2向以太坊用一系列的成本投入更多交易的方案,让Layer2的潜力发挥出来。

EIP-4844 是这个方案的前半部分,通过增加一种新的 blob 交易,blob 交易中的数据存储成本队列,Layer2 可以将交易预算,通过 blob 交易部署到以太坊,从而增加并发、降低成本。但EIP-4844带来的提升是有限的,因为blob数据依然会传播到所有的节点,得出节点带来大量的存储和网络成本,所以这次升级中,每个区块只能支持6一个blob。

Dankshrding是这个方案的后半部分,在完成DankSharding之后,区块每个链支持的blob可能会到64个,这样Layer2基本就没有什么限制了。但是在这个升级之后,大部分以太坊节点就不可能了独立的存储这些数据了,大多数人承担不了网络和存储的成本。如果节点不能完整的存储数据,那么数据DA要怎么来保证呢?

以太坊

检查数据可用性的方式有很多种,但DAS(数据可用性采样)是最去中心化的一种,DankSharding中使用的也是这种。通过DAS,完整的数据不用在节点之间传播,只需要随机检查部分数据的KZG证明就可以保证数据的可用性。

基于同样的原因,只有区块链的Builder需要获取所有的数据,创建好区块之后,其他的Proposer不用下载所有的数据,只需要通过DAS来验证区块是否有效,这个功能升级就是PBS(Proposer) -builder分离)。除了提高数据的处理效率,其他的Proposer也看不到交易的内容,这在一定程度上还增加了抗审查能力。

2.2 克孜格

KZG(Kate Zaverucha Goldberg)是一个零知识证明系统,EIP-4844中引入了KZG,作为blob验证和证明生成的一部分。每一个blob都会生成一个对应的KZG承诺,为后续的DankSharding升级做准备。

在EIP-4844升级后,blob数据还是会在各个节点之间传播。但是在完全的DankSharding升级之后,blob的数据量大量增加,节点之间不能再全量地同步blob数据。节点之间会通过KZG和DAS来检查数据的DA,是DankSharding实现的基础。

#03

爆炸与L2

EIP-4844升级中已经完成的工作:

  • 实现 blob 交易以及 blob 数据的 KZG 处理
  • 实现执行层&意见层逻辑,以及执行层和意见层交互接口的修改
  • blob交易自动调整gas的机制

在实施 DankSharding 之前,还需要完全完成的工作:

  • DAS 实施
  • PBS 实施

EIP-4844 完成了后续 DankSharding 升级中的大部分基础工作。剩余的升级,只需要通过升级共识层来完成,不需要执行层和 rollup 的参与,用户和开发者对后续的升级无感。

3.1 blob 交易详解

在 blob 交易出现之前,Layer2 的交易数据通过 calldata 来存储,calldata 是合约调用中确定的函数参数,是有趣的,并且会被永久存储到链上,blob 交易中的数据存储在额外的空间中中,并且有一段时间后被删除。

blob 存储和 calldata 的区别:

以太坊

EIP- 4844 在执行层增加了 blob 的交易类型:

const ( LegacyTxType = 0x00 AccessListTxType = 0x01 DynamicFeeTxType = 0x02 BlobTxType = 0x03 // 新增的 blob 交易)

blob 的交易结构如下:

//geth core/types/tx_blob.go 类型 BlobTx struct { //…

Blob 哈希值 [][]byte // 相比于 EIP-1559 的交易,多了一个 Sidecar 参数 Sidecar *BlobTxSidecar `rlp:”-“`

//…}

// Sidecar 结构type BlobTxSidecar struct { Blobs []kzg4844.Blob // blob 矿池所需的 Blob []kzg4844.Commitment // blob矿池所需的承诺 []kzg4844.Proof // blob矿池所需的证明}

// 每个 blob 原始数据最大 128 kbtype Blob [131072]字节

// 生成的KZG承诺,占48字节类型承诺 [48]字节

类型证明 [48]字节

相比于 EIP-1559 交易,多了一个 Sidecar 参数,其中存放的就是 blob 数据,这些 blob 不会被备份进入执行层的区块。其中每个 blob sidecar 包含三部分数据,包括 blob 的原始数据而经过KZG处理之后的数据,BlobHashes 中存储 Sidesar 中 Commitments 的哈希值。

blob 交易中,blob 数据存储部分的价格是单独计算的,而且会随之前 blob 中 blob 的使用情况而波动,如果上一个 blob 中 blob 的使用超过了 blob 最大限制的 50%,那么费用就会上调,如果低于50%,那么费用就会降低:

//geth core/types/transaction.go func CalcBlobFee(excessBlobGas uint64) *big.Int { return fakeExponential(minBlobGasPrice, new(big.Int).SetUint64(excessBlobGas), blobGaspriceUpdateFraction)}

// fakeExponential 使用 // 泰勒展开式逼近因子 * e ** (分子/分母) fakeExponential(factor, numerator, denominator *big.Int) *big.Int { var ( output = new(big.Int) accum = new(big.Int).Mul(因子, 分母) ) for i := 1; Accum.Sign() > 0; i++ { 输出.Add(输出, 累加)

Accum.Mul(accum, 分子) Accum.Div(accum, 分母) Accum.Div(accum, big.NewInt(int64(i))) } return output.Div(output, 分母)}

计算支出限制交易中blobgas的最大:

//geth core/types/transaction.gofunc (tx *BlobTx) blobGas() uint64 { return params.BlobTxBlobGasPerBlob * uint64(len(tx.BlobHashes)) }

计算最终交易的费用:

//geth core/types/transaction.gofunc (tx *Transaction) Cost() *big.Int { Total := new(big.Int).Mul(tx.GasPrice(), new(big.Int).SetUint64( tx.Gas())) if tx.Type() == BlobTxType { Total.Add(total, new(big.Int).Mul(tx.BlobGasFeeCap(), new(big.Int).SetUint64(tx.BlobGas) ()))) } Total.Add(total, tx.Value()) 返回总计}

最终blob交易的费用由三部分组成:交易gas费+发送的价值+blob费用。

在EIP-4844的升级中,每个区块中标记的blob数量不超过6个。后续完成DankSharding升级后,每个区块中标记的blob数量可以划分64个。

执行层并不会存储这些blob数据,会在构建区块的时候,通过API将Blob数据传输到决策层:

// geth beacon/engine/types.gotype ExecutionPayloadEnvelope struct { ExecutionPayload *ExecutableData `json:”executionPayload” gencodec:”required”` BlockValue *big.Int `json:”blockValue” gencodec:”required”` BlobsBundle *BlobsBundleV1 `json :”blobsBundle”` 覆盖 bool `json:”shouldOverrideBuilder”`}

类型 BlobsBundleV1 结构 { 承诺 []hexutil.Bytes `json:”commitments”` 证明 []hexutil.Bytes `json:”proofs”` Blob []hexutil.Bytes `json:”blob”`}

通知层这些交易之后,将 blob 收到的 KZG 承诺备份到链上,并将 blob 原始数据分开存储:

// prysm 类型 BeaconBlockBody 结构 { //… blobKzgCommitments [][]byte // blob 的 Kzg 数据}

共识层会负责 Blob 数据的可用性,验证的逻辑都被封装在 isDataAvailable 方法中。目前的验证实现是先验证本地数据库中是否可以找到完整的 blob 数据,如果找不到,则通过特定的渠道去获取,直到获取成功或者报错。后续Danksharding升级完成后,然后通过另外的方法来实现DAS验证,减少对其他模块的影响。

// prysm/beacon-chain/blockchainfunc (s *Service) isDataAvailable(ctx context.Context, root [32]字节,签名接口。ReadOnlySignedBeaconBlock) error { //…}

在EIP-4844的升级后,blob数据还是会通过八卦协议广播到所有的节点,在完全升级到Danksharding之后,会通过DAS来验证数据的完整性,而不用下载完整的数据。

总结一下,允许新增的 blob 交易用户将一些数据放入 blob 中,blob 数据不会在执行层存储,EVM 也无法读取到这些数据,这些数据会被直接引导到预警层存储,然后广播给其他的议题层要点。

3.2 blob如何影响gas费

从理论上讲,EIP-4844 升级肯定会降低 Layer2 的 Gas 费。因为 blob 的存储费用会比 calldata 队列高,而且一个 blob 中可以承载更多的交易,但实际情况却会更复杂。

EIP-4844 升级中,每个区块中最多可以挂6个blob。但是blob的费用是动态调整的,如果之前一个区块中的blob数量超过了巅峰的50%,大约3个,那么当前这个区块的blob费用就会上涨12.5%,如果低于50%,这个区块的blob费用就会下跌12.5%,所以最后每个区块中的blob数量会维持在最大容量的50%左右。

对于Layer2来说,但是理论上gas费会降低到十分之一甚至超过其中之一,如果链上交易中心化,多个rollup同时向以太坊数据提交,那么blob费用同样暴涨,很难准确估计升级之后的gas费用,这样取决于当时的网络情况。只有等到DankSharding完全升级,每个以太坊区块可以支持到64个blob时才能解决。

另外,一个blob的大小是128kb,大小不能改变,对于交易的工作方来说,即使没有这么多数据,也需要复制一个完整blob的成本。如果一个Layer2上的交易量没有这么大,有可能使用calldata 的成本会很高。当然也可能有多个交易量不太大的 Layer2 中断数据合并后再使用 blob 交易提交。

EIP-4844升级肯定会降低Layer2的gas费,但是同时因为网络和blob交易的使用情况让gas费有比较大的波动。

3.3 blob数据如何存储

EIP-4844的升级某种程度上与比特币的隔离见证(Segwit)升级有点类似,通过额外的存储提升区块链的容量,而不是使用大区块的升级方案。这些额外的数据也需要合适的的存储方式,否则会增加节点的存储成本,降低以太坊网络的去中心化程度。

在EIP-4844升级之后,每个区块中可以有6个blob,如果利用率为50%,每天最多可以有21600个blob,每天会新增2.7G的数据,这样就会得出节点带来大量数据所以这些数据在一定周期之后会从节点上删除,转而使用链下存储,包括Layer2 rollup本身、BitTorrent、区块链浏览器、以太坊门户网络、The Graph、个人等等。

特别是在 DankSharding 完全实现之后,每年可能会增加 40TB 的数据,单个节点上想要存储这些数据基本是不可能的,所以会采用定期删除,但是能迭代找回的方案。

#04

坎昆升级的影响

以太坊的坎昆升级和后续的DankSharding升级本质上还是在给以太坊扩容,在完成扩容的同时,又没有采用大区块的方式,以太坊的区块会在1M以内,这有利于以太坊坊的长期发展,可以让以太坊在较长时间内保持较高的去中心化程度。

坎昆升级可以提升Layer2交易的吞吐量以及降低gas费,甚至有机会将Layer2的其中一种gas fe降低到当前十分之一的水平,各种大规模的应用可能会开始爆发,将更多的Web2用户带入Web3,当然这种情况更有可能在DankSharding完全升级之后出现。

以太坊

同时EIP-4844的升级,也是对升级区块链的肯定,这又继续利好升级区块链的发展。完成这次升级之后,以太坊的功能将会加速转变,越来越多的DAPP会在Layer2层开发,用户也可以直接使用Layer2,以太坊将成为所有Layer2的DA层,成为整个EVM生态安全的守护者。

#05总结

EIP-4844本身并不是一个创新性的升级,对以太坊的用户来说改变并不多,以太坊还是很慢而且很贵。而各种rollup方案总结自理论坊受益,可以说这次升级就是EIP-4844的升级将使以太坊走向区块链的方向,等到Danksharding升级完成之后,以太坊主网就成了Layer2的DA层,Layer2就执行层,负责性能的提升,后续升级的方案应该会不断出现。

版权保护: 本文由 主页 原创,转载请保留链接: http://www.smdsexam.com