IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 区块链 -> 以太坊EIP-1559总结 -> 正文阅读

[区块链]以太坊EIP-1559总结

一、概要

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


关注公众号

获取更多干货分享

  区块链 最新文章
盘点具备盈利潜力的几大加密板块,以及潜在
阅读笔记|让区块空间成为商品,打造Web3云
区块链1.0-比特币的数据结构
Team Finance被黑分析|黑客自建Token“瞒天
区块链≠绿色?波卡或成 Web3“生态环保”标
期货从入门到高深之手动交易系列D1课
以太坊基础---区块验证
进入以太坊合并的五个数字
经典同态加密算法Paillier解读 - 原理、实现
IPFS/Filecoin学习知识科普(四)
上一篇文章      下一篇文章      查看所有文章
加:2021-09-01 11:58:35  更:2021-09-01 11:59:16 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/25 18:33:17-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码