Javascript VUEX&;WEB3:重复的方法构造函数。此方法定义为RPC调用和对象方法
在VueX内部部署my web3时出现以下问题:Javascript VUEX&;WEB3:重复的方法构造函数。此方法定义为RPC调用和对象方法,javascript,vue.js,vuex,web3,Javascript,Vue.js,Vuex,Web3,在VueX内部部署my web3时出现以下问题: TypeError:重复的方法构造函数。此方法定义为RPC调用和对象方法。 我推断,这个问题存在于setupWeb3操作中的web3声明中(见下文) 我想是打字的问题吧 任何想法都将不胜感激 编辑: 我在main.ts中声明一个全局命名空间,如下所示: declare global { interface Window { ethereum:any; web3:any; } } 以下是我的行动: export c
TypeError:重复的方法构造函数。此方法定义为RPC调用和对象方法。
我推断,这个问题存在于setupWeb3操作中的web3声明中(见下文)
我想是打字的问题吧
任何想法都将不胜感激
编辑:
我在main.ts中声明一个全局命名空间,如下所示:
declare global {
interface Window {
ethereum:any;
web3:any;
}
}
以下是我的行动:
export const actions: ActionTree<Network, RootState> = {
setupWeb3(context: ActionContext<Network, RootState>) {
let web3;
if (window.ethereum) {
web3 = new Web3(window.ethereum);
window.ethereum.enable().then(enabled => console.log(enabled));
} else if (window.web3) {
web3 = new Web3(window.web3.currentProvider);
} else {
// TODO better handle of metamask
window.alert(
'Non-Ethereum browser detected. You should consider trying MetaMask!',
);
}
context.commit('SET_WEB3', web3);
},
async getNetworkData(context: ActionContext<Network, RootState>) {
const { Web3 } = context.getters;
const network = await Web3.eth.net.getNetworkType();
const networkId = await Web3.eth.net.getId();
const currentBlock = await Web3.eth.getBlockNumber();
context.commit('SET_NETWORK_DATA', {
network,
networkId,
currentBlock,
});
},
getAddress(context: ActionContext<Network, RootState>) {
const { Web3 } = context.getters;
Web3.eth.getAccounts().then((account: string[]) =>
context.commit("SET_ADDRESS", account[0]));
},
bootstrapContracts(context: ActionContext<Network, RootState>) {
const setupWeb3 = context.dispatch('setupWeb3');
const network = context.dispatch('getNetworkData');
const address = context.dispatch('getAddress');
Promise.all([setupWeb3, network, address,])
.then(() => {
context.dispatch('setupLootControls');
});
},
};
导出常量操作:ActionTree={
setupWeb3(上下文:ActionContext){
让web3;
if(window.ethereum){
web3=新的web3(window.ethereum);
然后(enabled=>console.log(enabled));
}else if(window.web3){
web3=新的web3(window.web3.currentProvider);
}否则{
//TODO更好地处理元掩码
窗口警报(
“检测到非EnthUM浏览器。您应该考虑尝试元模!”
);
}
commit('SET_WEB3',WEB3);
},
异步getNetworkData(上下文:ActionContext){
const{Web3}=context.getters;
const network=wait Web3.eth.net.getNetworkType();
const networkId=wait Web3.eth.net.getId();
const currentBlock=wait Web3.eth.getBlockNumber();
commit('SET\u NETWORK\u DATA'{
网络,,
networkId,
当前块,
});
},
getAddress(上下文:ActionContext){
const{Web3}=context.getters;
Web3.eth.getAccounts().then((帐户:string[])=>
commit(“SET_ADDRESS”,account[0]);
},
bootstrapContracts(上下文:ActionContext){
const setupWeb3=context.dispatch('setupWeb3');
const network=context.dispatch('getNetworkData');
const address=context.dispatch('getAddress');
Promise.all([setupWeb3,网络,地址,]))
.然后(()=>{
分派('setupLootControls');
});
},
};
证明我是在测试版上,通过升级到
“web3”:“^1.2.9”
为我修正了错误。以防其他人也有同样的问题!:) 原来我是在测试版上,升级到
“web3”:“^1.2.9”
为我修正了错误。以防其他人也有同样的问题!:)