VUEX и WEB3: Конструктор дублированного метода. Этот метод определяется как вызов RP C и как метод объекта - PullRequest
1 голос
/ 18 июня 2020

Возникла следующая проблема при развертывании моего web3 внутри VueX:

TypeError: Duplicated method constructor. This method is defined as RPC call and as Object method.

Я пришел к выводу, что проблема заключается в объявлении web3 в setupWeb3 Action (см. Ниже).

Я предполагаю, что это проблема с набором текста?

Любые мысли были бы очень признательны.

Изменить:

Я объявляю глобальное пространство имен в моем 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');
            });
    },
};

1 Ответ

0 голосов
/ 19 июня 2020

Оказывается, я был на бета-версии и обновившись до

"web3": "^1.2.9"

Исправил ошибку для меня. Если у кого-то такая же проблема! :)

...