Zum Inhalt springen

So erstellst du eine Gasless Dapp

Dieser Blog zeigt, wie man eine gaslose Dapp mit Permissionless.js und einem ERC-4337 Custom-Paymaster-Smart-Contract erstellt.

6 Min. Lesezeit
So erstellst du eine Gasless Dapp

Wenn wir Transaktionen auf einer Blockchain durchführen, laufen im Hintergrund viele Prozesse ab. Jeder dieser Prozesse ist mit Kosten verbunden, die wir als „Gas Cost" bezeichnen. Aber was ist Gas überhaupt?

Gas ist eine Einheit, die den Rechenaufwand misst, der für die Durchführung von Transaktionen oder die Ausführung von Smart Contracts in einem Blockchain-Netzwerk wie Ethereum erforderlich ist. Gas ist entscheidend, weil es Transaktionen im Netzwerk reguliert und priorisiert. Da Blockchain-Netzwerke eine begrenzte Verarbeitungskapazität haben, erfüllen Gas-Gebühren zwei wesentliche Zwecke:

  • Anreize für Validatoren oder Miner: Gas-Gebühren belohnen Validatoren oder Miner für die Verarbeitung und Bestätigung von Transaktionen und stellen so sicher, dass das Netzwerk sicher und funktionsfähig bleibt.

  • Verhinderung von Systemmissbrauch: Indem jede Operation mit Kosten verbunden wird, werden Spam-Angriffe und die missbräuchliche Nutzung von Rechenressourcen abgeschreckt und das Netzwerk vor potenziellem Missbrauch geschützt.

Da Gas der „Treibstoff" ist, den eine Blockchain zum Funktionieren benötigt, mag die Idee einer gasfreien Dapp widersprüchlich erscheinen – wie der Versuch, ein Auto ohne Benzin zu betreiben. Wie kann eine Blockchain also ohne Gas funktionieren?

In der Realität verschwindet Gas nicht. Stattdessen verlagert sich die Verantwortung für die Zahlung der Gas-Gebühren vom Nutzer auf eine andere Partei – entweder den Dienstanbieter oder die Dapp selbst. Dieser Ansatz ermöglicht es Nutzern, mit der Dapp zu interagieren, ohne direkt Gas-Kosten zu tragen, was die Nutzererfahrung und die Zugänglichkeit verbessert.

Gasfreie Transaktionen mit ERC-4337 und Paymasters Smart Contract implementieren

Normalerweise sind Nutzer für die Zahlung der Gas-Gebühren verantwortlich, die je nach Gaspreis die Kosten ihrer Transaktionen erhöhen können. Bei einer gasfreien Dapp werden die Gas-Gebühren jedoch von einer dritten Partei übernommen, die die Transaktion im Namen des Nutzers unterzeichnet und bezahlt. Diese dritte Partei ist häufig ein Relayer, obwohl in manchen Fällen stattdessen Account Abstraction-Mechanismen verwendet werden.

Es gibt zwei Arten von Standards, die eine gasfreie Dapp ermöglichen: ERC-4337 und ERC-2771. Schauen wir sie uns genauer an:

  • ERC-4337: Dieser Standard führt Account Abstraction ein und ermöglicht es Ethereum-Konten, sich wie Smart Contracts zu verhalten. Er bietet mehr Flexibilität bei der Initiierung und Autorisierung von Transaktionen, insbesondere durch die Entkopplung der Transaktionsinitiierung von traditionellen Externally Owned Accounts (EOAs). Dies ermöglicht komplexere Transaktionsabläufe, wie das Bündeln mehrerer Aktionen in einer Transaktion oder die Nutzung programmierbarer Wallets.

  • ERC-2771: Dieser Standard führt ein Meta-Transaktions-Framework ein, das es Nutzern ermöglicht, mit Dapps zu interagieren, ohne ETH für Gas-Gebühren direkt zahlen zu müssen. Ein vertrauenswürdiger Forwarder wickelt die Transaktion im Namen des Nutzers ab, und die Dapp erstattet dem Forwarder die Gas-Kosten. Dies vereinfacht das Onboarding neuer Nutzer, die kein ETH in ihren Wallets haben, aber dennoch mit Dapps interagieren möchten.

In diesem Fall verwenden wir permissionless.js und ERC-4337, um einen benutzerdefinierten Paymaster mit Konten zu erstellen, der das Anlegen von Clients (öffentliche und Pimlico-Paymaster-Clients), die Einrichtung eines Smart Accounts und die Definition benutzerdefinierter Logik für den Paymaster umfasst. Aber zunächst wollen wir verstehen, was ein Paymaster ist.

Ein Paymaster ist ein spezialisierter Smart Contract in Ethereums Account-Abstraction-System (wie ERC-4337). Er fungiert als Sponsor für Transaktions-Gas-Gebühren und ermöglicht es Nutzern, in anderen Token als ETH zu zahlen oder die Gebühren vollständig übernehmen zu lassen. Der Paymaster entscheidet anhand benutzerdefinierter Logik, ob er die Gas-Kosten sponsert, und bietet so mehr Flexibilität für Dapps, bei denen die Transaktionskosten von einer dritten Partei übernommen werden können – was den Prozess für Nutzer erleichtert, ohne dass sie ETH halten müssen.

  1. Zunächst erstellen wir eine utils/index.ts-Datei, in der wir unseren Code speichern werden.

  2. Den öffentlichen Client erstellen (optional): Dies ist der Pimlico-Paymaster-Client, der für die Interaktion mit dem SimpleSmartAccount verwendet wird:

import { createPublicClient, http } from "viem";
import { createPimlicoClient } from "permissionless/clients/pimlico";
import { lineaSepolia } from "viem/chains";

export const publicClient = createPublicClient({
	chain: lineaSepolia,
	transport: http("<https://rpc.ankr.com/eth_sepolia>"),
})

const pimlicoUrl = <https://api.pimlico.io/v2/sepolia/rpc?apikey=${apiKey}>

export const pimlicoClient = createPimlicoClient({
	transport: http(pimlicoUrl),
	entryPoint: {
		address: entryPoint07Address,
		version: "0.7",
	},
})
Kopieren
  1. Ein Konto erstellen: Dies kann eines der von permissionless.js unterstützten Konten oder ein benutzerdefiniertes Konto sein, das der Schnittstelle entspricht. Für dieses Beispiel verwenden wir einen SimpleSmartAccount.

import { toSimpleSmartAccount } from "permissionless/accounts";
import { privateKeyToAccount } from "viem/accounts";

const simpleAccount = await toSimpleSmartAccount({
	client: publicClient,
	owner: privateKeyToAccount("YOUR_PRIVATE_KEY"),
	entryPoint: {
		address: entryPoint07Address,
		version: "0.7",
	}
})
Kopieren
  1. Den Smart-Account-Client mit benutzerdefinierter Paymaster-Logik erstellen: Beim Erstellen des smartAccountClient können wir eine sponsorUserOperation-Funktion übergeben, die aufgerufen wird, bevor eine User Operation signiert und gesendet wird. Diese Funktion muss die Felder paymasterAndData, preVerificationGas, verificationGasLimit und callGasLimit zurückgeben.

import { createSmartAccountClient } from "permissionless";
import { lineaSepolia } from "viem/chains";

const smartAccountClient = createSmartAccountClient({
	account,
	chain: lineaSepolia,
	bundlerTransport: http(pimlicoUrl),
	paymaster: pimlicoClient,
	userOperation: {
		estimateFeesPerGas: async () => {
			return (await pimlicoClient.getUserOperationGasPrice()).fast
		},
	}
})
Kopieren
  1. Eine Transaktion senden: Sie können nun Transaktionen wie gewohnt senden. Die sponsorUserOperation-Funktion wird vor jeder Transaktion aufgerufen, bevor diese signiert und gesendet wird, und wendet dabei die von Ihnen festgelegte benutzerdefinierte Paymaster-Logik an.

const txHash = await smartAccountClient.sendTransaction({
	to: "YOUR_CONTRACT_ADDRESS",
	value: parseEther("0.1")
});
Kopieren

Wir haben einen Smart Account eingerichtet, der mit benutzerdefinierter Paymaster-Logik unter Verwendung von permissionless.js und dem Pimlico-Client integriert ist. Dieses Setup ermöglicht eine nahtlose Interaktion mit der Blockchain, während Gas-Gebühren und das Transaktionsmanagement durch den Paymaster automatisiert werden. Jetzt sind Sie an der Reihe, dies auszuprobieren.

Sicherheitsüberlegungen für gasfreie Dapps

1. Vertrauenswürdige Relayer und Paymasters: Da gasfreie Dapps auf Drittanbieter-Relayer oder Paymasters angewiesen sind, um Transaktionen im Namen der Nutzer abzuwickeln, ist es entscheidend sicherzustellen, dass diese Entitäten vertrauenswürdig und sicher sind. Ein bösartiger oder kompromittierter Relayer könnte Transaktionen verändern oder blockieren. Nutzen Sie seriöse Dienste und implementieren Sie Fallback-Mechanismen für den Fall, dass der Relayer ausfällt.

2. Transaktionsintegrität: Bei der Verwendung eines Relayers könnte die Transaktion vom Relayer im Namen des Nutzers signiert werden. Stellen Sie sicher, dass der Relayer die Transaktion nicht auf böswillige Weise verändert, bevor er sie an die Blockchain übermittelt. Vergewissern Sie sich, dass der Smart Contract oder die Logik überprüft, ob die Transaktionsdetails (z. B. Zieladresse, Wert) mit dem übereinstimmen, was der Nutzer beabsichtigt hat.

3. Sicherheit der Paymaster-Logik: Da der Paymaster anhand benutzerdefinierter Logik entscheidet, ob er Gas-Gebühren sponsert, stellen Sie sicher, dass diese Logik sicher ist und es unbeabsichtigten Parteien nicht ermöglicht, den Paymaster für kostenlose Transaktionen auszunutzen. Implementieren Sie robuste Regeln und Prüfungen, um Missbrauch oder unbeabsichtigtes Sponsoring von Transaktionen zu vermeiden.

4. Smart-Contract-Audits: Gasfreie Dapps beinhalten häufig komplexe Smart Contracts für Account Abstraction oder Meta-Transaktionen. Führen Sie regelmäßig Audits der Smart Contracts auf Sicherheitslücken durch, da diese Contracts den Transaktionsfluss und die Gebühren verwalten. Contract-Schwachstellen könnten zu potenziellen Exploits führen, bei denen Angreifer Transaktionsflüsse manipulieren.

5. Manipulation des Gaspreises: Bei einer gasfreien Dapp, bei der ein Paymaster die Gas-Gebühren übernimmt, könnten Angreifer versuchen, die Gaspreise zu manipulieren, um die vom Paymaster getragenen Kosten zu erhöhen. Implementieren Sie Schutzmaßnahmen in der Paymaster-Logik, um Gas-Gebühren zu begrenzen und übermäßig kostspielige Operationen abzulehnen.

6. Sichere Speicherung privater Schlüssel: Bei der Verwendung von Lösungen wie permissionless.js oder Pimlico stellen Sie sicher, dass die zum Signieren von Transaktionen verwendeten privaten Schlüssel sicher gespeichert werden. Kodieren Sie niemals private Schlüssel fest in Ihrer Anwendung, und erwägen Sie die Verwendung sicherer Umgebungen wie Hardware-Wallets oder Secure Enclaves für das Schlüsselmanagement.

Das Potenzial gasfreier Dapps erschließen

Gasfreie Dapps sind eine innovative Möglichkeit, die Nutzererfahrung bei Dapps zu verbessern, indem Gas-Gebühren an eine dritte Partei ausgelagert werden. Durch die Nutzung von Standards wie ERC-4337 können Entwickler flexiblere und nutzerfreundlichere Anwendungen erstellen, die die Einstiegshürden für neue Nutzer senken.

Die bereitgestellten Code-Snippets zeigen, wie gasfreie Transaktionen mit permissionless.js, Pimlico-Clients und benutzerdefinierter Paymaster-Logik implementiert werden. Indem Sie diese Schritte befolgen, können Sie Dapps entwickeln, die die Blockchain-Interaktion vereinfachen und sie einem breiteren Publikum zugänglich machen. Jetzt sind Sie an der Reihe – bauen Sie und erkunden Sie das Potenzial gasfreier Dapps!

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

Bewerten Sie die Übersetzung

Dieser Artikel wurde verfasst von: