Проблемы с метамаской / соединением web3 - PullRequest
0 голосов
/ 26 декабря 2018

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

        <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>

1 Ответ

0 голосов
/ 27 декабря 2018

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

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

Также обратите внимание на критическое изменение в 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 !');
}
...