MetaMask раскрывает учетные записи

Со 2 ноября MetaMask больше не будет показывать учетные записи пользователей по умолчанию, и мы должны это сделать. Я не понимаю, как мы должны интегрировать это в наши децентрализованные приложения.

Например, у меня есть стандартный файл web3.js со следующим кодом:

import Web3 from 'web3';



let web3;
if (typeof window !== 'undefined' && typeof window.web3 !== 'undefined') {
  // metamask is running
  web3 = new Web3(window.web3.currentProvider);
} else {
  //user is not running metamask
  // create provider through infura
  const provider = new Web3.providers.HttpProvider(
    // pass url of remote node
    'https://rinkeby.infura.io/v3/censored'
  );
  web3 = new Web3(provider);

}
export default web3;

Должны ли быть изменения в файле web3.js? Или мне следует создать кнопку на веб-сайте, которую пользователь должен нажать, чтобы получить доступ к своей учетной записи MetaMask?

Привет, @cristian, теперь тебе нужно запросить доступ к учетным записям пользователей. Вы можете увидеть изменения и способы их реализации здесь medium.com/metamask/eip-1102-preparing-your-dapp-5027b2c9ed76.
Я думаю, что для каждого приложения он будет разным, но в целом статья на Medium объясняет это достаточно хорошо.
Мне нужно дальнейшее объяснение. Я все еще не понимаю ее полностью, или, по крайней мере, я не чувствую уверенности в предоставленной информации. Должен ли я использовать Ethereum.enable() для КАЖДОГО вызова web3???? Или я могу просто вызвать его один раз, и MetaMask запомнит его для пользователей?

Ответы (1)

Решение найдено! Скорее всего, у вас есть файл web3.js, который вы экспортируете в приложение по умолчанию. Решение простое:

import Web3 from 'web3';



let web3;
if (window.ethereum) {
  // metamask is available
  window.ethereum.enable();    
  web3 = new Web3(window.web3.currentProvider);
} else {
  //user is not running metamask
  // create provider through infura
  const provider = new Web3.providers.HttpProvider(
    // pass url of remote node
    'https://rinkeby.infura.io/v3/censored'
  );
  web3 = new Web3(provider);

}
export default web3;