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

Розширений12/24/2023, 8:22:48 AM
Ця стаття знайомить із розширеними функціями MetaMask Snap і досліджує, як ця технологія дозволяє гаманцю MetaMask створювати різноманітніші додатки за допомогою плагінів. Він підкреслює, як він долає обмеження традиційних гаманців, зберігаючи безпеку, розкриваючи більший потенціал.

Що таке MetaMask Snap?

Кілька днів тому ConsenSys оголосила про публічний випуск MetaMask Snaps Open Beta. MetaMask Snaps — це, по суті, плагіни, які розширюють можливості гаманця MetaMask. Ці «Знімки» — це програми, розроблені сторонніми розробниками, які можна встановити для додавання нових функцій.

Якщо порівняти трансформацію ConsenSys із MetaMask у WeChat, то Snap можна розглядати як міні-програму WeChat. У результаті стає очевидним, що MetaMask, зі своїми амбіціями в поєднанні з масштабом ConsenSys і базою користувачів MetaMask, змінить ландшафт сектора гаманців.

Офіційний веб-сайт уже перерахував 35 доступних Snaps і запустив Snap App Store: https://snaps.metamask.io/.

Частковий список знімків

Технічний аспект MetaMask Snap

Отже, що таке MetaMask Snaps з технічної точки зору? Які їхні можливості та обмеження? Чи безпечні вони? Який досвід розробника? Усі ці фактори можуть визначити майбутній потенціал MetaMask Snaps.

Починаючи з минулого року, LXDAO активно займається дослідженням впровадження Snaps. Кілька членів брали участь у розробці Snap і брали участь у відповідних хакатонах. Сьогодні ми заглибимося в ці питання з технічної точки зору і навіть розробимо Snap, щоб дати вам практичний досвід розробника.

Початок роботи з MetaMask Snap

Встановлення MetaMask Snap

Як правило, ви можете встановити Snaps з офіційного торгового майданчика MetaMask Snap або безпосередньо з веб-сайту проекту. Наприклад, з UniPass, як тільки ви відвідаєте сторінку програми, з’явиться кнопка для підключення вашої MetaMask.

Клацнувши її, ініціюється встановлення Snap:

Використання MetaMask Snap

Після встановлення ви можете почати користуватися продуктом і його функціями. У цьому випадку UniPass створить для вас обліковий запис смарт-контракту, яким ви зможете керувати через свій обліковий запис MetaMask EOA (External Owned Account).

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

Після підтвердження через MetaMask ви можете продовжити транзакцію. У цьому сценарії MetaMask отримує контроль над гаманцем UniPass AA через Snap, усуваючи потребу UniPass розробляти власний плагін гаманця. Це також дозволяє недорогу адаптацію користувачів через MetaMask.

Які відомості ми можемо отримати з цього процесу встановлення та використання?

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

Безпека завжди має пріоритет, коли йдеться про продукти гаманця. Давайте заглибимося в дизайн безпеки Snaps.

Чи Snaps безпечні?

Аналіз Snap Code під час виконання

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 може надсилати прямі повідомлення користувачам через цей інтерфейс, як показано на зображенні нижче.

Можливість аналізу транзакцій

Коли користувач взаємодіє зі смарт-контрактом, MetaMask запускає подію onTransaction Snap. MetaMask передає непідписану необроблену транзакцію в метод обробки onTransaction. Потім Snaps може повернути інтерфейс на вторинній сторінці підтвердження транзакції, налаштовуючи відображуваний вміст.

Завдяки цій можливості можна реалізувати такі функції, як безпечний аудит інформації про транзакції та відображення розширеної інформації.

Діалоговий інтерфейс і можливості індивідуального інтерфейсу

Можливість діалогу дозволяє Snaps безпосередньо відкривати окреме вікно, подібно до традиційних діалогових вікон Alert/Confirm/Prompt. Вони використовуються для нагадувань, підтвердження та подання інформації відповідно.

За допомогою Dialog ви зможете налаштувати прості інтерактивні інтерфейси та операції для інтеграції з вашим DApp.

Що не може досягти MetaMask Snap на даний момент?

З міркувань безпеки Snap наразі не підтримує зовнішні інтерфейси сторонніх розробників і надає лише обмежений UIKit. Тут ми все ще використовуємо Insight як приклад, демонструючи бібліотеку компонентів інтерфейсу користувача, доступну для розробників.

Як показано на зображенні, поточні функції включають заголовок (великий текст), текст (дрібний текст), панель (одноразова картка), роздільник, можливість копіювання (клацніть, щоб скопіювати) і підмножину функцій Markdown (жирний і курсив)). Таким чином, інтерактивні можливості здаються тимчасово недосяжними, а вбудований HTML не можна використовувати для взаємодії. Однак, поставивши запитання в офіційному Discord, вони заявили, що ці обмеження діють з міркувань безпеки та можуть бути послаблені в майбутніх версіях.

Крім того, з міркувань безпеки зовнішні запити підтримуються лише через метод Fetch і не підтримують додаткові протоколи запитів, такі як WebSocket. Через обмеження щодо безпеки, можливостей і конфіденційності також неможливо отримати доступ до клієнтської інформації, як-от поточної URL-адреси, яка ініціювала Snap, що ускладнює реалізацію ширшого спектру функцій.

Більшість цих проблем виникає через проблеми безпеки. Ми вважаємо, що з часом буде перевірено безпеку, тому буде надано більше дозволів.

З появою цих API MetaMask фактично перетворився на продукт відкритої платформи. Це схоже на те, коли WeChat запустив свій офіційний обліковий запис і міні-програми, перетворившись із просто інструменту чату.

Ще в 2019 році MetaMask вже передбачив поточний ринковий ландшафт із численними публічними мережами, вечірками проектів і спеціальними вимогами до гаманців. Замість того, щоб кожен проект розробляв власний плагін і користувачам доводилося встановлювати кілька плагінів, ефективніше розробляти на основі MetaMask Snap. У першій партії Snaps ми бачили гаманці з екосистем, відмінних від 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, щоб дізнатися.

Створення Snap для тестування

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

Загальновідомо, що більшість користувачів часто не знають, з якими смарт-контрактами вони взаємодіють, включаючи такі проблеми:

  1. Чи замінено договір транзакції фішинговим сайтом.
  2. Чи можна оновити договір транзакції.
  3. Чи є смарт-контракт нещодавно розгорнутим і багато хто не перевіряв.
  4. Чи є договір транзакції відкритим кодом.

Для пересічних користувачів очікувати, що вони перевірять надійність коду контрактів перед кожною операцією, є важким завданням. Ця ситуація ідеальна для функції Transaction Insight для аналізу смарт-контрактів, як-от використання штучного інтелекту для попереднього аудиту безпеки, що, можливо, відфільтровує 80% основних фішингових атак.

Налаштування середовища розробки

Встановлення гаманця

Спочатку встановіть MetaMask Flask.

MetaMask Flask — це орієнтована на розробника версія розширення MetaMask, яка в основному використовується для попереднього перегляду нових функцій і розробки експериментальних функцій. Пам’ятайте, що це для розвитку, а не для щоденного використання. Не імпортуйте закриті ключі для щоденного використання. Тут ми використовуємо Flask переважно для попереднього перегляду нашого локального Snap.

Рекомендується тимчасово вимкнути звичайний гаманець MetaMask та інші гаманці браузера після встановлення або створити новий профіль Chrome, щоб уникнути конфліктів.

Створення облікового запису

Після встановлення гаманця створіть новий, як звичайний гаманець MetaMask. Це тестовий гаманець, тому не імпортуйте щоденний гаманець.

Далі нам потрібно внести кілька тестових монет у щойно створений гаманець, який можна отримати через крани. Snap, який обговорюється в цій статті, використовує Goerli, тому наступний вміст буде зосереджено на Goerli.

Щоб ініціалізувати Snap на основі шаблону, дотримуйтеся офіційної документації. Спочатку використовуйте @metamask/create-snap CLI, щоб створити новий проект Snap. У той же час ми будемо ініціалізувати за допомогою офіційного шаблону:

yarn create @metamask/snap transaction-insights-snap && cd transaction-insights-snap

Структура Snap File

Основні файли 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”: {} //

У файлі маніфесту ви також можете оновити description і proposedName , щоб змінити опис і назву проекту.

Отримання транзакцій

Для цієї демонстрації все, що потрібно, це змінити файл index.ts, щоб завершити всі функції. Нижче наведено спрощений фрагмент коду. Щоб отримати повний доступний для виконання код, відвідайте: https://github.com/LidamaoHub/insights.

tsxКопіювати код

імпортувати { OnTransactionHandler, OnRpcRequestHandler } з ' @metamask/snaps-types';

імпортувати { heading, panel, text, copyable, divider } з ' @metamask/snaps-ui';

експорт const onTransaction: OnTransactionHandler = async ({ transaction }) => {

// transaction включає такі значення, to (адреса контракту) і data (дані взаємодії)

// Приклад коду для отримання інформації аудиту для контракту нижче

const info = await fetch(http://contract-info.audit.dev/?address=${transaction.to});

// Нижче наведено приклад коду інтерфейсу користувача

return {

зміст: [

 text( 

 `${info.riskList.length} item risk`, 

 ), 

 heading(`${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 протягом кількох годин. Однак найбільшим вузьким місцем для офіційних випусків, призначених для масової аудиторії, будуть перевірки безпеки. Не всі незалежні розробники або невеликі команди мають ресурси для проведення аудиту своїх Snaps. Таким чином, очікується, що кількість і різноманітність Snaps не зазнають різкого зростання протягом тривалого часу.

Підтримка розробників

Якщо ви можете успішно виконати наведений вище приклад, вітаємо, ви кваліфікований розробник-початківець Snap!

Минулого року MetaMask офіційно запустив MetaMask Grants DAO для фінансування проектів високої вартості в екосистемі MetaMask. Це експериментальна ініціатива, керована співробітниками, спрямована на надання грантів глобальним зовнішнім розробникам для створення ефектного досвіду в екосистемі MetaMask. Частина квартального прибутку MetaMask направляється в цей DAO, а його поточний річний бюджет становить 2,4 мільйона доларів.

Будь-який проект, який збагачує екосистему MetaMask, може подати заявку на офіційний грант MetaMask від DAO MetaMask Grants. Для отримання додаткової інформації відвідайте https://metamaskgrants.org/.

Варто зазначити, що LXDAO має честь подати заявку та отримати грант від MetaMask цього року, а також брав активну участь у розробці відповідних проектів, вносячи внесок в екосистему MetaMask!

Висновок

Ми розібрали, що таке Snap з технічної точки зору, міркування безпеки, обмеження та досвід розробників. Підсумовуючи:

  • Знімки схожі на міні-програми WeChat, відкриваючи ширші можливості для MetaMask.
  • Безпека відносно надійна. Код працює в обмеженому середовищі ізольованого програмного середовища. Код має бути відкритим і перевіреним. Офіційна команда створила білий список встановлення для авторизації встановлення.
  • З міркувань безпеки поточна поверхня API дещо обмежена. Однак він все ще дозволяє створювати широкий спектр творчих знімків.
  • Завдяки чотирирічному вдосконаленню та тестуванню в реальному світі досвід розробників є першокласним. Однак завдяки вбудованим запобіжним заходам, включаючи механізм білого списку та обов’язкові аудити, не очікуйте, що потік Snaps заповнить ринок найближчим часом. Але це зрозуміло, міні-програми WeChat починалися повільно з дуже обмеженими API, які вибухнули з 2018 року, і зараз є 450 млн. DAU і 7 млн. + міні-програм.

Наразі MetaMask Snap все ще проходить швидкі ітерації. Очікується, що в майбутньому буде відкрито більше дозволів і можливостей. Є надія на запровадження більш відкритого, але безпечного механізму, такого як безпечна недорога система аудиту без дозволу, щоб дозволити більшій кількості розробників брати участь за менших витрат. Якщо цю проблему вирішити, можна очікувати сплеск попиту в майбутньому. Можуть навіть з’явитися спеціальні посади розробників Snap.

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

Нарешті, дякую за вашу статтю. Я вважаю, що це значно сприятиме підвищенню обізнаності про поточний стан MetaMask Snaps.

Продовжуйте слідкувати за нашим Twitter:https://twitter.com/LXDAO_Official@lxdao_official. Ми розгорнемо більше контенту, пов’язаного з MetaMask Snap, як-от семінари, тому слідкуйте за оновленнями!

Відмова від відповідальності:

  1. Цю статтю передруковано з [середовище]. Усі авторські права належать оригінальному автору [LXDAO]. Якщо є заперечення щодо цього передруку, зв’яжіться з командою Gate Learn(gatelearn@gate.io), і вони негайно вирішать це.
  2. Відмова від відповідальності: погляди та думки, висловлені в цій статті, належать виключно автору та не є жодною інвестиційною порадою.
  3. Переклади статті на інші мови виконує команда Gate Learn. Якщо не зазначено вище, копіювання, розповсюдження або плагіат перекладених статей заборонено.

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

Розширений12/24/2023, 8:22:48 AM
Ця стаття знайомить із розширеними функціями MetaMask Snap і досліджує, як ця технологія дозволяє гаманцю MetaMask створювати різноманітніші додатки за допомогою плагінів. Він підкреслює, як він долає обмеження традиційних гаманців, зберігаючи безпеку, розкриваючи більший потенціал.

Що таке MetaMask Snap?

Кілька днів тому ConsenSys оголосила про публічний випуск MetaMask Snaps Open Beta. MetaMask Snaps — це, по суті, плагіни, які розширюють можливості гаманця MetaMask. Ці «Знімки» — це програми, розроблені сторонніми розробниками, які можна встановити для додавання нових функцій.

Якщо порівняти трансформацію ConsenSys із MetaMask у WeChat, то Snap можна розглядати як міні-програму WeChat. У результаті стає очевидним, що MetaMask, зі своїми амбіціями в поєднанні з масштабом ConsenSys і базою користувачів MetaMask, змінить ландшафт сектора гаманців.

Офіційний веб-сайт уже перерахував 35 доступних Snaps і запустив Snap App Store: https://snaps.metamask.io/.

Частковий список знімків

Технічний аспект MetaMask Snap

Отже, що таке MetaMask Snaps з технічної точки зору? Які їхні можливості та обмеження? Чи безпечні вони? Який досвід розробника? Усі ці фактори можуть визначити майбутній потенціал MetaMask Snaps.

Починаючи з минулого року, LXDAO активно займається дослідженням впровадження Snaps. Кілька членів брали участь у розробці Snap і брали участь у відповідних хакатонах. Сьогодні ми заглибимося в ці питання з технічної точки зору і навіть розробимо Snap, щоб дати вам практичний досвід розробника.

Початок роботи з MetaMask Snap

Встановлення MetaMask Snap

Як правило, ви можете встановити Snaps з офіційного торгового майданчика MetaMask Snap або безпосередньо з веб-сайту проекту. Наприклад, з UniPass, як тільки ви відвідаєте сторінку програми, з’явиться кнопка для підключення вашої MetaMask.

Клацнувши її, ініціюється встановлення Snap:

Використання MetaMask Snap

Після встановлення ви можете почати користуватися продуктом і його функціями. У цьому випадку UniPass створить для вас обліковий запис смарт-контракту, яким ви зможете керувати через свій обліковий запис MetaMask EOA (External Owned Account).

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

Після підтвердження через MetaMask ви можете продовжити транзакцію. У цьому сценарії MetaMask отримує контроль над гаманцем UniPass AA через Snap, усуваючи потребу UniPass розробляти власний плагін гаманця. Це також дозволяє недорогу адаптацію користувачів через MetaMask.

Які відомості ми можемо отримати з цього процесу встановлення та використання?

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

Безпека завжди має пріоритет, коли йдеться про продукти гаманця. Давайте заглибимося в дизайн безпеки Snaps.

Чи Snaps безпечні?

Аналіз Snap Code під час виконання

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 може надсилати прямі повідомлення користувачам через цей інтерфейс, як показано на зображенні нижче.

Можливість аналізу транзакцій

Коли користувач взаємодіє зі смарт-контрактом, MetaMask запускає подію onTransaction Snap. MetaMask передає непідписану необроблену транзакцію в метод обробки onTransaction. Потім Snaps може повернути інтерфейс на вторинній сторінці підтвердження транзакції, налаштовуючи відображуваний вміст.

Завдяки цій можливості можна реалізувати такі функції, як безпечний аудит інформації про транзакції та відображення розширеної інформації.

Діалоговий інтерфейс і можливості індивідуального інтерфейсу

Можливість діалогу дозволяє Snaps безпосередньо відкривати окреме вікно, подібно до традиційних діалогових вікон Alert/Confirm/Prompt. Вони використовуються для нагадувань, підтвердження та подання інформації відповідно.

За допомогою Dialog ви зможете налаштувати прості інтерактивні інтерфейси та операції для інтеграції з вашим DApp.

Що не може досягти MetaMask Snap на даний момент?

З міркувань безпеки Snap наразі не підтримує зовнішні інтерфейси сторонніх розробників і надає лише обмежений UIKit. Тут ми все ще використовуємо Insight як приклад, демонструючи бібліотеку компонентів інтерфейсу користувача, доступну для розробників.

Як показано на зображенні, поточні функції включають заголовок (великий текст), текст (дрібний текст), панель (одноразова картка), роздільник, можливість копіювання (клацніть, щоб скопіювати) і підмножину функцій Markdown (жирний і курсив)). Таким чином, інтерактивні можливості здаються тимчасово недосяжними, а вбудований HTML не можна використовувати для взаємодії. Однак, поставивши запитання в офіційному Discord, вони заявили, що ці обмеження діють з міркувань безпеки та можуть бути послаблені в майбутніх версіях.

Крім того, з міркувань безпеки зовнішні запити підтримуються лише через метод Fetch і не підтримують додаткові протоколи запитів, такі як WebSocket. Через обмеження щодо безпеки, можливостей і конфіденційності також неможливо отримати доступ до клієнтської інформації, як-от поточної URL-адреси, яка ініціювала Snap, що ускладнює реалізацію ширшого спектру функцій.

Більшість цих проблем виникає через проблеми безпеки. Ми вважаємо, що з часом буде перевірено безпеку, тому буде надано більше дозволів.

З появою цих API MetaMask фактично перетворився на продукт відкритої платформи. Це схоже на те, коли WeChat запустив свій офіційний обліковий запис і міні-програми, перетворившись із просто інструменту чату.

Ще в 2019 році MetaMask вже передбачив поточний ринковий ландшафт із численними публічними мережами, вечірками проектів і спеціальними вимогами до гаманців. Замість того, щоб кожен проект розробляв власний плагін і користувачам доводилося встановлювати кілька плагінів, ефективніше розробляти на основі MetaMask Snap. У першій партії Snaps ми бачили гаманці з екосистем, відмінних від 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, щоб дізнатися.

Створення Snap для тестування

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

Загальновідомо, що більшість користувачів часто не знають, з якими смарт-контрактами вони взаємодіють, включаючи такі проблеми:

  1. Чи замінено договір транзакції фішинговим сайтом.
  2. Чи можна оновити договір транзакції.
  3. Чи є смарт-контракт нещодавно розгорнутим і багато хто не перевіряв.
  4. Чи є договір транзакції відкритим кодом.

Для пересічних користувачів очікувати, що вони перевірять надійність коду контрактів перед кожною операцією, є важким завданням. Ця ситуація ідеальна для функції Transaction Insight для аналізу смарт-контрактів, як-от використання штучного інтелекту для попереднього аудиту безпеки, що, можливо, відфільтровує 80% основних фішингових атак.

Налаштування середовища розробки

Встановлення гаманця

Спочатку встановіть MetaMask Flask.

MetaMask Flask — це орієнтована на розробника версія розширення MetaMask, яка в основному використовується для попереднього перегляду нових функцій і розробки експериментальних функцій. Пам’ятайте, що це для розвитку, а не для щоденного використання. Не імпортуйте закриті ключі для щоденного використання. Тут ми використовуємо Flask переважно для попереднього перегляду нашого локального Snap.

Рекомендується тимчасово вимкнути звичайний гаманець MetaMask та інші гаманці браузера після встановлення або створити новий профіль Chrome, щоб уникнути конфліктів.

Створення облікового запису

Після встановлення гаманця створіть новий, як звичайний гаманець MetaMask. Це тестовий гаманець, тому не імпортуйте щоденний гаманець.

Далі нам потрібно внести кілька тестових монет у щойно створений гаманець, який можна отримати через крани. Snap, який обговорюється в цій статті, використовує Goerli, тому наступний вміст буде зосереджено на Goerli.

Щоб ініціалізувати Snap на основі шаблону, дотримуйтеся офіційної документації. Спочатку використовуйте @metamask/create-snap CLI, щоб створити новий проект Snap. У той же час ми будемо ініціалізувати за допомогою офіційного шаблону:

yarn create @metamask/snap transaction-insights-snap && cd transaction-insights-snap

Структура Snap File

Основні файли 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”: {} //

У файлі маніфесту ви також можете оновити description і proposedName , щоб змінити опис і назву проекту.

Отримання транзакцій

Для цієї демонстрації все, що потрібно, це змінити файл index.ts, щоб завершити всі функції. Нижче наведено спрощений фрагмент коду. Щоб отримати повний доступний для виконання код, відвідайте: https://github.com/LidamaoHub/insights.

tsxКопіювати код

імпортувати { OnTransactionHandler, OnRpcRequestHandler } з ' @metamask/snaps-types';

імпортувати { heading, panel, text, copyable, divider } з ' @metamask/snaps-ui';

експорт const onTransaction: OnTransactionHandler = async ({ transaction }) => {

// transaction включає такі значення, to (адреса контракту) і data (дані взаємодії)

// Приклад коду для отримання інформації аудиту для контракту нижче

const info = await fetch(http://contract-info.audit.dev/?address=${transaction.to});

// Нижче наведено приклад коду інтерфейсу користувача

return {

зміст: [

 text( 

 `${info.riskList.length} item risk`, 

 ), 

 heading(`${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 протягом кількох годин. Однак найбільшим вузьким місцем для офіційних випусків, призначених для масової аудиторії, будуть перевірки безпеки. Не всі незалежні розробники або невеликі команди мають ресурси для проведення аудиту своїх Snaps. Таким чином, очікується, що кількість і різноманітність Snaps не зазнають різкого зростання протягом тривалого часу.

Підтримка розробників

Якщо ви можете успішно виконати наведений вище приклад, вітаємо, ви кваліфікований розробник-початківець Snap!

Минулого року MetaMask офіційно запустив MetaMask Grants DAO для фінансування проектів високої вартості в екосистемі MetaMask. Це експериментальна ініціатива, керована співробітниками, спрямована на надання грантів глобальним зовнішнім розробникам для створення ефектного досвіду в екосистемі MetaMask. Частина квартального прибутку MetaMask направляється в цей DAO, а його поточний річний бюджет становить 2,4 мільйона доларів.

Будь-який проект, який збагачує екосистему MetaMask, може подати заявку на офіційний грант MetaMask від DAO MetaMask Grants. Для отримання додаткової інформації відвідайте https://metamaskgrants.org/.

Варто зазначити, що LXDAO має честь подати заявку та отримати грант від MetaMask цього року, а також брав активну участь у розробці відповідних проектів, вносячи внесок в екосистему MetaMask!

Висновок

Ми розібрали, що таке Snap з технічної точки зору, міркування безпеки, обмеження та досвід розробників. Підсумовуючи:

  • Знімки схожі на міні-програми WeChat, відкриваючи ширші можливості для MetaMask.
  • Безпека відносно надійна. Код працює в обмеженому середовищі ізольованого програмного середовища. Код має бути відкритим і перевіреним. Офіційна команда створила білий список встановлення для авторизації встановлення.
  • З міркувань безпеки поточна поверхня API дещо обмежена. Однак він все ще дозволяє створювати широкий спектр творчих знімків.
  • Завдяки чотирирічному вдосконаленню та тестуванню в реальному світі досвід розробників є першокласним. Однак завдяки вбудованим запобіжним заходам, включаючи механізм білого списку та обов’язкові аудити, не очікуйте, що потік Snaps заповнить ринок найближчим часом. Але це зрозуміло, міні-програми WeChat починалися повільно з дуже обмеженими API, які вибухнули з 2018 року, і зараз є 450 млн. DAU і 7 млн. + міні-програм.

Наразі MetaMask Snap все ще проходить швидкі ітерації. Очікується, що в майбутньому буде відкрито більше дозволів і можливостей. Є надія на запровадження більш відкритого, але безпечного механізму, такого як безпечна недорога система аудиту без дозволу, щоб дозволити більшій кількості розробників брати участь за менших витрат. Якщо цю проблему вирішити, можна очікувати сплеск попиту в майбутньому. Можуть навіть з’явитися спеціальні посади розробників Snap.

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

Нарешті, дякую за вашу статтю. Я вважаю, що це значно сприятиме підвищенню обізнаності про поточний стан MetaMask Snaps.

Продовжуйте слідкувати за нашим Twitter:https://twitter.com/LXDAO_Official@lxdao_official. Ми розгорнемо більше контенту, пов’язаного з MetaMask Snap, як-от семінари, тому слідкуйте за оновленнями!

Відмова від відповідальності:

  1. Цю статтю передруковано з [середовище]. Усі авторські права належать оригінальному автору [LXDAO]. Якщо є заперечення щодо цього передруку, зв’яжіться з командою Gate Learn(gatelearn@gate.io), і вони негайно вирішать це.
  2. Відмова від відповідальності: погляди та думки, висловлені в цій статті, належать виключно автору та не є жодною інвестиційною порадою.
  3. Переклади статті на інші мови виконує команда Gate Learn. Якщо не зазначено вище, копіювання, розповсюдження або плагіат перекладених статей заборонено.
Розпочати зараз
Зареєструйтеся та отримайте ваучер на
$100
!