zoukankan      html  css  js  c++  java
  • 13.以太坊中web3访问合约账户出现问题——2019年09月29日


    title: 合约交互时发现访问不了地址的bug
    date: "2019-09-29 10:17:16"
    tags: Dapp开发
    categories: 技术驿站


    在编写合约交互的过程中,需要一个web3实例用来调用合约访问账户等。

    我们需要设置一个provider。为了保证不会覆盖一个已有的provider(Mist浏览器或安装了MetaMak的浏览器会提供Provider),需要先检查 web3 实例是否已存在。

    if (typeof web3 !== 'undefined') {
      web3 = new Web3(web3.currentProvider);
    } else {
      // set the provider you want from Web3.providers
      web3 = new Web3(new Web3.providers.HttpProvider("http://localhost:8545"));
    }
    

    这样就可以使用web3提供的接口方法了。比如:

    web3.eth.defaultAccount
    web3.eth.getBalance
    ......
    

    启动程序npm run dev,打开了浏览器3000端口访问到了首页界面。

    但是发现控制台console出现了错误提示:invalid address

    image-20191007154528876

    以为是本地由Ganache软件生成的账号程序访问不到。

    上网找解决方法都说账户需要解锁,也就是调用web3的解锁账户的命令。

    web3.eth.personal.unlockAccount(web3.eth.defaultAccount).then(console.log('Account unlocked!'));

    但是运行了之后提醒unlockcount函数不存在。

    image-20191007154917354

    之后偶然在网上搜索”metamask访问不了账户地址“这个问题,终于问题得到了解决。

    https://blog.csdn.net/rejames/article/details/89876967

    原来最新版的metamask插件默认启用了隐私模式,而官方文档中并没有更新。

    现在新的检查方式为:

    // 检查是否是新的MetaMask 或 DApp浏览器
    var web3Provider;
    if (window.ethereum) {
       web3Provider = window.ethereum;
      try {
        // 请求用户授权
        await window.ethereum.enable();
      } catch (error) {
        // 用户不授权时
        console.error("User denied account access")
      }
    } else if (window.web3) {   // 老版 MetaMask Legacy dapp browsers...
      web3Provider = window.web3.currentProvider;
    } else {
      web3Provider = new Web3.providers.HttpProvider('http://localhost:8545');
    }
    web3 = new Web3(web3Provider);
    

    成功引入后,你现在可以使用 web3 对象的API 了。

  • 相关阅读:
    barnes-hut算法 && Fast Multipole Methods算法
    最大独立集问题-maximal independent set problem
    kernighan lin算法
    浅析Struts2中的OGNL和ValueStack
    Python框架之Django学习笔记(十四)
    C++抓网页/获取网页内容
    SpiderMonkey-让你的C++程序支持JavaScript脚本
    关于职位的解释---转CSDN的文章
    优雅的css写法
    linux
  • 原文地址:https://www.cnblogs.com/oneapple/p/12030489.html
Copyright © 2011-2022 走看看