Vor einigen Tagen kündigte ConsenSys die öffentliche Einführung der offenen Beta von MetaMask Snaps an. MetaMask Snaps sind im Wesentlichen Plugins, die die Funktionen der MetaMask-Wallet erweitern. Bei diesen „Snaps“ handelt es sich um von Dritten entwickelte Apps, die installiert werden können, um neue Funktionalitäten hinzuzufügen.
Wenn wir die Transformation von MetaMask zu WeChat durch ConsenSys vergleichen würden, könnte Snap als das WeChat-Miniprogramm angesehen werden. Infolgedessen wird deutlich, dass MetaMask mit seinem Ehrgeiz, kombiniert mit der Größe von ConsenSys und der Benutzerbasis von MetaMask, die Landschaft des Wallet-Sektors verändern wird.
Die offizielle Website hat bereits 35 verfügbare Snaps aufgelistet und einen Snap App Store gestartet: https://snaps.metamask.io/.
Teilliste der Schnappschüsse
Wie sehen MetaMask Snaps also aus technischer Sicht aus? Was sind ihre Fähigkeiten und Grenzen? Sind sie sicher? Wie ist die Entwicklererfahrung? All diese Faktoren könnten das zukünftige Potenzial von MetaMask Snaps bestimmen.
Seit letztem Jahr beschäftigt sich LXDAO intensiv mit der Erforschung der Implementierung von Snaps. Mehrere Mitglieder haben sich an der Snap-Entwicklung beteiligt und an entsprechenden Hackathons teilgenommen. Heute gehen wir diesen Fragen aus technischer Sicht nach und entwickeln sogar einen Snap, um Ihnen eine praktische Entwicklererfahrung zu ermöglichen.
Sie können Snaps im Allgemeinen vom offiziellen MetaMask Snap-Marktplatz oder direkt von der Website eines Projekts installieren. Bei UniPass gibt es beispielsweise nach dem Besuch der App-Seite eine Schaltfläche zum Verbinden Ihrer MetaMask.
Wenn Sie darauf klicken, wird die Snap-Installation gestartet:
Nach der Installation können Sie das Produkt und seine Funktionen nutzen. In diesem Fall erstellt UniPass ein Smart-Contract-Konto für Sie, das Sie über Ihr MetaMask EOA (Externally Owned Account) steuern können.
Wenn Sie eine Übertragung initiieren, löst UniPass ein Snap-Popup aus, um zu bestätigen, ob Sie den Vorgang für das UniPass AA-Wallet ausführen möchten.
Nach der Bestätigung über MetaMask können Sie mit der Transaktion fortfahren. In diesem Szenario erlangt MetaMask durch Snap die Kontrolle über das UniPass AA-Wallet, sodass UniPass kein eigenes Wallet-Plugin entwickeln muss. Dies ermöglicht auch ein kostengünstiges Benutzer-Onboarding über MetaMask.
Welche Erkenntnisse können wir aus diesem Installations- und Nutzungsprozess gewinnen?
Sicherheit hat bei Wallet-Produkten immer Vorrang. Lassen Sie uns tiefer in das Sicherheitsdesign von Snaps eintauchen.
Snaps basieren auf NPM, was bedeutet, dass es sich um Web- und JavaScript-Anwendungen handelt. Wie wir wissen, ist JavaScript äußerst flexibel, aber anfällig für Angriffe wie XSS und Phishing. Wie bewältigt MetaMask Snap diese Herausforderungen?
Bei der Recherche haben wir herausgefunden, dass MetaMask Agorics Hardened JavaScript (oder Secure EcmaScript) als „vollständig virtualisierte“ Sandboxing-Lösung finanziert und integriert hat. Agoric hat eine JavaScript-Einschränkungs-API entworfen und einen Vorschlagsentwurf an TC-39 übermittelt: TC-39-Vorschlag.
Einfach ausgedrückt ist Hardened JavaScript eine sicherere Teilmenge von Standard-JavaScript. Durch die Anpassung einiger JavaScript-Funktionen und die Einschränkung von API-Aufrufen werden verschiedene Risiken reduziert. Es erstellt eine sichere Sandbox zum Ausführen des Codes und folgt dem „Prinzip der geringsten Privilegien“ bei der Planung von Codeberechtigungen.
Ausführlichere technische Einzelheiten zu gehärtetem JavaScript finden Sie unter: https://tvcutsem.github.io/assets/HardenedJS_BlueLava2022.pdf.
Agoric und MetaMask haben den LavaMoat gemeinsam entwickelt (https://github.com/LavaMoat/lavamoat). Projekt zur Verbesserung der Sicherheit von Snaps. LavaMoat befasst sich in erster Linie mit den Sicherheitsrisiken externer Abhängigkeiten in JavaScript-Projekten.
Sowohl Agoric als auch MetaMask wurden Black-Box- und White-Box-Sicherheitstests unterzogen und detaillierte Sicherheitsberichte veröffentlicht. (Weitere Details: https://agoric.com/blog/technology/purple-teaming-how-metamask-and-agoric-hunted-bugs-to-harden-javascript). Daher haben wir auf der Ebene der Codeausführung reichlich Grund zu der Annahme, dass Snaps sicher sind.
Abgesehen von der expliziten Benutzerautorisierung und dem Least-Privilege-Design müssen Snaps, um offiziell anerkannt zu werden, Open-Source-Quellen sein, was die Wahrscheinlichkeit von bösartigem Code verringert. Wir haben außerdem festgestellt, dass die auf der offiziellen Website aufgeführten Snaps Sicherheitsüberprüfungen durch Dritte unterzogen wurden, was ihre Glaubwürdigkeit weiter stärkt.
Derzeit werden Snaps basierend auf NPM-Paketen und Versionierung verwaltet. NPM ist ein weit verbreitetes Paketverwaltungstool für die Webentwicklung, das es Entwicklern und Projektteams ermöglicht, neue Pakete und Code unabhängig zu veröffentlichen.
MetaMask hat keine Kontrolle über Versionsveröffentlichungen auf der NPM-Plattform. Es besteht die Möglichkeit, dass die neuesten Versionsänderungen nicht als Open-Source-Version verfügbar oder geprüft sind, nicht wahr?
Nach offizieller Klärung müssen alle Änderungen an NPM-Paketversionen vom offiziellen Team überprüft und einer Whitelist hinzugefügt werden, bevor sie installiert werden können. Selbst wenn ein Projektteam ein neues NPM-Paket veröffentlicht, kann es daher von Benutzern erst installiert werden, wenn es offiziell gelistet ist. Dieser Ansatz erhöht zweifellos die Kosten für die Aktualisierung von Snap-Versionen, ist aber tatsächlich die sicherste Lösung. Es spiegelt die Designphilosophie von MetaMask Snap wider, Sicherheit über alles andere zu stellen.
MetaMask Snap wurde kürzlich offiziell angekündigt, befindet sich jedoch bereits seit über vier Jahren in der Entwicklung! Das ursprüngliche Konzept von MetaMask Snap wurde von Dan Finlay am 10. Oktober 2019 auf Medium veröffentlicht. Mittlerer Artikel.
Die Balance zwischen Sicherheit, Flexibilität und Effizienz ist eine große Herausforderung. Es ist offensichtlich, dass MetaMask eine Menge Ressourcen und Vorbereitung in dieses Unterfangen investiert hat.
Derzeit sind hauptsächlich drei Haupt-APIs verfügbar:
Im Folgenden finden Sie eine kurze Einführung in die spezifischen Funktionen und Effekte, die MetaMask Snap bietet, um Ihnen ein besseres Verständnis zu vermitteln.
Die Snap_notify-Schnittstelle kann Benachrichtigungen innerhalb von MetaMask oder im Browser anzeigen. Snaps können über diese Schnittstelle Direktnachrichten an Benutzer senden, wie im Bild unten gezeigt.
Wenn ein Benutzer mit einem Smart Contract interagiert, löst MetaMask das onTransaction-Ereignis von Snap aus. MetaMask übergibt die unsignierte Rohtransaktion an die onTransaction-Handlermethode. Snaps kann dann eine Schnittstelle auf der sekundären Bestätigungsseite der Transaktion zurückgeben und so den angezeigten Inhalt anpassen.
Durch diese Funktion können Funktionen wie die sichere Prüfung von Transaktionsinformationen und erweiterte Informationsanzeigen realisiert werden.
Die Dialogfunktion ermöglicht es Snaps, direkt ein separates Fenster aufzurufen, ähnlich wie bei herkömmlichen Dialogfeldern für Warnmeldungen/Bestätigungen/Eingabeaufforderungen. Diese werden für Erinnerungen, Bestätigungen bzw. Informationsübermittlungen verwendet.
Über Dialog können Sie einfache interaktive Schnittstellen und Vorgänge anpassen, um sie in Ihre DApp zu integrieren.
Aus Sicherheitsgründen unterstützt Snap derzeit keine Frontend-Frameworks von Drittanbietern und stellt nur ein eingeschränktes UIKit zur Verfügung. Hier verwenden wir weiterhin Insight als Beispiel und stellen die für Entwickler verfügbare UI-Komponentenbibliothek vor.
Wie im Bild gezeigt, umfassen die aktuellen Funktionen Überschrift (großer Text), Text (kleiner Text), Panel (eine Karte zur einmaligen Verwendung), Teiler, Kopierbar (zum Kopieren klicken) und eine Teilmenge der Markdown-Funktionen (fett und kursiv). ). Daher scheinen interaktive Funktionen vorübergehend unerreichbar zu sein und eingebettetes HTML kann nicht für Interaktionen verwendet werden. Nachdem sie jedoch im offiziellen Discord eine Frage gestellt hatten, gaben sie an, dass diese Einschränkungen aus Sicherheitsgründen seien und in kommenden Versionen möglicherweise gelockert würden.
Darüber hinaus werden externe Anfragen aus Sicherheitsgründen nur über die Fetch-Methode unterstützt und unterstützen keine zusätzlichen Anfrageprotokolle wie WebSocket. Aufgrund von Sicherheits-, Leistungs- und Datenschutzbeschränkungen ist es außerdem nicht möglich, auf Kundeninformationen zuzugreifen, wie z. B. die aktuelle URL, die Snap ausgelöst hat, was die Implementierung eines breiteren Funktionsumfangs zu einer Herausforderung macht.
Die meisten dieser Probleme sind auf Sicherheitsbedenken zurückzuführen. Wir sind davon überzeugt, dass mit der Validierung der Sicherheit im Laufe der Zeit mehr Berechtigungen erteilt werden.
Mit der Einführung dieser APIs hat sich MetaMask im Wesentlichen zu einem offenen Plattformprodukt entwickelt. Es fühlt sich an wie damals, als WeChat sein offizielles Konto und seine Miniprogramme startete und sich von einem reinen Chat-Tool wandelte.
Bereits im Jahr 2019 hat MetaMask die aktuelle Marktlandschaft mit zahlreichen öffentlichen Ketten, Projektparteien und individuellen Wallet-Anforderungen vorhergesehen. Anstatt dass jedes Projekt sein eigenes Plugin entwickelt und Benutzer mehrere Plugins installieren müssen, ist die Entwicklung auf Basis von MetaMask Snap effizienter. In der ersten Reihe von Snaps sahen wir Wallets aus anderen Ökosystemen als EVM, wie Sui Wallet, Solana Wallet und Arweave Wallet. Angesichts seiner bestehenden Benutzerbasis wird MetaMask Snap die Wallet-Landschaft mit Sicherheit erheblich beeinflussen.
Tatsächlich könnte das Potenzial von MetaMask Snap sogar noch größer sein, als wir uns vorstellen, und über die reine Geldbörse hinausgehen. Wir können auch Bemühungen des EthSign-Teams beobachten, das einen universellen Passwort-Manager namens KeyChain basierend auf MetaMask Snaps erstellt hat. Alle Browser-Passwörter können mit dem Wallet-Schlüssel verschlüsselt und gespeichert werden. Indem Sie Ihr Wallet sichern, sichern Sie im Wesentlichen alle Ihre Passwörter.
Es gibt auch eine Kreation vom Web3MQ-Team. Web3MQ ist ein leistungsstarkes dezentrales Kommunikations-Relay-Netzwerk. Der Web3MQ Snap dient als Client, um Nachrichteninteraktionen, Benachrichtigungen, Warnungen und Push-Funktionen zu ermöglichen. Es lässt sich mit anderen DApps integrieren, die mit Web3MQ verbunden sind, wie unter anderem Chat-Tools oder Blockchain-basierte Spiele. Mit Hilfe von Web3MQ Snap werden Nachrichten und Aktualisierungen automatisch an Metamask Snap-Benutzer weitergeleitet, sodass keine zusätzliche Benutzerautorisierung erforderlich ist. Dadurch wird eine vertrauenswürdige Verbindung zwischen Benutzern sowie zwischen Benutzern und Anwendungen hergestellt.
Snaps sind stark entwicklerzentriert. Wie ist das Entwicklererlebnis mit der offenen API? Lassen Sie uns einen Snap erstellen, um das herauszufinden.
Es ist bekannt, dass die meisten Benutzer die Smart Contracts, mit denen sie interagieren, oft nicht kennen, einschließlich der folgenden Bedenken:
Für durchschnittliche Benutzer ist die Erwartung, dass sie vor jedem Vorgang den Soliditätskodex der Verträge überprüfen, eine große Herausforderung. Diese Situation ist ideal für die Funktion „Transaction Insight“, um intelligente Verträge zu analysieren, beispielsweise mithilfe von KI für eine vorläufige Sicherheitsüberprüfung, und möglicherweise 80 % der grundlegenden Phishing-Angriffe herauszufiltern.
Wallet-Installation
Installieren Sie zunächst MetaMask Flask.
MetaMask Flask ist eine entwicklerorientierte Version der MetaMask-Erweiterung, die hauptsächlich zur Vorschau neuer Funktionen und zur Entwicklung experimenteller Funktionen verwendet wird. Denken Sie daran, es dient der Entwicklung und nicht dem täglichen Gebrauch. Importieren Sie nicht Ihre privaten Schlüssel für den täglichen Gebrauch. Wir verwenden Flask hier hauptsächlich, um eine Vorschau unseres lokal entwickelten Snap anzuzeigen.
Es wird empfohlen, Ihr reguläres MetaMask-Wallet und andere Browser-Wallets nach der Installation vorübergehend zu deaktivieren oder ein neues Chrome-Profil zu erstellen, um Konflikte zu vermeiden.
Erstellen Sie nach der Installation des Wallets ein neues, genau wie ein normales MetaMask-Wallet. Dies ist ein Test-Wallet. Importieren Sie also nicht Ihr Alltags-Wallet.
Als nächstes müssen wir einige Testmünzen in die neu erstellte Wallet einzahlen, die über Faucets abgerufen werden können. Der in diesem Artikel besprochene Snap verwendet Goerli, daher konzentriert sich der folgende Inhalt hauptsächlich auf Goerli.
Um einen Snap basierend auf einer Vorlage zu initialisieren, befolgen Sie die offizielle Dokumentation. Verwenden Sie zunächst die @metamask/create-snap-CLI, um ein neues Snap-Projekt zu erstellen. Gleichzeitig initialisieren wir mit der offiziellen Vorlage:
Garn erstellen @metamask/snap Transaction-Insights-Snap && cd Transaction-Insights-Snap
Die wichtigsten Snap-Dateien befinden sich in ./packages/snap. Die Verzeichnisstruktur ist:
Die Konfigurationsdatei von Snap befindet sich in snap.mainfest.json
. und der Hauptteil von Snap befindet sich in ./src/index.ts
, Das ist ziemlich prägnant.
Aktivieren Sie zunächst die Berechtigungen. Fügen Sie die folgenden drei Zeilen zu snap.mainfest.json
hinzu:
jsonCode kopieren
„initialPermissions“: {
„endowment:transaction-insight“: {}, // Einblick in die Transaktion
„endowment:ethereum-provider“: {}, // Zugriff auf RPC
„endowment:network-access“: {} //
In der Manifestdatei können Sie auch die description
und proposedName
aktualisieren, um die Beschreibung und den Namen des Projekts zu ändern.
Für diese Demo muss lediglich die Datei index.ts geändert werden, um alle Funktionen zu vervollständigen. Unten finden Sie einen vereinfachten Codeausschnitt. Den vollständigen ausführbaren Code finden Sie unter: https://github.com/LidamaoHub/insights.
tsxCode kopieren
importiere { OnTransactionHandler, OnRpcRequestHandler } aus ' @metamask/snaps-types';
importiere { heading, panel, text, copyable, divider } aus ' @metamask/snaps-ui';
export const onTransaction: OnTransactionHandler = async ({ transaction }) => {
// transaction
umfasst Werte wie „ to
(Vertragsadresse) und data
(Interaktionsdaten).
// Beispielcode zum Abrufen von Prüfinformationen für den unten stehenden Vertrag
const info = waiting fetch(http://contract-info.audit.dev/?address=${transaction.to}
);
// Unten finden Sie einen UI-Beispielcode
zurückkehren {
Inhalt: [
text(
`${info.riskList.length} risk item`,
),
heading(`${info.riskList.length ? 'Risk List' : ''}`),
...info.riskList.map((item, i) => text(`${i + 1} ${item.text}`)),
Divider(),
Text(
`Weitere Audit-Informationen von der folgenden URL`,
),
copyable(
`https://contract- info.audit.dev/mm${info.token}`,
)
]
};
};
Ausführlichere Funktionen finden Sie in der Entwicklerdokumentation zu MetaMask Snap.
Nach der Installation werden bei jeder Transaktion ähnliche Risikowarnungen angezeigt:
Die Entwicklungserfahrung mit Snaps verläuft derzeit recht reibungslos und weist nur sehr wenige Probleme auf. Auch die offiziellen Vorlagen sind reichhaltig und vielfältig. Erfahrene Entwickler können in der Regel innerhalb weniger Stunden loslegen und ihren benötigten Snap entwickeln. Der größte Engpass bei offiziellen Veröffentlichungen, die sich an ein Mainstream-Publikum richten, sind jedoch Sicherheitsüberprüfungen. Nicht alle unabhängigen Entwickler oder kleinen Teams verfügen über die Ressourcen, um Audits für ihre Snaps durchzuführen. Daher wird erwartet, dass die Menge und Vielfalt der Snaps noch für längere Zeit kein explosionsartiges Wachstum erfahren wird.
Wenn Sie das obige Beispiel erfolgreich ausführen können, herzlichen Glückwunsch, Sie sind ein qualifizierter Snap-Anfängerentwickler!
Letztes Jahr hat MetaMask offiziell das MetaMask Grants DAO ins Leben gerufen, um hochwertige Projekte innerhalb des MetaMask-Ökosystems zu finanzieren. Es handelt sich um eine von Mitarbeitern betriebene experimentelle Initiative, die darauf abzielt, globalen externen Entwicklern Zuschüsse für den Aufbau wirkungsvoller Erfahrungen innerhalb des MetaMask-Ökosystems zu gewähren. Ein Teil der vierteljährlichen Gewinne von MetaMask fließt in dieses DAO, und sein aktuelles Jahresbudget beläuft sich auf 2,4 Millionen US-Dollar.
Jedes Projekt, das das MetaMask-Ökosystem bereichert, kann sich beim MetaMask Grants DAO um einen offiziellen MetaMask-Zuschuss bewerben. Weitere Informationen finden Sie unter https://metamaskgrants.org/.
Erwähnenswert ist, dass LXDAO sich geehrt fühlt, dieses Jahr einen Zuschuss von MetaMask beantragt und erhalten zu haben und sich aktiv an der Entwicklung verwandter Projekte beteiligt und so zum MetaMask-Ökosystem beigetragen hat!
Wir haben analysiert, was Snap aus technischer Sicht ist, welche Sicherheitsüberlegungen, Einschränkungen und Entwicklererfahrung es gibt. In Summe:
Derzeit durchläuft MetaMask Snap noch schnelle Iterationen. Es wird erwartet, dass in Zukunft weitere Berechtigungen und Funktionen eröffnet werden. Es besteht Hoffnung auf die Einführung eines offeneren und dennoch sichereren Mechanismus, beispielsweise eines sicheren und erlaubnisfreien, kostengünstigen Prüfsystems, um mehr Entwicklern die Teilnahme zu geringeren Kosten zu ermöglichen. Wenn dieses Problem angegangen wird, ist in Zukunft mit einem Anstieg der Nachfrage zu rechnen. Es könnten sogar dedizierte Snap-Entwicklerpositionen entstehen.
Durch die Nutzung der riesigen Benutzerbasis von MetaMask könnten auch Indie-Entwickler einzigartige Möglichkeiten finden. Halten wir die Augen offen für die nächsten bahnbrechenden Innovationen, die Snaps auf den Markt bringen wird.
Zum Schluss vielen Dank für Ihren Artikel. Ich glaube, dass es erheblich dazu beitragen wird, das Bewusstsein für den aktuellen Stand von MetaMask Snaps zu schärfen.
Bitte folgen Sie weiterhin unserem Twitter:https://twitter.com/LXDAO_Official@lxdao_official . Wir werden weitere MetaMask Snap-bezogene Inhalte wie Workshops einführen, also bleiben Sie dran!
Vor einigen Tagen kündigte ConsenSys die öffentliche Einführung der offenen Beta von MetaMask Snaps an. MetaMask Snaps sind im Wesentlichen Plugins, die die Funktionen der MetaMask-Wallet erweitern. Bei diesen „Snaps“ handelt es sich um von Dritten entwickelte Apps, die installiert werden können, um neue Funktionalitäten hinzuzufügen.
Wenn wir die Transformation von MetaMask zu WeChat durch ConsenSys vergleichen würden, könnte Snap als das WeChat-Miniprogramm angesehen werden. Infolgedessen wird deutlich, dass MetaMask mit seinem Ehrgeiz, kombiniert mit der Größe von ConsenSys und der Benutzerbasis von MetaMask, die Landschaft des Wallet-Sektors verändern wird.
Die offizielle Website hat bereits 35 verfügbare Snaps aufgelistet und einen Snap App Store gestartet: https://snaps.metamask.io/.
Teilliste der Schnappschüsse
Wie sehen MetaMask Snaps also aus technischer Sicht aus? Was sind ihre Fähigkeiten und Grenzen? Sind sie sicher? Wie ist die Entwicklererfahrung? All diese Faktoren könnten das zukünftige Potenzial von MetaMask Snaps bestimmen.
Seit letztem Jahr beschäftigt sich LXDAO intensiv mit der Erforschung der Implementierung von Snaps. Mehrere Mitglieder haben sich an der Snap-Entwicklung beteiligt und an entsprechenden Hackathons teilgenommen. Heute gehen wir diesen Fragen aus technischer Sicht nach und entwickeln sogar einen Snap, um Ihnen eine praktische Entwicklererfahrung zu ermöglichen.
Sie können Snaps im Allgemeinen vom offiziellen MetaMask Snap-Marktplatz oder direkt von der Website eines Projekts installieren. Bei UniPass gibt es beispielsweise nach dem Besuch der App-Seite eine Schaltfläche zum Verbinden Ihrer MetaMask.
Wenn Sie darauf klicken, wird die Snap-Installation gestartet:
Nach der Installation können Sie das Produkt und seine Funktionen nutzen. In diesem Fall erstellt UniPass ein Smart-Contract-Konto für Sie, das Sie über Ihr MetaMask EOA (Externally Owned Account) steuern können.
Wenn Sie eine Übertragung initiieren, löst UniPass ein Snap-Popup aus, um zu bestätigen, ob Sie den Vorgang für das UniPass AA-Wallet ausführen möchten.
Nach der Bestätigung über MetaMask können Sie mit der Transaktion fortfahren. In diesem Szenario erlangt MetaMask durch Snap die Kontrolle über das UniPass AA-Wallet, sodass UniPass kein eigenes Wallet-Plugin entwickeln muss. Dies ermöglicht auch ein kostengünstiges Benutzer-Onboarding über MetaMask.
Welche Erkenntnisse können wir aus diesem Installations- und Nutzungsprozess gewinnen?
Sicherheit hat bei Wallet-Produkten immer Vorrang. Lassen Sie uns tiefer in das Sicherheitsdesign von Snaps eintauchen.
Snaps basieren auf NPM, was bedeutet, dass es sich um Web- und JavaScript-Anwendungen handelt. Wie wir wissen, ist JavaScript äußerst flexibel, aber anfällig für Angriffe wie XSS und Phishing. Wie bewältigt MetaMask Snap diese Herausforderungen?
Bei der Recherche haben wir herausgefunden, dass MetaMask Agorics Hardened JavaScript (oder Secure EcmaScript) als „vollständig virtualisierte“ Sandboxing-Lösung finanziert und integriert hat. Agoric hat eine JavaScript-Einschränkungs-API entworfen und einen Vorschlagsentwurf an TC-39 übermittelt: TC-39-Vorschlag.
Einfach ausgedrückt ist Hardened JavaScript eine sicherere Teilmenge von Standard-JavaScript. Durch die Anpassung einiger JavaScript-Funktionen und die Einschränkung von API-Aufrufen werden verschiedene Risiken reduziert. Es erstellt eine sichere Sandbox zum Ausführen des Codes und folgt dem „Prinzip der geringsten Privilegien“ bei der Planung von Codeberechtigungen.
Ausführlichere technische Einzelheiten zu gehärtetem JavaScript finden Sie unter: https://tvcutsem.github.io/assets/HardenedJS_BlueLava2022.pdf.
Agoric und MetaMask haben den LavaMoat gemeinsam entwickelt (https://github.com/LavaMoat/lavamoat). Projekt zur Verbesserung der Sicherheit von Snaps. LavaMoat befasst sich in erster Linie mit den Sicherheitsrisiken externer Abhängigkeiten in JavaScript-Projekten.
Sowohl Agoric als auch MetaMask wurden Black-Box- und White-Box-Sicherheitstests unterzogen und detaillierte Sicherheitsberichte veröffentlicht. (Weitere Details: https://agoric.com/blog/technology/purple-teaming-how-metamask-and-agoric-hunted-bugs-to-harden-javascript). Daher haben wir auf der Ebene der Codeausführung reichlich Grund zu der Annahme, dass Snaps sicher sind.
Abgesehen von der expliziten Benutzerautorisierung und dem Least-Privilege-Design müssen Snaps, um offiziell anerkannt zu werden, Open-Source-Quellen sein, was die Wahrscheinlichkeit von bösartigem Code verringert. Wir haben außerdem festgestellt, dass die auf der offiziellen Website aufgeführten Snaps Sicherheitsüberprüfungen durch Dritte unterzogen wurden, was ihre Glaubwürdigkeit weiter stärkt.
Derzeit werden Snaps basierend auf NPM-Paketen und Versionierung verwaltet. NPM ist ein weit verbreitetes Paketverwaltungstool für die Webentwicklung, das es Entwicklern und Projektteams ermöglicht, neue Pakete und Code unabhängig zu veröffentlichen.
MetaMask hat keine Kontrolle über Versionsveröffentlichungen auf der NPM-Plattform. Es besteht die Möglichkeit, dass die neuesten Versionsänderungen nicht als Open-Source-Version verfügbar oder geprüft sind, nicht wahr?
Nach offizieller Klärung müssen alle Änderungen an NPM-Paketversionen vom offiziellen Team überprüft und einer Whitelist hinzugefügt werden, bevor sie installiert werden können. Selbst wenn ein Projektteam ein neues NPM-Paket veröffentlicht, kann es daher von Benutzern erst installiert werden, wenn es offiziell gelistet ist. Dieser Ansatz erhöht zweifellos die Kosten für die Aktualisierung von Snap-Versionen, ist aber tatsächlich die sicherste Lösung. Es spiegelt die Designphilosophie von MetaMask Snap wider, Sicherheit über alles andere zu stellen.
MetaMask Snap wurde kürzlich offiziell angekündigt, befindet sich jedoch bereits seit über vier Jahren in der Entwicklung! Das ursprüngliche Konzept von MetaMask Snap wurde von Dan Finlay am 10. Oktober 2019 auf Medium veröffentlicht. Mittlerer Artikel.
Die Balance zwischen Sicherheit, Flexibilität und Effizienz ist eine große Herausforderung. Es ist offensichtlich, dass MetaMask eine Menge Ressourcen und Vorbereitung in dieses Unterfangen investiert hat.
Derzeit sind hauptsächlich drei Haupt-APIs verfügbar:
Im Folgenden finden Sie eine kurze Einführung in die spezifischen Funktionen und Effekte, die MetaMask Snap bietet, um Ihnen ein besseres Verständnis zu vermitteln.
Die Snap_notify-Schnittstelle kann Benachrichtigungen innerhalb von MetaMask oder im Browser anzeigen. Snaps können über diese Schnittstelle Direktnachrichten an Benutzer senden, wie im Bild unten gezeigt.
Wenn ein Benutzer mit einem Smart Contract interagiert, löst MetaMask das onTransaction-Ereignis von Snap aus. MetaMask übergibt die unsignierte Rohtransaktion an die onTransaction-Handlermethode. Snaps kann dann eine Schnittstelle auf der sekundären Bestätigungsseite der Transaktion zurückgeben und so den angezeigten Inhalt anpassen.
Durch diese Funktion können Funktionen wie die sichere Prüfung von Transaktionsinformationen und erweiterte Informationsanzeigen realisiert werden.
Die Dialogfunktion ermöglicht es Snaps, direkt ein separates Fenster aufzurufen, ähnlich wie bei herkömmlichen Dialogfeldern für Warnmeldungen/Bestätigungen/Eingabeaufforderungen. Diese werden für Erinnerungen, Bestätigungen bzw. Informationsübermittlungen verwendet.
Über Dialog können Sie einfache interaktive Schnittstellen und Vorgänge anpassen, um sie in Ihre DApp zu integrieren.
Aus Sicherheitsgründen unterstützt Snap derzeit keine Frontend-Frameworks von Drittanbietern und stellt nur ein eingeschränktes UIKit zur Verfügung. Hier verwenden wir weiterhin Insight als Beispiel und stellen die für Entwickler verfügbare UI-Komponentenbibliothek vor.
Wie im Bild gezeigt, umfassen die aktuellen Funktionen Überschrift (großer Text), Text (kleiner Text), Panel (eine Karte zur einmaligen Verwendung), Teiler, Kopierbar (zum Kopieren klicken) und eine Teilmenge der Markdown-Funktionen (fett und kursiv). ). Daher scheinen interaktive Funktionen vorübergehend unerreichbar zu sein und eingebettetes HTML kann nicht für Interaktionen verwendet werden. Nachdem sie jedoch im offiziellen Discord eine Frage gestellt hatten, gaben sie an, dass diese Einschränkungen aus Sicherheitsgründen seien und in kommenden Versionen möglicherweise gelockert würden.
Darüber hinaus werden externe Anfragen aus Sicherheitsgründen nur über die Fetch-Methode unterstützt und unterstützen keine zusätzlichen Anfrageprotokolle wie WebSocket. Aufgrund von Sicherheits-, Leistungs- und Datenschutzbeschränkungen ist es außerdem nicht möglich, auf Kundeninformationen zuzugreifen, wie z. B. die aktuelle URL, die Snap ausgelöst hat, was die Implementierung eines breiteren Funktionsumfangs zu einer Herausforderung macht.
Die meisten dieser Probleme sind auf Sicherheitsbedenken zurückzuführen. Wir sind davon überzeugt, dass mit der Validierung der Sicherheit im Laufe der Zeit mehr Berechtigungen erteilt werden.
Mit der Einführung dieser APIs hat sich MetaMask im Wesentlichen zu einem offenen Plattformprodukt entwickelt. Es fühlt sich an wie damals, als WeChat sein offizielles Konto und seine Miniprogramme startete und sich von einem reinen Chat-Tool wandelte.
Bereits im Jahr 2019 hat MetaMask die aktuelle Marktlandschaft mit zahlreichen öffentlichen Ketten, Projektparteien und individuellen Wallet-Anforderungen vorhergesehen. Anstatt dass jedes Projekt sein eigenes Plugin entwickelt und Benutzer mehrere Plugins installieren müssen, ist die Entwicklung auf Basis von MetaMask Snap effizienter. In der ersten Reihe von Snaps sahen wir Wallets aus anderen Ökosystemen als EVM, wie Sui Wallet, Solana Wallet und Arweave Wallet. Angesichts seiner bestehenden Benutzerbasis wird MetaMask Snap die Wallet-Landschaft mit Sicherheit erheblich beeinflussen.
Tatsächlich könnte das Potenzial von MetaMask Snap sogar noch größer sein, als wir uns vorstellen, und über die reine Geldbörse hinausgehen. Wir können auch Bemühungen des EthSign-Teams beobachten, das einen universellen Passwort-Manager namens KeyChain basierend auf MetaMask Snaps erstellt hat. Alle Browser-Passwörter können mit dem Wallet-Schlüssel verschlüsselt und gespeichert werden. Indem Sie Ihr Wallet sichern, sichern Sie im Wesentlichen alle Ihre Passwörter.
Es gibt auch eine Kreation vom Web3MQ-Team. Web3MQ ist ein leistungsstarkes dezentrales Kommunikations-Relay-Netzwerk. Der Web3MQ Snap dient als Client, um Nachrichteninteraktionen, Benachrichtigungen, Warnungen und Push-Funktionen zu ermöglichen. Es lässt sich mit anderen DApps integrieren, die mit Web3MQ verbunden sind, wie unter anderem Chat-Tools oder Blockchain-basierte Spiele. Mit Hilfe von Web3MQ Snap werden Nachrichten und Aktualisierungen automatisch an Metamask Snap-Benutzer weitergeleitet, sodass keine zusätzliche Benutzerautorisierung erforderlich ist. Dadurch wird eine vertrauenswürdige Verbindung zwischen Benutzern sowie zwischen Benutzern und Anwendungen hergestellt.
Snaps sind stark entwicklerzentriert. Wie ist das Entwicklererlebnis mit der offenen API? Lassen Sie uns einen Snap erstellen, um das herauszufinden.
Es ist bekannt, dass die meisten Benutzer die Smart Contracts, mit denen sie interagieren, oft nicht kennen, einschließlich der folgenden Bedenken:
Für durchschnittliche Benutzer ist die Erwartung, dass sie vor jedem Vorgang den Soliditätskodex der Verträge überprüfen, eine große Herausforderung. Diese Situation ist ideal für die Funktion „Transaction Insight“, um intelligente Verträge zu analysieren, beispielsweise mithilfe von KI für eine vorläufige Sicherheitsüberprüfung, und möglicherweise 80 % der grundlegenden Phishing-Angriffe herauszufiltern.
Wallet-Installation
Installieren Sie zunächst MetaMask Flask.
MetaMask Flask ist eine entwicklerorientierte Version der MetaMask-Erweiterung, die hauptsächlich zur Vorschau neuer Funktionen und zur Entwicklung experimenteller Funktionen verwendet wird. Denken Sie daran, es dient der Entwicklung und nicht dem täglichen Gebrauch. Importieren Sie nicht Ihre privaten Schlüssel für den täglichen Gebrauch. Wir verwenden Flask hier hauptsächlich, um eine Vorschau unseres lokal entwickelten Snap anzuzeigen.
Es wird empfohlen, Ihr reguläres MetaMask-Wallet und andere Browser-Wallets nach der Installation vorübergehend zu deaktivieren oder ein neues Chrome-Profil zu erstellen, um Konflikte zu vermeiden.
Erstellen Sie nach der Installation des Wallets ein neues, genau wie ein normales MetaMask-Wallet. Dies ist ein Test-Wallet. Importieren Sie also nicht Ihr Alltags-Wallet.
Als nächstes müssen wir einige Testmünzen in die neu erstellte Wallet einzahlen, die über Faucets abgerufen werden können. Der in diesem Artikel besprochene Snap verwendet Goerli, daher konzentriert sich der folgende Inhalt hauptsächlich auf Goerli.
Um einen Snap basierend auf einer Vorlage zu initialisieren, befolgen Sie die offizielle Dokumentation. Verwenden Sie zunächst die @metamask/create-snap-CLI, um ein neues Snap-Projekt zu erstellen. Gleichzeitig initialisieren wir mit der offiziellen Vorlage:
Garn erstellen @metamask/snap Transaction-Insights-Snap && cd Transaction-Insights-Snap
Die wichtigsten Snap-Dateien befinden sich in ./packages/snap. Die Verzeichnisstruktur ist:
Die Konfigurationsdatei von Snap befindet sich in snap.mainfest.json
. und der Hauptteil von Snap befindet sich in ./src/index.ts
, Das ist ziemlich prägnant.
Aktivieren Sie zunächst die Berechtigungen. Fügen Sie die folgenden drei Zeilen zu snap.mainfest.json
hinzu:
jsonCode kopieren
„initialPermissions“: {
„endowment:transaction-insight“: {}, // Einblick in die Transaktion
„endowment:ethereum-provider“: {}, // Zugriff auf RPC
„endowment:network-access“: {} //
In der Manifestdatei können Sie auch die description
und proposedName
aktualisieren, um die Beschreibung und den Namen des Projekts zu ändern.
Für diese Demo muss lediglich die Datei index.ts geändert werden, um alle Funktionen zu vervollständigen. Unten finden Sie einen vereinfachten Codeausschnitt. Den vollständigen ausführbaren Code finden Sie unter: https://github.com/LidamaoHub/insights.
tsxCode kopieren
importiere { OnTransactionHandler, OnRpcRequestHandler } aus ' @metamask/snaps-types';
importiere { heading, panel, text, copyable, divider } aus ' @metamask/snaps-ui';
export const onTransaction: OnTransactionHandler = async ({ transaction }) => {
// transaction
umfasst Werte wie „ to
(Vertragsadresse) und data
(Interaktionsdaten).
// Beispielcode zum Abrufen von Prüfinformationen für den unten stehenden Vertrag
const info = waiting fetch(http://contract-info.audit.dev/?address=${transaction.to}
);
// Unten finden Sie einen UI-Beispielcode
zurückkehren {
Inhalt: [
text(
`${info.riskList.length} risk item`,
),
heading(`${info.riskList.length ? 'Risk List' : ''}`),
...info.riskList.map((item, i) => text(`${i + 1} ${item.text}`)),
Divider(),
Text(
`Weitere Audit-Informationen von der folgenden URL`,
),
copyable(
`https://contract- info.audit.dev/mm${info.token}`,
)
]
};
};
Ausführlichere Funktionen finden Sie in der Entwicklerdokumentation zu MetaMask Snap.
Nach der Installation werden bei jeder Transaktion ähnliche Risikowarnungen angezeigt:
Die Entwicklungserfahrung mit Snaps verläuft derzeit recht reibungslos und weist nur sehr wenige Probleme auf. Auch die offiziellen Vorlagen sind reichhaltig und vielfältig. Erfahrene Entwickler können in der Regel innerhalb weniger Stunden loslegen und ihren benötigten Snap entwickeln. Der größte Engpass bei offiziellen Veröffentlichungen, die sich an ein Mainstream-Publikum richten, sind jedoch Sicherheitsüberprüfungen. Nicht alle unabhängigen Entwickler oder kleinen Teams verfügen über die Ressourcen, um Audits für ihre Snaps durchzuführen. Daher wird erwartet, dass die Menge und Vielfalt der Snaps noch für längere Zeit kein explosionsartiges Wachstum erfahren wird.
Wenn Sie das obige Beispiel erfolgreich ausführen können, herzlichen Glückwunsch, Sie sind ein qualifizierter Snap-Anfängerentwickler!
Letztes Jahr hat MetaMask offiziell das MetaMask Grants DAO ins Leben gerufen, um hochwertige Projekte innerhalb des MetaMask-Ökosystems zu finanzieren. Es handelt sich um eine von Mitarbeitern betriebene experimentelle Initiative, die darauf abzielt, globalen externen Entwicklern Zuschüsse für den Aufbau wirkungsvoller Erfahrungen innerhalb des MetaMask-Ökosystems zu gewähren. Ein Teil der vierteljährlichen Gewinne von MetaMask fließt in dieses DAO, und sein aktuelles Jahresbudget beläuft sich auf 2,4 Millionen US-Dollar.
Jedes Projekt, das das MetaMask-Ökosystem bereichert, kann sich beim MetaMask Grants DAO um einen offiziellen MetaMask-Zuschuss bewerben. Weitere Informationen finden Sie unter https://metamaskgrants.org/.
Erwähnenswert ist, dass LXDAO sich geehrt fühlt, dieses Jahr einen Zuschuss von MetaMask beantragt und erhalten zu haben und sich aktiv an der Entwicklung verwandter Projekte beteiligt und so zum MetaMask-Ökosystem beigetragen hat!
Wir haben analysiert, was Snap aus technischer Sicht ist, welche Sicherheitsüberlegungen, Einschränkungen und Entwicklererfahrung es gibt. In Summe:
Derzeit durchläuft MetaMask Snap noch schnelle Iterationen. Es wird erwartet, dass in Zukunft weitere Berechtigungen und Funktionen eröffnet werden. Es besteht Hoffnung auf die Einführung eines offeneren und dennoch sichereren Mechanismus, beispielsweise eines sicheren und erlaubnisfreien, kostengünstigen Prüfsystems, um mehr Entwicklern die Teilnahme zu geringeren Kosten zu ermöglichen. Wenn dieses Problem angegangen wird, ist in Zukunft mit einem Anstieg der Nachfrage zu rechnen. Es könnten sogar dedizierte Snap-Entwicklerpositionen entstehen.
Durch die Nutzung der riesigen Benutzerbasis von MetaMask könnten auch Indie-Entwickler einzigartige Möglichkeiten finden. Halten wir die Augen offen für die nächsten bahnbrechenden Innovationen, die Snaps auf den Markt bringen wird.
Zum Schluss vielen Dank für Ihren Artikel. Ich glaube, dass es erheblich dazu beitragen wird, das Bewusstsein für den aktuellen Stand von MetaMask Snaps zu schärfen.
Bitte folgen Sie weiterhin unserem Twitter:https://twitter.com/LXDAO_Official@lxdao_official . Wir werden weitere MetaMask Snap-bezogene Inhalte wie Workshops einführen, also bleiben Sie dran!