Наиболее вероятная причина - неправильная инициализация web3
. Если вы используете metamask
, то инициализируйте web3
следующим образом:
const web3 = new Web3(window.web3.currentProvider);
И в начале импорта файла Web3
.
import Web3 from 'web3';
Также будьте особенно осторожны счтобы смешать прописные буквы Web3
со строчными буквами web3
.
Редактировать после редактирования вопроса и комментировать
Я не знаю, какой урок вы читаете. Но вам не нужно await
на window.web3
в loadBlockchainData()
и вам не нужно listen
при загрузке окна в loadWeb3()
.
Упрощенно loadWeb3()
async loadWeb3() {
if (window.ethereum) {
window.web3 = new Web3(window.ethereum);
await window.ethereum.enable();
} else if (window.web3) {
window.web3 = new Web3(window.web3.currentProvider);
} else {
console.log("Non-Ethereum browser detected. You should consider trying MetaMask!");
}
}
и loadBlockchainData()
async loadBlockchainData() {
const web3 = window.web3;
const acc = await web3.eth.getAccounts();
this.setState({ account: acc[0] });
}
web3 версия 1.2.1 и реагирующая версия 16.10.2