Сегодня первый день, когда я развернул тестовую сеть ( Rinkeby ), а не мою локальную клиентскую сеть Ganache. Я думаю, что мне нужно разъяснение по учетным записям, когда речь идет о Metamask и Rinkeby.
Если я инициализирую объект Web3 при создании на стороне клиента со свойством GivenProvider , я могу получить доступ к своим учетным записям Metamask, когда я выполняю вызов метода getAccounts() из кода Javascript моей веб-страницы. Однако, если вместо этого я инициализирую объект Web3, используя URL-адрес Rinkeby, украшенный Infura API, я получаю пустой результат при вызове getAccounts () . Я предполагаю, что это потому, что учетные записи не «на Ринкеби» ( не знаю, как еще это сказать ), а поддерживаются кошельком Metamask?
Моя общая цель состоит в том, чтобы сервер мог указать желаемую сеть вместо того, чтобы полагаться на то, что Metamask будет установлен на желаемую сеть Ethereum при запуске веб-страницы моего dApp.
Кроме того, кто-нибудь знает, как инициализировать объект Web3, не имея ключа API Infura, видимого для кого-то, кто отслеживает код в отладчике браузера?
// This is how I get a valid accounts result. Metamask is currently set to Rinkeby.
const Web3 = require('web3');
const localWeb3 = new Web3(Web3.givenProvider);
localWeb3.eth.getAccounts()
.then(function (result) {}
// This results in an empty accounts result.
const Web3 = require('web3');
const localWeb3 = new Web3("https://rinkeby.infura.io/<redacted>");
localWeb3.eth.getAccounts()
.then(function (result) {}
Это происходит потому, что когда он вызывает с помощью , Web3.givenProvider
он никогда не достигнет узла Ethereum для запроса учетных записей, вместо этого они просто возвращают ваши учетные записи на Metamask
, а вызовы Rinkeby с использованием Infura ничего не возвращают, потому что там нет зарегистрированной учетной записи. Возможно, Infura не предоставляет серверную часть для getAccounts
метода.
Эдуардо Перейра