web3.js中的currentprovider和Givenprovider有什么区别

时间:2019-04-24 04:45:30

标签: ethereum web3js

让任何人解释currentprovider和Givenprovider有什么区别?

我这样想。 givenprovider通过网络浏览器连接到区块链,并且 currentprovider通过彻底的元掩码连接到区块链。

我不确定我的理解是正确的。

你有什么主意吗?

1 个答案:

答案 0 :(得分:1)

我认为关于以太坊提供商的困惑很多,因为一开始缺乏标准。我想按照我的理解进行整理。

从web3文档:

import Web3 from 'web3';

// "Web3.providers.givenProvider" will be set if in an Ethereum supported browser.
const web3 = new Web3(Web3.givenProvider || 'ws://some.local-or-remote.node:8546', net, options);

请不要使用web3模块上的givenProvider来初始化Web3实例。

让我们看一下MetaMask文档:

  

MetaMask向其用户访问的网站注入了全局API   window.ethereum(也可以在window.web3.currentProvider中使用   遗留原因)

这是基于ERC1193

基本上,如果提供程序符合ERC1193(如MetaMask),则Web3会将window.ethereum分配给Web3.givenProvider属性,如果提供程序不兼容,则可以执行一些模糊魔术来检测提供程序。

按照此逻辑,在实例web3.currentProvider上初始化web3的提供程序,而web3.givenProvider是环境注入的提供程序(如window.ethereum)。例如:

import Web3 from 'web3';
export const givenWeb3 = new Web3(Web3.givenProvider)
givenWeb3.currentProvider === givenWeb3.givenProvider // true

export const externalProvider = new Web3('http://localhost:8545')
externalProvider.currentProvider === externalProvider.givenProvider // false