概述
一、概要
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所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复