Ведущий криптокошелек с самостоятельным хранением и шлюз к Web3, созданный Consensys.
Читать все статьиПобедитель хакатона ETHLisbon

MetaMask Snaps — это дорожная карта к созданию самого расширяемого кошелька в мире. Как разработчик, вы можете добавлять свои функции и API в MetaMask совершенно новыми способами. Разработчики Web3 — это основа этого роста, и данная серия материалов призвана продемонстрировать новаторские MetaMask Snaps, создаваемые сегодня.
Почему вы его создали?
Externally-owned accounts лежат в основе практически каждого dapp или сервиса в экосистеме Ethereum. Однако разработать и реализовать кошельковое приложение, которое одновременно было бы безопасным и удобным в использовании, — задача далеко не тривиальная. Как правило, чтобы обеспечить пользователю полный контроль и высокий уровень безопасности, приходится прибегать к сложным и непрактичным механизмам. С другой стороны, простой и приятный пользовательский опыт достигается лишь ценой отказа пользователей от контроля над своими ключами.
С InvisibleKeys мы опирались на признанный пользовательский опыт MetaMask, чтобы предложить новый компромисс между удобством использования и безопасностью, позволяющий MetaMask подключаться к инновационному внешнему мультиоблачному кошельку.
Как это работает? Мультиоблачный кошелёк InvisibleKeys хранит приватные ключи пользователя в двух или более облачных хранилищах (например, Google Drive, Dropbox и др.) таким образом, что даже при компрометации одного из этих сервисов ключи остаются в безопасности. Этот мультиоблачный подход следует запатентованному рабочему процессу (патент US20190095628), который обеспечивает очень высокий уровень безопасности при поддержке синхронизации между несколькими устройствами.
Для импорта аккаунта из облака MetaMask считывает JSON-файл в вашем Google Drive (или любом другом хранилище) с массивом ваших публичных ключей. Затем для подписания транзакции ваш приватный ключ (PK) временно и локально восстанавливается во внешнем веб-приложении, которое получает запросы на подпись от MetaMask, подписывает транзакцию и возвращает подписанную транзакцию в MetaMask. Ключи никогда не сохраняются и существуют лишь временно в памяти. Кроме того, для сохранения полного контроля пользователя расширение MetaMask никогда не получает доступ к PK. Даже если кошелёк разблокирован или скомпрометирован, PK не может быть похищен.
InvisibleKeys позволяет пользователям получать доступ к своему кошельку из любой точки мира, поскольку всё хранится в облаке, дополняя традиционный подход MetaMask и сохраняя его высокие стандарты удобства использования и пользовательского интерфейса.
InvisibleKeys работает с двумя основными компонентами: кошельком MetaMask и внешним веб-приложением.
Поскольку мы намеревались подписывать транзакцию за пределами кошелька, мы воспользовались частью кода, отвечающей за подключение и подписание аппаратного кошелька. Вместо отправки транзакции на подпись конкретному устройству открывается всплывающее окно с нашим веб-приложением, в котором и выполняется подписание.
В веб-приложении пользователь проходит аутентификацию с помощью своих облачных учётных данных, приватный ключ извлекается, транзакция подписывается, а ключ стирается из памяти. Наконец, всплывающее окно закрывается, и пользователь возвращается в кошелёк MetaMask, который находился в состоянии ожидания подписанной транзакции для отправки.
Два компонента взаимодействуют через браузерный window web API. В данном контексте этого достаточно, поскольку между ними никогда не передаётся никакая приватная информация.
Прежде всего нам пришлось внести некоторые изменения в UI MetaMask, чтобы добавить нашу стратегию подключения InvisibleKeys. Она добавляется так же, как в приложение добавляется новый поддерживаемый аппаратный кошелёк.
Ниже представлены некоторые из изменений, внесённых в код. Добавлены новое устройство и тип, а также новая кнопка для UI.
app/scripts/metamask-controller.js
ui/pages/create-account/connect-hardware/select-hardware.js
Для подключения различных аппаратных кошельков класс Keyring выступает интерфейсом для взаимодействия между кошельком и устройством бренда. Основные методы, необходимые для импорта аккаунтов и подписания транзакций: addAccounts(), возвращающий массив адресов, и signTransaction(), возвращающий подписанную транзакцию.
Мы реализовали эти методы в InvisibleKeyring. Первый открывает всплывающее окно и ожидает сообщения с массивом адресов. Второй открывает всплывающее окно с неподписанной транзакцией, закодированной в сообщении. Затем ожидается закодированная подписанная транзакция, которая будет возвращена и отправлена основным контроллером. В ожидании закрытия всплывающего окна MetaMask находится в состоянии загрузки.
Эти методы обращаются к другому классу — InvisibleConnect, который отвечает за подключение к веб-приложению и взаимодействие с ним.
./InvisibleConnect.js
Приложение состоит из двух страниц: одна предназначена для импорта аккаунтов, другая — для подписания транзакции.
На первой странице пользователь проходит аутентификацию в Google Drive, где в файле metamask/public.json хранятся его публичные ключи. Затем после нажатия кнопки импорта файл загружается, ключи считываются и отправляются через window web API в кошелёк MetaMask.
На второй странице пользователю необходимо пройти аутентификацию как в Google Drive, так и в Dropbox — сервисах, которые мы использовали в данном примере. Подход совместим с любым хранилищем. Единственное требование — это независимые сервисы, не вступающие в сговор. После аутентификации различные части информации извлекаются из этих сервисов, и приватный ключ восстанавливается с помощью метода decrypt(), реализованного в соответствии с механизмом, описанным в вышеупомянутом патенте, после чего транзакция подписывается. Сразу после этого приватный ключ стирается из памяти. Наконец, подписанная транзакция отправляется обратно в кошелёк MetaMask.
Ниже представлен код шаг за шагом. Показаны только релевантные части кода. Всё, что связано с состоянием UI или взаимодействием с API, опущено.
Расскажите немного о себе и своей команде.
Мы — увлечённая команда инженеров-программистов из Браги, Португалия, с глубокой экспертизой в области распределённых систем. Мы создали Invisible Lab — стартап, сосредоточенный на решении сложных задач в сфере блокчейна и Web3.
Когда вы впервые познакомились с MetaMask Snaps и каким был этот опыт?
Впервые мы познакомились с MetaMask Snaps на момент запуска SDK. С тех пор технология значительно улучшилась и продолжает развиваться.
Чем MetaMask Snaps отличается от других кошельков?
MetaMask Snaps предоставляет возможность создавать функции поверх него, сохраняя при этом дизайн, с которым ежедневно взаимодействуют миллионы пользователей.
Расскажите, каково это — создавать Snaps с MetaMask для вас и вашей команды?
Мы использовали предварительную версию MetaMask Snaps, которая не поддерживала все функции, необходимые для этого проекта. Тем не менее мы уверены, что всё созданное нами в ближайшем будущем можно будет реализовать с помощью Snaps значительно проще и удобнее.
Что для вас значит MetaMask Snaps?
Это кастомизация, возможность обновления и безграничные возможности для создания инноваций поверх кошелька MetaMask.
Какие возможности вы видите в MetaMask Snaps и что они открывают для пространства Web3?
Одна из интересных возможностей, которую мы видим, — это создание дополнительных стратегий безопасности. Формирование различных уровней защиты в зависимости от опыта и уровня риска, которому каждый пользователь готов подвергаться. Это может оказать значительное влияние на снижение уязвимости пользователей перед проблемами безопасности и технологическими взломами, которые, к сожалению, стали обычным явлением в этой сфере. Устранение этих проблем имеет ключевое значение для массового принятия Web3.
Какой совет вы хотели бы дать разработчикам, желающим попробовать MetaMask Snaps?
Не бойтесь погружаться! Вы будете удивлены тем, чего можно достичь с MetaMask Snaps. Будь то интеграция новых блокчейнов, функций или подходов к безопасности!
Чтобы начать работу с MetaMask Snaps:
Ознакомьтесь с документацией для разработчиков
Установите MetaMask Flask
Изучите руководство по MetaMask Snaps
Оставайтесь на связи с нами в Twitter, обсуждениях на GitHub и Discord
Следите за нашей командой на следующем хакатоне рядом с вами! Удачного BUIDLing ⚒️
Отказ от ответственности: MetaMask Snaps, как правило, разрабатываются третьими сторонами, а не Consensys Software. Использование MetaMask Snaps, разработанных третьими сторонами, осуществляется по вашему собственному усмотрению и на ваш риск, и вы соглашаетесь с тем, что несёте единоличную ответственность за любые убытки или ущерб, возникшие в результате такой деятельности. Consensys не даёт никаких явных или подразумеваемых гарантий, устных или письменных, в отношении MetaMask Snaps, разработанных третьими сторонами, и отказывается от какой-либо ответственности за них. Использование программного обеспечения, связанного с блокчейном, сопряжено с рисками, которые вы принимаете на себя в полной мере при использовании MetaMask Snaps.
Переведено ИИ. Может содержать ошибки. Пожалуйста, всегда проверяйте информацию.