Кілька днів тому 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 Snaps з технічної точки зору? Які їхні можливості та обмеження? Чи безпечні вони? Який досвід розробника? Усі ці фактори можуть визначити майбутній потенціал MetaMask Snaps.
Починаючи з минулого року, LXDAO активно займається дослідженням впровадження Snaps. Кілька членів брали участь у розробці Snap і брали участь у відповідних хакатонах. Сьогодні ми заглибимося в ці питання з технічної точки зору і навіть розробимо Snap, щоб дати вам практичний досвід розробника.
Як правило, ви можете встановити Snaps з офіційного торгового майданчика MetaMask Snap або безпосередньо з веб-сайту проекту. Наприклад, з UniPass, як тільки ви відвідаєте сторінку програми, з’явиться кнопка для підключення вашої MetaMask.
Клацнувши її, ініціюється встановлення Snap:
Після встановлення ви можете почати користуватися продуктом і його функціями. У цьому випадку UniPass створить для вас обліковий запис смарт-контракту, яким ви зможете керувати через свій обліковий запис MetaMask EOA (External Owned Account).
Коли ви ініціюєте переказ, UniPass запускає спливаюче вікно Snap, щоб підтвердити, чи хочете ви виконати операцію для гаманця UniPass AA.
Після підтвердження через MetaMask ви можете продовжити транзакцію. У цьому сценарії MetaMask отримує контроль над гаманцем UniPass AA через Snap, усуваючи потребу UniPass розробляти власний плагін гаманця. Це також дозволяє недорогу адаптацію користувачів через MetaMask.
Які відомості ми можемо отримати з цього процесу встановлення та використання?
Безпека завжди має пріоритет, коли йдеться про продукти гаманця. Давайте заглибимося в дизайн безпеки Snaps.
Snaps засновані на NPM, що означає, що вони є веб-програмами та програмами JavaScript. Як ми знаємо, JavaScript дуже гнучкий, але сприйнятливий до атак, таких як XSS і фішинг. Отже, як MetaMask Snap вирішує ці виклики?
Під час дослідження ми виявили, що MetaMask фінансує та інтегрує Hardened JavaScript (або Secure EcmaScript) від Agoric як «повністю віртуалізоване» рішення ізольованого програмного середовища. Agoric розробив проект API обмеження JavaScript і подав проект пропозиції до TC-39: пропозиція TC-39.
Простіше кажучи, Hardened JavaScript — це більш безпечна підмножина стандартного JavaScript. Налаштовуючи деякі можливості JavaScript і обмежуючи виклики API, це зменшує різні ризики. Він створює безпечну пісочницю для виконання коду та дотримується «Принципу найменших привілеїв» у плануванні дозволів коду.
Щоб отримати докладніші технічні характеристики Hardened JavaScript, зверніться до: https://tvcutsem.github.io/assets/HardenedJS_BlueLava2022.pdf.
Agoric і MetaMask спільно розробили LavaMoat (https://github.com/LavaMoat/lavamoat) проект для підвищення безпеки Snaps. LavaMoat насамперед усуває ризики безпеки зовнішніх залежностей у проектах JavaScript.
І Agoric, і MetaMask пройшли тести безпеки чорної та білої скриньок і опублікували детальні звіти про безпеку. (Детальніше: https://agoric.com/blog/technology/purple-teaming-how-metamask-and-agoric-hunted-bugs-to-harden-javascript). Тому на рівні виконання коду ми маємо достатньо підстав вважати, що Snaps безпечні.
Окрім явної авторизації користувача та дизайну з найменшими привілеями, для офіційного визнання Snaps має бути відкритим кодом, що зменшує ймовірність шкідливого коду. Ми також помітили, що Snaps, розміщені на офіційному веб-сайті, пройшли перевірку безпеки третіми сторонами, що ще більше підвищило довіру до них.
Наразі керування Snaps здійснюється на основі пакетів NPM і керування версіями. NPM — це широко використовуваний інструмент керування пакетами для веб-розробки, який дозволяє розробникам і командам проектів самостійно випускати нові пакети та код.
MetaMask не контролює випуски версій на платформі NPM. Є ймовірність, що останні зміни версії можуть бути не відкритими або перевіреними, чи не так?
Після офіційного роз’яснення всі зміни версій пакетів NPM мають бути розглянуті офіційною командою та додані до білого списку, перш ніж їх можна буде інсталювати. Таким чином, навіть якщо команда проекту випускає новий пакет NPM, користувачі не можуть його встановити, доки він не буде офіційно внесений до списку. Цей підхід, безсумнівно, збільшує вартість оновлення версій Snap, але насправді є найбезпечнішим рішенням. Він відображає філософію дизайну MetaMask Snap, згідно з якою безпека є пріоритетом понад усе.
MetaMask Snap був нещодавно офіційно оголошений, але насправді він розроблявся більше чотирьох років! Початкову концепцію MetaMask Snap опублікував Ден Фінлей 10 жовтня 2019 року на Medium. Середня стаття.
Збалансування безпеки, гнучкості та ефективності є серйозною проблемою. Очевидно, що MetaMask вклав багато ресурсів і підготовки в цю справу.
На даний момент в основному розкриваються три основні API:
Нижче наведено короткий вступ до конкретних можливостей і ефектів, відкритих MetaMask Snap, щоб дати вам більш чітке розуміння.
Інтерфейс Snap_notify може відображати сповіщення в MetaMask або браузері. Snaps може надсилати прямі повідомлення користувачам через цей інтерфейс, як показано на зображенні нижче.
Коли користувач взаємодіє зі смарт-контрактом, MetaMask запускає подію onTransaction Snap. MetaMask передає непідписану необроблену транзакцію в метод обробки onTransaction. Потім Snaps може повернути інтерфейс на вторинній сторінці підтвердження транзакції, налаштовуючи відображуваний вміст.
Завдяки цій можливості можна реалізувати такі функції, як безпечний аудит інформації про транзакції та відображення розширеної інформації.
Можливість діалогу дозволяє Snaps безпосередньо відкривати окреме вікно, подібно до традиційних діалогових вікон Alert/Confirm/Prompt. Вони використовуються для нагадувань, підтвердження та подання інформації відповідно.
За допомогою Dialog ви зможете налаштувати прості інтерактивні інтерфейси та операції для інтеграції з вашим DApp.
З міркувань безпеки 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, щоб дізнатися.
Загальновідомо, що більшість користувачів часто не знають, з якими смарт-контрактами вони взаємодіють, включаючи такі проблеми:
Для пересічних користувачів очікувати, що вони перевірять надійність коду контрактів перед кожною операцією, є важким завданням. Ця ситуація ідеальна для функції 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 знаходяться в ./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 з технічної точки зору, міркування безпеки, обмеження та досвід розробників. Підсумовуючи:
Наразі MetaMask Snap все ще проходить швидкі ітерації. Очікується, що в майбутньому буде відкрито більше дозволів і можливостей. Є надія на запровадження більш відкритого, але безпечного механізму, такого як безпечна недорога система аудиту без дозволу, щоб дозволити більшій кількості розробників брати участь за менших витрат. Якщо цю проблему вирішити, можна очікувати сплеск попиту в майбутньому. Можуть навіть з’явитися спеціальні посади розробників Snap.
Використовуючи величезну базу користувачів MetaMask, інді-розробники також можуть знайти унікальні можливості. Давайте тримати очі відкритими для наступних інновацій, які змінять правила гри, які представить Snaps.
Нарешті, дякую за вашу статтю. Я вважаю, що це значно сприятиме підвищенню обізнаності про поточний стан MetaMask Snaps.
Продовжуйте слідкувати за нашим Twitter:https://twitter.com/LXDAO_Official@lxdao_official. Ми розгорнемо більше контенту, пов’язаного з 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 Snaps з технічної точки зору? Які їхні можливості та обмеження? Чи безпечні вони? Який досвід розробника? Усі ці фактори можуть визначити майбутній потенціал MetaMask Snaps.
Починаючи з минулого року, LXDAO активно займається дослідженням впровадження Snaps. Кілька членів брали участь у розробці Snap і брали участь у відповідних хакатонах. Сьогодні ми заглибимося в ці питання з технічної точки зору і навіть розробимо Snap, щоб дати вам практичний досвід розробника.
Як правило, ви можете встановити Snaps з офіційного торгового майданчика MetaMask Snap або безпосередньо з веб-сайту проекту. Наприклад, з UniPass, як тільки ви відвідаєте сторінку програми, з’явиться кнопка для підключення вашої MetaMask.
Клацнувши її, ініціюється встановлення Snap:
Після встановлення ви можете почати користуватися продуктом і його функціями. У цьому випадку UniPass створить для вас обліковий запис смарт-контракту, яким ви зможете керувати через свій обліковий запис MetaMask EOA (External Owned Account).
Коли ви ініціюєте переказ, UniPass запускає спливаюче вікно Snap, щоб підтвердити, чи хочете ви виконати операцію для гаманця UniPass AA.
Після підтвердження через MetaMask ви можете продовжити транзакцію. У цьому сценарії MetaMask отримує контроль над гаманцем UniPass AA через Snap, усуваючи потребу UniPass розробляти власний плагін гаманця. Це також дозволяє недорогу адаптацію користувачів через MetaMask.
Які відомості ми можемо отримати з цього процесу встановлення та використання?
Безпека завжди має пріоритет, коли йдеться про продукти гаманця. Давайте заглибимося в дизайн безпеки Snaps.
Snaps засновані на NPM, що означає, що вони є веб-програмами та програмами JavaScript. Як ми знаємо, JavaScript дуже гнучкий, але сприйнятливий до атак, таких як XSS і фішинг. Отже, як MetaMask Snap вирішує ці виклики?
Під час дослідження ми виявили, що MetaMask фінансує та інтегрує Hardened JavaScript (або Secure EcmaScript) від Agoric як «повністю віртуалізоване» рішення ізольованого програмного середовища. Agoric розробив проект API обмеження JavaScript і подав проект пропозиції до TC-39: пропозиція TC-39.
Простіше кажучи, Hardened JavaScript — це більш безпечна підмножина стандартного JavaScript. Налаштовуючи деякі можливості JavaScript і обмежуючи виклики API, це зменшує різні ризики. Він створює безпечну пісочницю для виконання коду та дотримується «Принципу найменших привілеїв» у плануванні дозволів коду.
Щоб отримати докладніші технічні характеристики Hardened JavaScript, зверніться до: https://tvcutsem.github.io/assets/HardenedJS_BlueLava2022.pdf.
Agoric і MetaMask спільно розробили LavaMoat (https://github.com/LavaMoat/lavamoat) проект для підвищення безпеки Snaps. LavaMoat насамперед усуває ризики безпеки зовнішніх залежностей у проектах JavaScript.
І Agoric, і MetaMask пройшли тести безпеки чорної та білої скриньок і опублікували детальні звіти про безпеку. (Детальніше: https://agoric.com/blog/technology/purple-teaming-how-metamask-and-agoric-hunted-bugs-to-harden-javascript). Тому на рівні виконання коду ми маємо достатньо підстав вважати, що Snaps безпечні.
Окрім явної авторизації користувача та дизайну з найменшими привілеями, для офіційного визнання Snaps має бути відкритим кодом, що зменшує ймовірність шкідливого коду. Ми також помітили, що Snaps, розміщені на офіційному веб-сайті, пройшли перевірку безпеки третіми сторонами, що ще більше підвищило довіру до них.
Наразі керування Snaps здійснюється на основі пакетів NPM і керування версіями. NPM — це широко використовуваний інструмент керування пакетами для веб-розробки, який дозволяє розробникам і командам проектів самостійно випускати нові пакети та код.
MetaMask не контролює випуски версій на платформі NPM. Є ймовірність, що останні зміни версії можуть бути не відкритими або перевіреними, чи не так?
Після офіційного роз’яснення всі зміни версій пакетів NPM мають бути розглянуті офіційною командою та додані до білого списку, перш ніж їх можна буде інсталювати. Таким чином, навіть якщо команда проекту випускає новий пакет NPM, користувачі не можуть його встановити, доки він не буде офіційно внесений до списку. Цей підхід, безсумнівно, збільшує вартість оновлення версій Snap, але насправді є найбезпечнішим рішенням. Він відображає філософію дизайну MetaMask Snap, згідно з якою безпека є пріоритетом понад усе.
MetaMask Snap був нещодавно офіційно оголошений, але насправді він розроблявся більше чотирьох років! Початкову концепцію MetaMask Snap опублікував Ден Фінлей 10 жовтня 2019 року на Medium. Середня стаття.
Збалансування безпеки, гнучкості та ефективності є серйозною проблемою. Очевидно, що MetaMask вклав багато ресурсів і підготовки в цю справу.
На даний момент в основному розкриваються три основні API:
Нижче наведено короткий вступ до конкретних можливостей і ефектів, відкритих MetaMask Snap, щоб дати вам більш чітке розуміння.
Інтерфейс Snap_notify може відображати сповіщення в MetaMask або браузері. Snaps може надсилати прямі повідомлення користувачам через цей інтерфейс, як показано на зображенні нижче.
Коли користувач взаємодіє зі смарт-контрактом, MetaMask запускає подію onTransaction Snap. MetaMask передає непідписану необроблену транзакцію в метод обробки onTransaction. Потім Snaps може повернути інтерфейс на вторинній сторінці підтвердження транзакції, налаштовуючи відображуваний вміст.
Завдяки цій можливості можна реалізувати такі функції, як безпечний аудит інформації про транзакції та відображення розширеної інформації.
Можливість діалогу дозволяє Snaps безпосередньо відкривати окреме вікно, подібно до традиційних діалогових вікон Alert/Confirm/Prompt. Вони використовуються для нагадувань, підтвердження та подання інформації відповідно.
За допомогою Dialog ви зможете налаштувати прості інтерактивні інтерфейси та операції для інтеграції з вашим DApp.
З міркувань безпеки 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, щоб дізнатися.
Загальновідомо, що більшість користувачів часто не знають, з якими смарт-контрактами вони взаємодіють, включаючи такі проблеми:
Для пересічних користувачів очікувати, що вони перевірять надійність коду контрактів перед кожною операцією, є важким завданням. Ця ситуація ідеальна для функції 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 знаходяться в ./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 з технічної точки зору, міркування безпеки, обмеження та досвід розробників. Підсумовуючи:
Наразі MetaMask Snap все ще проходить швидкі ітерації. Очікується, що в майбутньому буде відкрито більше дозволів і можливостей. Є надія на запровадження більш відкритого, але безпечного механізму, такого як безпечна недорога система аудиту без дозволу, щоб дозволити більшій кількості розробників брати участь за менших витрат. Якщо цю проблему вирішити, можна очікувати сплеск попиту в майбутньому. Можуть навіть з’явитися спеціальні посади розробників Snap.
Використовуючи величезну базу користувачів MetaMask, інді-розробники також можуть знайти унікальні можливості. Давайте тримати очі відкритими для наступних інновацій, які змінять правила гри, які представить Snaps.
Нарешті, дякую за вашу статтю. Я вважаю, що це значно сприятиме підвищенню обізнаності про поточний стан MetaMask Snaps.
Продовжуйте слідкувати за нашим Twitter:https://twitter.com/LXDAO_Official@lxdao_official. Ми розгорнемо більше контенту, пов’язаного з MetaMask Snap, як-от семінари, тому слідкуйте за оновленнями!