Начиная с первого квартала 2020 года, MetaMask официально прекратил внедрение Web3.js и обновил способ доступа к текущему провайдеру. Вот как убедиться, что ваше dApp не сломается, и как сделать его более совместимым с остальной частью экосистемы.
Новый, более совместимый способ
Согласно этой статье:
Ключевые изменения в провайдере Inpage MetaMask
13 января 2020 года мы удаляем некоторые устаревшие функции из провайдера inpage MetaMask.
Основной причиной этих изменений является внедрение 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 и общайтесь с нами!