Dekodierung von SCW-Swaps

Bei Smart-Contract-Wallets (SCWs) nehmen Swaps einen ganz anderen Weg als bei herkömmlichen Ethereum/EVM-Wallets. Dieser Unterschied kann verwirrend sein, besonders wenn etwas schiefgeht. Sobald Sie jedoch die wichtigsten Akteure im Ablauf verstanden haben — und wie Sie Schritt für Schritt in der App und im Explorer nachlesen, was passiert ist — ergibt das Ganze Sinn.

Gehen wir das gemeinsam durch.


Von einem Tipp zur On-Chain-Ausführung: was tatsächlich passiert

Wenn Sie in der App auf „Swap“ tippen, wirkt das wie eine einzige Aktion. In Wirklichkeit starten Sie einen mehrschichtigen Prozess, der auf Ethereums Account Abstraction (ERC-4337) aufbaut. Ihre Transaktion geht nicht direkt wie bei einer normalen Wallet zur Blockchain. Stattdessen nimmt sie einen Umweg:

  1. Wir bauen die Route. Wir bitten die Routing-Engine (z. B. 1inch), den besten Pfad für Ihren Swap zu finden, und simulieren ihn, um sicherzustellen, dass er funktioniert. Wir schätzen das Gas, prüfen, ob Sie die Tokens haben, und verpacken die Anweisungen in ein spezielles Format: ein UserOperation.

  2. Ein Bundler tritt ein. Dies ist ein Off-Chain-Akteur, der dafür verantwortlich ist, UserOperations an die Blockchain zu senden. Er prüft Ihre Op, stellt sicher, dass sie gültig ist, und bezahlt das Gas im Voraus für Sie (er wird später erstattet).

  3. Ihre UserOp gelangt über das EntryPoint Smart Contract in die Blockchain. Betrachten Sie EntryPoint als das Tor, durch das alle SCW-Transaktionen laufen. EntryPoint führt endgültige Prüfungen durch, und wenn alles gut aussieht…

  4. weist EntryPoint Ihre Smart Contract Wallet (SCW) an, den Swap auszuführen. Ihre SCW ruft den Router (z. B. 1inch) auf, der Router ruft die Pools auf, Tokens bewegen sich, und das Ergebnis landet wieder in Ihrer Wallet.

Kurz zusammengefasst: Sie tippen swap → wir simulieren → Bundler sendet → EntryPoint validiert → Ihre SCW führt aus.


Schauen wir uns ein konkretes Beispiel an

Nachdem wir den Ablauf auf hoher Ebene verstanden haben, sehen wir uns an, wie sich das bei einem echten Swap abspielt: zuerst in der App, dann on-chain:

Das sehen wir:

  • Wir haben 1 USDC gegen 0,765 KTA getauscht.

  • Der Swap wurde auf Base ausgeführt (beachte das Base-Symbol bei den Münzsymbolen).

  • Wir haben bezahlt:

    • 0,03 $ Gas (in ETH)

    • 0,22 % Swap-Gebühr an goodcryptoX

    • 0,05 % Router-Gebühr an 1inch

  • Die Route war einfach: 100 % durch einen Uniswap v4 Pool.

  • Bundler: Alchemy (siehe Schritt 2 oben zur Erinnerung)

  • Explorer-Links erscheinen, wenn die Transaktion die Blockchain erreicht und im Block aufgezeichnet wurde (auch wenn sie fehlschlägt).

Bisher so gut. Als Nächstes klicken wir den BaseScan-Link, um zu sehen, wie diese Transaktion on-chain aussieht:

Hinweis zu Explorer-Links: In den neuesten App-Versionen öffnen Explorer-Links bereits Ihre AA-Transaktion (UserOp). Wenn das angezeigt wird (das "From" Feld zeigt Ihre Wallet-Adresse), können Sie direkt zu Schritt 5 – AA-Transaktionsdetailseite. Die früheren Schritte gelten nur, wenn Ihr Link auf die äußere Bundler-Transaktion verweist (wo "From" NICHT Ihre Wallet ist). Es ist dennoch eine nützliche Lektüre, um besser zu verstehen, wie SCW-Transaktionen funktionieren

Von: das ist nicht Ihre Wallet — es ist Alchemys Bundler. Das ist zu erwarten, da der Bundler die Transaktion eingereicht hat.

An: EntryPoint (v0.6.0). Ebenfalls zu erwarten — alle SCW-Transaktionen laufen hier durch.

Interne Transaktionen: zeigt Flüsse von nativen Tokens (ETH auf Base) innerhalb der Transaktion. Das sehen wir:

  • Unsere Wallet (…0A5) schickte ETH an EntryPoint für die Gasgebühr.

  • EntryPoint erstattete dem Bundler die tatsächlichen Gaskosten (da der Bundler das Gas in Ihrem Namen im Voraus bezahlt hatte; siehe Schritt 2 oben). Etwaiges verbleibendes ETH blieb in EntryPoint als Ihre Hinterlegung für zukünftige Transaktionen.

ERC-20-Transfers: zeigt die eigentlichen Tokenbewegungen:

Unsere Wallet hat USDC nicht direkt gesendet. Stattdessen hat der USDC-Tokenvertrag (…2A8) die Transfers verarbeitet und ausgeführt. Das ist normal: auf EVM-Chains werden Tokentransfers vom Tokenvertrag selbst gehandhabt, nachdem er eine Anweisung von Ihrer Smart Contract Wallet erhalten hat.

  1. Der USDC-Vertrag teilte unsere 1 USDC in drei Transfers auf:

    • 0,0022 USDC an die Gebühr-Wallet unseres Protokolls (…608A)

    • 0,0005 USDC an die Gebühren-Wallet von 1inch (…1DE5)

    • Die verbleibenden 0,9973 USDC an den Uniswap v4 Router (…Universal Router)

  2. Der Uniswap v4 Router gab sie an den Uniswap v4 Pool Manager weiter (ein einzelner Vertrag, der alle v4-Pools verwaltet).

  3. Der Pool Manager führte den Swap aus: USDC rein → KTA raus.

  4. Die KTA wurden über den Aggregation Router von 1inch zurückgeleitet, der sie an unsere Wallet (…0A5) weiterleitete.


🧩 Wie man eine fehlgeschlagene SCW-Transaktion entschlüsselt

Nachdem wir verstanden haben, wie Swaps mit Smart-Contract-Wallets (SCWs) funktionieren — und einen erfolgreichen Trade durchgegangen sind — nutzen wir dieselben Werkzeuge, um einen fehlgeschlagenen zu entschlüsseln.

Wir verwenden einen weiteren realen Fall: einen ETH → Token Swap auf Ethereum, der innerhalb des EntryPoint-Kontrakts fehlschlug, weil nicht genug ETH vorhanden war, um sowohl den Swap als auch die Gasgebühr zu decken.

Ok, Sie sehen in der App "Error" als Swap-Status oder erhalten eine Push-Benachrichtigung, dass Ihr Swap fehlgeschlagen ist. Was tun Sie?


Schritt 1 — Prüfen Sie die Orderdetails in goodcryptoX

Das sehen Sie in diesem Fall:

Mit dem zuvor entwickelten Rahmenfall fällt Ihnen schnell auf:

  • Der Swap-Status ist Error (fehlgeschlagen?)

  • Es wird keine Fehlermeldung angezeigt (das ist ungewöhnlich)

  • Es gibt eine Gasgebühr (hat die Blockchain erreicht?)

  • Es wird eine Route angezeigt (Simulation war okay?)

  • Es gibt Links zu Blockchain-Explorern (ich kann die Tx auf der Blockchain prüfen!).

Überprüfen wir Ihre Intuition:

  • Der Error Status bedeutet, dass der Swap fehlgeschlagen ist

  • Es sollte sowohl eine für Menschen lesbare Fehlermeldung (aus der Rohmeldung übersetzt) als auch die rohe Meldung geben. Fehlt die Fehlermeldung, bedeutet das definitiv, dass etwas Ungewöhnliches passiert ist.

  • Die Gasgebühr bedeutet tatsächlich, dass die Transaktion die Blockchain erreicht hat und eine On-Chain-Aktivität stattgefunden hat (die Gas verbraucht hat).

  • Die Route bestätigt, dass die Transaktionssimulation bestanden hat und zu einem klaren Ausführungspfad geführt hat.

  • Explorer-Links bestätigen, dass die Transaktion die Blockchain erreicht hat — auch wenn sie fehlschlug. Wir sollten auf jeden Fall einen davon öffnen und weiter untersuchen.


Schritt 2 – Öffnen Sie die Transaktion im Blockchain-Explorer

Hinweis zu Explorer-Links: In den neuesten App-Versionen öffnen Explorer-Links bereits Ihre AA-Transaktion (UserOp). Wenn das angezeigt wird (das "From" Feld zeigt Ihre Wallet-Adresse), können Sie direkt zu Schritt 5 – AA-Transaktionsdetailseite. Die früheren Schritte gelten nur, wenn Ihr Link auf die äußere Bundler-Transaktion verweist (wo "From" NICHT Ihre Wallet ist). Es ist dennoch eine nützliche Lektüre, um besser zu verstehen, wie SCW-Transaktionen funktionieren

Sie tippen den Etherscan-Link an, um zu sehen, was passiert ist:

Auf den ersten Blick wird es noch verwirrender:

  • Der Status zeigt ✅ Success — Moment, was?!

  • Aber wir wissen doch bereits, dass der Swap nicht durchgelaufen ist

  • Unter dem Feld „To“ (EntryPoint) steht eine kleine gelbe Meldung:

    Although one or more errors occurred [execution reverted] Contract Execution Completed

Also was passiert hier tatsächlich?

Erinnern Sie sich an den SCW-Transaktionsablauf, den wir zuvor besprochen haben:

  • der Bundler verpackt Ihren Swap in ein UserOperation (ein Datenpaket mit Ihrer Swap-Logik)

  • und sendet es dann an den EntryPoint-Smart-Contract

  • EntryPoint validiert ihn (prüft Ihr Guthaben, Signatur und Nonce)

  • wenn alles in Ordnung ist, führt es Ihre Absicht aus — ruft Router und Pools auf und bewegt Tokens.

Aus Sicht der Blockchain sieht das Ganze jedoch nur nach „Bundler sendet Daten an EntryPoint“ aus.

In SCW-Begriffen wird dieser Schritt die äußere Transaktion genannt.

Und diese Transaktion war erfolgreich: die Daten wurden geliefert und EntryPoint begann, seine interne Logik auszuführen. Daher das ✅ Success oben.


Der Explorer informiert Sie jedoch höflich trotzdem darüber, dass etwas fehlgeschlagen ist innerhalb von EntryPoint mit dieser kleinen gelben Meldung. Für den Explorer ist dieses interne Scheitern nicht ausreichend, um die gesamte Transaktion als fehlgeschlagen zu markieren.

Nun fällt noch ein weiteres Detail auf der Übersichts-Registerkarte auf:

  • Etwa $6 Wert an ETH wurde von Ihrer Wallet an EntryPoint gesendet (das Gas-Prefund).

  • Nur $2.3 Wert an ETH wurde dem Bundler erstattet.

  • Und die oben angezeigte Transaktionsgebühr ist noch niedriger — etwa $2.15.

Auf den ersten Blick scheinen diese Zahlen nicht zu passen. Lassen Sie uns das zuerst aufschlüsseln, bevor wir mit der Untersuchung fortfahren.


Schritt 3 – Verstehen der Gas-Differenz

Hier ist die Aufschlüsselung:

  • SCW → EntryPoint (~6 $): Dies ist das Gas-Prefund. EntryPoint sammelt immer mehr als nötig, um sicherzustellen, dass Ihre UserOp ausgeführt werden kann.

  • EntryPoint → Bundler (~2,3 $): Dies ist die tatsächliche Gas-Erstattung. Es ist der wirkliche Betrag, den Sie bezahlt haben für diesen fehlgeschlagenen Versuch.

  • Transaktionsgebühr (~2,15 $): Das ist das, was der Bundler ausgegeben hat, um Ihre UserOp an EntryPoint zu senden. Sie ist niedriger, weil EntryPoint selbst zusätzliches Gas beim Validieren und Erstatten des Bundlers verwendet hat — diese zusätzlichen Kosten wurden Ihnen in Rechnung gestellt.

Faustregel:

👉 Ihre tatsächlichen Gaskosten sind immer die EntryPoint ➜ Bundler-Erstattung (nicht die oben angezeigte „Transaktionsgebühr“)

Und die Differenz zwischen dem, was Sie vorfinanziert haben (6 $), und dem, was erstattet wurde (2,3 $), ist nicht verschwunden. Sie blieb in EntryPoint als Ihre Hinterlegung, die automatisch auf Ihre nächste Transaktion angewendet wird.


Schritt 4 – Prüfen Sie die AA Transactions-Registerkarte

Im Explorer sehen Sie eine AA Transactions Registerkarte (AA = Account Abstraction). Hier lebt die Aktivität von Smart Contract Wallets, da SCWs auf Account Abstraction (ERC-4337) laufen.

Wechseln wir von Overview zu dieser Registerkarte:

Hier sehen Sie schließlich unsere UserOperation als separaten Eintrag innerhalb der äußeren Transaktion des Bundlers aufgelistet:

  • Das Feld „From“ zeigt jetzt unsere Wallet-Adresse, was bestätigt, dass dies unsere Operation ist.

  • Es gibt einen separaten AA Txn Hash, der sich vom äußeren Transaktions-Hash unterscheidet. Warum?

    • Der äußere Txn Hash gehört zur Bundler->EntryPoint-Transaktion, die Ihre UserOp enthielt (und mehrere UserOps verschiedener Nutzer enthalten haben könnte).

    • Der AA Txn Hash ist die eindeutige Kennung für Ihre UserOperation innerhalb dieses Bundles.

Das ist die Kernidee des Bundlings:

  • Ein Bundler kann viele UserOps zu einer einzigen Transaktion zusammenpacken.

  • Jede UserOp erhält ihren eigenen AA Txn Hash, sodass sie innerhalb des Bundles separat verfolgt werden kann.

  • In unserem Fall, da es sich um eine ältere Transaktion (vor über 400 Tagen) handelt, waren SCWs noch selten und das Bundle enthielt nur unsere UserOp — deshalb zeigt die Registerkarte „AA Transactions (1)“. Bei neueren Transaktionen sehen Sie häufig mehrere UserOps, die in einem Bundle zusammengefasst sind.

In dieser Ansicht werden Sie auch ein (!) Symbol neben Ihrem AA Txn Hash bemerken — eine Bestätigung, dass Ihr Swap nicht ausgeführt wurde.

Der nächste Schritt ist, auf den AA Txn Hash zu klicken. Das öffnet die dedizierte UserOperation-Seite, auf der Sie die vollständigen Details unseres Swap-Versuchs sehen — Gebühr, Transfers und wo es fehlgeschlagen ist.


Schritt 5 – Öffnen Sie die Detailseite der AA-Transaktion

Wenn Sie auf den AA Txn Hash klicken, gelangen Sie zur dedizierten Detailseite für Ihre UserOperation:

Hier können Sie endlich unseren tatsächlichen Swap-Versuch klar dargestellt sehen:

  • Status: x Fail (diesmal keine Mehrdeutigkeit)

  • Von: Ihre Smart Contract Wallet-Adresse

  • AA Transaktionsgebühr: ~0,00231 ETH (2,31 $). Dies sind die tatsächlichen Gaskosten, die Sie gezahlt haben — die Erstattung an den Bundler.

  • Interne Transaktion: eine Überweisung von ~0,00145 ETH (6,36 $) von Ihrer SCW an EntryPoint (Gas-Prefund). Keine weiteren Transfers fanden statt, was bestätigt, dass der Swap selbst nie ausgeführt wurde.

  • Bundle Txn Hash: ebenfalls angezeigt, mit Verlinkung zurück zur äußeren Bundler-Transaktion.

Diese Seite entspricht endlich Ihrer Intuition: dies ist die eigentliche Transaktion — die UserOperation, die Ihren Swap-Versuch darstellte.

Das endet unsere Untersuchung fast. Aber da wir schon so weit gekommen sind, klicken wir auch auf Internal Txns.


Schritt 6 – Prüfen Sie die Registerkarte Internal Transactions

Wechseln Sie in der AA-Transaktionsansicht zur Registerkarte Internal Txns:

Hier sehen Sie die Schritt-für-Schritt-Aktionen, die EntryPoint in Ihrem Auftrag auszuführen versuchte:

  1. ✅ Überweisung von Ihrer SCW → EntryPoint (~0,00145 ETH, ~6,36 $) = Gas-Prefund. Dies war erfolgreich.

  2. ❌ Ausführung von Ihrer SCW → Uniswap Universal Router (~0,002 ETH) = versuchter Swap. Dies schlug fehl.

Diese Aufschlüsselung erklärt das Scheitern:

  • Sie haben erfolgreich ETH an EntryPoint als Gas-Prefund gesendet.

  • Aber als EntryPoint versuchte, ETH für den Swap an Uniswap weiterzuleiten, schlug der Versuch fehl.

Für die detaillierteste Aufschlüsselung öffnen Sie die Logs-Registerkarte.


Schritt 7 – Untersuchen Sie die Logs-Registerkarte

Klicken Sie auf Logs (3):

Hier finden Sie drei zentrale Ereignisse:

  • Deposited → bestätigt, dass Ihr Gas-Prefund von EntryPoint empfangen wurde.

  • BeforeExecution → zeigt, dass EntryPoint mit der Verarbeitung Ihrer UserOperation begonnen hat.

  • UserOperationEvent success: False — der kanonische On-Chain-Eintrag, dass Ihre UserOp fehlgeschlagen ist.


Was tatsächlich passiert ist (alles zusammengefasst)

Diese Art von Fehler ist spezifisch für Swaps mit SCWs auf EVMs, bei denen die Eingabe der native Token ist (ETH, BNB, MATIC…).

  • Die Lücke: Weder der Bundler noch EntryPoint prüfen, ob Sie genug native Token haben, um sowohl das Gas-Prefund als auch den Swap zusammen zu decken. Sie prüfen nur separat — „genug für Gas?“ und „genug für Swap?“. Deshalb bestand die Simulation.

  • Wir haben in der App eine Sicherheitsfunktion für diese Fälle eingebaut und Sie in der Benutzeroberfläche gewarnt, dass das Gas möglicherweise nicht ausreicht. Da die Simulation jedoch gut aussah, konnten Sie trotzdem fortklicken.

  • Nachdem Sie bestätigt hatten, reichte der Bundler Ihre UserOperation an EntryPoint ein.

  • EntryPoint zog etwa 6 $ an ETH als Prefund ein.

  • Als es versuchte, den Swap auszuführen, war nicht genug ETH übrig, um gleichzeitig sowohl den Swap als auch das Prefund zu decken.

  • Der Swap-Aufruf wurde innerhalb von EntryPoint zurückgerollt.

  • Sie zahlten dennoch etwa 2,3 $ an Gas (die Erstattung an den Bundler).

  • Die ungenutzten ~3,7 $ blieben in EntryPoint als Ihre Hinterlegung, die automatisch bei Ihrer nächsten Transaktion verwendet wird.

Zuletzt aktualisiert