Der DApp-Eigentümer zahlt für die Transaktion, ohne einen Smart Contract aufzurufen

Ich arbeite an einer Chrome-Erweiterung (Krypto-Wallet), mit der Sie einen unserer benutzerdefinierten ERC20-Token verwenden können, um auf Websites einzukaufen. Die meisten Benutzer der Erweiterung haben kein Ethereum in ihren Konten und können die Transaktionsgebühr nicht bezahlen.

Meine Recherche hat folgende Info ergeben:

  1. Wir können die Transaktionsgebühr im Namen des Absenders im Smart Contract bezahlen. Der Benutzer muss nur eine Transaktion unterzeichnen, und wir können diese Signatur im Smart Contract verwenden, um die Gültigkeit der Transaktion aufrechtzuerhalten, während wir gleichzeitig für das Gas bezahlen.

  2. Mein Problem ist jedoch, dass ich dies nicht innerhalb eines Smart Contracts tun möchte, da ich dadurch zusätzliches Benzin zahlen muss.

Gibt es eine Möglichkeit, diese signierten Transaktionen auf einem Server zu speichern und dann mit meiner Hostsprache (Javascript) und web3 Änderungen an der signierten Transaktion vorzunehmen, sodass Gas von einem meiner Konten kommt? Ist es überhaupt möglich?

Sie erwähnen Transaktionsgebühr und Gas, als wären sie verschiedene Dinge, was normalerweise nicht der Fall ist. Fehlt ein Stück Kontext?
@James_pic nicht wirklich, ich meinte dasselbe. Die Transaktionsgebühr ist definitiv das Gas, das Sie bezahlen. Im Falle der Ausführung eines Smart Contracts muss ich natürlich zusätzliches Benzin bezahlen
@James_pic kannst du dir einen Weg vorstellen, das zu tun?

Antworten (1)

Nach derzeitigem Stand muss die Gasgebühr für eine Transaktion immer von tx.origin- dem Konto bezahlt werden, dessen privater Schlüssel die Transaktion signiert hat. Es gibt Pläne, dies zu ändern, aber es ist unklar, ob und wann dies geschehen wird.

Wenn Sie einen Standard-ERC-20-Token von einem Konto zu einem anderen senden möchten, können Sie dies auf zwei Arten tun:

  • Rufen Sie an transfer. In diesem Fall werden Token vom msg.senderzum Ziel übertragen.
  • Rufen Sie an transferFrom. Dadurch können Token von jedem Konto zu jedem Ziel übertragen werden, vorausgesetzt, der Kontoinhaber hat msg.senderdie Übertragung vorab genehmigt, indem er anruft approve.

Wenn ein Benutzer ein Standardkonto (ohne Vertrag) hat, gibt es keine Möglichkeit, msg.sendersein Konto abzugleichen, ohne dass er auch tx.origin, und die Gasgebühr bezahlt. Ich sehe zwei Möglichkeiten, wie Sie dies ändern könnten:

  • Fordern Sie Benutzer auf, einen einmaligen Anruf bei zu tätigen approve, damit Ihr Konto anrufen kann transferFrom. Dies erfordert, dass Benutzer mindestens einmal Ether in ihren Konten haben.
  • Fügen Sie Ihrem ERC-20-Vertrag eine zusätzliche Methode hinzu, die es Benutzern ermöglicht, eine Nachricht zu signieren (keine Transaktion - der Vertrag kann die Signatur mit verifizieren ecrecover) und einen Dritten autorisieren, eine Überweisung in ihrem Namen vorzunehmen.

Während keine dieser Optionen unbedingt Smart Contracts benötigt, muss das zusätzliche Gas, das von einem Smart Contract verbraucht wird, nicht zu hoch sein, wenn Sie Smart Contracts benötigen. Die Gaskosten für den Aufruf eines Smart Contracts aus einem anderen Vertrag sind nicht so hoch - wenn kein Ether übertragen wird, sind die Kosten geringer als die Kosten für das Speichern eines Datenstücks in einer mapping. Sie werden in jedem Fall einen Vertragsaufruf tätigen, da ERC-20-Token immer Verträge sind.