我们在进行测试的时候,如果使用ganache,那么就是会用ganache提供的provider

const web3 = new Web3(ganache.provider());

我们进行合约部署的时候,可以使用infura提供的provider

let provider = new HDWalletProvider(mnemonic, "https://rinkeby.infura.io/v3/2b86c426683f4a6095fd175fe931d799");

const web3 = new Web3(provider);

但是注意上面的mnemonic是12个账户助记词,这12个词是合约部署者的

在和以太坊的交互中,面对的成千上百的用户,如果用户都使用部署者的账户,大量的操作消耗gas那部署者就血亏了

因此在交互中,这里应该换为用户使用的钱包的provider,例如metamask的provider

我们只要装了metamask插件,那么浏览器中就被注入了web3

没装当然就是没有的

因此我们是可以拿到用户的provider的

但是!!!

这个web3的版本是相当低的,1.0的在进行紧张的测试中,还未在该插件中上线

但是我们开发使用的就是1.0的,如何让1.0版本的web3使用0.2版本的provider呢

上面的情况打个比方:

我们给用户提供了高版本的iphone,但是没有也不能提供电话卡,不能打电话

metamask提供了低版本的诺基亚,有电话卡,能打电话

那么我们就需要用户使用我们的iphone,并且把诺基亚的卡插进来

我们使用新的模块web3.js组合web3

import Web3 from 'web3';//ipone without card

const web3 = new Web3(window.web3.currentProvider);//use NOKIA card

export default web3;//export iphone with nokia card

导出后我们在其他的模块中使用的就是这个组装web3

注意,window.web3.currentProvider能找到一定是要装了metamask或者类似插件

Logo

为所有Web3兴趣爱好者提供学习成长、分享交流、生态实践、资源工具等服务,作为Anome Land原住民可不断优先享受各种福利,共同打造全球最大的Web3 UGC游戏平台。

更多推荐