# 关于gas你要知道的几件事：以太坊gas是怎么来的？NFT抢购如何预估gas费用？......

By [onekit.eth](https://paragraph.com/@onekit) · 2022-10-25

---

这两个月NFT市场十分火热，很多新玩家加入了市场。无论是一级市场PublicSale的抢购，还是二级市场Opensea的抢地板，一般来说采用默认的gas设置都是没有任何机会的。但是新人想要获取相关知识还是不太容易，在一知半解的情况下也容易出现抢购时给了高额gas被挂在山顶的情况。所以，本文将依托以下几个gas相关的问题进行叙述：  
**1.gas费中的各个参数都是什么？\\ 2.Metamask中的gas如何设置？\\ 3.gas费的实际花费是怎么计算得到的？**

EIP-1559下的gas参数
---------------

2021年4月25日，以太坊进行了柏林升级，最重要的就是推行了EIP-1559提案，该提案修改了以太坊交易手续费机制，也就是向矿工支付gas费的方式。由原有一揽子式gas费升级为由基础费（Basefee）和矿工小费（Tip）组合而成。

![升级前的Gas Fees组成](https://storage.googleapis.com/papyrus_images/20829ff3223355a6406aea451bb8403ca66f3148f58c89ffde8eb34e8656c577.png)

升级前的Gas Fees组成

升级前的Gas Fees组成

![升级后的Gas Fees组成](https://storage.googleapis.com/papyrus_images/01450f02872f341c1817432e234538599b793300bedcd0ee097a1d01d1026a9b.png)

升级后的Gas Fees组成

升级后的Gas Fees组成

**Base（销毁基础费）**：\\ Base费是根据区块使用率动态进行调整的，那么这个动态调整的规则是什么呢？\\ 具体规则为：  
_如果上一个区块完整度正好是 50%，那么基本费用将保持不变。\\ 如果上一个区块是完整区块（100%），那么下一个区块的基本费用将增加最多 12.5%。\\ 如果上一个区块完整度超过 50%，但不到 100%，那么基本费用将增加 12.5% 以下。\\ 如果上一个区块是空白区块（0%），那么下一个区块的基本费用将减少最多 12.5%。\\ 如果上一个区块完整度超过 0%，但低于 50%，那么基本费用将减少 12.5% 以下。_\\ 结合实际数据进行验证，在以太坊浏览器的首页，我们可以看到最近的出块信息。

![以太坊浏览器首页的出块信息](https://storage.googleapis.com/papyrus_images/83457ea50265b720efea88b6b06c48aab541c80a158542f8f3bd770a07a58854.png)

以太坊浏览器首页的出块信息

以太坊浏览器首页的出块信息

点开Block #14166561（下附链接），我们可以看到如下图所示内容。

在以太坊浏览器中的Block#14166561显示内容中我们可以看到：\\ 第一个红色方框是本区块中所包含的所有交易内容，具体详情可以点进去查看；\\ 第二个红色方框是本区块使用状态，我们可以看到本区块是满载状态。

![以太坊浏览器中的Block#14166561显示内容](https://storage.googleapis.com/papyrus_images/8e09fb41758c4c93f2121fd9c14c316942af8bc23c6c1a3081483ca214c5f7a4.png)

以太坊浏览器中的Block#14166561显示内容

以太坊浏览器中的Block#14166561显示内容

> _如果上一个区块是完整区块（100%），那么下一个区块的基本费用将增加最多 12.5%。_

我们来验证一下： 随意点开本区块中一笔交易，可以查看当前区块Base费为85.524255391 Gwei，根据上述规则，我们可以推算下一区块Base费为：  
**85.524255391×(1+12.5%)≈96.214787315**

![Block#14166561 Base费](https://storage.googleapis.com/papyrus_images/cf466e78bcacb179989979f889bb175831df003afbcd9490bf2f553506e94969.png)

Block#14166561 Base费

Block#14166561 Base费

点开下一区块交易查看Base费如下图所示，基本上与计算结果一致。

![Block#14166562 Base费](https://storage.googleapis.com/papyrus_images/2f60b2198492eb88d89fe2c183683ef8c749e3425c5d3169b0b3627939b04386.png)

Block#14166562 Base费

Block#14166562 Base费

**Tip/Max Priority（矿工小费）**： 这一部分是直接支付给矿工的费用，以激励他们将你的交易纳入区块。所以这一部分给的越高，矿工收益越高，你的交易在队列中就会越优先被打包。**Max（用户愿意支付的最大费用**）： 顾名思义，这一个值是用户设置的，表示了用户愿意支付的最大费用。一般来说，需要： Max ≥ Base + Max Priority 这样的话，你的交易才能成功。

以上就是EIP-1559下的gas参数，但有些朋友可能想问，如果我用的是Metamask，这些参数对应在Metamask里是什么呢？

Metamask中的gas设置
---------------

很多朋友使用的小狐狸钱包(Metamask)，那么在这里该如何设置gas呢？\\ 在网页点击交互以后，小狐狸钱包会弹出确认页面，如下图以uniswap兑换为例：

![小狐狸弹出确认页面①](https://storage.googleapis.com/papyrus_images/223089a40a166d7bad2496f905ff2c90a6ef76eead6ab1b961e7db3076c2c0f3.png)

小狐狸弹出确认页面①

小狐狸弹出确认页面①

我们点击上图红框中的编辑按钮，这里有默认的Low、Medium、High三档gas调节，但不建议使用。我们直接点击高级选项。

![小狐狸弹出确认页面②](https://storage.googleapis.com/papyrus_images/5ffae6656b761985c87b97f1c97b03989d38fa0c26c0621d832d3cd551b688f2.png)

小狐狸弹出确认页面②

小狐狸弹出确认页面②

点击完成后，可以看到如下图所示页面。这里的有三个参数：\\ 1.燃料限制：对应以太坊浏览器中的Gas Limit，这一个值是根据你交互的智能合约方法复杂度自动计算出来的，不需要修改；\\ 2.Max priority fee：对应以太坊浏览器中的Max Priority，这一个值就是上述所讲的矿工小费；\\ 3.Max fee：对应以太坊浏览器中的Max，也就是你愿意支付的最大费用。

![小狐狸弹出确认页面③](https://storage.googleapis.com/papyrus_images/1466e67068781f5067a48ccce9ff994915dfe38ef578cd7cc8083867aea6cf2a.png)

小狐狸弹出确认页面③

小狐狸弹出确认页面③

修改完成后，点击保存即完成了gas的设置。\\ 这里提供一个当前gas设置和建议gas值的网站：

细心的朋友可能会发现，网站建议的max fee一般是Base fee的近似两倍，这是为什么呢？\\ 上一节中我们讲到，如果区块保持100%满载状态，每次Base fee会增加12.5%。所以将近两倍的max fee能够保证即使区块满载状态下，你的gas设置也能满足接下来6个区块的Base fee要求。  
**（1+12.5%）^ 6 ≈ 2.027**

![示例](https://storage.googleapis.com/papyrus_images/1dff262d46fb26dd52e4f2ffc3d80aacc7295edeb4b8f20dcf1477d57159ba99.png)

示例

示例

这时候你可能有一个疑问，我设置了两倍max fee，那我会不会扣掉很多gas啊？那么接下来就介绍下最终你的实际gas花费是怎么计算出来的。

在实际操作中，很多人学会了gas的设置后，为了抢到热门NFT的PublicSale，没有提前进行预估计算，无脑拉高gas，最终把自己挂在了山顶上。如下图前几天的Karafuru的PublicSale，平均单价5.3ETH，远高于二级市场售价。

![被挂在山顶的大聪明](https://storage.googleapis.com/papyrus_images/c0ed22ccac0d0942739d69c6e79c080b4b20ed57d3c51257280c508f947c1163.png)

被挂在山顶的大聪明

被挂在山顶的大聪明

实际花费计算公式：  
**实际花费 = Usage by Txn × (Base + Max Priority)**\\ 即下图：  
**实际花费 = 红框 × （蓝框 + 绿框）**

![示例](https://storage.googleapis.com/papyrus_images/15a004b2df6dfd96749aaa13a6e10f68971f30c258b0e34794d67131f7796fd6.png)

示例

示例

也就是：  
**189340 × (123.565296156 + 2) × 10^-9 = 0.02377453317417704**\\ 这里的10^-9是Gwei的换算，这里我们的计算与实际结果相同。

![计算结果](https://storage.googleapis.com/papyrus_images/0d676018d7f55d68512ca7760b3b95fa62874cf8ea1a335679d73587c98a4c76.png)

计算结果

计算结果

上面我们也讲到，Gas Limit一般是默认值，但是在PublicSale没有开启的时候，我们怎么预估Gas Limit的值，从而计算预计花费呢？\\ 这里分享两个方法：\\ 1.找到对应的测试网合约进行交互：项目正式上线之前一般都会进行测试网部署测试，通过网页源码找到测试网合约地址进行交互，即可得到实际Gas Limit花费；\\ 2.根据PresaleSale的花费估计：一般来说PresaleSale的Gas Limit会小于PublicSale的Gas Limit，一般不会超出50%（最不利情况）。

这样就可以在NFT抢购前，结合二级市场售价来计算自己能够承受的最高gas值，也能防止自己被挂在山顶。\\ 这里也要注意一点，Gas Limit的值与Max fee的值类似，只是你愿意承担的最高值，实际情况下是按照实际使用值来计算费用的。在不同情况下（抢购成功/抢购失败）的Gas Limit的实际花费是不同的。

![成功的gas limit花费](https://storage.googleapis.com/papyrus_images/ddf341578a855994cbdc26c54fafa6b48f78c083e74b106d3f5611001763f8b4.png)

成功的gas limit花费

成功的gas limit花费

![失败的gas limit花费](https://storage.googleapis.com/papyrus_images/a3f0578a6fbbec40f24293239cae13bbbe0b61c229abdb7423836a26d938b0eb.png)

失败的gas limit花费

失败的gas limit花费

一般来说，失败使用的gas limit是远小于成功使用的。所以也可以提前预估抢购失败的花费，在自己能承受的范围内进行抢购。

以上就是分享的内容，这也是我第一次写，如果有什么不正确的地方欢迎点评指正，毕竟我是个接触币圈没多久的小白哈哈哈哈，有机会下次见！

**——来自 DFarm Club**

---

*Originally published on [onekit.eth](https://paragraph.com/@onekit/gas-gas-nft-gas)*
