web3.js 中的 currentprovider 和 givenprovider 有什么区别
What is the difference between currentprovider and givenprovider in web3.js
谁能解释一下 currentprovider 和 givenprovider 的区别?
我是这样想的。
givenprovider
通过网络浏览器连接到区块链,并且
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
实例,会使用 Web3
模块上的 givenProvider
。
让我们看看 MetaMask 文档:
MetaMask injects a global API into websites visited by its users at
window.ethereum (Also available at window.web3.currentProvider for
legacy reasons)
这是基于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
谁能解释一下 currentprovider 和 givenprovider 的区别?
我是这样想的。
givenprovider
通过网络浏览器连接到区块链,并且
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
实例,会使用 Web3
模块上的 givenProvider
。
让我们看看 MetaMask 文档:
MetaMask injects a global API into websites visited by its users at window.ethereum (Also available at window.web3.currentProvider for legacy reasons)
这是基于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