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 zielt darauf ab, die neuartigen MetaMask Snaps vorzustellen, die heute entwickelt werden.
Composooor Snap
Snap Repo: https://github.com/kairos-loan/composooor/tree/main/packages/snap
Warum habt ihr es gebaut?
Im Laufe unserer Erfahrung bei der Entwicklung von Smart-Contract-basierten Finanzprotokollen und anderen Blockchain-Apps haben wir ein wiederkehrendes Muster bemerkt. Immer mehr Apps nutzen Offchain-Ressourcen (wie Berechnungen oder Datenspeicherung), die aufgrund technischer Einschränkungen von Blockchains in der Contract-Logik verifiziert werden. Beispiele hierfür sind Order Books, Merkle Trees von Airdrops, sortierte Listen, Token-Attribute usw.
In jedem Fall werden wertvolle Informationen Offchain gespeichert bzw. berechnet, können aber genutzt werden und haben große Auswirkungen auf Onchain-Interaktionen. Um dies zu ermöglichen, verwenden Contracts verschiedene kryptografische Techniken wie Hashes oder Signaturen zur Validierung. Dapps benötigen dann Frontends/APIs mit spezifischer Logik, die die relevanten Informationen für den Contract liefern können. Leider unterbricht dieses Muster die Composability – eine DeFi-App, die auf einem proprietären Order Book auf AWS basiert, kann beispielsweise nicht ohne Weiteres von einem anderen Smart Contract integriert werden.
Frustriert von diesen Einschränkungen haben wir uns entschlossen, einen Standard und eine Infrastruktur zu entwickeln, die es ermöglicht, alle Apps einfach in alles zu integrieren. Wir sind fest davon überzeugt, dass einfachere Integrationen viele neue Möglichkeiten für den Bereich eröffnen.
Kannst du uns durch die technische Implementierung führen?
Einführung
Der Composooor MetaMask Snap dient zur Standardisierung und Handhabung der Kommunikation zwischen einem Web-Client, einer oder mehreren beliebigen Offchain-Ressourcen und einer beliebigen Anzahl von Smart Contracts, die den Composooor-Standard implementieren. Alle Standard-Ressourcen sind einfach über ein npm-Paket zugänglich, das die Nutzung der Composooor-Funktionen in den meisten Fällen auf eine einzige Zeile reduziert.
Schritt für Schritt
Bei der Vorbereitung einer Transaktion fordert unsere MetaMask Snap Wallet eine Gas-Schätzung für den gewünschten Onchain-Contract an.
Wenn der Contract Daten oder Berechnungen benötigt, die Offchain durchgeführt werden müssen, um zu funktionieren, wird er mit einem standardisierten Fehler zurückgewiesen, der Angaben dazu enthält, wie diese fehlenden Daten zu finden sind. Der standardisierte Fehler sieht folgendermaßen aus:
error MissingOffchainDataError(
address registryAddress,
string url,
bytes abiArgs
);
Dieser Fehler wird durch das ComposooorRegister ausgegeben, das Contracts erweitern müssen, um auf Offchain-Ressourcen zugreifen zu können.
Die MetaMask Snap Wallet kann diesen Fehler dann dekodieren und die fehlenden Daten entweder durch Abrufen über ein dezentrales Protokoll, eine API oder durch Ausführen von Code, der aus diesen Quellen abgerufen wurde, finden. Für den ETHDenver Hackathon haben wir die einfachste Option implementiert, nämlich den API-Aufruf.
const responseData = await fetch(error.url + `?args=${error.abiArgs}`);Die Wallet schätzt dann erneut das Gas, diesmal mit einer Anweisung, die abgerufenen Daten in der standardisierten Registry des entsprechenden Contracts zu speichern, bevor die gewünschte Methode aufgerufen wird.
const callToRegisterData: Call = {
callee: error.registryAddress,
functionSelector: utils.id('recordParameter(bytes)').slice(0, 10) as PrefixedBy0x,
data: defaultAbiCoder.encode(['bytes'], [data]) as PrefixedBy0x,
};
Während der Transaktionsausführung kann derselbe oder ein anderer Contract eine weitere Offchain-Ressource benötigen. Falls dies der Fall ist, wiederholt die Wallet die Transaktionsvorbereitungsschritte, bis keine Offchain-Ressource mehr benötigt wird. Dies ermöglicht eine endlose Composability zwischen Protokollen, die auf umfangreiche Offchain-Ressourcen zugreifen.
Wenn die Gas-Schätzung erfolgreich ist, wird der Benutzer mit der Signatur der vorbereiteten Transaktion aufgefordert, diese erfolgreich mit allen notwendigen enthaltenen Ressourcen auszuführen.
So sieht die Integration einer Composooor-fähigen App bzw. die Erstellung einer eigenen aus.
Beim ETHDenver haben wir gezeigt, wie Composooor die Code-Komplexität des üblichen Hybrid-App-Musters um mindestens 80–90 % reduziert.
Smart-Contract-Seite
Import mit import "@composooor/ComposooorRegister.sol";. Beispielverwendung:
contract Example is ComposooorRegister {
function action() public {
bytes memory data = consumeParameter("http://api.api/number", abi.encode(arguments));
(uint256 offchainNumber) = abi.decode(data, (uint256));
(...)
}
}
ComposooorRegister ist in Solidity geschrieben.
Frontend-Seite
Der Composooor Snap erzielt die größten Einsparungen auf der Frontend-Seite: Er reduziert typischerweise Integrationen mit 200+ Zeilen auf… 0! Die Snap-Logik übernimmt alles.
Demo
Wir haben eine vollständig integrierte Demo in Form einer React-Wagmi-Dapp erstellt. Diese Dapp ermöglicht es, ein NFT zu kaufen, indem man nur einen kleinen Bruchteil des Preises im Voraus zahlt und einen Kredit aufnimmt, der später zur Finanzierung des Rests zurückgezahlt wird. Onchain sind nicht weniger als 8 Contracts an der Transaktion beteiligt. Mittendrin benötigt der NFT-Marktplatz eine Offchain-Signatur des NFT-Verkäufers. Der Composooor Snap ist in der Lage, den Fehler aufzugreifen, ihn zu dekodieren und die Informationen Onchain bereitzustellen (nachdem sie über eine API abgerufen wurden), trotz der Komplexität der Transaktion. Composooor hat die Implementierung dieser App erheblich vereinfacht.
Was sind die nächsten Schritte, wenn ihr das implementieren würdet?
Ein Teil einer solchen Innovation, die Entwicklern erhebliche Zeit spart und neue Blockchain-Anwendungsfälle ermöglicht, ist die Akzeptanz. Wir würden mehrere benutzerorientierte Apps implementieren und bereitstellen, die den Composooor Snap im Hintergrund nutzen und mit dem entsprechenden Snap zusammenarbeiten. Wenn diese Apps an Zugkraft gewinnen, würden wir Partnerschaften eingehen, um sie mit anderen Apps zu verbinden und so einen Adoptions-Flywheel anzukurbeln, der durch die vereinfachte Entwicklererfahrung angetrieben wird. Dabei würden sich der Snap und der Standard zu einem allgemeineren und standardisierten Produkt weiterentwickeln, das der ursprünglichen Vision entspricht: Blockchains synchron mit beliebigen Ressourcen zu verbinden, auf eine agnostische Weise in Bezug auf Dezentralisierung und Anwendungsfälle.
Kannst du uns ein wenig über dich und dein Team erzählen?
Wir sind ein Team, das ein Lending-Protokoll entwickelt, um NFTs als Sicherheiten mit einem kapitaleffizienteren Ansatz zu nutzen. Wir haben uns für eine Architektur mit Offchain-Komponenten wie einem Order Book entschieden. Diese Wahl ermöglicht es, die Kapitaleffizienz und die Benutzererfahrung zu verbessern, kann aber die Interoperabilität mit anderen Protokollen einschränken. Deshalb haben wir den Composooor Snap entwickelt, der eine einfache Integration mit anderen Protokollen ermöglicht. Wir hoffen, dass diese Bibliothek von anderen Teams genutzt wird, neue Möglichkeiten eröffnet und ihre Arbeit erleichtert.
Welche Möglichkeiten siehst du mit MetaMask Snaps und den Chancen, die es für den Web3-Bereich eröffnet?
Wallets sind eine der wichtigsten unvermeidlichen Säulen/Bausteine von Web3, und MetaMask ist die de-facto Standard-Wallet für die meisten Nutzer. Entwicklern zu ermöglichen, dies für beliebige neue Anwendungsfälle zu nutzen, erscheint mir entscheidend. Der Kernpunkt ist, dass wir uns nicht alle Innovationen vorstellen oder darauf vorbereiten können, an denen Wallets beteiligt sein werden. Ihnen also einen gewissen Zugang zu gewähren, ist wie der Übergang von Bitcoin zu Ethereum: Beliebige Anwendungsfälle auf Basis deiner Technologie zu ermöglichen, hat unvorhergesehene, exponentiell wachsende Vorteile. Es ist daher schwer, diese Frage zu beantworten, aber worüber ich mich am meisten freue, sind Apps, die die Wallet dazu bringen, mehr zu tun als nur Nachrichten zu signieren, und die Interaktionen auf eine kontextreiche Weise für den Nutzer optimieren.
Hast du Ratschläge für Entwickler, die MetaMask Snaps ausprobieren möchten?
Nutze die bereitgestellte Vorlage und achte darauf, jede erforderliche Benutzerzustimmung korrekt anzufordern – und verwende so wenige wie möglich.
Mit MetaMask Snaps entwickeln
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 Discussions und Discord
Halte Ausschau nach unserem Team beim nächsten Hackathon in deiner Nähe! Happy BUIDLing ⚒️
Haftungsausschluss: MetaMask Snaps werden in der Regel von Dritten entwickelt, die nicht zu Consensys Software gehören. Die Nutzung von MetaMask Snaps, die von Dritten entwickelt wurden, erfolgt nach eigenem Ermessen und auf eigenes Risiko, und du stimmst zu, dass du allein für alle 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 Snaps ab. Die Nutzung von Blockchain-bezogener Software birgt Risiken, die du bei der Verwendung von MetaMask Snaps vollständig übernimmst.