Технический обзор MetaMask Snap: Опыт разработки, ограничения возможностей, безопасность и анализ бизнес-потенциала

ПродвинутыйDec 24, 2023
Эта статья знакомит Вас с расширенными возможностями MetaMask Snap и рассказывает о том, как эта технология позволяет кошельку MetaMask выполнять более разнообразные задачи с помощью плагинов. Он подчеркивает, как он преодолевает ограничения традиционных кошельков, сохраняя при этом безопасность, и раскрывает больший потенциал.
Технический обзор MetaMask Snap: Опыт разработки, ограничения возможностей, безопасность и анализ бизнес-потенциала

Что такое 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 Snap

Итак, каковы же MetaMask Snaps с технической точки зрения? Каковы их возможности и ограничения? Безопасны ли они? Каков опыт разработчиков? Все эти факторы могут определить будущий потенциал MetaMask Snaps.

Начиная с прошлого года, LXDAO принимает активное участие в исследовании реализации Snaps. Несколько членов клуба занимались разработкой Snap и участвовали в соответствующих хакатонах. Сегодня мы рассмотрим эти вопросы с технической точки зрения и даже разработаем Snap, чтобы дать Вам возможность получить практический опыт разработчика.

Начало работы с MetaMask Snap

Установка MetaMask Snap

Как правило, Вы можете установить привязки с официального рынка привязок MetaMask или непосредственно с сайта проекта. Например, с UniPass, когда Вы заходите на страницу приложения, там будет кнопка для подключения Вашей MetaMask.

Щелчок по нему инициирует установку Snap:

Использование привязки MetaMask

После установки Вы можете начать пользоваться продуктом и его возможностями. В этом случае UniPass создаст для Вас счет смарт-контракта, которым Вы сможете управлять через Ваш MetaMask EOA (Externally Owned Account).

Когда Вы инициируете перевод, UniPass запускает всплывающее окно Snap, чтобы подтвердить, хотите ли Вы выполнить операцию для кошелька UniPass AA.

После подтверждения через MetaMask Вы можете продолжить транзакцию. В этом сценарии MetaMask получает контроль над кошельком UniPass AA через Snap, избавляя UniPass от необходимости разрабатывать собственный плагин для кошелька. Это также позволяет недорого ввести пользователя в систему с помощью MetaMask.

Какие сведения мы можем получить из этого процесса установки и использования?

  1. Тонкий контроль разрешений: Снапы предлагают сложную настройку разрешений, охватывающую соединения с кошельком, сетевые запросы и многое другое. Они были разработаны по принципу "Принцип наименьших привилегий", ставя безопасность на первое место.
  2. Управление пакетами через NPM: Как указано в npm:@unipasswallet/unipass-snap, Snap полагается на NPM для управления пакетами и версиями, что может иметь проблемы с безопасностью, о которых мы расскажем позже.
  3. Высокая гибкость, но лаконичный пользовательский интерфейс: Snaps очень легко адаптируются, позволяя проектам разрабатывать и диктовать свои собственные функции и логику. Однако пользовательский интерфейс можно было бы немного доработать.
  4. Простой и надежный опыт: Снапы обеспечивают плавный и надежный пользовательский опыт, отвечая стандартам как бета-версии, так и производственного уровня.

Безопасность всегда стоит на первом месте, когда речь идет о продуктах для кошельков. Давайте углубимся в разработку системы безопасности Snaps.

Безопасны ли защелки?

Анализ времени выполнения кода Snap

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?

В настоящее время управление Snaps осуществляется на основе пакетов NPM и версионности. NPM - это широко распространенный инструмент управления пакетами для веб-разработки, позволяющий разработчикам и проектным командам выпускать новые пакеты и код независимо друг от друга.

MetaMask не контролирует выпуск версий на платформе NPM. Существует вероятность того, что последние изменения в версии не будут открытыми или проверенными, не так ли?

После официального разъяснения все изменения в версиях пакетов NPM должны быть рассмотрены официальной командой и добавлены в белый список, прежде чем их можно будет установить. Поэтому, даже если команда проекта выпустит новый пакет NPM, он не может быть установлен пользователями до тех пор, пока не будет официально внесен в список. Такой подход, несомненно, увеличивает стоимость обновления версий Snap, но это действительно самое безопасное решение. Он отражает философию дизайна MetaMask Snap, в которой безопасность ставится превыше всего.

Технические возможности и ограничения MetaMask Snap

MetaMask Snap был недавно официально анонсирован, но на самом деле он находится в разработке уже более четырех лет! Первоначальная концепция MetaMask Snap была опубликована Дэном Финлеем 10 октября 2019 года на Medium. Средняя статья.

Баланс между безопасностью, гибкостью и эффективностью - это серьезная задача. Очевидно, что MetaMask вложила много ресурсов и подготовки в это начинание.

В настоящее время в основном используются три основных API:

  1. Интероперабельность: Позволяет разработчикам создавать кошельки для других цепочек на основе MetaMask.
  2. Transaction Insights: Позволяет разработчикам получать данные о транзакциях до того, как пользователь начнет транзакцию, для оценки рисков.
  3. Уведомления: Позволяет отправлять пользователям прямые сообщения через Snaps, хотя для этого, по-видимому, требуется поддержка веб-сайта, и эта возможность кажется несколько ограниченной.

Ниже приведено краткое введение в специфические возможности и эффекты, открываемые MetaMask Snap, чтобы дать Вам более наглядное представление.

Возможность уведомления

Интерфейс Snap_notify может отображать уведомления в MetaMask или в браузере. С помощью этого интерфейса Snaps может отправлять прямые сообщения пользователям, как показано на изображении ниже.

Возможность Transaction Insights

Когда пользователь взаимодействует со смарт-контрактом, MetaMask запускает событие OnTransaction в Snap. MetaMask передает беззнаковую необработанную транзакцию в метод-обработчик onTransaction. Затем Snaps может вернуть интерфейс на вторичную страницу подтверждения транзакции, настраивая отображаемый контент.

Благодаря этой возможности можно реализовать такие функции, как безопасный аудит информации о транзакциях и расширенное отображение информации.

Диалоговый интерфейс и возможности пользовательского интерфейса

Функция Dialog (Диалог) позволяет привязкам напрямую открывать отдельное окно, аналогично традиционным диалоговым окнам Alert/Confirm/Prompt. Они используются для напоминаний, подтверждений и отправки информации, соответственно.

С помощью Dialog Вы сможете настроить простые интерактивные интерфейсы и операции для интеграции с Вашим DApp.

Чего не может добиться MetaMask Snap на данный момент?

По соображениям безопасности 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.

Создание привязки для тестирования

Процесс мышления

Хорошо известно, что большинство пользователей часто не знают, с какими смарт-контрактами они взаимодействуют, что вызывает следующие опасения:

  1. Не был ли контракт на сделку заменен фишинговым сайтом.
  2. Можно ли обновлять контракт на транзакцию.
  3. Является ли смарт-контракт недавно запущенным и не был ли он проверен многими.
  4. Является ли контракт на сделку открытым.

Для обычных пользователей ожидать, что они будут просматривать 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

Основные файлы 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 с технической точки зрения, его соображения безопасности, ограничения и опыт разработчиков. Подведем итоги:

  • Снэпы сродни мини-программам WeChat, открывая более широкие возможности для MetaMask.
  • Безопасность относительно надежна. Код работает в ограниченной среде "песочницы". Код должен быть открыт и проверен. Официальная команда создала белый список для авторизации установки.
  • Из-за соображений безопасности текущая поверхность API несколько ограничена. Тем не менее, это позволяет использовать широкий спектр фантазийных Снапов.
  • Благодаря четырем годам доработок и реальных испытаний, опыт разработчиков является первоклассным. Однако благодаря встроенным мерам безопасности, включая механизм белых списков и обязательный аудит, не стоит ожидать, что в ближайшее время рынок наводнят потоки Snaps. Но это вполне объяснимо, Мини-программы WeChat начинались медленно, с очень ограниченным API, но с 2018 года произошел взрыв, и теперь их количество составляет 450M+ DAU и 7M+ Мини-программ.

В настоящее время MetaMask Snap все еще находится в стадии быстрых итераций. Предполагается, что в будущем будет открыто больше разрешений и возможностей. Есть надежда на внедрение более открытого, но безопасного механизма, например, безопасной и не требующей разрешения системы недорогого аудита, чтобы позволить большему числу разработчиков участвовать в проекте по более низкой цене. Если этот вопрос будет решен, то в будущем можно ожидать резкого увеличения спроса. Возможно, даже появятся специальные должности разработчиков Snap.

Используя огромную базу пользователей MetaMask, инди-разработчики также могут найти уникальные возможности. Давайте следить за следующими инновациями, которые Snaps предложит.

И наконец, спасибо за Вашу статью. Я считаю, что она внесет значительный вклад в повышение осведомленности о текущем состоянии MetaMask Snaps.

Пожалуйста, продолжайте следить за нашим Twitter: <a href="https://twitter.com/LXDAO_Official"" > @lxdao_official. Мы будем выпускать больше материалов, связанных с MetaMask Snap, например, семинары, так что следите за новостями!

Отказ от ответственности:

  1. Эта статья перепечатана с[medium]. Все авторские права принадлежат оригинальному автору[LXDAO]. Если у Вас есть возражения против этой перепечатки, пожалуйста, свяжитесь с командой GateLearn(gatelearn@gate.io), и они оперативно рассмотрят их.
  2. Предупреждение об ответственности: Мнения и взгляды, выраженные в этой статье, принадлежат исключительно автору и не являются инвестиционным советом.
  3. Перевод статьи на другие языки осуществляется командой Gate Learn. Если не указано, копирование, распространение или плагиат переведенных статей запрещены.

Технический обзор MetaMask Snap: Опыт разработки, ограничения возможностей, безопасность и анализ бизнес-потенциала

ПродвинутыйDec 24, 2023
Эта статья знакомит Вас с расширенными возможностями MetaMask Snap и рассказывает о том, как эта технология позволяет кошельку MetaMask выполнять более разнообразные задачи с помощью плагинов. Он подчеркивает, как он преодолевает ограничения традиционных кошельков, сохраняя при этом безопасность, и раскрывает больший потенциал.
Технический обзор MetaMask Snap: Опыт разработки, ограничения возможностей, безопасность и анализ бизнес-потенциала

Что такое 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 Snap

Итак, каковы же MetaMask Snaps с технической точки зрения? Каковы их возможности и ограничения? Безопасны ли они? Каков опыт разработчиков? Все эти факторы могут определить будущий потенциал MetaMask Snaps.

Начиная с прошлого года, LXDAO принимает активное участие в исследовании реализации Snaps. Несколько членов клуба занимались разработкой Snap и участвовали в соответствующих хакатонах. Сегодня мы рассмотрим эти вопросы с технической точки зрения и даже разработаем Snap, чтобы дать Вам возможность получить практический опыт разработчика.

Начало работы с MetaMask Snap

Установка MetaMask Snap

Как правило, Вы можете установить привязки с официального рынка привязок MetaMask или непосредственно с сайта проекта. Например, с UniPass, когда Вы заходите на страницу приложения, там будет кнопка для подключения Вашей MetaMask.

Щелчок по нему инициирует установку Snap:

Использование привязки MetaMask

После установки Вы можете начать пользоваться продуктом и его возможностями. В этом случае UniPass создаст для Вас счет смарт-контракта, которым Вы сможете управлять через Ваш MetaMask EOA (Externally Owned Account).

Когда Вы инициируете перевод, UniPass запускает всплывающее окно Snap, чтобы подтвердить, хотите ли Вы выполнить операцию для кошелька UniPass AA.

После подтверждения через MetaMask Вы можете продолжить транзакцию. В этом сценарии MetaMask получает контроль над кошельком UniPass AA через Snap, избавляя UniPass от необходимости разрабатывать собственный плагин для кошелька. Это также позволяет недорого ввести пользователя в систему с помощью MetaMask.

Какие сведения мы можем получить из этого процесса установки и использования?

  1. Тонкий контроль разрешений: Снапы предлагают сложную настройку разрешений, охватывающую соединения с кошельком, сетевые запросы и многое другое. Они были разработаны по принципу "Принцип наименьших привилегий", ставя безопасность на первое место.
  2. Управление пакетами через NPM: Как указано в npm:@unipasswallet/unipass-snap, Snap полагается на NPM для управления пакетами и версиями, что может иметь проблемы с безопасностью, о которых мы расскажем позже.
  3. Высокая гибкость, но лаконичный пользовательский интерфейс: Snaps очень легко адаптируются, позволяя проектам разрабатывать и диктовать свои собственные функции и логику. Однако пользовательский интерфейс можно было бы немного доработать.
  4. Простой и надежный опыт: Снапы обеспечивают плавный и надежный пользовательский опыт, отвечая стандартам как бета-версии, так и производственного уровня.

Безопасность всегда стоит на первом месте, когда речь идет о продуктах для кошельков. Давайте углубимся в разработку системы безопасности Snaps.

Безопасны ли защелки?

Анализ времени выполнения кода Snap

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?

В настоящее время управление Snaps осуществляется на основе пакетов NPM и версионности. NPM - это широко распространенный инструмент управления пакетами для веб-разработки, позволяющий разработчикам и проектным командам выпускать новые пакеты и код независимо друг от друга.

MetaMask не контролирует выпуск версий на платформе NPM. Существует вероятность того, что последние изменения в версии не будут открытыми или проверенными, не так ли?

После официального разъяснения все изменения в версиях пакетов NPM должны быть рассмотрены официальной командой и добавлены в белый список, прежде чем их можно будет установить. Поэтому, даже если команда проекта выпустит новый пакет NPM, он не может быть установлен пользователями до тех пор, пока не будет официально внесен в список. Такой подход, несомненно, увеличивает стоимость обновления версий Snap, но это действительно самое безопасное решение. Он отражает философию дизайна MetaMask Snap, в которой безопасность ставится превыше всего.

Технические возможности и ограничения MetaMask Snap

MetaMask Snap был недавно официально анонсирован, но на самом деле он находится в разработке уже более четырех лет! Первоначальная концепция MetaMask Snap была опубликована Дэном Финлеем 10 октября 2019 года на Medium. Средняя статья.

Баланс между безопасностью, гибкостью и эффективностью - это серьезная задача. Очевидно, что MetaMask вложила много ресурсов и подготовки в это начинание.

В настоящее время в основном используются три основных API:

  1. Интероперабельность: Позволяет разработчикам создавать кошельки для других цепочек на основе MetaMask.
  2. Transaction Insights: Позволяет разработчикам получать данные о транзакциях до того, как пользователь начнет транзакцию, для оценки рисков.
  3. Уведомления: Позволяет отправлять пользователям прямые сообщения через Snaps, хотя для этого, по-видимому, требуется поддержка веб-сайта, и эта возможность кажется несколько ограниченной.

Ниже приведено краткое введение в специфические возможности и эффекты, открываемые MetaMask Snap, чтобы дать Вам более наглядное представление.

Возможность уведомления

Интерфейс Snap_notify может отображать уведомления в MetaMask или в браузере. С помощью этого интерфейса Snaps может отправлять прямые сообщения пользователям, как показано на изображении ниже.

Возможность Transaction Insights

Когда пользователь взаимодействует со смарт-контрактом, MetaMask запускает событие OnTransaction в Snap. MetaMask передает беззнаковую необработанную транзакцию в метод-обработчик onTransaction. Затем Snaps может вернуть интерфейс на вторичную страницу подтверждения транзакции, настраивая отображаемый контент.

Благодаря этой возможности можно реализовать такие функции, как безопасный аудит информации о транзакциях и расширенное отображение информации.

Диалоговый интерфейс и возможности пользовательского интерфейса

Функция Dialog (Диалог) позволяет привязкам напрямую открывать отдельное окно, аналогично традиционным диалоговым окнам Alert/Confirm/Prompt. Они используются для напоминаний, подтверждений и отправки информации, соответственно.

С помощью Dialog Вы сможете настроить простые интерактивные интерфейсы и операции для интеграции с Вашим DApp.

Чего не может добиться MetaMask Snap на данный момент?

По соображениям безопасности 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.

Создание привязки для тестирования

Процесс мышления

Хорошо известно, что большинство пользователей часто не знают, с какими смарт-контрактами они взаимодействуют, что вызывает следующие опасения:

  1. Не был ли контракт на сделку заменен фишинговым сайтом.
  2. Можно ли обновлять контракт на транзакцию.
  3. Является ли смарт-контракт недавно запущенным и не был ли он проверен многими.
  4. Является ли контракт на сделку открытым.

Для обычных пользователей ожидать, что они будут просматривать 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

Основные файлы 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 с технической точки зрения, его соображения безопасности, ограничения и опыт разработчиков. Подведем итоги:

  • Снэпы сродни мини-программам WeChat, открывая более широкие возможности для MetaMask.
  • Безопасность относительно надежна. Код работает в ограниченной среде "песочницы". Код должен быть открыт и проверен. Официальная команда создала белый список для авторизации установки.
  • Из-за соображений безопасности текущая поверхность API несколько ограничена. Тем не менее, это позволяет использовать широкий спектр фантазийных Снапов.
  • Благодаря четырем годам доработок и реальных испытаний, опыт разработчиков является первоклассным. Однако благодаря встроенным мерам безопасности, включая механизм белых списков и обязательный аудит, не стоит ожидать, что в ближайшее время рынок наводнят потоки Snaps. Но это вполне объяснимо, Мини-программы WeChat начинались медленно, с очень ограниченным API, но с 2018 года произошел взрыв, и теперь их количество составляет 450M+ DAU и 7M+ Мини-программ.

В настоящее время MetaMask Snap все еще находится в стадии быстрых итераций. Предполагается, что в будущем будет открыто больше разрешений и возможностей. Есть надежда на внедрение более открытого, но безопасного механизма, например, безопасной и не требующей разрешения системы недорогого аудита, чтобы позволить большему числу разработчиков участвовать в проекте по более низкой цене. Если этот вопрос будет решен, то в будущем можно ожидать резкого увеличения спроса. Возможно, даже появятся специальные должности разработчиков Snap.

Используя огромную базу пользователей MetaMask, инди-разработчики также могут найти уникальные возможности. Давайте следить за следующими инновациями, которые Snaps предложит.

И наконец, спасибо за Вашу статью. Я считаю, что она внесет значительный вклад в повышение осведомленности о текущем состоянии MetaMask Snaps.

Пожалуйста, продолжайте следить за нашим Twitter: <a href="https://twitter.com/LXDAO_Official"" > @lxdao_official. Мы будем выпускать больше материалов, связанных с MetaMask Snap, например, семинары, так что следите за новостями!

Отказ от ответственности:

  1. Эта статья перепечатана с[medium]. Все авторские права принадлежат оригинальному автору[LXDAO]. Если у Вас есть возражения против этой перепечатки, пожалуйста, свяжитесь с командой GateLearn(gatelearn@gate.io), и они оперативно рассмотрят их.
  2. Предупреждение об ответственности: Мнения и взгляды, выраженные в этой статье, принадлежат исключительно автору и не являются инвестиционным советом.
  3. Перевод статьи на другие языки осуществляется командой Gate Learn. Если не указано, копирование, распространение или плагиат переведенных статей запрещены.
Начните торговать сейчас
Зарегистрируйтесь сейчас и получите ваучер на
$100
!