Мульти-резолвер Snap: решение проблемы мульти-резолвера

Победитель хакатона ETHLisbon

6 мин чтения
Мульти-резолвер Snap: решение проблемы мульти-резолвера

MetaMask Snaps — это дорожная карта к созданию самого расширяемого кошелька в мире. Как разработчик, вы можете добавлять свои функции и API в MetaMask совершенно новыми способами. Web3-разработчики — основа этого роста, и данная серия материалов призвана продемонстрировать новаторские MetaMask Snaps, создаваемые сегодня.

Multi-resolver Snap

Snap Repo: https://github.com/idriss-crypto/multiresolver

Почему вы создали multi-resolver snap?

Пользовательский опыт в web3 долгое время оставался в тени. Одна из областей, где наблюдается прогресс, — это абстракция аккаунтов. Кажется, что каждую неделю появляется новый сервис именования. Цель таких сервисов — упростить взаимодействие между участниками пространства: имена воспринимаются легче, чем адреса кошельков, и потому формируют базовый уровень для систем идентификации и репутации.

Кроме того, оригинальные стандарты именования могут способствовать популярности проектов. Например, возьмём некий проект «x». Новый стандарт именования, предложенный этим проектом, может называться x-domains или x-names. Успех проекта автоматически помогает развитию сервиса именования, а успех сервиса именования, в свою очередь, работает на проект — взаимная выгода. В результате мы получаем фрагментированную картину пространства имён. Конечно, есть люди, которые стараются использовать все сервисы именования, что порождает гонку за именами в ограниченном пространстве некоторых сервисов на основе доменов. Другие сервисы именования используют более привычные идентификаторы — электронную почту, номера телефонов или общие социальные хэндлы (имя пользователя в Twitter, хэндл в Instagram), которые люди уже имеют, чтобы устранить потенциальные рынки вокруг этих идентификаторов. Большинство пользователей в итоге получают один, максимум два хэндла из разных сервисов именования. Из-за разнообразия вариантов разработчикам приходится интегрировать несколько резолверов сервисов именования в свои приложения.

Когда новый сервис именования занимает значительную долю рынка, его также необходимо интегрировать в приложение, чтобы не исключать пользователей этого сервиса. С точки зрения пользователя, поиск альтернативных приложений со схожим функционалом, которые также поддерживают нужный сервис именования, — занятие утомительное. Почему бы не позволить людям использовать то, к чему они привыкли, И при этом предложить решение, которое помогает разработчикам сосредоточиться на создании лучшего приложения?

Multi-resolver Snap делает именно это.

Расскажите о технической реализации?

Суть

Snap был создан для MetaMask Flask 10.20. Текущая версия использует разрешения endowment:network-access и snap_confirm. Первое используется в предварительной версии для запроса разрешённых адресов и преобразования Twitter ID в имена пользователей Twitter. Второе отображает экран подтверждения для пользователя с указанием итогового адреса перед созданием транзакции.

В настоящее время поддерживаются резолверы IDriss и ENS. Snap работает на localhost.

Интеграция со стороны dApp

Чтобы разработчик мог интегрировать этот Snap и, следовательно, все доступные резолверы, необходимо сначала подключиться к кошельку и snap:

const connectSnap = async (
  snapId: string = defaultSnapOrigin,
  params: Record<'version' | string, unknown> = {},
) => {
  await window.ethereum.request({
    method: 'wallet_enable',
    params: [
      {
        wallet_snap: {
          [snapId]: {
            ...params,
          },
        },
      },
    ],
  });
};
Копировать

Вызов происходит через метод resolve_send и может быть осуществлён следующим образом:

const resolveInput = async (id_?: string) => {
  return await window.ethereum.request({
    method: 'wallet_invokeSnap',
    params: [
      defaultSnapOrigin,
      {
        method: 'resolve_send',
        identifier: id_,
      },
    ],
  });
};
Копировать

который возвращает разрешённый адрес. Здесь id_ — это идентификатор, который пользователь вводит в поле отправки.

С использованием нового multiChainProvider подключение к snap так же просто, как подключение к кошельку с необходимыми разрешениями:

import { MultiChainProvider } from "@metamask/multichain-provider";

const provider = new MultiChainProvider();
const { approval } = await provider.connect({
  requiredNamespaces: {
    eip155: {
      chains: [chains],
      methods: [
        permissions
      ],
    },
  },
});
const session = await approval();
Копировать

Упомянутый выше метод resolve_send можно переименовать в eth_sendTransaction, что позволит приложениям использовать Multi-resolver Snap без необходимости изменять существующие интеграции. При каждом вызове eth_sendTransaction Snap перехватывает запрос и разрешает входные данные перед созданием транзакции. Приложения должны принимать входные данные типа String вместо того, чтобы выдавать ошибку, когда введённые пользователем данные не соответствуют адресу. Snap берёт на себя всё остальное!

Каковы следующие шаги при реализации этого?

Следующим шагом станет перевод этого snap в open-source, чтобы другие разработчики могли искать баги, улучшать код и даже добавлять собственные резолверы. Открытый исходный код раскроет истинный потенциал этого Snap: ни один разработчик или организация не обязаны интегрировать все появляющиеся сервисы именования. Файл contribute.md способствует этому процессу. Кроме того, будет отслеживаться дальнейшее развитие со стороны команды MetaMask Snaps.

Конкретно, два аспекта существенно улучшат этот snap:

  1. Разрешение endowment:transaction-insight для переводов между аккаунтами, чтобы убрать дополнительный вызов snap_confirm перед запуском транзакции, и

  2. Внедрение UI в MetaMask. Цель — реализовать snap в поле отправки, чтобы пользователи могли использовать multi-resolver без подключения к веб-сайту.

Наконец, планируется полная интеграция с IDriss resolver. Полная интеграция позволит пользователям отправлять криптовалюту и NFT на любой адрес электронной почты, номер телефона и имя пользователя Twitter без необходимости регистрации в книге IDriss.

Расскажите немного о себе и своей команде?

Меня зовут Леннард, и я интересуюсь блокчейн-пространством с 2017 года. Более года я занимаюсь разработкой и являюсь сооснователем IDriss — децентрализованного сопоставления электронных адресов, номеров телефонов и имён пользователей Twitter с адресами кошельков. В целом я сосредоточен на создании инструментов для более удобного web3, что и побудило меня создать этот snap.

Когда вы впервые познакомились с MetaMask Snaps и каким был ваш опыт?

Команда Snaps очень активно присутствует на конференциях в этом году (2022), поэтому я уже несколько раз с ними пересекался. Впервые я взаимодействовал с кодовой базой после одного из их выступлений на EthCC 2022 в Париже. Хотя функциональность тогда ещё была ограничена, документация уже выглядела многообещающей, и я с большим оптимизмом смотрю на будущее MetaMask Snaps.

Чем MetaMask Snaps отличается от других кошельков?

Я ещё не видел аналогичного подхода к привлечению сторонних участников к разработке кошельков. Хотя некоторые другие кошельки открыли свой исходный код, Snaps позволяют разработчикам напрямую расширять функциональность MetaMask. Я уверен, что этот подход будет принят и другими проектами, поскольку его проще поддерживать.

Расскажите, каково это — создавать Snaps с MetaMask для вас и вашей команды?

Создание этого snap в рамках хакатона стало отличной возможностью. Присутствие команды MetaMask Snaps рядом помогало всякий раз, когда возникали вопросы. Одного всё ещё не хватает — возможности кастомизировать UI MetaMask. Кроме того, некоторые проблемы с зависимостями сложно отлаживать, что занимает большую часть времени разработки.

Что MetaMask Snaps значит для вас?

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

Какие возможности вы видите в MetaMask Snaps и то, что это открывает для пространства Web3?

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

Какой совет вы хотели бы дать разработчикам, желающим попробовать MetaMask Snaps?

Ходите на хакатоны! Это лучший способ напрямую пообщаться с командой и получить мгновенную обратную связь.

Создание с MetaMask Snaps

Чтобы начать работу с MetaMask Snaps:

  1. Ознакомьтесь с документацией для разработчиков

  2. Установите MetaMask Flask

  3. Изучите руководство по MetaMask Snaps

  4. Оставайтесь на связи с нами в Twitter, GitHub discussions и Discord

Следите за нашей командой на следующем хакатоне рядом с вами! Удачного BUIDLing'а ⚒️

Отказ от ответственности: MetaMask Snaps, как правило, разрабатываются третьими сторонами, а не Consensys Software. Использование MetaMask Snaps, разработанных третьими сторонами, осуществляется по вашему собственному усмотрению и на ваш риск, и вы соглашаетесь с тем, что несёте единоличную ответственность за любые убытки или ущерб, возникшие в результате такой деятельности. Consensys не даёт никаких явных или подразумеваемых гарантий, устных или письменных, в отношении MetaMask Snaps, разработанных третьими сторонами, и отказывается от какой-либо ответственности за Snaps, разработанные третьими сторонами. Использование программного обеспечения, связанного с блокчейном, сопряжено с рисками, которые вы полностью принимаете на себя при использовании MetaMask Snaps.

Переведено ИИ. Может содержать ошибки. Пожалуйста, всегда проверяйте информацию.

Оцените перевод
  • MetaMask
    MetaMask

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

    Читать все статьи