MetaMask Snaps est la feuille de route pour faire de MetaMask le wallet le plus extensible au monde. En tant que développeur, vous pouvez intégrer vos fonctionnalités et vos API à MetaMask de manières totalement nouvelles. Les développeurs Web3 sont au cœur de cette croissance, et cette série vise à mettre en lumière les MetaMask Snaps innovants en cours de développement aujourd'hui.
Revoke Snap avec Swix Jedi et Adrian
Nous discutons avec le développeur Web3 Swix Jedi et Adrian, qui ont créé le Revoke Snap lors du hackathon ETHWarsaw.
Dépôt du Snap : https://github.com/SwixJedi/revokesnap
Pourquoi l'avez-vous créé ?
Afin de garantir la sécurité de l'utilisation des tokens par des acteurs externes, les standards de tokens ERC20 mettent en place une allowance, où le propriétaire du token doit approuver un acteur (par exemple, un smart contract de DEX) pour lui permettre d'utiliser ses tokens jusqu'à une limite choisie.
Pour améliorer l'expérience utilisateur DeFi, parfois peu intuitive, de nombreux protocoles DeFi utilisent une valeur maximale de 256 unités pour les approbations, afin que l'utilisateur n'ait pas à approuver les tokens et à dépenser de l'argent en frais de gas inutiles à chaque fois qu'il souhaite interagir avec leurs contrats.
Cela concerne particulièrement les utilisateurs DeFi actifs, qui peuvent facilement se retrouver dans une situation où, après avoir utilisé ces protocoles, il reste des approbations résiduelles, ce qui constitue une menace potentielle pour la sécurité.
Bien qu'il existe des solutions pour aider les utilisateurs à gérer ces allowances résiduelles, seules certaines d'entre elles proposent des approbations directement depuis l'interface utilisateur. Le processus est chronophage, car chaque approbation doit être traitée individuellement et confirmée manuellement. Bien que cette approche soit sécurisée, elle nécessite beaucoup d'interactions manuelles et continues de la part de l'utilisateur.
C'est ce qui nous a orientés vers une niche non exploitée où nous pouvions tirer parti des capacités de MetaMask Snaps pour améliorer les choses.
Pouvez-vous nous expliquer la mise en œuvre technique ?
Nous avons décidé de tirer parti des avantages suivants de MetaMask Snaps :
Accès à tous les comptes dans MetaMask
Capacité à effectuer des opérations complexes avec une seule approbation de l'utilisateur
Pour proposer une solution à ce problème, qui à l'avenir devrait permettre de :
Présenter une seule invite utilisateur pour accéder à tous les comptes actuels et futurs (à l'exception notable des hardware wallets)
Révoquer toutes les approbations de tous les comptes actuels en lot, sans avoir besoin de confirmations séparées ni de changements de compte
Surveiller activement tous les comptes utilisateurs (y compris ceux sur les hardware wallets) pour détecter de nouvelles approbations et afficher une notification à l'utilisateur lorsqu'elles sont détectées.
Lors de l'installation du Revoke Snap via l'interface web, MetaMask demandera les permissions nécessaires.
Toutes les permissions sont spécifiées dans un fichier snap.manifest.json :
"initialPermissions": {
"snap_confirm": {},
"snap_getBip44Entropy_60": {},
"snap_notify": {},
"endowment:long-running": {}
},
Deux permissions méritent d'être soulignées ici :
1. Contrôler vos comptes et actifs « Ethereum ». Cela signifie que pour fonctionner, notre snap nécessite la clé parent (clé secrète) de l'utilisateur depuis MetaMask, afin de pouvoir générer des comptes et signer des transactions au nom de l'utilisateur.
2. Fonctionner indéfiniment. Bien que le Revoke Snap ne soit pas une implémentation destinée à fonctionner en arrière-plan en continu, la validation des transactions sur la blockchain prend du temps et MetaMask Snaps dispose d'un mécanisme d'arrêt automatique après 60 secondes, ce qui peut ne pas être suffisant pour finaliser les transactions. Cette permission permet au RevokeSnap de contourner cette mesure de sécurité.
Après avoir reçu les permissions nécessaires, RevokeSnap génère un certain nombre de comptes à partir de la clé privée de l'utilisateur :
export async function getSigners(provider: ethers.providers.Provider, amount: number): Promise<Wallet[]> {
let wallets: Wallet[] = [];
for (let i=0; i<amount; i++) {
wallets.push(await getSigner(provider, i));
}
return wallets;
}
export function getAddresses(wallets: Wallet[]): string[] {
let addresses: string[] = [];
for (let i=0; i<wallets.length; i++) {
addresses.push(wallets[i].address);
}
return addresses;
}
export async function getSigner(provider: ethers.providers.Provider, index: number): Promise<Wallet> {
const ethereumNode = (await wallet.request({
method: 'snap_getBip44Entropy_60',
})) as unknown as BIP44CoinTypeNode;
const deriveEthereumAccount = await getBIP44AddressKeyDeriver(ethereumNode);
const mainAccountKey = (await deriveEthereumAccount(index)).privateKey;
return new Wallet(mainAccountKey, provider);
}
Il effectue ensuite une vérification des approbations résiduelles et, une fois la recherche terminée, affiche un bouton pour révoquer toutes les approbations identifiées.
En cliquant sur le bouton « Revoke All », le Snap émet une série de transactions correspondant aux approbations résiduelles pour les ramener à zéro une par une. Comme le Snap est déjà en possession des clés privées des wallets générés, cela ne nécessite aucune confirmation supplémentaire de la part de l'utilisateur, au-delà de la confirmation initiale.
Quelles sont les prochaines étapes si vous deviez implémenter cela ?
Lors du hackathon, le temps était limité pour créer les solutions les plus optimales, nous avons donc utilisé un certain nombre d'implémentations fonctionnelles qui peuvent être améliorées.
Pour commencer, le nombre de comptes générés dans le snap est actuellement passé en tant que paramètre de fonction et codé en dur à 3. Une meilleure option serait que le snap utilise une API externe (ou un backend dédié) pour vérifier le nonce de la prochaine transaction sur chaque compte pour une ou plusieurs chaînes choisies, et ne prendre en compte que les adresses dont le nonce est supérieur à 0.
De plus, pour les approbations, nous avons utilisé une courte liste d'adresses connues de tokens et d'acteurs pour illustrer la fonctionnalité, mais idéalement, la vérification des approbations devrait être effectuée de manière plus globale. Cela pourrait être réalisé, par exemple, en utilisant une API de fournisseur RPC (comme Infura) pour trouver toutes les transactions d'approbation et les analyser pour les afficher sur le site web.
Pouvez-vous nous parler un peu de vous et de votre équipe ?
Je suis Jedi, je travaille en tant que Lead Developer chez Swix. Je suis dans la crypto depuis 2017, et depuis 2019, je suis tombé dans le terrier du lapin et j'ai commencé à travailler avec des protocoles DeFi, principalement du côté des Smart Contracts. Avec Swix, je travaille actuellement sur la tokenisation des rendements immobiliers on-chain et sur l'intégration de nouveaux utilisateurs dans l'espace crypto.
Je suis Adrian, j'ai travaillé en tant que développeur et architecte logiciel pour de petites startups et de grandes entreprises. La blockchain est mon principal domaine d'intérêt depuis de nombreuses années, en particulier l'écosystème Ethereum.
Lors du développement du Revoke Snap, nous avons réparti le travail de sorte que Jedi se concentre sur la compréhension du fonctionnement de MetaMask Snaps et sur la mise en place des bases nécessaires pour les interactions avec les Smart Contracts requises dans notre Snap, tandis qu'Adrian s'est occupé de l'interface web et du regroupement des transactions.
Quand avez-vous découvert MetaMask Snaps pour la première fois et quelle a été votre expérience ?
Nous avons découvert MetaMask Snaps lors de la présentation d'ETHWarsaw, qui était assez technique et couvrait les mécanismes internes plus approfondis du protocole. Cela nous a incités à approfondir nos recherches sur le sujet, et voilà où nous en sommes.
En quoi MetaMask Snaps se distingue-t-il des autres wallets ?
L'idée elle-même, tout simplement. MetaMask Snaps rompt avec le standard accepté dans l'écosystème des extensions de wallets navigateur non-custodial, selon lequel chaque transaction, lors d'une interaction avec des applications web3, doit être approuvée individuellement par l'utilisateur. De plus, les fonctionnalités des wallets sont limitées à celles que l'équipe qui les développe décide d'implémenter.
Ce que MetaMask Snaps apporte, c'est une plateforme permettant la création ascendante d'intégrations natives de wallets pour des interactions blockchain arbitraires, ce qui ressemble beaucoup aux app stores mobiles.
Quelles opportunités voyez-vous avec MetaMask Snaps et les possibilités qu'il offre pour l'espace Web3 ? Que représente MetaMask Snaps pour vous ?
L'une des plus grandes valeurs ajoutées pour l'espace crypto apportée par MetaMask Snaps est l'amélioration de l'UX dans les protocoles crypto et DeFi. Que ce soit en permettant le regroupement de transactions, l'approbation en un clic pour toutes les transactions effectuées au sein d'une même dApp, les interactions directes avec les contrats lors d'achats par carte bancaire en crypto, ou d'autres solutions encore plus créatives, seul l'avenir nous le dira.
Nous sommes fermement convaincus que, notamment pour les nouveaux utilisateurs crypto, abstraire la complexité et les lourdeurs des interactions blockchain peut changer la donne.
Parlez-nous de votre expérience de développement avec MetaMask Snaps pour vous et votre équipe.
Une grande source de motivation lors du développement du Revoke Snap était que MetaMask Snaps est encore en développement, et donc les expérimentations que nous menons maintenant peuvent avoir un impact concret sur l'évolution de MetaMask, de MetaMask Snaps et, dans une certaine mesure, de l'espace crypto. C'était une belle expérience de pouvoir apporter notre pierre à l'édifice du futur du web3.
Avez-vous des conseils à partager avec les développeurs souhaitant essayer MetaMask Snaps ?
Pour tous les développeurs qui souhaitent essayer MetaMask Snaps — lancez-vous. MetaMask Snaps est assez simple à prendre en main grâce au dépôt de template GitHub disponible, et l'équipe MetaMask est également très disponible. Le concept lui-même a un grand potentiel et peu de choses ont déjà été réalisées avec, il est donc facile d'apporter une valeur ajoutée.
Développer avec MetaMask Snaps
Pour démarrer avec MetaMask Snaps :
Consultez la documentation développeur
Installez MetaMask Flask
Consultez un guide MetaMask Snaps
Restez connecté avec nous sur Twitter, GitHub discussions et Discord
Gardez un œil sur notre équipe lors du prochain hackathon près de chez vous ! Bon BUIDLing ⚒️
Avertissement : Les MetaMask Snaps sont généralement développés par des tiers autres que Consensys Software. L'utilisation de MetaMask Snaps développés par des tiers se fait à votre propre discrétion et à vos propres risques, et vous acceptez d'être seul responsable de toute perte ou dommage résultant de ces activités. Consensys ne fournit aucune garantie expresse ou implicite, qu'elle soit orale ou écrite, concernant les MetaMask Snaps développés par des tiers, et décline toute responsabilité pour les MetaMask Snaps développés par des tiers. L'utilisation de logiciels liés à la blockchain comporte des risques, que vous assumez entièrement lors de l'utilisation de MetaMask Snaps.