В чем разница между текущим поставщиком и данным поставщиком в web3.js - PullRequest
1 голос
/ 24 апреля 2019

Может кто-нибудь объяснить, в чем разница между текущим поставщиком и данным поставщиком?

Я так думаю. givenprovider подключается к блокчейну через веб-браузер и currentprovider подключается к метамаске блокчейна.

Я не уверен, что мое понимание верно.

У вас есть идеи?

1 Ответ

1 голос
/ 24 апреля 2019

Я думаю, что провайдеры Ethereum сильно путаются из-за отсутствия стандарта в начале.Я хотел бы разобраться, как я понимаю.

Из 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

По сути, Web3 назначает window.ethereum свойству Web3.givenProvider, если поставщик соответствует ERC1193 (как MetaMask) и может выполнять нечеткую магию для обнаружения провайдера, если нет.

Следуя этой логике, в экземпляре 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
...