Начиная с первого квартала 2020 года, MetaMask официально прекратил внедрение Web3.js и обновил способ доступа к текущему провайдеру. Вот как убедиться, что ваше dApp не сломается, и как сделать его более совместимым с остальной частью экосистемы.

Новый, более совместимый способ

Согласно этой статье:

Ключевые изменения в провайдере Inpage MetaMask

13 января 2020 года мы удаляем некоторые устаревшие функции из провайдера inpage MetaMask.

medium.com

Основной причиной этих изменений является внедрение EIP-1102 и EIP-1193. Это отлично подходит для всех в сообществе dApp, поскольку теперь поставщики Ethereum, такие как MetaMask, Status и браузеры, совместимые с Ethereum, будут иметь стандарт, которому нужно соответствовать для предоставления своих API.

Суть изменений в основном в том, что providers, как и MetaMask и Status, должны продолжать вводить window.ethereum, но теперь сам объект window.ethereum является типом provider, который поддерживает методы, определенные в EIP-1102 и EIP-1193. Больше не нужно проверять window.web3 на наличие currentProvider — мы можем просто использовать window.ethereum как саму provider!

Код:

const Web3 = require("web3");const ethEnabled = async () => {  if (window.ethereum) {    await window.ethereum.request({method: 'eth_requestAccounts'});    window.web3 = new Web3(window.ethereum);    return true;  }  return false;}

Супер чистый! По сути, мы проверяем, существует ли window.ethereum, затем создаем объект window.web3 с нашей собственной версией web3, используя объект window.ethereum в качестве входных данных provider.

В этом случае функция await window.ethereum.send({method: 'eth_requestAccounts'}) вызывает всплывающий диалог пользовательского интерфейса, который запрашивает у пользователя разрешение на подключение dApp к MetaMask.

В этом случае ваше dApp теперь совместимо с любым провайдером Ethereum, совместимым с EIP-1102 и EIP-1193, что делает его доступным для гораздо большего числа потенциальных пользователей и не привязывает ваше dApp к одному провайдеру.

Если вам понравилась эта статья, я был бы очень признателен, если бы вы ознакомились с новым инструментом, над которым я работаю, который позволяет вам легко распространять программное обеспечение, включая пакеты NPM и прошивку кошелька, используя Ethereum, IPFS и Filecoin с новым открытым исходным кодом. инструмент Valist — запишитесь на бета-тестирование на Valist.io!

У нас также есть замечательное сообщество инженеров web3 и безопасности, присоединяйтесь к нашему серверу Discord и общайтесь с нами!