MetaMask is the world's leading self-custodial crypto wallet and gateway to decentralized finance, built by Consensys.
Alle Artikel lesenEin Sozu House Hackathon Snap, entwickelt in Bogotá

MetaMask Snaps ist der Fahrplan, um MetaMask zur erweiterbarsten Wallet der Welt zu machen. Als Entwickler kannst du MetaMask auf völlig neue Weise um eigene Funktionen und APIs erweitern. Web3-Entwickler sind das Herzstück dieses Wachstums, und diese Serie soll die innovativen MetaMask Snaps vorstellen, die heute entwickelt werden.

Snap-Repository: https://github.com/Web3Auth/openlogin-snap/
Warum habt ihr es entwickelt?
Bei Web3Auth sind wir schon immer der Überzeugung gewesen, dass Multi-Faktor-Authentifizierung der beste Weg ist, Krypto-Assets zu sichern – und deutlich besser als Seed Phrases. Als wir auf der ETHBogota sahen, dass der neueste Build von MetaMask Snaps es ermöglichte, externe Key-Management-Funktionen bereitzustellen, beschlossen wir, uns selbst herauszufordern und MPC-Technologie beim Sozu House Hackathon in MetaMask zu integrieren.
Kannst du uns durch die technische Implementierung führen?
Unser Ziel war es, einem neuen Nutzer die Möglichkeit zu geben, sich anzumelden und 2FA einzurichten, um auf sein Konto in MetaMask zuzugreifen. Immer wenn der Nutzer anschließend eine Transaktion signieren möchte, führt unser MPC-SDK im Hintergrund eine Threshold-ECDSA-Signatur durch. Dies geschieht, indem ein privater Schlüssel in zwei Teile aufgeteilt wird: ein lokaler Anteil, der im Snap gespeichert ist, und einer, der auf einem Signing-Server gespeichert ist. Über mehrere Kommunikationsrunden hinweg sollen der Signing-Server und der Snap gemeinsam eine Ethereum-Transaktion signieren und diese im Goerli-Netzwerk bestätigen lassen. Im Gegensatz zu Seed Phrases hat dieses Setup keinen Single Point of Failure, der zu einem unwiederbringlichen Schlüsselverlust führt: Wird der Laptop des Nutzers gehackt oder der Signing-Server kompromittiert, verliert der Nutzer seinen privaten Schlüssel nicht.
Wie jeder andere Snap besteht auch unser Snap aus zwei Teilen: dem eigentlichen Snap-Paket und einer Seite, die den Snap lädt und mit ihm interagiert. Unser idealer User-Flow sah vor, alle Key-Management-Interaktionen innerhalb der UI der MetaMask-Erweiterung zu halten – aufgrund von Einschränkungen bei den Berechtigungen war dies jedoch nicht möglich. Stattdessen findet die Nutzerauthentifizierung außerhalb des Snaps statt, und sobald diese abgeschlossen ist, migrieren wir den State in den Snap. Anschließend klinken wir uns in die RPC-Engine von MetaMask ein und reagieren auf Transaktionsanfragen, indem wir unser MPC-SDK und den migrierten State im Snap nutzen, um Threshold-ECDSA-Signaturen für die Transaktionen zu generieren. Überraschenderweise waren wir mit dem State-Migration-Teil bereits innerhalb der ersten Stunden des Hackathons fertig und hatten nur noch die Signing-Funktionalität vor uns.
Der restliche Prozess lässt sich in zwei wesentliche Aufgaben unterteilen:
Anpassung bestehender Web3-Provider mit unserem MPC-SDK zur Verarbeitung eingehender Transaktionsanfragen
Ausführung der MPC-SDKs in der MetaMask Snaps SES-Umgebung
Wer mit der Funktionsweise von MetaMask oder anderen Wallets vertraut ist, weiß, dass das Signieren einer Ethereum-Transaktion weit mehr erfordert als nur die Verwendung eines privaten Schlüssels zum Signieren einer Nachricht. Es steckt viel Arbeit in der Erstellung des Message-Objekts, das signiert werden soll. Jede Transaktion folgt einem bestimmten Format, das spezifisch für jede Chain und jeden Transaktionstyp ist, verfügt über Legacy-Verhaltensweisen, die aus Gründen der Abwärtskompatibilität unterstützt werden müssen, muss Informationen über aktuelle Gaspreise abrufen, muss den zu verwendenden Gas-Verbrauch bzw. die Gas-Limits berechnen und auch den Account-Nonce verfolgen usw. Glücklicherweise erledigen die meisten bestehenden Web3-Provider diese Dinge bereits von Haus aus. Um jedoch unsere Threshold-Signatur-Bibliothek gut mit diesen SDKs zusammenarbeiten zu lassen, mussten wir tief in jedes einzelne Modul eintauchen und die Signierfunktionen der eth-sig-util-Bibliothek durch die Signierfunktionen unserer eigenen Threshold-Signatur-Bibliothek ersetzen, was erhebliche Zeit in Anspruch nahm. Da unser MPC-SDK chain-agnostisch war und keine Ethereum-spezifischen Prüfungen berücksichtigte, mussten wir außerdem Prüfungen aus den ersetzten eth-sig-util-Bibliotheken per Reverse Engineering nachimplementieren. EIP-2 beispielsweise legt fest, dass der s-Wert in einer ECDSA-Signatur nicht größer als n/2 + 1 sein darf, wobei n die Ordnung der secp256k1-elliptischen Kurve ist, um Transaction-Malleability-Angriffe zu verhindern. Dies erfordert, dass ECDSA-Signierbibliotheken ein „Flip" der Signatur durchführen, wenn ihr s-Wert außerhalb dieses Bereichs liegt.
Eine weitere Herausforderung bestand darin, unsere MPC-SDKs in der MetaMask Snaps-Umgebung zum Laufen zu bringen. Unser MPC-SDK verwendet Wasm (aus Rust kompiliert), um effizient im Browser zu laufen. Aufgrund der mehreren Kommunikationsrunden zwischen dem SDK und dem Signing-Server verwendet es außerdem Socket.IO für die Kommunikation, um den Overhead von HTTP-Headern zu vermeiden. Beim Versuch, unseren Wasm-Code in den Snap zu laden, stießen wir auf seltsame Probleme mit gemischten Argumenttypen in den Wasm-Methoden. Leider sind Wasm-Debugging-Tools noch sehr unausgereift, mit wenig hilfreichen und nichtssagenden Fehlermeldungen (z. B. „Uncaught RuntimeError: unreachable"). Letztendlich haben wir diese Einschränkung umgangen, indem wir alle gemischten Eingabeargumente als Strings akzeptierten und sie innerhalb des Wasm-Codes selbst als Integer/Byte-Arrays parseten. Ein weiteres Problem war, dass socket.io in der MetaMask Snaps-Umgebung nicht funktionierte. Socket.IO ist eine separate Bibliothek/Spezifikation, die auf normalen WebSockets aufbaut und Dinge wie Connection-Upgrading, unterbrochene Verbindungen, Fallbacks auf Long-Polling usw. handhabt – sehr hilfreich beim Einsatz von WebSockets in Produktionsumgebungen. Leider konnten wir Socket.IOs Bibliotheken nicht in der MetaMask Snap-Umgebung zum Laufen bringen. Daher mussten wir auf normale WebSockets zurückgreifen und den Signing-Server so umschreiben, dass er Standard-WebSockets statt socket.io verwendet, sowie eine Polling-Strategie als Fallback implementieren, falls der WebSocket Probleme hatte.
Kannst du uns ein wenig über dich und dein Team erzählen?
Zhen und ich sind die Mitgründer von Web3Auth, und unser Unternehmen ist auf die Bereitstellung intuitiver, sicherer und nicht-verwahrender Key-Management-Lösungen spezialisiert. Wir sind der Überzeugung, dass gute Sicherheit einfach zu bedienen und unsichtbar sein muss – sonst wird sie nicht breit angenommen. Deshalb sind wir große Befürworter der Verwendung von Multi-Faktor-Authentifizierung für private Schlüssel.
Wann bist du zum ersten Mal mit MetaMask Snaps in Berührung gekommen und wie war deine Erfahrung?
Wir haben MetaMask Snaps vor etwa einem Jahr ausprobiert, aber leider hatte es damals noch nicht die Möglichkeiten, die Private-Key-Management-Funktionen innerhalb von MetaMask zu erweitern. Mit der kürzlichen Einführung von SIP-2 (danke, Olaf!), das es MetaMask Snaps ermöglicht, den Keyring von MetaMask zu erweitern, sind wir sehr gespannt, was alles möglich ist! Beim Entwickeln unseres Snaps habe ich auch das SES-System erkundet, auf dem MetaMask Snaps basiert, und ich denke, es ist ein sehr solides Fundament dafür, dass MetaMask als Plattform für Entwickler fungiert, die über MetaMask Snaps Funktionalität hinzufügen können.
Was unterscheidet MetaMask Snaps von anderen Wallets?
Die Erweiterbarkeit! Ich denke, MetaMask Snaps bietet eine sichere Schnittstelle für Entwickler, um zu experimentieren und MetaMask zu erweitern, ohne die Sicherheit der MetaMask-Erweiterung selbst zu gefährden. Im Gegensatz zu anderen Projekttypen erfordern Wallets hohe Sicherheitsstandards, was bedeutet, dass die Integration neuer Funktionalität von Drittanbietern stets ein langer, mühsamer Prozess aus Code-Reviews und Audits ist, der Innovation hemmt. MetaMask Snaps ermöglicht es dem MetaMask-Team, weiterhin ein sicheres Produkt zu entwickeln, während externe Entwickler gleichzeitig experimentieren und dessen Funktionalität erweitern können.
Erzähl uns, wie es für dich und dein Team ist, Snaps mit MetaMask zu entwickeln?
Ich denke, MetaMask Snaps ist definitiv der richtige Weg nach vorne – es ermöglicht Menschen, Funktionalität zu entwickeln und gleichzeitig die MetaMask-Basiserweiterung sicher zu halten. Es gibt noch ein paar Kinderkrankheiten, aber es werden täglich Verbesserungen vorgenommen, und ich finde es insgesamt sehr aufregend.
Was bedeutet MetaMask Snaps für dich?
Ich hoffe, dass das Hinzufügen von Multi-Faktor-Authentifizierungsfunktionen zu MetaMask über MetaMask Snaps den Millionen von Mainstream-Nutzern auf MetaMask hilft, ihre Konten sicherer zu verwalten, und sie davor schützt, Opfer von Betrug und Hacks zu werden. MFA tut dies bereits heute für Milliarden von Web2-Nutzern, und wir möchten diese sicheren Best Practices in Web3 bringen.
Welche Möglichkeiten siehst du mit MetaMask Snaps und den Chancen, die es für den Web3-Bereich eröffnet?
Generell denke ich, dass MetaMask Snaps einen realistischen Weg darstellt, wie MetaMask seine Codebasis für Beiträge anderer öffnen kann, ohne die Sicherheit zu gefährden.
Hast du Ratschläge für Entwickler, die MetaMask Snaps ausprobieren möchten?
Einfach ausprobieren! Es mag auf den ersten Blick neu wirken, war bisher aber sehr zugänglich, und der Support dafür ist großartig im Consensys-Discord-Kanal für MetaMask Snaps. Viele großartige Entwickler arbeiten daran, und wenn du Teil des Gesprächs sein möchtest, das die Zukunft von MetaMask Snaps gestaltet, ist jetzt der richtige Zeitpunkt, um damit zu entwickeln und Feedback zu geben!
So startest du mit MetaMask Snaps:
Schau dir die Entwicklerdokumentation an
Installiere MetaMask Flask
Schau dir einen MetaMask Snaps-Leitfaden an
Bleib mit uns in Kontakt auf Twitter, GitHub-Diskussionen und Discord
Halte bei unserem Team Ausschau beim nächsten Hackathon in deiner Nähe! Happy BUIDLing ⚒️
Haftungsausschluss: MetaMask Snaps werden im Allgemeinen von Dritten entwickelt, die nicht Consensys Software sind. Die Nutzung von durch Dritte entwickelten MetaMask Snaps erfolgt nach eigenem Ermessen und auf eigenes Risiko, mit der Vereinbarung, dass du allein für etwaige Verluste oder Schäden verantwortlich bist, die aus solchen Aktivitäten resultieren. Consensys gibt keine ausdrückliche oder stillschweigende Garantie, weder mündlich noch schriftlich, in Bezug auf von Dritten entwickelte MetaMask Snaps und lehnt jede Haftung für von Dritten entwickelte MetaMask Snaps ab. Die Nutzung von Blockchain-bezogener Software birgt Risiken, die du bei der Verwendung von MetaMask Snaps vollständig selbst trägst.
KI-übersetzt. Kann Fehler enthalten. Bitte überprüfen Sie die Informationen stets.