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

MetaMask Unity插件交易金额显示与请求值不符问题

MetaMask Unity插件交易wei值转换显示错误的解决方案

问题场景

集成MetaMask Unity插件实现移动端钱包与Windows Unity应用的交易授权,测试环境为Sepolia测试网(ChainID: 11155111)。修改示例代码的交易接收地址和wei单位的Value参数后,交易可正常执行,但MetaMask移动端显示的ETH金额与正确wei转换结果不符,测试数据如下:

发送请求(wei)MetaMask显示交易金额(ETH)手续费(ETH)总计(ETH)
10000000000000.000280.0000320.000313
100000000000000.000450.0000320.004536
1000000000000000.072060.0000320.007209

已知1wei = 10^-18ETH,转换结果明显不符合预期,以下是排查和解决思路:


排查与解决步骤

1. 修正参数传递的数值类型与单位逻辑

  • 避免精度丢失:Unity中long类型可容纳最大9e18的wei值,但插件内部若用float/double处理转换会出现精度丢失。强制将wei值以字符串形式传递给交易的Value字段:
    var transaction = new MetaMaskTransaction
    {
        To = "你的接收地址",
        Value = "1000000000000" // 直接传字符串,而非数值类型
    };
    
  • 核对单位转换:检查示例代码中是否存在单位误处理,比如是否将wei当成gwei(1gwei=1e9wei)传入,或插件内部错误地将Value参数按ETH再转成wei。

2. 验证交易请求的原始数据

用抓包工具(如Fiddler)捕获Unity应用发送给MetaMask的交易请求,查看请求体中的value字段是否与你设置的wei值完全一致:

  • 如果value字段已错误,问题出在Unity插件的交易构造逻辑,需检查插件代码中的转换函数;
  • 如果value字段正确,问题出在MetaMask移动端的解析/显示逻辑,可尝试更新MetaMask App或提交bug反馈。

3. 修复插件的wei转ETH转换逻辑

如果插件内部有自定义的wei转ETH函数,必须使用高精度的decimal类型处理转换,避免浮点精度问题:
错误示例(float精度不足):

public string WeiToEth(long wei)
{
    return (wei / 1e18f).ToString();
}

正确示例(decimal保证精度):

public string WeiToEth(long wei)
{
    decimal ethValue = (decimal)wei / new decimal(1000000000000000000);
    return ethValue.ToString("0.000000000000000000");
}

4. 更新插件到最新版本

确认使用的MetaMask Unity插件为最新版本,旧版本可能存在单位转换的已知bug。查看插件更新日志,确认是否有修复过wei/ETH转换相关的问题。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 03:57:05