【问题标题】:Avoid "This gas fee has been suggested by" message in metamask using web3避免使用 web3 在 metamask 中显示“此 gas fee 已被建议”消息
【发布时间】:2023-03-12 17:08:01
【问题描述】:

我目前正在升级以太坊 dApp(使用 React JS)以符合新的 EIP-1559 标准(A.K.A. London hard fork)。该应用程序使用 web3.js (v1.5.2) 来启动交易,其形式类似于

const contract = new web3.eth.Contract(
  contractABI,
  CONTRACT_ADDRESS,
);

await contract.methods
  .deposit(recepient, amount)
  .send({ from: account, value })

我们鼓励用户使用元掩码与我们的应用交互。

尽管我既没有指定gasPricegasLimit,也没有在发送事务时指定 EIP-1559 指定的等效 maxPriorityFeePerGasmaxFeePerGas,但元掩码仍然警告(在我的本地测试环境中)@987654321 @ 以及潜在的巨额费用。

点击“编辑”another warning message appears,更糟糕的是,我(或者我猜是 web3)应该“建议”的值are not reasonable according to metamask's estimate.

有没有办法使用 web3 与 metamask 接口来接受 metamask 的建议值,删除这些 metamask 警告并确保正确计算费用?我注意到在查看https://app.uniswap.org/ 时,尽管 metamask 仍显示第一个“app.unswap.org 建议的 gas fee”警告,但 txn 时间已正确计算,并且单击“编辑”不会出现任何进一步的警告。 uniswap 与 metamask 更合理的交互是否可以使用 web3.js 进行复制?

【问题讨论】:

  • 我现在也面临同样的问题,是否有任何官方文档(2021 年 11 月)?

标签: javascript web3 metamask


【解决方案1】:

好的,所以我想出了这个。如果maxPriorityFeePerGasmaxFeePerGas 没有为特定事务定义,web3 将生成它自己的值。令人失望的是,它生成的值非常差,并且会在元掩码中触发警告。解决方案(在撰写本文时完全未记录)是将maxPriorityFeePerGasmaxFeePerGas 设置为null 而不是undefined,这将向web3 发出信号,表明您不希望将这些值传递给提供者。所以代码应该是这样的:

const contract = new web3.eth.Contract(
  contractABI,
  CONTRACT_ADDRESS,
);

await contract.methods
  .deposit(recepient, amount)
  .send({ 
    from: account, 
    value, 
    maxPriorityFeePerGas: null,
    maxFeePerGas: null, 
  });

还要确保您使用的是最新版本的 web3,因为仅在 v1.5 中添加了 EIP-1559 支持

【讨论】:

  • 呃 - 这怎么没有记录在任何地方(除了这里!) - 也是非常不直观的行为。叹息。
  • 我可以确认添加这些字段可以解决“未知处理时间”警告消息
  • 添加两个设置为“null”的字段确实消除了“此gas费用已被建议”的消息,但是MetaMask中的gas费用仍然超过10,000美元。对于 Uniswap 中的类似交易,目前它们约为 72 美元。是什么导致了这个高得离谱的估计?我没有在我的代码中指定任何汽油费。
  • 更新 - 以下设置对我来说更合理一些:resp = await faucetContract.methods.withdraw().send({ from: accounts[0], gas: 300000, gasPrice: null , })
猜你喜欢
  • 2011-03-30
  • 2019-07-05
  • 2019-08-03
  • 1970-01-01
  • 2018-07-21
  • 2017-02-16
  • 2018-04-03
  • 1970-01-01
  • 2022-07-01
相关资源
最近更新 更多