metamask/web3 连接问题

Posted

技术标签:

【中文标题】metamask/web3 连接问题【英文标题】:Problems with metamask/web3 connection 【发布时间】:2019-05-24 22:53:15 【问题描述】:

我想了解智能合约前端的工作原理。 我正在尝试在我的计算机上运行此代码,但元掩码始终未定义。 您能否详细解释为什么会发生这种情况。 为什么它没有连接到元掩码提供者?

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

【问题讨论】:

我不想问这个问题,但是你有安装 MetaMask 吗?使用相同的计算机和网络浏览器,其他网站是否可以使用 MetaMask? MetaMask 在其他网站上正常工作@smarx 【参考方案1】:

如果您在本地提供 HTML 文件,MetaMask 将无法与您的 DApp 通信。需要网络服务器。来自MetaMask Developer Docs:

由于浏览器安全限制,我们无法与运行在 file:// 上的 dapp 通信。请使用本地服务器进行开发。

另外,请注意MetaMask breaking change 将不再自动将web3 注入浏览器。相反,用户必须通过接受window.ethereum.enable() 创建的提示对话框来授予 DApp 对其帐户的访问权限。请参阅以下代码,了解如何在现代 DApp 浏览器和旧版 DApp 浏览器中处理 MetaMask。

// 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 !');

【讨论】:

非常感谢! 天哪!非常感谢你:))))))))) 现在我的整个 dapp 都在按预期运行,我爱你,真的是

以上是关于metamask/web3 连接问题的主要内容,如果未能解决你的问题,请参考以下文章

内部数据库和 Solidity 之间的数据重复

java原生程序redis连接(连接池/长连接和短连接)选择问题

mysql长连接和短连接的问题 转

内连接、自然连接和等值连接

自然连接和内连接的区别

mysql长连接跨网段问题