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

Unity中用MetaMask SDK获取Sepolia网络账户余额报错求助

问题排查与解决方案

1. 替换async void为async Task

Unity中async void的异常无法被正常捕获,会打断请求流程,进而触发RPC错误。修改方法签名并正确处理调用:

public async Task AskBalance()
{
    string msgParams = "latest";
    string from = MetaMaskUnity.Instance.Wallet.SelectedAddress;

    var paramsArray = new string[] { from, msgParams };

    var request = new MetaMaskEthereumRequest
    {
        Method = "eth_getBalance",
        Parameters = paramsArray
    };
    onTransactionSent?.Invoke(this, EventArgs.Empty);
    var result = await MetaMaskUnity.Instance.Wallet.Request(request);
    // 此处可添加余额转换逻辑,比如将十六进制结果转为ETH单位
}

调用时需使用await:

// 在调用方法的位置
await AskBalance();

2. 前置验证钱包连接状态

确保调用AskBalance前,MetaMask钱包已完成连接,SelectedAddress不为空或无效值:

public async Task AskBalance()
{
    if (MetaMaskUnity.Instance.Wallet == null || string.IsNullOrEmpty(MetaMaskUnity.Instance.Wallet.SelectedAddress))
    {
        Debug.LogError("钱包未连接或地址无效");
        return;
    }
    // 后续原有逻辑
}

3. 升级MetaMask Unity SDK至最新稳定版

部分旧版本SDK对eth_getBalance的参数序列化存在bug,会导致请求被判定为无效。前往Unity Package Manager更新SDK到最新版本即可解决。

4. 尝试指定数字类型的请求ID(可选)

虽然以太坊RPC规范允许ID为字符串,但部分MetaMask版本可能要求ID为数字类型,可手动指定:

var request = new MetaMaskEthereumRequest
{
    Id = 1001, // 替换为任意数字ID
    Method = "eth_getBalance",
    Parameters = paramsArray
};

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 23:02:22