让任何人解释currentprovider和Givenprovider有什么区别?
我这样想。
givenprovider
通过网络浏览器连接到区块链,并且
currentprovider
通过彻底的元掩码连接到区块链。
我不确定我的理解是正确的。
你有什么主意吗?
答案 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