{"content":{"title":"gas gasPrice","body":"# 1、区块链浏览器查看交易数据\r\n在向合约中发送1wei的eth, 介绍下交易明细中的各个字段的含义。\r\nhttps://goerli.etherscan.io/tx/0xf836049be423723eba16b00b84ecfbfde4c98e10a57c153426bd8834a7136a43\r\n![image.png](https://img.learnblockchain.cn/attachments/2023/04/nHYsKjmy6443b39c966b6.png)\r\n- 在Input Data中数据为空, 所以是个纯发送的eth交易。\r\n- Gas Fees 指的是计算单个gas的费用时 涉及到三部分 gasPrice = min(Base + MaxPriority , Max)\r\n    1. Base 基础费用由之前区块计算得出来的。在交易结束后改部分的eth会被燃烧掉，减少eth的通胀。\r\n    2. Max Priority 最大优先费用，也就是我们自愿给矿工的小费, 该费用越高交易越会被优先打包执行。\r\n    3. Max 本次交易中允许的最大Gas Fee。比如：在本次交易中没有被打包进区块，在下一次打包时通过计算Base的费用可能会增加。用户可以限制该费用，使Gas Fee不超限制。\r\n- Gas Price 单个gas的价格 \r\nGas Price = Base + Max Priority = 0.000000111 Gwei + 1 Gwei = 1.000000111 Gwei < 1.5 Gwei(Max) \r\n- Gas Limit & Usage by Txn\r\ngas数量的最大限制和本次交易中使用的gas数量, 本次交易消耗了21055个gas\r\n- Transaction Fee 本次交易的费用\r\n本次交易的费用 = 消耗的gas数量 * gas的单价\r\n0.000021055002337105 ETH = 0.000000001000000111 ETH * 21055\r\n- Burnt & Txn Savings Fee 燃烧掉的eth和本次节省的eth费用\r\n    1. Burnt燃烧的是Base单价\r\n    所以Burnt = 0.000000111 Gwei * 21055 = 0.000000000002337105 ETH\r\n    2. Txn Savings Fee 设置的最大Gas Fee - 实际使用的Gas Fee\r\n    (1.5 Gwei - 1.000000111 Gwei) * 21055 = 0.000010527497662895 ETH\r\n- value 本次发送给合约的1wei\r\n\r\n# 2、EOA给合约发送ETH的gas数量\r\n在上面的明细中有个小疑问, 发送eth不是固定的21000gas费用么, 这个为什么是21055个gas呢? 我们接收eth的合约使用了receive external payable函数, 在发送eth给合约时会执行receive方法, 有些初始化的操作也会消耗一部分的gas费用。\r\n使用remix的debug查看相关opCode 初始化累计共55gas：\r\n![image.png](https://img.learnblockchain.cn/attachments/2023/04/Rj4Aoxtb6444b4d6d5803.png)\r\n\r\n\r\nopCode的gas耗费参考：\r\nhttps://ethereum.org/zh/developers/docs/evm/opcodes\r\nMSTORE操作码涉及到内存扩展的耗费, 计算参考：\r\nhttps://github.com/wolflo/evm-opcodes/blob/main/gas.md#a0-1-memory-expansion\r\n\r\n# 3、使用ethers.js v6查询交易信息\r\n```\r\n(async () => {\r\n    const ALCHEMY_GOERLI_URL = 'https://eth-goerli.alchemyapi.io/v2/GlaeWuylnNM3uuOo-SAwJxuwTdqHaY5l';\r\n    const goerliProvider = new ethers.JsonRpcProvider(ALCHEMY_GOERLI_URL);\r\n    const block = await goerliProvider.getBlock(8871803, false);\r\n    console.log(`8871803 block baseFeePerGas:${block.baseFeePerGas}`)\r\n    const tx = await goerliProvider.getTransaction('0xf836049be423723eba16b00b84ecfbfde4c98e10a57c153426bd8834a7136a43');\r\n    console.log(`8871803 block tx.maxPriorityFeePerGas:${tx.maxPriorityFeePerGas}`);\r\n    console.log(`8871803 block tx.maxFeePerGas:${tx.maxFeePerGas}`);\r\n})();\r\n```\r\n返回的信息, 与上面etherscan计算出的参数一致.\r\n```\r\n8871803 block baseFeePerGas:111\r\n8871803 block tx.maxPriorityFeePerGas:1000000000\r\n8871803 block tx.maxFeePerGas:1500000000\r\n```"},"author":{"user":"https://learnblockchain.cn/people/11053","address":null},"history":"Qmcc7Ym1etRquKwnDD7R2mq11MVcMKrDn6PE99kVTV8mN5","timestamp":1683710057,"version":1}