# EIP1559如何设置合理的Gas

By [Alex](https://paragraph.com/@alex-2) · 2022-10-19

---

EIP-1559已经运行有一段时间了，不过大部分的库还没有自动支持。这里就以Ethers.js为例说明如何设置新的`Gas`参数。

一般来说，如果你不设置参数，就像这样直接提交交易

    await contract.connect(account).method(params...);
    

你得到的应该是老的交易格式（type=0），即非EIP-1559类型的交易。

![默认交易类型](https://storage.googleapis.com/papyrus_images/898158018f17f12b55fbca6ce97ec4bd209542e3d9519acc062b75f2ee389a3e.png)

默认交易类型

而想要得到EIP-1559类型的交易（type=2），需要明确设置参数`maxFeePerGas`和`maxPriorityFeePerGas`。

    await contract.connect(account).method(params..., {
                maxFeePerGas: maxFeePerGas,
                maxPriorityFeePerGas: maxPriorityFeePerGas,
    });
    

带上这两个参数之后，交易的type会变成2。

![EIP-1559交易](https://storage.googleapis.com/papyrus_images/f6ecce915ede73c7b3a950972d08d89fc3c0115f57a3eb7eff6867ac224b97d7.png)

EIP-1559交易

接下来的问题是，如何动态获取网络的拥堵情况，设置合理的值？

答案是使用`feeData`

[https://docs.ethers.io/v5/single-page/#/v5/api/providers/provider/-%23-Provider-getFeeData](https://docs.ethers.io/v5/single-page/#/v5/api/providers/provider/-%23-Provider-getFeeData)

    let feeData = await ethers.provider.getFeeData();
    console.log(feeData);
    

    {
      lastBaseFeePerGas: BigNumber { value: "36" },
      maxFeePerGas: BigNumber { value: "1500000072" },
      maxPriorityFeePerGas: BigNumber { value: "1500000000" },
      gasPrice: BigNumber { value: "10000014" }
    }
    

`feeData`获得的数值即为推荐值，如果不太怕拥堵，可以直接使用。

    let feeData = await ethers.provider.getFeeData();
    await contract.connect(account).method(params..., {
                maxFeePerGas: feeData.maxFeePerGas,
                maxPriorityFeePerGas: feeData.maxPriorityFeePerGas,
    });
    

当然，如果是在抢购东西，也可以考虑酌情增加。

---

*Originally published on [Alex](https://paragraph.com/@alex-2/eip1559-gas)*
