我是靠谱客的博主 愉快学姐,最近开发中收集的这篇文章主要介绍以太坊EIP-1559总结一、概要二、动机三、相关细节四、EIP-1559的交易费系统行为五、如何影响用户行为解决拥堵六、总结References,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

一、概要

EIP-1559主要提出了区块BaseFee的概念,有以下特点:

(1)basefee是动态变化的,用来指定gas的基础费用

(2)变化幅度和方向由一个公式算出,和之前区块的gas实际消耗以及gas target值(gasLimit / ELASTICITY_MULTIPLIER 乘数)决定

(3)当区块的gas目标值变大时,basefee会变大,否则会变小

(4)basefee的手续费会销毁,不会给矿工

(5)交易规定了用户愿意支付给矿工的每个gas的最高费用,以便于让矿工优先打包自己的交易(priority fee)

(6)交易规定了用户愿意支付的每个gas的最大费用(max fee,包含basefee + priorityfee)

EIP-2718中规定了这种交易的具体格式:

0x02 || rlp([chain_id, nonce, max_priority_fee_per_gas, max_fee_per_gas, gas_limit, destination, amount, data, access_list, signature_y_parity, signature_r, signature_s])

二、动机

以往的以太坊交易费的模式完全是一种激励模型,如果用户指定更高的gas Price,就会被矿工优先打包交易,这么做会造成一些问题:

(1)交易费用的波动和交易的社会成本不匹配

(2)造成用户不必要的延迟等待:每个区块的gas Limit是有限的,交易可能需要等待好几个区块才能被纳入。现在没有一个机制让区块的大小可以动态变化。

(3)第一次拍卖效率低下:当前的方法中,用户需要指定最高的gasPirce,矿工选择最高的打包。这种交易费竞价机制导致交易费不好预估,并且用户往往付出了比真实成本更高的费用。

(4)当区块奖励消失后,区块链会变得不稳定

因此,在EIP-1559中,引入了Basefee的概念,它可以随着网络的拥堵情况而动态变化。当某个区块的gas目标值被耗尽,说明这时候交易比较拥堵,basefee会逐渐上涨,反之,如果现在不拥堵,则basefee会逐渐下降。这个机制下,basefee的改变是确定的(通过公式得出),所以钱包应用可以自动给用户设置非常可信的gas fee,大多数情况下不再用自己设置gas fee了。

对于大多数用户来说,basefee会被钱包自动设置,并指定一笔priorityfee,这个fee是为了激励矿工的,也是会自动被设置。用户可以自行设置max fee,以限制最大的fee支出。

这个fee系统中,矿工拿不到basefee,因为basefee会被销毁,矿工只能拿到priorityfee。

三、相关细节

https://eips.ethereum.org/EIPS/eip-1559 中有对应的伪代码。

3.1 gas target计算

从上面描述看,涉及到上一个区块的gas target值 = gasLimit / ELASTICITY_MULTIPLIER 乘数

计算代码如下:

ELASTICITY_MULTIPLIER = 2 
parent_gas_target = self.parent(block).gas_limit // ELASTICITY_MULTIPLIER 
parent_gas_limit = self.parent(block).gas_limit

3.2 basefee的计算

  • 刚分叉,则basefee等于初始值
  • 如果父区块用掉的gas和父区块的gas目标值相等,则basefee = 父区块的basefee
  • 如果父区块用掉的gas大于目标值,则basefee = 父区块basefee + delta,实际上下个区块的asefee相当于增加了
  • 如果父区块用掉的gas小于目标值,则basefee = 父区块basefee - delta,实际上下个区块的basefee相当于减少了

总结一句:

  • 如果父区块用掉的gas大于父区块gasLimit值的1/2,则下个区块的basefee就会增加,否则就会减少。
  • 当前区块的gasLimit = 所有交易的gasLimit总和 = gas target * ELASTICITY_MULTIPLIER
  • basefee变化的公式在下面伪代码里找,有个公式决定其变化,公式的输出都是固定的

伪代码如下:

# check if the base fee is correct

// 刚分叉,则basefee等于初始值
if INITIAL_FORK_BLOCK_NUMBER == block.number:
	expected_base_fee_per_gas = INITIAL_BASE_FEE

// 如果父区块用掉的gas和父区块的gas目标值相等,则basefee = 父区块的basefee
elif parent_gas_used == parent_gas_target:
	expected_base_fee_per_gas = parent_base_fee_per_gas

// 如果父区块用掉的gas大于目标值,则basefee = 父区块basefee + delta,实际上下个区块的asefee相当于增加了
elif parent_gas_used > parent_gas_target:
	gas_used_delta = parent_gas_used - parent_gas_target
	base_fee_per_gas_delta = max(parent_base_fee_per_gas * gas_used_delta // parent_gas_target // BASE_FEE_MAX_CHANGE_DENOMINATOR, 1)
	expected_base_fee_per_gas = parent_base_fee_per_gas + base_fee_per_gas_delta

// 如果父区块用掉的gas小于目标值,则basefee = 父区块basefee - delta,实际上下个区块的basefee相当于减少了
else:
	gas_used_delta = parent_gas_target - parent_gas_used
	base_fee_per_gas_delta = parent_base_fee_per_gas * gas_used_delta // parent_gas_target // BASE_FEE_MAX_CHANGE_DENOMINATOR
	expected_base_fee_per_gas = parent_base_fee_per_gas - base_fee_per_gas_delta

assert expected_base_fee_per_gas == block.base_fee_per_gas, 'invalid block: base fee not correct'

四、EIP-1559的交易费系统行为

(1)网络不拥堵时

也就是区块gaslimit低于gas target时,用户只需要指定basefee以及最低限度的priorityfee即可,用户只需要接受basefee即可完成这笔交易,总之这种情况下就是定死一个价格,用户能接受就接受,不接受就不能发起交易

(2)网络拥堵时

也就是当有gasLimit超过gas target(gas target = gasLimit // ELASTICITY_MULTIPLIER),basefee就会开始比父区块增加。直到后续有某个区块的gas Limit为小于等于gas target的区块被挖出,basefee才会减少。如果区块大小已经有一段时间高于 1000 万 Gas,那交易费可能会很高,这最终将使得用户交易需求的回落。

(3)basefee增加速度

属于指数级增长:

(4)basefee退化到竞价模式

当区块接近2000w的gasLimit,预计会有大量的用户利用priorityfee来让矿工优先打包自己的交易,这时候实际上整个fee系统退化到之前的竞价模式。

即便是这种情况下,basefee也能很好的被预测,增加的图如下:

五、如何影响用户行为解决拥堵

当拥堵出现的情况,肯定是接连出现一系列大区块(即区块的gasLimit > gas target),这时候,basefee会指数级别增长。

当拥堵出现一段时间后,basefee会变得特别高,这时候用户很可能因为basefee太高而放弃交易,等待basefee回落后再交易。

当拥堵消失,basefee就会重新回落回来。

六、总结

EIP-1559引入basefee并没有解决拥堵的问题,也并没有提升整个系统的tps。

我个人理解,basefee这个东西仅仅是把拥堵时段fee的增加给可预测化了,通过增加basefee来限制用户行为,解决拥堵(因为basefee太高很多人就不愿意交易了)。

实际上,之前竞价模式下,gasPrice也会很高,也可以阻止一部分用户进行交易。我理解basefee机制仅仅是把之前无序的竞价gasPrice的模式变得更加有序可预测而已。

References

[1] EIP-1559官方文档:https://eips.ethereum.org/EIPS/eip-1559


关注公众号

获取更多干货分享

最后

以上就是愉快学姐为你收集整理的以太坊EIP-1559总结一、概要二、动机三、相关细节四、EIP-1559的交易费系统行为五、如何影响用户行为解决拥堵六、总结References的全部内容,希望文章能够帮你解决以太坊EIP-1559总结一、概要二、动机三、相关细节四、EIP-1559的交易费系统行为五、如何影响用户行为解决拥堵六、总结References所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(76)

评论列表共有 0 条评论

立即
投稿
返回
顶部