web3.js中currentprovider和givenprovider有什么区别

gnx*_*xvw 3 ethereum web3js

谁能解释一下 currentprovider 和给定provider 之间有什么区别?

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

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

你有什么主意吗?

leo*_*rou 5

我认为以太坊提供商存在很多混乱,因为一开始就缺乏标准。我想按照我的理解来解决它。

来自 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);
Run Code Online (Sandbox Code Playgroud)

请注意,要初始化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
Run Code Online (Sandbox Code Playgroud)