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

Ethereum web3.js中的currentprovider和givenprovider有什么区别,ethereum,web3js,Ethereum,Web3js,有人能解释一下currentprovider和givenprovider的区别吗 我是这样想的。 givenprovider通过web浏览器连接到区块链,并且 currentprovider通过元掩码连接到区块链 我不确定我的理解是否正确 你有什么想法吗?我认为以太坊供应商在一开始就缺乏标准,这是一个很大的困惑。据我所知,我想把它整理一下 从web3文档: import Web3 from 'web3'; // "Web3.providers.givenProvider" will be se

有人能解释一下currentprovider和givenprovider的区别吗

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

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


你有什么想法吗?

我认为以太坊供应商在一开始就缺乏标准,这是一个很大的困惑。据我所知,我想把它整理一下

从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获得 遗留原因)

这是基于

基本上,
Web3
window.ethereum
分配给
Web3.givenProvider
属性,如果提供程序符合ERC1193(作为元掩码),则可以执行一些模糊魔术来检测提供程序(如果不符合)

按照此逻辑,在实例上
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

非常感谢。我需要时间来理解两者的区别。