Проблемы с подключением к метамаске / web3

Я хочу понять, как работает интерфейс смарт-контрактов. Я пытаюсь запустить этот код на своем компьютере, но метамаска постоянно не определена. Не могли бы вы подробно объяснить, почему это происходит. Почему он не подключается к провайдеру метамасков?

        <script>
            $(".sendButton").click(function(){
                let Web3 = require('web3');
                if (typeof web3 !== 'undefined'){
                    web3 = new Web3(web3.currentProvider);
                }
                else {
                    alert('You have to install MetaMask !');
                }
                const abi = some abi
                const contractAddress = "some contract";
                let MyContract = web3.eth.contract(abi);
                let myContractInstance = MyContract.at(contractAddress);
                let functionData = myContractInstance.setMessage.getData($('#inputString').val());
                web3.eth.sendTransaction({
                        to:contractAddress,
                        from:web3.eth.accounts[0],
                        data: functionData,
                    },
                    function(error, response){
                        console.log(response);
                    });
            });
        </script>
    </body>
</html>

person Boo    schedule 26.12.2018    source источник
comment
Ненавижу задавать этот вопрос, но установлена ​​ли у вас MetaMask? Могут ли другие веб-сайты использовать MetaMask, используя тот же компьютер и веб-браузер?   -  person user94559    schedule 26.12.2018
comment
MetaMask без проблем работает на других сайтах @smarx   -  person Boo    schedule 27.12.2018


Ответы (1)


Если вы локально обслуживаете HTML-файл, MetaMask не сможет взаимодействовать с вашим DApp. Требуется веб-сервер. Из документации для разработчиков MetaMask:

Из-за ограничений безопасности браузера мы не можем взаимодействовать с dapps, работающими в file: //. Пожалуйста, используйте локальный сервер для разработки.

Также обратите внимание на критическое изменение MetaMask который больше не будет автоматически вводить web3 в браузер. Вместо этого пользователи должны предоставить DApp доступ к своим учетным записям, приняв диалоговое окно с запросом, созданное window.ethereum.enable(). См. Приведенный ниже код для обработки MetaMask как в современных браузерах DApp, так и в старых браузерах DApp.

// Modern DApp Browsers
if (window.ethereum) {
   web3 = new Web3(window.ethereum);
   try { 
      window.ethereum.enable().then(function() {
          // User has allowed account access to DApp...
      });
   } catch(e) {
      // User has denied account access to DApp...
   }
}
// Legacy DApp Browsers
else if (window.web3) {
    web3 = new Web3(web3.currentProvider);
}
// Non-DApp Browsers
else {
    alert('You have to install MetaMask !');
}

person Ben Beck    schedule 27.12.2018
comment
Большое спасибо! - person Boo; 28.12.2018
comment
Боже мой !! Спасибо ооочень ооочень :))))))))) - person patrick; 23.05.2021
comment
Теперь все мое приложение работает так, как ожидалось, я люблю тебя, чувак, правда ‹3 - person patrick; 23.05.2021