Pourquoi nous avons construit un autre portefeuille de crypto-monnaie
![Featured Image](/_astro/wallet_technical_m_29GINb.webp)
Bonjour, je suis Thomas, le directeur technique ici chez Morpher. Dans ce post, je souhaite parler un peu de la mise en place des composants du portefeuille et pourquoi nous avons construit le portefeuille en premier lieu. C'est un article assez technique, donc si vous êtes un développeur, cet article est pour vous.
Pourquoi encore un autre portefeuille ?! 🤔
L'objectif de Morpher est de rendre le trading en utilisant la technologie Blockchain accessible aux masses. Les implémentations actuelles de portefeuilles sont toutes très sécurisées, mais pas très pratiques pour les utilisateurs. Ils ne sont pas non plus très faciles à utiliser pour les développeurs. Nous pensons que la commodité ne doit pas compromettre la sécurité.
Nous avons commencé Morpher avec trois portefeuilles différents : MetaMask, Portis et Fortmatic. L'intégration avec les portefeuilles fonctionne généralement de la manière suivante : le portefeuille injecte un objet web3 complet dans le site web et se charge de se connecter à un nœud, ainsi que de fournir un trousseau pour signer les transactions. Ainsi, essentiellement, vous devez vous connecter au bon nœud et avoir les moyens de signer les transactions qui sont envoyées à travers la connexion du portefeuille au nœud. Ce sont deux composants : un connecteur Http/WebSocket et un trousseau, tous deux dans un seul "portefeuille" qui se charge de signer et d'envoyer.
Avoir les deux en composants externes donne très peu de contrôle au développeur. Par exemple, avec MetaMask, vous ne pouvez pas influencer directement à quel réseau vous connecter - l'utilisateur doit le faire. En dehors de quelques petites avancées dans de nouveaux appels RPC qui permettent aux développeurs d'ajouter automatiquement un nouveau réseau, tout ce que vous pouvez faire est d'écouter et observer à quel réseau l'utilisateur est connecté et l'informer via une fenêtre modale ou une sorte d'alerte que l'utilisateur est connecté au mauvais réseau.
![Instructions pour changer de réseau dans MetaMask à l'intérieur de DApp.](/_astro/metamask_change_network_7hQ89.webp)
MetaMask
Imaginez-vous être un utilisateur qui n'a jamais touché à la Blockchain.
Maintenant, vous devez configurer MetaMask avant de commencer à utiliser une plateforme. Vous devez télécharger une extension de navigateur dont vous n'avez jamais entendu parler et qui a une tête de renard suivant le curseur de votre souris. Ensuite, vous devez entrer un mot de passe sécurisé - et que Dieu vous en préserve si vous le perdez. Ensuite, on vous demande de mémoriser une phrase de récupération. À ce stade, vous n'avez aucune idée de ce qu'est une phrase de récupération, mais cela semble être comme si vous veniez de commencer votre stage à la CIA.
Si vous n'avez pas abandonné à ce stade, vous êtes alors accueilli par une fenêtre contextuelle pour entrer les détails du réseau et de basculer quelque chose qui semble très effrayant pour l'utilisateur régulier. Maintenant, vous avez réussi à accéder au Sidechain Morpher 🎉 (comme nous, il est probable que votre DApp fonctionne également sur un réseau de couche 2).
Pour couronner le tout, vous recevez un ETH pour signer des transactions sur notre sidechain. Il s'agit de ETH de testnet sur notre sidechain POA et ils n'ont essentiellement aucune valeur. Néanmoins, MetaMask vous dit que vous êtes riche. Inutile de dire que c'est très décevant de découvrir que votre nouvelle fortune n'en est pas une du tout et que les 3 000 $ dans votre portefeuille ne sont pas réels. Mais à ce stade, ce ne sont que des détails, car la plupart des utilisateurs ont déjà renoncé à télécharger MetaMask.
Ils viennent pour trader, pas pour devenir des experts en blockchain.
Portis et Fortmatic
Voici les portefeuilles hébergés. Concentrons-nous simplement sur Fortmatic (ou Magic?) pour l'instant.
Cela rend également l'objet web3 complet accessible au site web. Cela signifie qu'il accomplit deux choses : se connecter à un réseau et fournir un trousseau de clés.
Il prétend être non-custodial. Il utilise AWS KMS pour le chiffrement. Mais essentiellement, il agit en tant qu'intermédiaire dans le processus de récupération et stocke vos clés de récupération dans leur propre infrastructure 🤷♂️.
Cela vous permet de personnaliser un peu les fenêtres contextuelles. Mais si Fortmatic décide que tout le monde a besoin de l'authentification à deux facteurs aujourd'hui, ainsi soit-il. Rien que vous puissiez faire à ce sujet. Si Fortmatic décide demain que vous devez à nouveau vérifier votre adresse e-mail, ainsi soit-il. Si Fortmatic décide que l'exportation de votre clé privée équivaut à supprimer le compte, eh bien, rien que vous puissiez faire. Si Fortmatic décide de ne plus se connecter à votre réseau de couche 2, tout ce que vous pouvez faire est prier les tout-puissants dieux de la blockchain. Et Fortmatic n'a pas décidé de permettre aux développeurs ou aux utilisateurs de désactiver les écrans de confirmation de transaction du tout (et ces fenêtres contextuelles ne sont pas jolies sur mobile). Mais il y a seulement tant que vous pouvez faire à ce sujet.
Il ne suffit pas d'être à la merci des fournisseurs tiers dans un monde, vous devez avoir de profondes poches. La tarification est basée sur les inscriptions des utilisateurs. Vous êtes engagé dès que votre DApp décolle, même si vous n'avez pas encore monétisé ces utilisateurs.
![Options de tarification du portefeuille Fortmatic, de gratuit à entreprise.](/_astro/fortmatic_pricing_Z1nuq1U.webp)
Présentation du Portefeuille Morpher
Maintenant, imaginez ceci :
Vous êtes un utilisateur qui arrive sur Morpher. Vous êtes habitué aux processus d'inscription de la web 2.0. Vous souhaitez vous inscrire pour trader. Vous voulez prendre une position longue sur Tesla. Vous ne voulez pas vous soucier (et vous n'avez aucune raison de le faire) des fenêtres contextuelles de signature, des phrases de récupération ou des clés privées. Vous pouvez également réaliser toutes ces actions liées aux cryptomonnaies, mais avant tout, vous êtes ici pour trader, pas pour apprendre le fonctionnement des cryptomonnaies, exporter des phrases de récupération ou comprendre pourquoi il est préférable d'utiliser PBKDF2 plutôt que SHA256 pour chiffrer des données.
Ou vous êtes comme nous : vous êtes un développeur. Vous souhaitez offrir à vos utilisateurs une expérience fluide. Vous voulez avoir une solution non-custodiale et un contrôle total sur son apparence et son fonctionnement sans compromettre trop la sécurité.
C'est pourquoi nous avons développé le Portefeuille Morpher. Mais comment fonctionne-t-il ?
Analyse technique
Après cette introduction ésotérique sur la raison pour laquelle nous avons construit le portefeuille, je suis sûr que vous êtes également intéressé par l'analyse technique complète. Après tout, nous sommes des développeurs. Alors, allons-y !
Le portefeuille Morpher utilise 3 composants.
- Un composant Backend, écrit en NodeJS/Express, qui ne voit jamais de clé privée non chiffrée ou de phrase de récupération. C'est essentiellement un stockage et une récupération pour les clés chiffrées.
- Un composant Frontend qui agit comme un trousseau de clés et une interface.
- Et un SDK qui crée un objet web3 et le donne à un site web. Il connecte le portefeuille en tant qu'iFrame et s'assure que la communication entre l'iFrame est sécurisée et que des choses comme web3.eth.signTransaction fonctionnent.
Prenons cela étape par étape et voyons ce qui se passe par exemple lors de l'inscription, avant de plonger dans la communication entre l'iFrame et le parent.
Inscription et Flux de données non-custodial
Lorsqu'un utilisateur s'inscrit, le Frontend génère une phrase de récupération en utilisant bip39.
Tout se passe sur le frontend à ce stade - le backend reste inactif, se contentant d'indiquer au frontend si un utilisateur avec cet e-mail existe déjà.
Ensuite, le frontend hache le mot de passe de l'utilisateur, utilise ce hachage pour chiffrer la phrase de récupération en utilisant AES-GCM 256 bits avec 10000 itérations SHA-256 PBKDF2. C'est assez standard dans l'industrie à ce stade.
Ensuite, nous stockons le trousseau de clés chiffré sur le backend.
Nous stockons également le trousseau de clés chiffré dans le localStorage, donc l'utilisateur n'a qu'à saisir le mot de passe la prochaine fois qu'il ouvre le navigateur, mais c'est une autre histoire et purement pour la commodité. Cela ne compromet pas le fait que tout est non-custodial et chiffré.
Connexion
Alors, un utilisateur est enregistré, mais d'où viennent les données pour accéder à la clé privée magique ? Elles sont stockées sur le backend, mais chiffrées. En plus de respecter toutes les pratiques web habituelles pour ne pas être victime d'attaques DDoS, la clé n'est également déchiffrée que côté client.
![Diagramme technique UML pour le flux de connexion du portefeuille Morpher.](/_astro/login_uml_2mmPYq.webp)
Cela fonctionne comme suit :
- L'utilisateur saisit l'adresse e-mail et un mot de passe.
- (Facultatif) L'utilisateur est guidé à travers un processus de double authentification.
- Le frontend demande au backend de rechercher une entrée dans la base de données pour cette adresse e-mail.
- Le backend renvoie la phrase de récupération chiffrée.
- Le frontend essaie de déchiffrer la phrase de récupération avec le mot de passe haché côté client.
À partir de là, un trousseau de clés web3.eth.accounts est créé à partir de la phrase de récupération désormais déchiffrée et conservé en mémoire dans l'environnement du navigateur pour une utilisation ultérieure.
Signature d'une transaction
Le trousseau de clés dans le portefeuille Morpher est en fait le composant le plus important, qui, en soi, ne se connecte pas à un nœud. L'architecture est conçue de manière à ce que le portefeuille soit intégré en tant qu'iFrame dans un autre site web.
Si vous portez votre attention sur le magasin Vuex, vous trouverez toutes les fonctions nécessaires lorsque le portefeuille est intégré.
La signature effective est réalisée par la bibliothèque web3 et est ensuite renvoyée au cadre parent, qui intègre le portefeuille qui est un HookedWalletProvider personnalisé.
Cela est ensuite transmis à un nœud, via le processus web3 normal, pour envoyer une transaction signée.
Conclusion
En résumé, voilà comment fonctionnent les rouages internes. De toute évidence, il y a beaucoup plus que simplement s'inscrire, se connecter et signer des transactions. Mais pour une introduction rapide, c'est probablement suffisant.
La partie la plus importante pour nous est d'avoir un contrôle total sur l'interface utilisateur et son comportement. Nous avons délibérément voulu rendre l'intégration de l'utilisateur simple, mais laisser suffisamment de contrôles pour que l'utilisateur puisse sécuriser son portefeuille selon ses besoins.
En fait, vous pourriez même exporter la phrase de récupération, l'importer dans MetaMask et vous connecter à nouveau à Morpher. C'est à quel point tout est standardisé.
Si vous êtes intéressé à en savoir plus, il y a un document d'audit complet qui explique en détail le fonctionnement du chiffrement, du déchiffrement et du flux de données.
Si vous souhaitez intégrer la solution de portefeuille sur votre propre site web ou DApp, faites-le nous savoir ! Nous prévoyons de rendre cela entièrement accessible à d'autres développeurs également.
Comment s'impliquer et en apprendre davantage :
- Remplissez le Formulaire de demande SDK
- Explorez MorpherWallet sur Github
- Visitez la Page d'accueil du portefeuille
- Essayez le Portefeuille Morpher dans votre navigateur
![Morpher Trading Platform](/blog/morpher-banner-1.webp?resize=1024%2C700&ssl=1)
Avertissement : Tous les investissements comportent des risques et les performances passées d'un titre, d'un secteur, d'un marché, d'un produit financier, d'une stratégie de trading ou des transactions d'un individu ne garantissent pas les résultats ou les rendements futurs. Les investisseurs sont entièrement responsables de toutes les décisions d'investissement qu'ils prennent. Ces décisions doivent être basées uniquement sur une évaluation de leur situation financière, de leurs objectifs d'investissement, de leur tolérance au risque et de leurs besoins en liquidités. Ce post ne constitue pas un conseil en investissement.
![Blog Cta Image](/blog/desktop_cta.png)
Le trading sans douleur pour tout le monde
Des centaines de marchés en un seul endroit - Apple, Bitcoin, Or, Montres, NFTs, Baskets et bien plus encore.
![Blog Cta Image](/blog/desktop_cta.png)
Le trading sans douleur pour tout le monde
Des centaines de marchés en un seul endroit - Apple, Bitcoin, Or, Montres, NFTs, Baskets et bien plus encore.