使用Web3.js设置交易ETH金额时0.04ETH在MetaMask显示73ETH如何解决
问题原因
你遇到的数值异常的核心原因是以太坊JSON-RPC规范要求eth_sendTransaction方法的value字段必须传入0x开头的十六进制格式的wei值,你当前直接传入了十进制字符串,MetaMask在解析时误将你输入的十进制数字40000000000000000识别为十六进制数值,换算后对应的ETH量级刚好和你看到的73ETH匹配。
修复方案
你可以直接调用web3内置的工具方法处理单位转换和进制转换,避免手动计算出错:
- 用
web3.utils.toWei()完成ETH到wei的单位转换,不需要手动数零计算数值 - 用
web3.utils.toHex()将数值转为符合RPC要求的十六进制格式
修改后的对应代码片段如下:
const transactionParameters = { to: contractAddress, from: window.ethereum.selectedAddress, 'data': window.contract.methods.mint(window.ethereum.selectedAddress,number).encodeABI(), // 替换原有的value赋值逻辑 value: web3.utils.toHex(web3.utils.toWei('0.04', 'ether')) };
额外注意事项
你当前使用的是Rinkeby测试网络,代码中交易成功后的区块浏览器链接指向的是Ropsten网络,建议对应修改,避免后续查询交易时出现找不到记录的问题。
内容的提问来源于stack exchange,提问作者Martin SIMON
相关产品推荐
相关产品推荐

