You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Metamask显示交易金额为0而非用户输入值的技术求助

问题排查:Metamask交易金额显示为0但parsedAmount值正确的解决办法

核心原因

问题出在单位转换错误:你传入sendTransaction的是以太币(ether)数值,但Web3/Metamask要求交易金额必须是wei单位(1 ether = 10^18 wei)。如果直接传入0.002,Metamask会将其识别为0.002 wei,对应显示的以太币金额就是0。

解决步骤

1. 补充单位转换逻辑

使用Web3工具库将以太币数值转为wei,不同库的写法如下:

  • 用ethers.js:
    const amountInWei = ethers.utils.parseEther(parsedAmount.toString());
    
  • 用web3.js:
    const amountInWei = web3.utils.toWei(parsedAmount.toString(), 'ether');
    

2. 修正sendTransaction的value参数

检查TransactionContext.jsx中sendTransaction函数的实现,确保value字段传入的是转换后的wei值,而非原始以太币数值:

  • 错误写法:
    await provider.sendTransaction({
      to: recipientAddress,
      value: parsedAmount // 直接传ether数值,被识别为wei,显示0
    });
    
  • 正确写法:
    const amountInWei = ethers.utils.parseEther(parsedAmount.toString());
    await provider.sendTransaction({
      to: recipientAddress,
      value: amountInWei // 传入wei单位的数值
    });
    

3. 验证转换结果

在console中同时打印parsedAmount和amountInWei,确认amountInWei的值为2000000000000000(0.002 ether对应的wei值),此值正确的话Metamask就会正常显示0.002 ether。

4. 额外注意事项

  • 确保parsedAmount是Number或String类型,不要直接传入BigNumber类型进行转换;
  • 旧版web3.js需注意toWei的参数顺序:web3.utils.toWei(value, unit),第二个参数为'ether'。

内容的提问来源于stack exchange,提问作者user16369468

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.08 17:42:02