Il y a quelques jours, ConsenSys a annoncé le déploiement public de MetaMask Snaps Open Beta. Les MetaMask Snaps sont essentiellement des plugins qui étendent les capacités du portefeuille MetaMask. Ces "Snaps" sont des applications développées par des tiers qui peuvent être installées pour ajouter de nouvelles fonctionnalités.
Si l'on compare la transformation de MetaMask par ConsenSys à celle de WeChat, Snap pourrait être considéré comme le mini-programme de WeChat. Il est donc évident que MetaMask, avec son ambition, combinée à la taille de ConsenSys et à la base d'utilisateurs de MetaMask, modifiera le paysage du secteur des portefeuilles.
Le site officiel a déjà répertorié 35 Snaps disponibles et a lancé un Snap App Store : https://snaps.metamask.io/.
Liste partielle des snaps
Alors, à quoi ressemblent les Snaps MetaMask d'un point de vue technique ? Quelles sont leurs capacités et leurs limites ? Sont-ils sûrs ? Quelle est l'expérience des développeurs ? Tous ces facteurs pourraient déterminer le potentiel futur de MetaMask Snaps.
Depuis l'année dernière, le LXDAO s'est fortement impliqué dans la recherche sur la mise en œuvre de Snaps. Plusieurs membres se sont engagés dans le développement de Snap et ont participé à des hackathons. Aujourd'hui, nous allons approfondir ces questions d'un point de vue technique et même développer un Snap pour vous donner une expérience pratique de développeur.
Vous pouvez généralement installer les Snaps à partir de la place de marché officielle de MetaMask Snap, ou directement à partir du site web d'un projet. Par exemple, avec UniPass, lorsque vous visitez la page de l'application, un bouton vous permet de connecter votre MetaMask.
En cliquant dessus, vous lancez l'installation de Snap :
Une fois installé, vous pouvez commencer à utiliser le produit et ses fonctionnalités. Dans ce cas, UniPass créera un compte de contrat intelligent pour vous, que vous pouvez contrôler par le biais de votre EOA MetaMask (Externally Owned Account).
Lorsque vous initiez un transfert, UniPass déclenche une fenêtre contextuelle pour confirmer si vous voulez exécuter l'opération pour le porte-monnaie AA UniPass.
Après confirmation par MetaMask, vous pouvez procéder à la transaction. Dans ce scénario, MetaMask prend le contrôle du portefeuille AA d'UniPass par l'intermédiaire du Snap, ce qui évite à UniPass de devoir développer son propre plugin de portefeuille. Cela permet également d'intégrer les utilisateurs à moindre coût grâce à MetaMask.
Quels enseignements pouvons-nous tirer de ce processus d'installation et d'utilisation ?
La sécurité est toujours prioritaire lorsqu'il s'agit de produits de portefeuille. Penchons-nous sur la conception de la sécurité de Snaps.
Les Snaps sont basés sur NPM, ce qui implique qu'il s'agit d'applications web et JavaScript. Comme nous le savons, JavaScript est très flexible mais sensible aux attaques telles que XSS et phishing. Comment MetaMask Snap relève-t-il ces défis ?
En faisant des recherches, nous avons découvert que MetaMask a financé et intégré le JavaScript renforcé d'Agoric (ou Secure EcmaScript) en tant que solution de sandboxing "entièrement virtualisée". Agoric a rédigé une API de restriction JavaScript et soumis un projet de proposition au TC-39 : Proposition TC-39.
En termes simples, le JavaScript renforcé est un sous-ensemble plus sûr du JavaScript standard. En ajustant certaines des capacités de JavaScript et en limitant les appels à l'API, il réduit divers risques. Il crée un bac à sable sécurisé pour l'exécution du code et suit le "principe du moindre privilège" dans la planification des autorisations du code.
Pour plus de détails techniques sur le JavaScript renforcé, veuillez vous référer à : https://tvcutsem.github.io/assets/HardenedJS_BlueLava2022.pdf.
Agoric et MetaMask ont développé conjointement le LavaMoat(https://github.com/LavaMoat/lavamoat). afin d'améliorer la sécurité de Snaps. LavaMoat s'attaque principalement aux risques de sécurité liés aux dépendances externes dans les projets JavaScript.
Agoric et MetaMask ont tous deux été soumis à des tests de sécurité boîte noire et boîte blanche et ont publié des rapports de sécurité détaillés. (Plus de détails : https://agoric.com/blog/technology/purple-teaming-how-metamask-and-agoric-hunted-bugs-to-harden-javascript). Par conséquent, au niveau de l'exécution du code, nous avons de bonnes raisons de penser que les Snaps sont sûrs.
Outre l'autorisation explicite de l'utilisateur et la conception à moindre privilège, pour être officiellement reconnus, les Snaps doivent être en libre accès, ce qui réduit la probabilité d'un code malveillant. Nous avons également observé que les Snaps répertoriés sur le site officiel ont fait l'objet d'audits de sécurité par des tiers, ce qui renforce encore leur crédibilité.
Actuellement, les Snaps sont gérés sur la base des paquets NPM et des versions. NPM est un outil de gestion de paquets largement utilisé pour le développement Web, qui permet aux développeurs et aux équipes de projet de publier de nouveaux paquets et du code de manière indépendante.
MetaMask n'a aucun contrôle sur les versions publiées sur la plateforme NPM. Il est possible que les derniers changements de version ne soient pas ouverts à la concurrence ou audités, n'est-ce pas ?
Après clarification officielle, toutes les modifications apportées aux versions des paquets NPM doivent être examinées par l'équipe officielle et ajoutées à une liste blanche avant de pouvoir être installées. Par conséquent, même si une équipe de projet publie un nouveau paquetage NPM, celui-ci ne peut pas être installé par les utilisateurs tant qu'il n'est pas officiellement répertorié. Cette approche augmente sans aucun doute le coût de la mise à jour des versions de Snap, mais c'est la solution la plus sûre. Il reflète la philosophie de conception de MetaMask Snap, qui donne la priorité à la sécurité avant tout.
MetaMask Snap a été récemment annoncé officiellement, mais il est en fait en développement depuis plus de quatre ans ! Le concept initial de MetaMask Snap a été publié par Dan Finlay le 10 octobre 2019 sur Medium. Article moyen.
Trouver un équilibre entre la sécurité, la flexibilité et l'efficacité est un défi de taille. Il est évident que MetaMask a investi beaucoup de ressources et de préparation dans cette entreprise.
À l'heure actuelle, trois grandes API sont principalement exposées :
Vous trouverez ci-dessous une brève introduction aux capacités et aux effets spécifiques offerts par MetaMask Snap, afin de vous donner une meilleure compréhension.
L'interface Snap_notify peut afficher des notifications dans MetaMask ou dans le navigateur. Les snaps peuvent envoyer des messages directs aux utilisateurs par le biais de cette interface, comme le montre l'image ci-dessous.
Lorsqu'un utilisateur interagit avec un contrat intelligent, MetaMask déclenche l'événement onTransaction du Snap. MetaMask transmet la transaction brute non signée à la méthode de traitement onTransaction. Snaps peut ensuite renvoyer une interface sur la page de confirmation secondaire de la transaction, en personnalisant le contenu affiché.
Grâce à cette capacité, il est possible de réaliser des fonctionnalités telles que l'audit sécurisé des informations sur les transactions et l'affichage étendu des informations.
La capacité de dialogue permet aux Snaps de faire apparaître directement une fenêtre séparée, semblable aux boîtes de dialogue traditionnelles d'alerte/confirmation/prompt. Ils sont utilisés respectivement pour les rappels, les confirmations et les soumissions d'informations.
Grâce à Dialog, vous pourrez personnaliser des interfaces interactives simples et des opérations à intégrer à votre DApp.
Pour des raisons de sécurité, Snap ne prend actuellement pas en charge les frameworks frontaux tiers et ne fournit qu'un UIKit limité. Ici, nous utilisons toujours Insight comme exemple, pour présenter la bibliothèque de composants d'interface utilisateur disponible pour les développeurs.
Comme le montre l'image, les fonctionnalités actuelles sont les suivantes : Titre (texte de grande taille), Texte (texte de petite taille), Panneau (carte à usage unique), Séparateur, Copiable (cliquer pour copier) et un sous-ensemble de fonctionnalités Markdown (gras et italique). Par conséquent, les capacités interactives semblent temporairement irréalisables, et le HTML intégré ne peut pas être utilisé pour les interactions. Cependant, après avoir posé une question dans le Discord officiel, ils ont déclaré que ces limitations sont pour des raisons de sécurité et qu'elles pourraient être assouplies dans les prochaines versions.
En outre, pour des raisons de sécurité, les requêtes externes ne sont prises en charge que par la méthode Fetch et ne prennent pas en charge les protocoles de requête supplémentaires tels que WebSocket. Pour des raisons de sécurité, de capacité et de confidentialité, il n'est pas non plus possible d'accéder aux informations sur les clients, telles que l'URL qui a déclenché Snap, ce qui rend difficile la mise en œuvre d'un plus grand nombre de fonctionnalités.
La plupart de ces problèmes sont liés à des questions de sécurité. Nous pensons qu'au fur et à mesure que la sécurité sera validée, davantage d'autorisations seront accordées.
Avec l'introduction de ces API, MetaMask est devenu un produit à plateforme ouverte. C'est un peu comme lorsque WeChat a lancé son compte officiel et ses mini-programmes, se transformant ainsi en un simple outil de chat.
En 2019, MetaMask avait déjà prévu le paysage actuel du marché avec de nombreuses chaînes publiques, des parties de projet et des exigences de portefeuilles personnalisés. Plutôt que chaque projet développe son propre plugin et que les utilisateurs aient à installer plusieurs plugins, il est plus efficace de développer sur la base de MetaMask Snap. Dans le premier lot de Snaps, nous avons vu des portefeuilles provenant d'écosystèmes autres que l'EVM, comme Sui Wallet, Solana Wallet et Arweave Wallet. Compte tenu de sa base d'utilisateurs existante, MetaMask Snap devrait avoir un impact significatif sur le paysage des portefeuilles.
En fait, le potentiel de MetaMask Snap pourrait être encore plus grand que nous ne l'imaginons et s'étendre au-delà des simples portefeuilles. Nous pouvons également constater les efforts de l'équipe EthSign, qui a créé un gestionnaire de mot de passe universel appelé KeyChain basé sur les Snaps de MetaMask. Tous les mots de passe du navigateur peuvent être cryptés et stockés à l'aide de la clé du portefeuille. En sécurisant votre portefeuille, vous sécurisez essentiellement tous vos mots de passe.
Il y a également une création de l'équipe Web3MQ. Web3MQ est un réseau de relais de communication décentralisé très performant. Web3MQ Snap servira de client pour faciliter les interactions entre les messages, les notifications, les alertes et les fonctions "push". Il s'intégrera à d'autres DApps connectées à Web3MQ, telles que des outils de chat ou des jeux basés sur la blockchain, entre autres. Avec l'aide de Web3MQ Snap, les messages et les mises à jour seront automatiquement transmis aux utilisateurs de Metamask Snap, ce qui élimine le besoin d'une autorisation supplémentaire de la part de l'utilisateur. Cela permet d'établir une connexion sans confiance entre les utilisateurs et entre les utilisateurs et les applications.
Les snaps sont fortement axés sur les développeurs. Avec l'API ouverte, quelle est l'expérience des développeurs ? Pour le savoir, plongeons dans la création d'un Snap.
Il est bien connu que la plupart des utilisateurs ne connaissent pas les contrats intelligents avec lesquels ils interagissent, ce qui pose notamment les problèmes suivants :
Pour les utilisateurs moyens, il est difficile de s'attendre à ce qu'ils examinent le code de solidité des contrats avant chaque opération. Cette situation est idéale pour que la fonction Transaction Insight analyse les contrats intelligents, comme l'utilisation de l'IA pour un audit de sécurité préliminaire, permettant de filtrer 80 % des attaques de phishing de base.
Installation du portefeuille
Tout d'abord, installez MetaMask Flask.
MetaMask Flask est une version de l'extension MetaMask centrée sur les développeurs, principalement utilisée pour la prévisualisation de nouvelles fonctionnalités et le développement de fonctionnalités expérimentales. N'oubliez pas qu'il s'agit d'un outil de développement et non d'un outil d'utilisation quotidienne. N'importez pas vos clés privées à usage quotidien. Nous utilisons Flask ici principalement pour prévisualiser notre Snap développé localement.
Il est recommandé de désactiver temporairement votre portefeuille MetaMask habituel et les autres portefeuilles du navigateur après l'installation ou de créer un nouveau profil Chrome pour éviter les conflits.
Après avoir installé le portefeuille, créez-en un nouveau comme pour un portefeuille MetaMask classique. Il s'agit d'un portefeuille de test, n'importez donc pas votre portefeuille d'utilisation quotidienne.
Ensuite, nous devons déposer quelques pièces de test dans le portefeuille nouvellement créé, qui peuvent être obtenues par l'intermédiaire de robinets. Le Snap dont il est question dans cet article utilise Goerli, c'est pourquoi le contenu suivant se concentrera principalement sur Goerli.
Pour initialiser un Snap basé sur un modèle, suivez la documentation officielle. Tout d'abord, utilisez le CLI @metamask/create-snappour créer un nouveau projet Snap. En même temps, nous allons initialiser en utilisant le modèle officiel :
yarn create @metamask/snaptransaction-insights-snap && cd transaction-insights-snap
Les principaux fichiers Snap se trouvent dans ./packages/snap. La structure du répertoire est la suivante :
Le fichier de configuration de Snap se trouve dans snap.mainfest.json
, et le corps principal de Snap se trouve dans ./src/index.ts
, qui est assez succincte.
Tout d'abord, activez les autorisations. Ajoutez les trois lignes suivantes à snap.mainfest.json
:
code jsonCopy
"initialPermissions" : {
"endowment:transaction-insight" : {}, // Aperçu de la transaction
"endowment:ethereum-provider" : {}, // Accès à RPC
"endowment:network-access" : {} //
Dans le fichier manifeste, vous pouvez également mettre à jour la description
et le nom proposé
pour modifier la description et le nom du projet.
Pour cette démo, il suffit de modifier le fichier index.ts pour compléter toutes les fonctionnalités. Vous trouverez ci-dessous un extrait de code simplifié. Pour obtenir le code d'exécution complet, veuillez consulter : https://github.com/LidamaoHub/insights.
Code tsxCopy
import { OnTransactionHandler, OnRpcRequestHandler } from '@metamask/snaps-types' ;
import { heading, panel, text, copyable, divider } from '@metamask/snaps-ui' ;
export const onTransaction : OnTransactionHandler = async ({ transaction }) => {
// la transaction
comprend des valeurs telles que to
(adresse du contrat) et data
(données d'interaction)
// Exemple de code pour récupérer les informations d'audit pour le contrat ci-dessous
const info = await fetch(http://contract-info.audit.dev/?address=${transaction.to}
) ;
// Vous trouverez ci-dessous un exemple de code d'interface utilisateur
return {
le contenu : [
text(
`${info.riskList.length} risk item`,
),
heading(`${info.riskList.length ? 'Risk List' : ''}`),
...info.riskList.map((item, i) => text(`${i + 1} ${item.text}`)),
divider(),
text(
`More audit info from the following url`,
),
copyable(
`https://contract-info.audit.dev/mm${info.token}`,
)
]
} ;
} ;
Pour plus de détails sur les fonctionnalités, reportez-vous à la documentation du développeur MetaMask Snap.
Après l'installation, chaque transaction affichera des alertes de risque similaires :
L'expérience de développement avec Snaps est actuellement assez fluide, avec très peu de problèmes. Les modèles officiels sont également riches et variés. Les développeurs expérimentés peuvent généralement commencer à développer leur Snap en quelques heures. Toutefois, les audits de sécurité constitueront le principal goulot d'étranglement pour les versions officielles destinées au grand public. Tous les développeurs indépendants ou les petites équipes ne disposent pas des ressources nécessaires pour réaliser des audits de leurs Snaps. On peut donc s'attendre à ce que la quantité et la diversité des Snaps ne connaissent pas une croissance explosive avant un bon moment.
Si vous pouvez exécuter avec succès l'exemple ci-dessus, félicitations, vous êtes un développeur Snap débutant qualifié !
L'année dernière, MetaMask a officiellement lancé la DAO MetaMask Grants pour financer des projets de grande valeur au sein de l'écosystème MetaMask. Il s'agit d'une initiative expérimentale menée par les employés, visant à offrir des subventions à des développeurs externes internationaux pour créer des expériences impactantes au sein de l'écosystème MetaMask. Une partie des bénéfices trimestriels de MetaMask est acheminée vers cette DAO, dont le budget annuel actuel s'élève à 2,4 millions de dollars.
Tout projet qui enrichit l'écosystème MetaMask peut demander une subvention MetaMask officielle auprès de la DAO MetaMask Grants. Pour plus d'informations, veuillez consulter le site https://metamaskgrants.org/.
Il convient de mentionner que LXDAO est honoré d'avoir demandé et reçu une subvention de MetaMask cette année, et a participé activement au développement de projets connexes, contribuant ainsi à l'écosystème de MetaMask !
Nous avons disséqué ce qu'est Snap d'un point de vue technique, ses considérations de sécurité, ses limites et l'expérience des développeurs. En résumé :
Actuellement, MetaMask Snap fait encore l'objet d'itérations rapides. Il est prévu que d'autres autorisations et capacités soient ouvertes à l'avenir. On peut espérer l'introduction d'un mécanisme plus ouvert et plus sûr, tel qu'un système d'audit à faible coût, sûr et sans autorisation, afin de permettre à un plus grand nombre de développeurs de participer à moindre coût. Si ce problème est résolu, on peut s'attendre à une augmentation de la demande à l'avenir. Des postes de développeurs Snap pourraient même voir le jour.
En s'appuyant sur la base d'utilisateurs massive de MetaMask, les développeurs indépendants peuvent également trouver des opportunités uniques. Gardons l'œil ouvert pour découvrir les prochaines innovations qui changeront la donne et que Snaps apportera.
Enfin, merci pour votre article. Je pense qu'il contribuera de manière significative à la prise de conscience de l'état actuel des MetaMask Snaps.
Veuillez continuer à suivre notre Twitter : <a href="https://twitter.com/LXDAO_Official"" > @lxdao_official. Nous mettrons en place d'autres contenus liés à MetaMask Snap comme des ateliers, alors restez à l'écoute !
Il y a quelques jours, ConsenSys a annoncé le déploiement public de MetaMask Snaps Open Beta. Les MetaMask Snaps sont essentiellement des plugins qui étendent les capacités du portefeuille MetaMask. Ces "Snaps" sont des applications développées par des tiers qui peuvent être installées pour ajouter de nouvelles fonctionnalités.
Si l'on compare la transformation de MetaMask par ConsenSys à celle de WeChat, Snap pourrait être considéré comme le mini-programme de WeChat. Il est donc évident que MetaMask, avec son ambition, combinée à la taille de ConsenSys et à la base d'utilisateurs de MetaMask, modifiera le paysage du secteur des portefeuilles.
Le site officiel a déjà répertorié 35 Snaps disponibles et a lancé un Snap App Store : https://snaps.metamask.io/.
Liste partielle des snaps
Alors, à quoi ressemblent les Snaps MetaMask d'un point de vue technique ? Quelles sont leurs capacités et leurs limites ? Sont-ils sûrs ? Quelle est l'expérience des développeurs ? Tous ces facteurs pourraient déterminer le potentiel futur de MetaMask Snaps.
Depuis l'année dernière, le LXDAO s'est fortement impliqué dans la recherche sur la mise en œuvre de Snaps. Plusieurs membres se sont engagés dans le développement de Snap et ont participé à des hackathons. Aujourd'hui, nous allons approfondir ces questions d'un point de vue technique et même développer un Snap pour vous donner une expérience pratique de développeur.
Vous pouvez généralement installer les Snaps à partir de la place de marché officielle de MetaMask Snap, ou directement à partir du site web d'un projet. Par exemple, avec UniPass, lorsque vous visitez la page de l'application, un bouton vous permet de connecter votre MetaMask.
En cliquant dessus, vous lancez l'installation de Snap :
Une fois installé, vous pouvez commencer à utiliser le produit et ses fonctionnalités. Dans ce cas, UniPass créera un compte de contrat intelligent pour vous, que vous pouvez contrôler par le biais de votre EOA MetaMask (Externally Owned Account).
Lorsque vous initiez un transfert, UniPass déclenche une fenêtre contextuelle pour confirmer si vous voulez exécuter l'opération pour le porte-monnaie AA UniPass.
Après confirmation par MetaMask, vous pouvez procéder à la transaction. Dans ce scénario, MetaMask prend le contrôle du portefeuille AA d'UniPass par l'intermédiaire du Snap, ce qui évite à UniPass de devoir développer son propre plugin de portefeuille. Cela permet également d'intégrer les utilisateurs à moindre coût grâce à MetaMask.
Quels enseignements pouvons-nous tirer de ce processus d'installation et d'utilisation ?
La sécurité est toujours prioritaire lorsqu'il s'agit de produits de portefeuille. Penchons-nous sur la conception de la sécurité de Snaps.
Les Snaps sont basés sur NPM, ce qui implique qu'il s'agit d'applications web et JavaScript. Comme nous le savons, JavaScript est très flexible mais sensible aux attaques telles que XSS et phishing. Comment MetaMask Snap relève-t-il ces défis ?
En faisant des recherches, nous avons découvert que MetaMask a financé et intégré le JavaScript renforcé d'Agoric (ou Secure EcmaScript) en tant que solution de sandboxing "entièrement virtualisée". Agoric a rédigé une API de restriction JavaScript et soumis un projet de proposition au TC-39 : Proposition TC-39.
En termes simples, le JavaScript renforcé est un sous-ensemble plus sûr du JavaScript standard. En ajustant certaines des capacités de JavaScript et en limitant les appels à l'API, il réduit divers risques. Il crée un bac à sable sécurisé pour l'exécution du code et suit le "principe du moindre privilège" dans la planification des autorisations du code.
Pour plus de détails techniques sur le JavaScript renforcé, veuillez vous référer à : https://tvcutsem.github.io/assets/HardenedJS_BlueLava2022.pdf.
Agoric et MetaMask ont développé conjointement le LavaMoat(https://github.com/LavaMoat/lavamoat). afin d'améliorer la sécurité de Snaps. LavaMoat s'attaque principalement aux risques de sécurité liés aux dépendances externes dans les projets JavaScript.
Agoric et MetaMask ont tous deux été soumis à des tests de sécurité boîte noire et boîte blanche et ont publié des rapports de sécurité détaillés. (Plus de détails : https://agoric.com/blog/technology/purple-teaming-how-metamask-and-agoric-hunted-bugs-to-harden-javascript). Par conséquent, au niveau de l'exécution du code, nous avons de bonnes raisons de penser que les Snaps sont sûrs.
Outre l'autorisation explicite de l'utilisateur et la conception à moindre privilège, pour être officiellement reconnus, les Snaps doivent être en libre accès, ce qui réduit la probabilité d'un code malveillant. Nous avons également observé que les Snaps répertoriés sur le site officiel ont fait l'objet d'audits de sécurité par des tiers, ce qui renforce encore leur crédibilité.
Actuellement, les Snaps sont gérés sur la base des paquets NPM et des versions. NPM est un outil de gestion de paquets largement utilisé pour le développement Web, qui permet aux développeurs et aux équipes de projet de publier de nouveaux paquets et du code de manière indépendante.
MetaMask n'a aucun contrôle sur les versions publiées sur la plateforme NPM. Il est possible que les derniers changements de version ne soient pas ouverts à la concurrence ou audités, n'est-ce pas ?
Après clarification officielle, toutes les modifications apportées aux versions des paquets NPM doivent être examinées par l'équipe officielle et ajoutées à une liste blanche avant de pouvoir être installées. Par conséquent, même si une équipe de projet publie un nouveau paquetage NPM, celui-ci ne peut pas être installé par les utilisateurs tant qu'il n'est pas officiellement répertorié. Cette approche augmente sans aucun doute le coût de la mise à jour des versions de Snap, mais c'est la solution la plus sûre. Il reflète la philosophie de conception de MetaMask Snap, qui donne la priorité à la sécurité avant tout.
MetaMask Snap a été récemment annoncé officiellement, mais il est en fait en développement depuis plus de quatre ans ! Le concept initial de MetaMask Snap a été publié par Dan Finlay le 10 octobre 2019 sur Medium. Article moyen.
Trouver un équilibre entre la sécurité, la flexibilité et l'efficacité est un défi de taille. Il est évident que MetaMask a investi beaucoup de ressources et de préparation dans cette entreprise.
À l'heure actuelle, trois grandes API sont principalement exposées :
Vous trouverez ci-dessous une brève introduction aux capacités et aux effets spécifiques offerts par MetaMask Snap, afin de vous donner une meilleure compréhension.
L'interface Snap_notify peut afficher des notifications dans MetaMask ou dans le navigateur. Les snaps peuvent envoyer des messages directs aux utilisateurs par le biais de cette interface, comme le montre l'image ci-dessous.
Lorsqu'un utilisateur interagit avec un contrat intelligent, MetaMask déclenche l'événement onTransaction du Snap. MetaMask transmet la transaction brute non signée à la méthode de traitement onTransaction. Snaps peut ensuite renvoyer une interface sur la page de confirmation secondaire de la transaction, en personnalisant le contenu affiché.
Grâce à cette capacité, il est possible de réaliser des fonctionnalités telles que l'audit sécurisé des informations sur les transactions et l'affichage étendu des informations.
La capacité de dialogue permet aux Snaps de faire apparaître directement une fenêtre séparée, semblable aux boîtes de dialogue traditionnelles d'alerte/confirmation/prompt. Ils sont utilisés respectivement pour les rappels, les confirmations et les soumissions d'informations.
Grâce à Dialog, vous pourrez personnaliser des interfaces interactives simples et des opérations à intégrer à votre DApp.
Pour des raisons de sécurité, Snap ne prend actuellement pas en charge les frameworks frontaux tiers et ne fournit qu'un UIKit limité. Ici, nous utilisons toujours Insight comme exemple, pour présenter la bibliothèque de composants d'interface utilisateur disponible pour les développeurs.
Comme le montre l'image, les fonctionnalités actuelles sont les suivantes : Titre (texte de grande taille), Texte (texte de petite taille), Panneau (carte à usage unique), Séparateur, Copiable (cliquer pour copier) et un sous-ensemble de fonctionnalités Markdown (gras et italique). Par conséquent, les capacités interactives semblent temporairement irréalisables, et le HTML intégré ne peut pas être utilisé pour les interactions. Cependant, après avoir posé une question dans le Discord officiel, ils ont déclaré que ces limitations sont pour des raisons de sécurité et qu'elles pourraient être assouplies dans les prochaines versions.
En outre, pour des raisons de sécurité, les requêtes externes ne sont prises en charge que par la méthode Fetch et ne prennent pas en charge les protocoles de requête supplémentaires tels que WebSocket. Pour des raisons de sécurité, de capacité et de confidentialité, il n'est pas non plus possible d'accéder aux informations sur les clients, telles que l'URL qui a déclenché Snap, ce qui rend difficile la mise en œuvre d'un plus grand nombre de fonctionnalités.
La plupart de ces problèmes sont liés à des questions de sécurité. Nous pensons qu'au fur et à mesure que la sécurité sera validée, davantage d'autorisations seront accordées.
Avec l'introduction de ces API, MetaMask est devenu un produit à plateforme ouverte. C'est un peu comme lorsque WeChat a lancé son compte officiel et ses mini-programmes, se transformant ainsi en un simple outil de chat.
En 2019, MetaMask avait déjà prévu le paysage actuel du marché avec de nombreuses chaînes publiques, des parties de projet et des exigences de portefeuilles personnalisés. Plutôt que chaque projet développe son propre plugin et que les utilisateurs aient à installer plusieurs plugins, il est plus efficace de développer sur la base de MetaMask Snap. Dans le premier lot de Snaps, nous avons vu des portefeuilles provenant d'écosystèmes autres que l'EVM, comme Sui Wallet, Solana Wallet et Arweave Wallet. Compte tenu de sa base d'utilisateurs existante, MetaMask Snap devrait avoir un impact significatif sur le paysage des portefeuilles.
En fait, le potentiel de MetaMask Snap pourrait être encore plus grand que nous ne l'imaginons et s'étendre au-delà des simples portefeuilles. Nous pouvons également constater les efforts de l'équipe EthSign, qui a créé un gestionnaire de mot de passe universel appelé KeyChain basé sur les Snaps de MetaMask. Tous les mots de passe du navigateur peuvent être cryptés et stockés à l'aide de la clé du portefeuille. En sécurisant votre portefeuille, vous sécurisez essentiellement tous vos mots de passe.
Il y a également une création de l'équipe Web3MQ. Web3MQ est un réseau de relais de communication décentralisé très performant. Web3MQ Snap servira de client pour faciliter les interactions entre les messages, les notifications, les alertes et les fonctions "push". Il s'intégrera à d'autres DApps connectées à Web3MQ, telles que des outils de chat ou des jeux basés sur la blockchain, entre autres. Avec l'aide de Web3MQ Snap, les messages et les mises à jour seront automatiquement transmis aux utilisateurs de Metamask Snap, ce qui élimine le besoin d'une autorisation supplémentaire de la part de l'utilisateur. Cela permet d'établir une connexion sans confiance entre les utilisateurs et entre les utilisateurs et les applications.
Les snaps sont fortement axés sur les développeurs. Avec l'API ouverte, quelle est l'expérience des développeurs ? Pour le savoir, plongeons dans la création d'un Snap.
Il est bien connu que la plupart des utilisateurs ne connaissent pas les contrats intelligents avec lesquels ils interagissent, ce qui pose notamment les problèmes suivants :
Pour les utilisateurs moyens, il est difficile de s'attendre à ce qu'ils examinent le code de solidité des contrats avant chaque opération. Cette situation est idéale pour que la fonction Transaction Insight analyse les contrats intelligents, comme l'utilisation de l'IA pour un audit de sécurité préliminaire, permettant de filtrer 80 % des attaques de phishing de base.
Installation du portefeuille
Tout d'abord, installez MetaMask Flask.
MetaMask Flask est une version de l'extension MetaMask centrée sur les développeurs, principalement utilisée pour la prévisualisation de nouvelles fonctionnalités et le développement de fonctionnalités expérimentales. N'oubliez pas qu'il s'agit d'un outil de développement et non d'un outil d'utilisation quotidienne. N'importez pas vos clés privées à usage quotidien. Nous utilisons Flask ici principalement pour prévisualiser notre Snap développé localement.
Il est recommandé de désactiver temporairement votre portefeuille MetaMask habituel et les autres portefeuilles du navigateur après l'installation ou de créer un nouveau profil Chrome pour éviter les conflits.
Après avoir installé le portefeuille, créez-en un nouveau comme pour un portefeuille MetaMask classique. Il s'agit d'un portefeuille de test, n'importez donc pas votre portefeuille d'utilisation quotidienne.
Ensuite, nous devons déposer quelques pièces de test dans le portefeuille nouvellement créé, qui peuvent être obtenues par l'intermédiaire de robinets. Le Snap dont il est question dans cet article utilise Goerli, c'est pourquoi le contenu suivant se concentrera principalement sur Goerli.
Pour initialiser un Snap basé sur un modèle, suivez la documentation officielle. Tout d'abord, utilisez le CLI @metamask/create-snappour créer un nouveau projet Snap. En même temps, nous allons initialiser en utilisant le modèle officiel :
yarn create @metamask/snaptransaction-insights-snap && cd transaction-insights-snap
Les principaux fichiers Snap se trouvent dans ./packages/snap. La structure du répertoire est la suivante :
Le fichier de configuration de Snap se trouve dans snap.mainfest.json
, et le corps principal de Snap se trouve dans ./src/index.ts
, qui est assez succincte.
Tout d'abord, activez les autorisations. Ajoutez les trois lignes suivantes à snap.mainfest.json
:
code jsonCopy
"initialPermissions" : {
"endowment:transaction-insight" : {}, // Aperçu de la transaction
"endowment:ethereum-provider" : {}, // Accès à RPC
"endowment:network-access" : {} //
Dans le fichier manifeste, vous pouvez également mettre à jour la description
et le nom proposé
pour modifier la description et le nom du projet.
Pour cette démo, il suffit de modifier le fichier index.ts pour compléter toutes les fonctionnalités. Vous trouverez ci-dessous un extrait de code simplifié. Pour obtenir le code d'exécution complet, veuillez consulter : https://github.com/LidamaoHub/insights.
Code tsxCopy
import { OnTransactionHandler, OnRpcRequestHandler } from '@metamask/snaps-types' ;
import { heading, panel, text, copyable, divider } from '@metamask/snaps-ui' ;
export const onTransaction : OnTransactionHandler = async ({ transaction }) => {
// la transaction
comprend des valeurs telles que to
(adresse du contrat) et data
(données d'interaction)
// Exemple de code pour récupérer les informations d'audit pour le contrat ci-dessous
const info = await fetch(http://contract-info.audit.dev/?address=${transaction.to}
) ;
// Vous trouverez ci-dessous un exemple de code d'interface utilisateur
return {
le contenu : [
text(
`${info.riskList.length} risk item`,
),
heading(`${info.riskList.length ? 'Risk List' : ''}`),
...info.riskList.map((item, i) => text(`${i + 1} ${item.text}`)),
divider(),
text(
`More audit info from the following url`,
),
copyable(
`https://contract-info.audit.dev/mm${info.token}`,
)
]
} ;
} ;
Pour plus de détails sur les fonctionnalités, reportez-vous à la documentation du développeur MetaMask Snap.
Après l'installation, chaque transaction affichera des alertes de risque similaires :
L'expérience de développement avec Snaps est actuellement assez fluide, avec très peu de problèmes. Les modèles officiels sont également riches et variés. Les développeurs expérimentés peuvent généralement commencer à développer leur Snap en quelques heures. Toutefois, les audits de sécurité constitueront le principal goulot d'étranglement pour les versions officielles destinées au grand public. Tous les développeurs indépendants ou les petites équipes ne disposent pas des ressources nécessaires pour réaliser des audits de leurs Snaps. On peut donc s'attendre à ce que la quantité et la diversité des Snaps ne connaissent pas une croissance explosive avant un bon moment.
Si vous pouvez exécuter avec succès l'exemple ci-dessus, félicitations, vous êtes un développeur Snap débutant qualifié !
L'année dernière, MetaMask a officiellement lancé la DAO MetaMask Grants pour financer des projets de grande valeur au sein de l'écosystème MetaMask. Il s'agit d'une initiative expérimentale menée par les employés, visant à offrir des subventions à des développeurs externes internationaux pour créer des expériences impactantes au sein de l'écosystème MetaMask. Une partie des bénéfices trimestriels de MetaMask est acheminée vers cette DAO, dont le budget annuel actuel s'élève à 2,4 millions de dollars.
Tout projet qui enrichit l'écosystème MetaMask peut demander une subvention MetaMask officielle auprès de la DAO MetaMask Grants. Pour plus d'informations, veuillez consulter le site https://metamaskgrants.org/.
Il convient de mentionner que LXDAO est honoré d'avoir demandé et reçu une subvention de MetaMask cette année, et a participé activement au développement de projets connexes, contribuant ainsi à l'écosystème de MetaMask !
Nous avons disséqué ce qu'est Snap d'un point de vue technique, ses considérations de sécurité, ses limites et l'expérience des développeurs. En résumé :
Actuellement, MetaMask Snap fait encore l'objet d'itérations rapides. Il est prévu que d'autres autorisations et capacités soient ouvertes à l'avenir. On peut espérer l'introduction d'un mécanisme plus ouvert et plus sûr, tel qu'un système d'audit à faible coût, sûr et sans autorisation, afin de permettre à un plus grand nombre de développeurs de participer à moindre coût. Si ce problème est résolu, on peut s'attendre à une augmentation de la demande à l'avenir. Des postes de développeurs Snap pourraient même voir le jour.
En s'appuyant sur la base d'utilisateurs massive de MetaMask, les développeurs indépendants peuvent également trouver des opportunités uniques. Gardons l'œil ouvert pour découvrir les prochaines innovations qui changeront la donne et que Snaps apportera.
Enfin, merci pour votre article. Je pense qu'il contribuera de manière significative à la prise de conscience de l'état actuel des MetaMask Snaps.
Veuillez continuer à suivre notre Twitter : <a href="https://twitter.com/LXDAO_Official"" > @lxdao_official. Nous mettrons en place d'autres contenus liés à MetaMask Snap comme des ateliers, alors restez à l'écoute !