Перейти к содержимому

Composooor Snap: инструмент компонуемости для гибридных onchain и offchain приложений

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

6 мин чтения
Composooor Snap: инструмент компонуемости для гибридных onchain и offchain приложений

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

Composooor Snap

Репозиторий Snap: https://github.com/kairos-loan/composooor/tree/main/packages/snap

Почему вы его создали?

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

В каждом случае ценная информация хранится или вычисляется вне цепочки, но может использоваться и оказывает значительное влияние на взаимодействия внутри цепочки. Чтобы сделать это возможным, контракты используют различные криптографические методы, такие как хэши или подписи, для проверки достоверности. Dapp-приложения требуют фронтендов и API со специфической логикой, способной предоставить контракту необходимую информацию. К сожалению, этот паттерн нарушает компонуемость: например, DeFi-приложение, использующее проприетарную книгу ордеров на AWS, не может быть легко интегрировано другим смарт-контрактом.

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

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

Введение

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

Пошаговое описание

  • При подготовке транзакции наш MetaMask Snap кошелёк запрашивает оценку газа для нужного контракта в цепочке.

  • Если контракту требуются данные или вычисления вне цепочки для работы, он откатывается со стандартизированной ошибкой, содержащей спецификации того, как найти недостающие данные. Стандартизированная ошибка выглядит следующим образом:

error MissingOffchainDataError(
    address registryAddress,
    string url,
    bytes abiArgs
);
Копировать

Эта ошибка предоставляется ComposooorRegister, который контракты должны расширять для доступа к внецепочечным ресурсам.

  • MetaMask Snap кошелёк может декодировать эту ошибку и найти недостающие данные — либо получив их из децентрализованного протокола, либо через API, либо выполнив код, полученный из этих источников. Для хакатона ETHDenver мы реализовали простейший вариант — вызов API.

const responseData = await fetch(error.url + `?args=${error.abiArgs}`);
  • Затем кошелёк снова оценивает газ, на этот раз добавляя инструкцию для сохранения полученных данных в стандартизированном реестре соответствующего контракта перед вызовом нужного метода.

const callToRegisterData: Call = {
    callee: error.registryAddress,
    functionSelector: utils.id('recordParameter(bytes)').slice(0, 10) as PrefixedBy0x,
    data: defaultAbiCoder.encode(['bytes'], [data]) as PrefixedBy0x,
};
Копировать
  • В процессе выполнения транзакции тот же или другой контракт может потребовать ещё один внецепочечный ресурс. В таком случае кошелёк повторяет шаги подготовки транзакции до тех пор, пока внецепочечные ресурсы больше не понадобятся. Это обеспечивает бесконечную компонуемость между протоколами, использующими богатые внецепочечные ресурсы.

  • Когда оценка газа проходит успешно, пользователю предлагается подписать подготовленную транзакцию для успешного выполнения со всеми необходимыми включёнными ресурсами.

Как выглядит интеграция приложения с поддержкой Composooor или создание собственного.

На ETHDenver мы показали, как Composooor снижает сложность кода типичного паттерна гибридного приложения минимум на 80–90%.

Сторона смарт-контракта

Импортируйте с помощью import "@composooor/ComposooorRegister.sol". Пример использования:

contract Example is ComposooorRegister {
    function action() public {
        bytes memory data = consumeParameter("http://api.api/number", abi.encode(arguments));
        (uint256 offchainNumber) = abi.decode(data, (uint256));
        (...)
    }
}
Копировать

ComposooorRegister написан на Solidity.

Сторона фронтенда

Composooor Snap даёт наибольший эффект на стороне фронтенда: он сокращает типичные интеграции объёмом 200+ строк до… 0! Логика Snap берёт на себя всё.

Демонстрация

Мы создали полностью интегрированное демо в виде React-Wagmi dapp. Это приложение позволяет купить NFT, заплатив лишь небольшую часть цены авансом и взяв кредит для оплаты остатка позже. На уровне цепочки в транзакции задействованы не менее 8 контрактов. В процессе NFT-маркетплейс требует внецепочечную подпись продавца NFT. Composooor Snap способен перехватить ошибку, декодировать её и предоставить информацию в цепочке (после получения через API), несмотря на сложность транзакции. Composooor значительно упростил реализацию этого приложения.

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

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

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

Мы — команда, создающая протокол кредитования для использования NFT в качестве залога с более капиталоэффективным подходом. Мы решили использовать архитектуру с внецепочечными компонентами, такими как книга ордеров. Этот выбор позволяет повысить эффективность использования капитала и улучшить пользовательский опыт, но может ограничить совместимость с другими протоколами. Именно поэтому мы разработали Composooor Snap, обеспечивающий лёгкую интеграцию с другими протоколами. Мы надеемся, что эта библиотека будет использоваться другими командами, открывая новые возможности и упрощая их работу.

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

Кошельки — один из главных неизбежных столпов и строительных блоков Web3, а MetaMask — де-факто кошелёк по умолчанию для большинства пользователей. Предоставление разработчикам возможности использовать это для произвольных новых сценариев использования кажется мне крайне важным. Главная мысль в том, что мы не можем предвидеть или подготовиться ко всем инновациям, в которых кошелькам придётся участвовать, поэтому открытие к ним доступа подобно переходу от Bitcoin к Ethereum: возможность реализовывать произвольные сценарии поверх вашей технологии имеет непредвиденный экспоненциально накапливающийся потенциал. Поэтому сложно ответить на этот вопрос, но больше всего меня воодушевляют приложения, заставляющие кошелёк делать больше, чем просто подписывать сообщения, и оптимизирующие взаимодействия контекстно-насыщенным образом для пользователя.

Есть ли советы, которыми вы хотели бы поделиться с разработчиками, желающими попробовать 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, ранее известная как Consensys Software Inc, — крупнейшая в мире самостоятельная финансовая платформа, предоставляющая людям единое место для хранения, расходования, накопления и приумножения средств как в криптовалюте, так и в традиционных активах. Компания создаёт потребительскую платформу, объединяющую платежи, сбережения, инвестиции и цифровые активы в едином бесшовном опыте. Вырастая из самого широко используемого в мире self-custodial кошелька, MetaMask предоставляет пользователям прямой контроль над их деньгами и активами, охватывая около 190 стран. MetaMask сыграл основополагающую роль в развитии Ethereum с 2016 года. Сегодня MetaMask занимает центральное место в экономике блокчейна, создавая операционную систему для Open Money и предоставляя людям полный контроль над их финансовой жизнью.

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