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

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

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

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

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

之后偶然在网上搜索”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 了。

最新文章

  1. [R] Draw a wordcloud
  2. C - Point on Spira
  3. hackyviewpager有什么用
  4. 经验交流List
  5. vb.net 总结
  6. weblogic 双机集群搭建
  7. java集合框架(Collections Framework)
  8. easyui表格排序
  9. JAVA EE 环境配置——JAVA8 下载安装和 Eclipse EE的下载安装
  10. AARRR 量化感染率
  11. 移动端使用mint-ui loadmore实现下拉刷新上拉显示更多
  12. 完全使用ASP.NET实现的省市区级联效果
  13. 在使用HttpClient做客户端调用一个API时 模拟并发调用时发生“死锁"?
  14. 【转】: 探索Lua5.2内部实现:虚拟机指令(3) Upvalues & Globals
  15. APP线上问题收集信息整理
  16. 【简单的原创】div简单轮换显示
  17. java.util.concurrent中的常用组件
  18. java使用poi读取word(简单,简约,直观)
  19. UISearchBar作为inputAccessoryView时的响应链
  20. Springboot vue.js html 跨域 前后分离 Activiti6 shiro 权限

热门文章

  1. sublime text 3 Package Control无法下载插件
  2. 170819-关于JSTL的知识点
  3. (转)jupyter常用快捷键
  4. eclipse下实现热部署,tomcat不重新reload context
  5. mysql - 标识列
  6. 全文搜索 ElasticSearch
  7. java 工厂模式 从无到有-到简单工厂模式-到工厂方法模式-抽象工厂模式
  8. Linux统计即时网速
  9. python学习第六天--匿名函数、过滤、映射
  10. <转载>面试官,不要再问我三次握手和四次挥手