Web3.js 和 Metamask Mobile - 无法调用合约函数(但在桌面上工作正常)[代码:-32603]

问题描述 投票:0回答:1

我使用 Web3.js 和 MetaMask 与区块链交互。但无法在

MetaMask mobile app
上调用合约函数...

  • 但是,在桌面上工作正常..

不知道这里出了什么问题......

这是我的代码:

import Web3 from 'web3';
import detectEthereumProvider from '@metamask/detect-provider';

const provider = await detectEthereumProvider();
const web3 = new Web3(provider);

const accounts = await provider.request({
    method: 'eth_requestAccounts',
});

const query = (new web3.eth.Contract(ContractAbi, ContractAddress)).methods.tokenWeight(10);
 
try {
     let result = await query.call();
     console.log(result);
} catch (e) {
     console.log(e);
}

产生的错误:

{"name":"Qe","code": 100,"message":"Returned error:

Internal JSON-RPC error.","innerError": {"code":-32603,"message":"Internal

JSON-RPC error.","data": {"code":-32000,"message":"execution

reverted"}},"data":

{"code":-32000,"message":"execution

reverted"}}
{"code":-32603,"data":{"request": {"method":"eth_call","params": [{"to":"0x47061C8a71274Ea7245B84f EA63cBac957d8a1cF","input":"0x70a0 823100000000000000000000000036 4d8ea5e7a4ce97e89f7b2cb7198d6d5 dfe0ace"},"latest"],"jsonrpc":"2.0","id": 9330414}}}
javascript web3js metamask
1个回答
0
投票

好像 web3.js 有问题..

我最终使用了 ether.js(版本 6.7.1),移动设备和桌面设备都工作得很好......

import { 
     BrowserProvider, 
     Contract
} from "ethers";
import detectEthereumProvider from '@metamask/detect-provider';

const browserProvider = await detectEthereumProvider();
const provider = new BrowserProvider(browserProvider);

const accounts = await browserProvider.request({
    method: 'eth_requestAccounts',
});
 
try {
     let result = await (new Contract(contractAddress, ABI, provider)).tokenWeight(10);
     console.log(result);
} catch (e) {
     console.log(e);
}
© www.soinside.com 2019 - 2024. All rights reserved.