Несколько дней назад компания ConsenSys объявила о запуске открытой бета-версии MetaMask Snaps. MetaMask Snaps - это, по сути, плагины, расширяющие возможности кошелька MetaMask. Эти "Snaps" - приложения, разработанные сторонними разработчиками, которые можно установить, чтобы добавить новые функциональные возможности.
Если сравнивать преобразование MetaMask компанией ConsenSys с WeChat, то Snap можно рассматривать как мини-программу WeChat. В результате становится очевидным, что MetaMask с ее амбициями в сочетании с масштабами ConsenSys и базой пользователей MetaMask изменит ландшафт сектора кошельков.
На официальном сайте уже перечислены 35 доступных Snap и запущен магазин приложений Snap App Store: https://snaps.metamask.io/.
Частичный список снимков
Итак, каковы же MetaMask Snaps с технической точки зрения? Каковы их возможности и ограничения? Безопасны ли они? Каков опыт разработчиков? Все эти факторы могут определить будущий потенциал MetaMask Snaps.
Начиная с прошлого года, LXDAO принимает активное участие в исследовании реализации Snaps. Несколько членов клуба занимались разработкой Snap и участвовали в соответствующих хакатонах. Сегодня мы рассмотрим эти вопросы с технической точки зрения и даже разработаем Snap, чтобы дать Вам возможность получить практический опыт разработчика.
Как правило, Вы можете установить привязки с официального рынка привязок MetaMask или непосредственно с сайта проекта. Например, с UniPass, когда Вы заходите на страницу приложения, там будет кнопка для подключения Вашей MetaMask.
Щелчок по нему инициирует установку Snap:
После установки Вы можете начать пользоваться продуктом и его возможностями. В этом случае UniPass создаст для Вас счет смарт-контракта, которым Вы сможете управлять через Ваш MetaMask EOA (Externally Owned Account).
Когда Вы инициируете перевод, UniPass запускает всплывающее окно Snap, чтобы подтвердить, хотите ли Вы выполнить операцию для кошелька UniPass AA.
После подтверждения через MetaMask Вы можете продолжить транзакцию. В этом сценарии MetaMask получает контроль над кошельком UniPass AA через Snap, избавляя UniPass от необходимости разрабатывать собственный плагин для кошелька. Это также позволяет недорого ввести пользователя в систему с помощью MetaMask.
Какие сведения мы можем получить из этого процесса установки и использования?
Безопасность всегда стоит на первом месте, когда речь идет о продуктах для кошельков. Давайте углубимся в разработку системы безопасности Snaps.
Snaps основаны на NPM, что подразумевает, что они являются веб-приложениями и приложениями на JavaScript. Как мы знаем, JavaScript очень гибок, но подвержен таким атакам, как XSS и фишинг. Как же MetaMask Snap решает эти проблемы?
Проведя исследование, мы обнаружили, что компания MetaMask профинансировала и интегрировала Hardened JavaScript (или Secure EcmaScript) от Agoric в качестве "полностью виртуализированного" решения для создания песочницы. Компания Agoric разработала API для ограничения JavaScript и подала проект предложения в TC-39: Предложение TC-39.
Проще говоря, Hardened JavaScript - это более защищенное подмножество стандартного JavaScript. Настроив некоторые возможности JavaScript и ограничив вызовы API, Вы снижаете различные риски. Он создает безопасную "песочницу" для выполнения кода и следует "Принципу наименьших привилегий" при планировании прав доступа к коду.
Более подробные технические характеристики Hardened JavaScript см. на сайте: https://tvcutsem.github.io/assets/HardenedJS_BlueLava2022.pdf.
Agoric и MetaMask совместно разработали LavaMoat(https://github.com/LavaMoat/lavamoat). Проект по повышению безопасности Snaps. LavaMoat в первую очередь решает проблемы безопасности, связанные с внешними зависимостями в проектах JavaScript.
И Agoric, и MetaMask прошли испытания на безопасность методом "черного ящика" и "белого ящика" и опубликовали подробные отчеты по безопасности. (Более подробная информация: https://agoric.com/blog/technology/purple-teaming-how-metamask-and-agoric-hunted-bugs-to-harden-javascript). Поэтому на уровне выполнения кода у нас есть достаточно оснований полагать, что Snaps безопасны.
Помимо явной авторизации пользователей и разработки с наименьшими привилегиями, чтобы получить официальное признание, Snaps должны быть открытыми, что снижает вероятность появления вредоносного кода. Мы также заметили, что Snaps, перечисленные на официальном сайте, прошли аудит безопасности, проведенный третьей стороной, что еще больше повышает доверие к ним.
В настоящее время управление Snaps осуществляется на основе пакетов NPM и версионности. NPM - это широко распространенный инструмент управления пакетами для веб-разработки, позволяющий разработчикам и проектным командам выпускать новые пакеты и код независимо друг от друга.
MetaMask не контролирует выпуск версий на платформе NPM. Существует вероятность того, что последние изменения в версии не будут открытыми или проверенными, не так ли?
После официального разъяснения все изменения в версиях пакетов NPM должны быть рассмотрены официальной командой и добавлены в белый список, прежде чем их можно будет установить. Поэтому, даже если команда проекта выпустит новый пакет NPM, он не может быть установлен пользователями до тех пор, пока не будет официально внесен в список. Такой подход, несомненно, увеличивает стоимость обновления версий Snap, но это действительно самое безопасное решение. Он отражает философию дизайна MetaMask Snap, в которой безопасность ставится превыше всего.
MetaMask Snap был недавно официально анонсирован, но на самом деле он находится в разработке уже более четырех лет! Первоначальная концепция MetaMask Snap была опубликована Дэном Финлеем 10 октября 2019 года на Medium. Средняя статья.
Баланс между безопасностью, гибкостью и эффективностью - это серьезная задача. Очевидно, что MetaMask вложила много ресурсов и подготовки в это начинание.
В настоящее время в основном используются три основных API:
Ниже приведено краткое введение в специфические возможности и эффекты, открываемые MetaMask Snap, чтобы дать Вам более наглядное представление.
Интерфейс Snap_notify может отображать уведомления в MetaMask или в браузере. С помощью этого интерфейса Snaps может отправлять прямые сообщения пользователям, как показано на изображении ниже.
Когда пользователь взаимодействует со смарт-контрактом, MetaMask запускает событие OnTransaction в Snap. MetaMask передает беззнаковую необработанную транзакцию в метод-обработчик onTransaction. Затем Snaps может вернуть интерфейс на вторичную страницу подтверждения транзакции, настраивая отображаемый контент.
Благодаря этой возможности можно реализовать такие функции, как безопасный аудит информации о транзакциях и расширенное отображение информации.
Функция Dialog (Диалог) позволяет привязкам напрямую открывать отдельное окно, аналогично традиционным диалоговым окнам Alert/Confirm/Prompt. Они используются для напоминаний, подтверждений и отправки информации, соответственно.
С помощью Dialog Вы сможете настроить простые интерактивные интерфейсы и операции для интеграции с Вашим DApp.
По соображениям безопасности Snap в настоящее время не поддерживает сторонние фронтенд-фреймворки и предоставляет только ограниченный UIKit. Здесь мы по-прежнему используем Insight в качестве примера, демонстрирующего библиотеку компонентов пользовательского интерфейса, доступную для разработчиков.
Как показано на изображении, текущие функции включают заголовки (крупный текст), текст (мелкий текст), панель (одноразовая карточка), разделитель, копируемость (нажмите, чтобы скопировать) и подмножество функций Markdown (жирный и курсив). Поэтому интерактивные возможности кажутся временно недостижимыми, а встроенный HTML не может быть использован для взаимодействия. Однако после того, как Вы задали вопрос в официальном Discord, они заявили, что эти ограничения введены из соображений безопасности и могут быть смягчены в следующих версиях.
Более того, из соображений безопасности внешние запросы поддерживаются только через метод Fetch и не поддерживают дополнительные протоколы запросов, такие как WebSocket. Из-за ограничений, связанных с безопасностью, возможностями и конфиденциальностью, невозможно получить доступ к информации о клиенте, например, к текущему URL, который вызвал Snap, что затрудняет реализацию более широкого спектра функций.
Большинство этих проблем связано с вопросами безопасности. Мы считаем, что со временем, когда безопасность будет подтверждена, будет предоставляться больше разрешений.
С появлением этих API MetaMask, по сути, превратился в продукт с открытой платформой. Это похоже на то, как WeChat запустил свой Официальный аккаунт и Мини-программы, превратившись из простого инструмента в чат.
Еще в 2019 году MetaMask уже предвидела нынешний рыночный ландшафт с многочисленными публичными цепочками, участниками проектов и требованиями к пользовательским кошелькам. Вместо того, чтобы для каждого проекта разрабатывать свой собственный плагин, а пользователям устанавливать несколько плагинов, эффективнее разрабатывать их на основе MetaMask Snap. В первой партии снимков мы увидели кошельки из других экосистем, помимо EVM, например, Sui Wallet, Solana Wallet и Arweave Wallet. Учитывая существующую базу пользователей, MetaMask Snap обязательно окажет значительное влияние на ландшафт кошельков.
На самом деле, потенциал MetaMask Snap может быть даже больше, чем мы себе представляем, выходя за рамки просто кошельков. Мы также можем наблюдать усилия команды EthSign, которая создала универсальный менеджер паролей под названием KeyChain на основе MetaMask Snaps. Все пароли браузера могут быть зашифрованы и сохранены с помощью ключа кошелька. Защищая свой кошелек, Вы, по сути, защищаете все свои пароли.
Также есть творение от команды Web3MQ. Web3MQ - это высокопроизводительная децентрализованная коммуникационная ретрансляционная сеть. Web3MQ Snap будет служить его клиентом для взаимодействия с сообщениями, уведомлениями, оповещениями и функциями push. Он будет интегрироваться с другими DApps, подключенными к Web3MQ, такими как инструменты чата или игры на основе блокчейна, среди прочих. С помощью Web3MQ Snap сообщения и обновления будут автоматически передаваться пользователям Metamask Snap, устраняя необходимость в дополнительной авторизации пользователей. Таким образом, создается недоверенное соединение между пользователями и между пользователями и приложениями.
Snaps в значительной степени ориентированы на разработчиков. С открытым API, как обстоят дела у разработчиков? Чтобы узнать это, давайте создадим Snap.
Хорошо известно, что большинство пользователей часто не знают, с какими смарт-контрактами они взаимодействуют, что вызывает следующие опасения:
Для обычных пользователей ожидать, что они будут просматривать solidity-код контрактов перед каждой операцией - это непосильная задача. Эта ситуация идеально подходит для функции Transaction Insight для анализа смарт-контрактов, как использование искусственного интеллекта для предварительного аудита безопасности, возможно, отсеивающего 80% основных фишинговых атак.
Установка бумажника
Сначала установите колбу MetaMask.
MetaMask Flask - это ориентированная на разработчиков версия расширения MetaMask, используемая в основном для предварительного просмотра новых возможностей и разработки экспериментальных функций. Помните, что он предназначен для разработки, а не для ежедневного использования. Не импортируйте закрытые ключи для ежедневного использования. Мы используем Flask в первую очередь для предварительного просмотра нашего локально разработанного Snap.
Рекомендуется временно отключить Ваш обычный кошелек MetaMask и другие браузерные кошельки после установки или создать новый профиль Chrome, чтобы избежать конфликтов.
После установки кошелька создайте новый кошелек, как и обычный кошелек MetaMask. Это тестовый кошелек, поэтому не импортируйте свой кошелек для ежедневного использования.
Далее нам нужно внести в только что созданный кошелек несколько тестовых монет, которые можно получить через краны. В Snap, о котором идет речь в этой статье, используется Goerli, поэтому далее речь пойдет в основном о Goerli.
Чтобы инициализировать Snap на основе шаблона, следуйте официальной документации. Сначала воспользуйтесь командой @metamask/create-snapCLI, чтобы создать новый проект Snap. В то же время, мы инициализируемся, используя официальный шаблон:
yarn create @metamask/snaptransaction-insights-snap && cd transaction-insights-snap
Основные файлы Snap находятся в папке ./packages/snap. Структура каталогов такова:
Файл конфигурации Snap находится в файле snap.mainfest.json
, А основное тело Snap находится в ./src/index.ts
, что весьма лаконично.
Во-первых, включите разрешения. Добавьте следующие три строки в файл snap.mainfest.json
:
Код jsonCopy
"initialPermissions": {
"endowment:transaction-insight": {}, // Понимание транзакций
"endowment:ethereum-provider": {}, // Доступ к RPC
"endowment:network-access": {} //
В файле манифеста Вы также можете обновить описание
и proposedName
, чтобы изменить описание и название проекта.
Для этой демонстрации достаточно изменить файл index.ts, чтобы все функции были реализованы. Ниже приведен упрощенный фрагмент кода. Полный исполняемый код можно найти на сайте: https://github.com/LidamaoHub/insights.
Код tsxCopy
Импортируйте { OnTransactionHandler, OnRpcRequestHandler } из '@metamask/snaps-types';
Импортируйте { heading, panel, text, copyable, divider } из '@metamask/snaps-ui';
export const onTransaction: OnTransactionHandler = async ({ transaction }) => {
// транзакция
включает в себя такие значения, как to
(адрес контракта) и data
(данные о взаимодействии).
// Пример кода для получения информации об аудите для контракта ниже
const info = await fetch(http://contract-info.audit.dev/?address=${transaction.to}
);
// Ниже приведен пример кода пользовательского интерфейса
Возврат {
содержание: [
text(
`${info.riskList.length} элемент риска`,
),
заголовок(`${info.riskList.length ? 'Risk List' : ''}`),
...info.riskList.map((item, i) => text(`${i + 1} ${item.text}`)),
divider(),
text(
`Больше информации об аудите по следующим url`,
),
copyable(
`https://contract-info.audit.dev/mm${info.token}`,
)
]
};
};
Для получения более подробной информации обратитесь к документации разработчика MetaMask Snap.
После установки, каждая Ваша транзакция будет отображать подобные предупреждения о рисках:
В настоящее время процесс разработки с помощью Snaps проходит довольно гладко, с очень небольшим количеством проблем. Официальные шаблоны также богаты и разнообразны. Опытные разработчики обычно могут приступить к работе и разработать нужный им Snap в течение нескольких часов. Однако самым большим препятствием для официальных релизов, рассчитанных на массовую аудиторию, будет аудит безопасности. Не все независимые разработчики или небольшие команды имеют ресурсы для проведения аудита своих Snap'ов. Поэтому ожидается, что количество и разнообразие Snaps не будет испытывать взрывного роста в течение значительного времени.
Если Вы можете успешно выполнить приведенный выше пример, поздравляем, Вы - квалифицированный начинающий разработчик Snap!
В прошлом году компания MetaMask официально запустила ДАО MetaMask Grants для финансирования ценных проектов в экосистеме MetaMask. Это экспериментальная инициатива, управляемая сотрудниками, целью которой является предоставление грантов внешним разработчикам по всему миру для создания впечатляющего опыта в экосистеме MetaMask. Часть квартальной прибыли MetaMask направляется в эту DAO, и ее текущий годовой бюджет составляет $2,4 млн.
Любой проект, обогащающий экосистему MetaMask, может подать заявку на получение официального гранта MetaMask от MetaMask Grants DAO. Для получения дополнительной информации посетите сайт https://metamaskgrants.org/.
Стоит отметить, что LXDAO имеет честь подать заявку на грант от MetaMask и получить его в этом году, а также активно участвует в развитии смежных проектов, внося свой вклад в экосистему MetaMask!
Мы рассмотрели, что такое Snap с технической точки зрения, его соображения безопасности, ограничения и опыт разработчиков. Подведем итоги:
В настоящее время MetaMask Snap все еще находится в стадии быстрых итераций. Предполагается, что в будущем будет открыто больше разрешений и возможностей. Есть надежда на внедрение более открытого, но безопасного механизма, например, безопасной и не требующей разрешения системы недорогого аудита, чтобы позволить большему числу разработчиков участвовать в проекте по более низкой цене. Если этот вопрос будет решен, то в будущем можно ожидать резкого увеличения спроса. Возможно, даже появятся специальные должности разработчиков Snap.
Используя огромную базу пользователей MetaMask, инди-разработчики также могут найти уникальные возможности. Давайте следить за следующими инновациями, которые Snaps предложит.
И наконец, спасибо за Вашу статью. Я считаю, что она внесет значительный вклад в повышение осведомленности о текущем состоянии MetaMask Snaps.
Пожалуйста, продолжайте следить за нашим Twitter: <a href="https://twitter.com/LXDAO_Official"" > @lxdao_official. Мы будем выпускать больше материалов, связанных с MetaMask Snap, например, семинары, так что следите за новостями!
Несколько дней назад компания ConsenSys объявила о запуске открытой бета-версии MetaMask Snaps. MetaMask Snaps - это, по сути, плагины, расширяющие возможности кошелька MetaMask. Эти "Snaps" - приложения, разработанные сторонними разработчиками, которые можно установить, чтобы добавить новые функциональные возможности.
Если сравнивать преобразование MetaMask компанией ConsenSys с WeChat, то Snap можно рассматривать как мини-программу WeChat. В результате становится очевидным, что MetaMask с ее амбициями в сочетании с масштабами ConsenSys и базой пользователей MetaMask изменит ландшафт сектора кошельков.
На официальном сайте уже перечислены 35 доступных Snap и запущен магазин приложений Snap App Store: https://snaps.metamask.io/.
Частичный список снимков
Итак, каковы же MetaMask Snaps с технической точки зрения? Каковы их возможности и ограничения? Безопасны ли они? Каков опыт разработчиков? Все эти факторы могут определить будущий потенциал MetaMask Snaps.
Начиная с прошлого года, LXDAO принимает активное участие в исследовании реализации Snaps. Несколько членов клуба занимались разработкой Snap и участвовали в соответствующих хакатонах. Сегодня мы рассмотрим эти вопросы с технической точки зрения и даже разработаем Snap, чтобы дать Вам возможность получить практический опыт разработчика.
Как правило, Вы можете установить привязки с официального рынка привязок MetaMask или непосредственно с сайта проекта. Например, с UniPass, когда Вы заходите на страницу приложения, там будет кнопка для подключения Вашей MetaMask.
Щелчок по нему инициирует установку Snap:
После установки Вы можете начать пользоваться продуктом и его возможностями. В этом случае UniPass создаст для Вас счет смарт-контракта, которым Вы сможете управлять через Ваш MetaMask EOA (Externally Owned Account).
Когда Вы инициируете перевод, UniPass запускает всплывающее окно Snap, чтобы подтвердить, хотите ли Вы выполнить операцию для кошелька UniPass AA.
После подтверждения через MetaMask Вы можете продолжить транзакцию. В этом сценарии MetaMask получает контроль над кошельком UniPass AA через Snap, избавляя UniPass от необходимости разрабатывать собственный плагин для кошелька. Это также позволяет недорого ввести пользователя в систему с помощью MetaMask.
Какие сведения мы можем получить из этого процесса установки и использования?
Безопасность всегда стоит на первом месте, когда речь идет о продуктах для кошельков. Давайте углубимся в разработку системы безопасности Snaps.
Snaps основаны на NPM, что подразумевает, что они являются веб-приложениями и приложениями на JavaScript. Как мы знаем, JavaScript очень гибок, но подвержен таким атакам, как XSS и фишинг. Как же MetaMask Snap решает эти проблемы?
Проведя исследование, мы обнаружили, что компания MetaMask профинансировала и интегрировала Hardened JavaScript (или Secure EcmaScript) от Agoric в качестве "полностью виртуализированного" решения для создания песочницы. Компания Agoric разработала API для ограничения JavaScript и подала проект предложения в TC-39: Предложение TC-39.
Проще говоря, Hardened JavaScript - это более защищенное подмножество стандартного JavaScript. Настроив некоторые возможности JavaScript и ограничив вызовы API, Вы снижаете различные риски. Он создает безопасную "песочницу" для выполнения кода и следует "Принципу наименьших привилегий" при планировании прав доступа к коду.
Более подробные технические характеристики Hardened JavaScript см. на сайте: https://tvcutsem.github.io/assets/HardenedJS_BlueLava2022.pdf.
Agoric и MetaMask совместно разработали LavaMoat(https://github.com/LavaMoat/lavamoat). Проект по повышению безопасности Snaps. LavaMoat в первую очередь решает проблемы безопасности, связанные с внешними зависимостями в проектах JavaScript.
И Agoric, и MetaMask прошли испытания на безопасность методом "черного ящика" и "белого ящика" и опубликовали подробные отчеты по безопасности. (Более подробная информация: https://agoric.com/blog/technology/purple-teaming-how-metamask-and-agoric-hunted-bugs-to-harden-javascript). Поэтому на уровне выполнения кода у нас есть достаточно оснований полагать, что Snaps безопасны.
Помимо явной авторизации пользователей и разработки с наименьшими привилегиями, чтобы получить официальное признание, Snaps должны быть открытыми, что снижает вероятность появления вредоносного кода. Мы также заметили, что Snaps, перечисленные на официальном сайте, прошли аудит безопасности, проведенный третьей стороной, что еще больше повышает доверие к ним.
В настоящее время управление Snaps осуществляется на основе пакетов NPM и версионности. NPM - это широко распространенный инструмент управления пакетами для веб-разработки, позволяющий разработчикам и проектным командам выпускать новые пакеты и код независимо друг от друга.
MetaMask не контролирует выпуск версий на платформе NPM. Существует вероятность того, что последние изменения в версии не будут открытыми или проверенными, не так ли?
После официального разъяснения все изменения в версиях пакетов NPM должны быть рассмотрены официальной командой и добавлены в белый список, прежде чем их можно будет установить. Поэтому, даже если команда проекта выпустит новый пакет NPM, он не может быть установлен пользователями до тех пор, пока не будет официально внесен в список. Такой подход, несомненно, увеличивает стоимость обновления версий Snap, но это действительно самое безопасное решение. Он отражает философию дизайна MetaMask Snap, в которой безопасность ставится превыше всего.
MetaMask Snap был недавно официально анонсирован, но на самом деле он находится в разработке уже более четырех лет! Первоначальная концепция MetaMask Snap была опубликована Дэном Финлеем 10 октября 2019 года на Medium. Средняя статья.
Баланс между безопасностью, гибкостью и эффективностью - это серьезная задача. Очевидно, что MetaMask вложила много ресурсов и подготовки в это начинание.
В настоящее время в основном используются три основных API:
Ниже приведено краткое введение в специфические возможности и эффекты, открываемые MetaMask Snap, чтобы дать Вам более наглядное представление.
Интерфейс Snap_notify может отображать уведомления в MetaMask или в браузере. С помощью этого интерфейса Snaps может отправлять прямые сообщения пользователям, как показано на изображении ниже.
Когда пользователь взаимодействует со смарт-контрактом, MetaMask запускает событие OnTransaction в Snap. MetaMask передает беззнаковую необработанную транзакцию в метод-обработчик onTransaction. Затем Snaps может вернуть интерфейс на вторичную страницу подтверждения транзакции, настраивая отображаемый контент.
Благодаря этой возможности можно реализовать такие функции, как безопасный аудит информации о транзакциях и расширенное отображение информации.
Функция Dialog (Диалог) позволяет привязкам напрямую открывать отдельное окно, аналогично традиционным диалоговым окнам Alert/Confirm/Prompt. Они используются для напоминаний, подтверждений и отправки информации, соответственно.
С помощью Dialog Вы сможете настроить простые интерактивные интерфейсы и операции для интеграции с Вашим DApp.
По соображениям безопасности Snap в настоящее время не поддерживает сторонние фронтенд-фреймворки и предоставляет только ограниченный UIKit. Здесь мы по-прежнему используем Insight в качестве примера, демонстрирующего библиотеку компонентов пользовательского интерфейса, доступную для разработчиков.
Как показано на изображении, текущие функции включают заголовки (крупный текст), текст (мелкий текст), панель (одноразовая карточка), разделитель, копируемость (нажмите, чтобы скопировать) и подмножество функций Markdown (жирный и курсив). Поэтому интерактивные возможности кажутся временно недостижимыми, а встроенный HTML не может быть использован для взаимодействия. Однако после того, как Вы задали вопрос в официальном Discord, они заявили, что эти ограничения введены из соображений безопасности и могут быть смягчены в следующих версиях.
Более того, из соображений безопасности внешние запросы поддерживаются только через метод Fetch и не поддерживают дополнительные протоколы запросов, такие как WebSocket. Из-за ограничений, связанных с безопасностью, возможностями и конфиденциальностью, невозможно получить доступ к информации о клиенте, например, к текущему URL, который вызвал Snap, что затрудняет реализацию более широкого спектра функций.
Большинство этих проблем связано с вопросами безопасности. Мы считаем, что со временем, когда безопасность будет подтверждена, будет предоставляться больше разрешений.
С появлением этих API MetaMask, по сути, превратился в продукт с открытой платформой. Это похоже на то, как WeChat запустил свой Официальный аккаунт и Мини-программы, превратившись из простого инструмента в чат.
Еще в 2019 году MetaMask уже предвидела нынешний рыночный ландшафт с многочисленными публичными цепочками, участниками проектов и требованиями к пользовательским кошелькам. Вместо того, чтобы для каждого проекта разрабатывать свой собственный плагин, а пользователям устанавливать несколько плагинов, эффективнее разрабатывать их на основе MetaMask Snap. В первой партии снимков мы увидели кошельки из других экосистем, помимо EVM, например, Sui Wallet, Solana Wallet и Arweave Wallet. Учитывая существующую базу пользователей, MetaMask Snap обязательно окажет значительное влияние на ландшафт кошельков.
На самом деле, потенциал MetaMask Snap может быть даже больше, чем мы себе представляем, выходя за рамки просто кошельков. Мы также можем наблюдать усилия команды EthSign, которая создала универсальный менеджер паролей под названием KeyChain на основе MetaMask Snaps. Все пароли браузера могут быть зашифрованы и сохранены с помощью ключа кошелька. Защищая свой кошелек, Вы, по сути, защищаете все свои пароли.
Также есть творение от команды Web3MQ. Web3MQ - это высокопроизводительная децентрализованная коммуникационная ретрансляционная сеть. Web3MQ Snap будет служить его клиентом для взаимодействия с сообщениями, уведомлениями, оповещениями и функциями push. Он будет интегрироваться с другими DApps, подключенными к Web3MQ, такими как инструменты чата или игры на основе блокчейна, среди прочих. С помощью Web3MQ Snap сообщения и обновления будут автоматически передаваться пользователям Metamask Snap, устраняя необходимость в дополнительной авторизации пользователей. Таким образом, создается недоверенное соединение между пользователями и между пользователями и приложениями.
Snaps в значительной степени ориентированы на разработчиков. С открытым API, как обстоят дела у разработчиков? Чтобы узнать это, давайте создадим Snap.
Хорошо известно, что большинство пользователей часто не знают, с какими смарт-контрактами они взаимодействуют, что вызывает следующие опасения:
Для обычных пользователей ожидать, что они будут просматривать solidity-код контрактов перед каждой операцией - это непосильная задача. Эта ситуация идеально подходит для функции Transaction Insight для анализа смарт-контрактов, как использование искусственного интеллекта для предварительного аудита безопасности, возможно, отсеивающего 80% основных фишинговых атак.
Установка бумажника
Сначала установите колбу MetaMask.
MetaMask Flask - это ориентированная на разработчиков версия расширения MetaMask, используемая в основном для предварительного просмотра новых возможностей и разработки экспериментальных функций. Помните, что он предназначен для разработки, а не для ежедневного использования. Не импортируйте закрытые ключи для ежедневного использования. Мы используем Flask в первую очередь для предварительного просмотра нашего локально разработанного Snap.
Рекомендуется временно отключить Ваш обычный кошелек MetaMask и другие браузерные кошельки после установки или создать новый профиль Chrome, чтобы избежать конфликтов.
После установки кошелька создайте новый кошелек, как и обычный кошелек MetaMask. Это тестовый кошелек, поэтому не импортируйте свой кошелек для ежедневного использования.
Далее нам нужно внести в только что созданный кошелек несколько тестовых монет, которые можно получить через краны. В Snap, о котором идет речь в этой статье, используется Goerli, поэтому далее речь пойдет в основном о Goerli.
Чтобы инициализировать Snap на основе шаблона, следуйте официальной документации. Сначала воспользуйтесь командой @metamask/create-snapCLI, чтобы создать новый проект Snap. В то же время, мы инициализируемся, используя официальный шаблон:
yarn create @metamask/snaptransaction-insights-snap && cd transaction-insights-snap
Основные файлы Snap находятся в папке ./packages/snap. Структура каталогов такова:
Файл конфигурации Snap находится в файле snap.mainfest.json
, А основное тело Snap находится в ./src/index.ts
, что весьма лаконично.
Во-первых, включите разрешения. Добавьте следующие три строки в файл snap.mainfest.json
:
Код jsonCopy
"initialPermissions": {
"endowment:transaction-insight": {}, // Понимание транзакций
"endowment:ethereum-provider": {}, // Доступ к RPC
"endowment:network-access": {} //
В файле манифеста Вы также можете обновить описание
и proposedName
, чтобы изменить описание и название проекта.
Для этой демонстрации достаточно изменить файл index.ts, чтобы все функции были реализованы. Ниже приведен упрощенный фрагмент кода. Полный исполняемый код можно найти на сайте: https://github.com/LidamaoHub/insights.
Код tsxCopy
Импортируйте { OnTransactionHandler, OnRpcRequestHandler } из '@metamask/snaps-types';
Импортируйте { heading, panel, text, copyable, divider } из '@metamask/snaps-ui';
export const onTransaction: OnTransactionHandler = async ({ transaction }) => {
// транзакция
включает в себя такие значения, как to
(адрес контракта) и data
(данные о взаимодействии).
// Пример кода для получения информации об аудите для контракта ниже
const info = await fetch(http://contract-info.audit.dev/?address=${transaction.to}
);
// Ниже приведен пример кода пользовательского интерфейса
Возврат {
содержание: [
text(
`${info.riskList.length} элемент риска`,
),
заголовок(`${info.riskList.length ? 'Risk List' : ''}`),
...info.riskList.map((item, i) => text(`${i + 1} ${item.text}`)),
divider(),
text(
`Больше информации об аудите по следующим url`,
),
copyable(
`https://contract-info.audit.dev/mm${info.token}`,
)
]
};
};
Для получения более подробной информации обратитесь к документации разработчика MetaMask Snap.
После установки, каждая Ваша транзакция будет отображать подобные предупреждения о рисках:
В настоящее время процесс разработки с помощью Snaps проходит довольно гладко, с очень небольшим количеством проблем. Официальные шаблоны также богаты и разнообразны. Опытные разработчики обычно могут приступить к работе и разработать нужный им Snap в течение нескольких часов. Однако самым большим препятствием для официальных релизов, рассчитанных на массовую аудиторию, будет аудит безопасности. Не все независимые разработчики или небольшие команды имеют ресурсы для проведения аудита своих Snap'ов. Поэтому ожидается, что количество и разнообразие Snaps не будет испытывать взрывного роста в течение значительного времени.
Если Вы можете успешно выполнить приведенный выше пример, поздравляем, Вы - квалифицированный начинающий разработчик Snap!
В прошлом году компания MetaMask официально запустила ДАО MetaMask Grants для финансирования ценных проектов в экосистеме MetaMask. Это экспериментальная инициатива, управляемая сотрудниками, целью которой является предоставление грантов внешним разработчикам по всему миру для создания впечатляющего опыта в экосистеме MetaMask. Часть квартальной прибыли MetaMask направляется в эту DAO, и ее текущий годовой бюджет составляет $2,4 млн.
Любой проект, обогащающий экосистему MetaMask, может подать заявку на получение официального гранта MetaMask от MetaMask Grants DAO. Для получения дополнительной информации посетите сайт https://metamaskgrants.org/.
Стоит отметить, что LXDAO имеет честь подать заявку на грант от MetaMask и получить его в этом году, а также активно участвует в развитии смежных проектов, внося свой вклад в экосистему MetaMask!
Мы рассмотрели, что такое Snap с технической точки зрения, его соображения безопасности, ограничения и опыт разработчиков. Подведем итоги:
В настоящее время MetaMask Snap все еще находится в стадии быстрых итераций. Предполагается, что в будущем будет открыто больше разрешений и возможностей. Есть надежда на внедрение более открытого, но безопасного механизма, например, безопасной и не требующей разрешения системы недорогого аудита, чтобы позволить большему числу разработчиков участвовать в проекте по более низкой цене. Если этот вопрос будет решен, то в будущем можно ожидать резкого увеличения спроса. Возможно, даже появятся специальные должности разработчиков Snap.
Используя огромную базу пользователей MetaMask, инди-разработчики также могут найти уникальные возможности. Давайте следить за следующими инновациями, которые Snaps предложит.
И наконец, спасибо за Вашу статью. Я считаю, что она внесет значительный вклад в повышение осведомленности о текущем состоянии MetaMask Snaps.
Пожалуйста, продолжайте следить за нашим Twitter: <a href="https://twitter.com/LXDAO_Official"" > @lxdao_official. Мы будем выпускать больше материалов, связанных с MetaMask Snap, например, семинары, так что следите за новостями!