【发布时间】:2022-08-19 23:30:16
【问题描述】:
// constants
import Web3EthContract from \"web3-eth-contract\";
import Web3 from \"web3\";
// log
import { fetchData } from \"../data/dataActions\";
const connectRequest = () => {
return {
type: \"CONNECTION_REQUEST\",
};
};
const connectSuccess = (payload) => {
return {
type: \"CONNECTION_SUCCESS\",
payload: payload,
};
};
const connectFailed = (payload) => {
return {
type: \"CONNECTION_FAILED\",
payload: payload,
};
};
const updateAccountRequest = (payload) => {
return {
type: \"UPDATE_ACCOUNT\",
payload: payload,
};
};
export const connect = () => {
return async (dispatch) => {
dispatch(connectRequest());
const abiResponse = await fetch(\"/config/abi.json\", {
headers: {
\"Content-Type\": \"application/json\",
Accept: \"application/json\",
},
});
const abi = await abiResponse.json();
const configResponse = await fetch(\"/config/config.json\", {
headers: {
\"Content-Type\": \"application/json\",
Accept: \"application/json\",
},
});
const CONFIG = await configResponse.json();
const { ethereum } = window;
const metamaskIsInstalled = ethereum && ethereum.isMetaMask;
if (metamaskIsInstalled) {
Web3EthContract.setProvider(ethereum);
let web3 = new Web3(ethereum);
try {
const accounts = await ethereum.request({
method: \"eth_requestAccounts\",
});
const networkId = await ethereum.request({
method: \"net_version\",
});
if (networkId == CONFIG.NETWORK.ID) {
const SmartContractObj = new Web3EthContract(
abi,
CONFIG.CONTRACT_ADDRESS
);
dispatch(
connectSuccess({
account: accounts[0],
smartContract: SmartContractObj,
web3: web3,
})
);
// Add listeners start
ethereum.on(\"accountsChanged\", (accounts) => {
dispatch(updateAccount(accounts[0]));
});
ethereum.on(\"chainChanged\", () => {
window.location.reload();
});
// Add listeners end
} else {
dispatch(connectFailed(`Change network to ${CONFIG.NETWORK.NAME}.`));
}
} catch (err) {
dispatch(connectFailed(\"Something went wrong.\"));
}
} else {
dispatch(connectFailed(\"Install Metamask.\"));
}
};
};
export const updateAccount = (account) => {
return async (dispatch) => {
dispatch(updateAccountRequest({ account: account }));
dispatch(fetchData(account));
};
};
Metamask 扩展在桌面上运行良好,但问题是它不能在移动设备上运行,它没有打开 metamask 应用程序,我们现在不知道如何解决这个问题...... 如果这里有人可以提供帮助,那就太好了。我们有一个解决方案,而不是使用元掩码,我们想使用钱包连接集成,但我们也不知道该怎么做。我们已经阅读了文档,但我们对此感到困惑......
标签: javascript web3js metamask