Multi-Resolver-Snap: Das Multi-Resolver-Problem lösen

Ein ETHLisbon Hackathon-Gewinner

6 Min. Lesezeit
Multi-Resolver-Snap: Das Multi-Resolver-Problem lösen

MetaMask Snaps ist der Fahrplan, um MetaMask zur erweiterbarsten Wallet der Welt zu machen. Als Entwickler kannst du deine Features und APIs auf völlig neue Weise in MetaMask einbringen. Web3-Entwickler sind der Kern dieses Wachstums, und diese Serie soll die innovativen MetaMask Snaps vorstellen, die heute entwickelt werden.

Multi-resolver Snap

Snap Repo: https://github.com/idriss-crypto/multiresolver

Warum hast du den Multi-resolver Snap entwickelt?

Die User Experience im Web3 wurde lange vernachlässigt. Ein Bereich, in dem wir Fortschritte sehen, ist Account Abstraction. Es scheint, als gäbe es fast jede Woche einen neuen Naming Service. Das Ziel dieser Services ist es, die Art und Weise zu vereinfachen, wie wir in diesem Bereich miteinander interagieren: Namen sind einprägsamer als Wallet-Adressen und bilden daher eine Grundlage für Identitäts- und Reputationssysteme.

Darüber hinaus können originelle (Naming-)Standards die Popularität von Projekten fördern. Nehmen wir zum Beispiel ein Projekt namens „x". Der neue Naming-Standard, den dieses Projekt vorschlägt, könnte x-domains oder x-names heißen. Der Erfolg des Projekts würde automatisch dem Wachstum des Naming Service zugutekommen, während der Erfolg des Naming Service dasselbe für das Projekt bewirken würde – eine Win-win-Situation. Nun stehen wir vor einem fragmentierten Bild des Namespace. Natürlich gibt es Menschen, die versuchen, jeden Naming Service zu nutzen, was zu einem Wettlauf um Namen im begrenzten Namespace führt, den wir bei einigen (domainbasierten) Naming Services haben. Andere Naming Services verwenden vertrautere Handles wie E-Mails, Telefonnummern oder allgemeine Social Handles (Twitter-Benutzername, Instagram-Handle), die Menschen bereits besitzen, um potenzielle Märkte rund um diese Identitäten zu eliminieren. Die meisten Menschen landen bei einem, vielleicht zwei Handles von verschiedenen Naming Services. Aufgrund der Vielfalt der Möglichkeiten müssen Entwickler mehrere Naming-Service-Resolver in ihre Anwendungen integrieren.

Wenn ein neuer Naming Service einen erheblichen Marktanteil übernimmt, sollte er auch in die eigene Anwendung integriert werden, um Nutzer dieses Naming Service nicht auszuschließen. Aus Nutzersicht ist es lästig, nach alternativen Anwendungen mit ähnlicher Funktionalität zu suchen, die auch den Naming Service der eigenen Wahl unterstützen. Warum nicht zulassen, dass Menschen das verwenden, womit sie vertraut sind, UND gleichzeitig eine Lösung anbieten, die Entwicklern hilft, sich auf die Entwicklung der bestmöglichen Anwendung zu konzentrieren?

Genau das leistet der Multi-resolver Snap.

Erkläre uns die technische Umsetzung.

Das Wesentliche

Der Snap wurde für MetaMask Flask 10.20 entwickelt. Die aktuelle Version verwendet die Berechtigungen endowment:network-access und snap_confirm. Erstere wird in einer vorläufigen Version verwendet, um aufgelöste Adressen abzurufen und Twitter-IDs in Twitter-Benutzernamen zu übersetzen. Letztere zeigt dem Nutzer einen Bestätigungsbildschirm an, der die resultierende Adresse hervorhebt, bevor eine Transaktion erstellt wird.

Derzeit unterstützte Resolver sind IDriss und ENS. Der Snap läuft auf localhost.

Integration auf der dApp-Seite

Damit ein Entwickler diesen Snap – und damit alle verfügbaren Resolver – integrieren kann, muss zunächst eine Verbindung zur Wallet und zum Snap hergestellt werden:

const connectSnap = async (
  snapId: string = defaultSnapOrigin,
  params: Record<'version' | string, unknown> = {},
) => {
  await window.ethereum.request({
    method: 'wallet_enable',
    params: [
      {
        wallet_snap: {
          [snapId]: {
            ...params,
          },
        },
      },
    ],
  });
};
Kopieren

Der Aufruf erfolgt über die Methode resolve_send und kann folgendermaßen aufgerufen werden:

const resolveInput = async (id_?: string) => {
  return await window.ethereum.request({
    method: 'wallet_invokeSnap',
    params: [
      defaultSnapOrigin,
      {
        method: 'resolve_send',
        identifier: id_,
      },
    ],
  });
};
Kopieren

was die aufgelöste Adresse zurückgibt. Dabei ist id_ der Bezeichner, den der Nutzer in ein Sendefeld eingibt.

Mit dem neuen multiChainProvider ist die Verbindung zum Snap so einfach wie die Verbindung zur Wallet mit den erforderlichen Berechtigungen:

import { MultiChainProvider } from "@metamask/multichain-provider";

const provider = new MultiChainProvider();
const { approval } = await provider.connect({
  requiredNamespaces: {
    eip155: {
      chains: [chains],
      methods: [
        permissions
      ],
    },
  },
});
const session = await approval();
Kopieren

Die oben genannte Methode resolve_send kann in eth_sendTransaction umbenannt werden, sodass Apps den Multi-resolver Snap nutzen können, ohne bestehende Integrationen ändern zu müssen. Immer wenn eth_sendTransaction aufgerufen wird, schaltet sich der Snap dazwischen und löst die Eingabe auf, bevor die Transaktion erstellt wird. Anwendungen sollten Eingaben vom Typ String zulassen, anstatt einen Fehler auszugeben, wenn eine Nutzereingabe keiner Adresse entspricht. Der Snap kümmert sich dann um den Rest!

Was sind die nächsten Schritte, wenn du dies implementieren würdest?

Als nächsten Schritt wird dieser Snap Open-Source gestellt, um andere Entwickler dazu zu ermutigen, nach Bugs zu suchen, den Code zu verbessern und sogar eigene Resolver hinzuzufügen. Die Open-Source-Veröffentlichung wird das wahre Potenzial dieses Snaps freisetzen: Kein einzelner Entwickler oder eine einzelne Einheit muss alle aufkommenden Naming Services integrieren. Eine contribute.md-Datei fördert diesen Prozess. Darüber hinaus wird die weitere Entwicklung durch das MetaMask Snaps-Team verfolgt.

Konkret profitiert dieser Snap besonders von zwei Dingen:

  1. Der Berechtigung endowment:transaction-insight für Account-zu-Account-Transfers, um den zusätzlichen snap_confirm-Aufruf vor dem Auslösen einer Transaktion zu entfernen, und

  2. UI-Injektionen in MetaMask. Das Ziel ist es, den Snap in das Sendefeld zu integrieren, damit Nutzer den Multi-resolver verwenden können, ohne eine Website verbinden zu müssen.

Schließlich wird eine vollständige Integration mit dem IDriss Resolver angestrebt. Die vollständige Integration ermöglicht es Nutzern, Krypto und NFTs an beliebige E-Mail-Adressen, Telefonnummern und Twitter-Benutzernamen zu senden, ohne im IDriss-Buch registriert zu sein.

Kannst du uns etwas über dich und dein Team erzählen?

Mein Name ist Lennard, und ich interessiere mich seit 2017 für den Blockchain-Bereich. Seit über einem Jahr entwickle und co-gründe ich IDriss, eine dezentralisierte Zuordnung von E-Mails, Telefonnummern und Twitter-Benutzernamen zu Wallet-Adressen. Im Allgemeinen konzentriere ich mich auf die Entwicklung von Tools für ein besser nutzbares Web3, was mich dazu motiviert hat, diesen Snap zu entwickeln.

Wann bist du zum ersten Mal mit MetaMask Snaps in Berührung gekommen und wie war deine Erfahrung?

Das Snaps-Team ist dieses Jahr (2022) auf Konferenzen sehr präsent, sodass ich ihnen schon mehrmals begegnet bin. Das erste Mal, dass ich mit der Codebasis interagiert habe, war nach einer ihrer Präsentationen auf der EthCC 2022 in Paris. Obwohl die Features noch begrenzt waren, war die Dokumentation bereits vielversprechend, und ich bin sehr zuversichtlich, was die Zukunft von MetaMask Snaps betrifft.

Was unterscheidet MetaMask Snaps von anderen Wallets?

Ich habe noch keinen ähnlichen Ansatz gesehen, externe Mitwirkende in die Entwicklung von Wallets einzubeziehen. Während einige andere Wallets ihren Code Open-Source gestellt haben, ermöglichen Snaps Entwicklern, die Funktionalität von MetaMask direkt zu erweitern. Ich bin sicher, dass dieser Ansatz auch von anderen Projekten übernommen wird, da er besser wartbar ist.

Erzähl uns, wie es für dich und dein Team ist, Snaps mit MetaMask zu entwickeln.

Es war eine großartige Gelegenheit, diesen Snap während eines Hackathons zu entwickeln. Die Anwesenheit des MetaMask Snaps-Teams war immer hilfreich, wenn Fragen aufkamen. Was noch fehlt, ist die Möglichkeit, MetaMasks UI anzupassen. Außerdem sind einige Abhängigkeitsprobleme schwer zu debuggen, was den Großteil der Entwicklungszeit in Anspruch nimmt.

Was bedeutet MetaMask Snaps für dich?

Snaps bieten Entwicklern einen Spielplatz, um ihre Projekte oder Ideen direkt und ohne Genehmigung in MetaMask zu integrieren. Für mich bedeutet das, dass das Wachstum jedes Projekts beschleunigt werden kann, da Nutzer plötzlich mehr Vorteile aus den Tools (Wallets) ziehen können, die sie bereits besitzen.

Welche Möglichkeiten siehst du mit MetaMask Snaps und was sie für den Web3-Bereich erschließen?

Snaps können helfen, Betrug durch Transaction Insights zu verhindern, ein netzwerkinklusiveres Erlebnis mit Keyrings zu schaffen und durch benutzerdefinierte Resolver in Kombination mit UI-Verbesserungen eine nutzerfreundlichere Web3-Erfahrung zu ermöglichen. Zusammen wird dies mehr Menschen in den Bereich bringen.

Hast du Ratschläge für Entwickler, die MetaMask Snaps ausprobieren möchten?

Geht zu Hackathons! Es ist der beste Weg, direkt mit dem Team zu interagieren und sofortiges Feedback zu erhalten.

Mit MetaMask Snaps entwickeln

So startest du mit MetaMask Snaps:

  1. Schau dir die Entwicklerdokumentation an

  2. Installiere MetaMask Flask

  3. Schau dir einen MetaMask Snaps-Leitfaden an

  4. Bleib mit uns in Kontakt auf Twitter, GitHub Discussions und Discord

Halte bei den nächsten Hackathons in deiner Nähe Ausschau nach unserem Team! Happy BUIDLing ⚒️

Haftungsausschluss: MetaMask Snaps werden im Allgemeinen von Dritten entwickelt, die nicht Consensys Software angehören. Die Nutzung von durch Dritte entwickelten MetaMask Snaps erfolgt nach eigenem Ermessen und auf eigenes Risiko, mit der Zustimmung, dass du allein für etwaige Verluste oder Schäden verantwortlich bist, die aus solchen Aktivitäten entstehen. Consensys gibt keine ausdrückliche oder stillschweigende Garantie, weder mündlich noch schriftlich, in Bezug auf durch Dritte entwickelte MetaMask Snaps und lehnt jegliche Haftung für durch Dritte entwickelte Snaps ab. Die Nutzung von Blockchain-bezogener Software birgt Risiken, die du bei der Verwendung von MetaMask Snaps vollständig übernimmst.

KI-übersetzt. Kann Fehler enthalten. Bitte überprüfen Sie die Informationen stets.

Bewerten Sie die Übersetzung
  • MetaMask
    MetaMask

    MetaMask is the world's leading self-custodial crypto wallet and gateway to decentralized finance, built by Consensys.

    Alle Artikel lesen