Wie kann man ERC20-Token einfach von über 1000 Konten übertragen, die anfänglich keine ETH enthalten?

Ich muss mehr als 1000 Ethereum-Adressen haben, die tatsächlich verwendet wurden, um kleine Mengen verschiedener ERC20-Token zu speichern. Ich möchte all diese Krypto-Assets in all diesen über 1000 Wallets an eine einzige Adresse verschieben.

Wenn ich ein Pool-Konto mit einem einzigen privaten Schlüssel erstellen könnte, wäre dies die beste Methode, aber basierend auf meinem derzeitigen Verständnis von Ethereum glaube ich, dass dies mit Ethereum nicht möglich ist. Jede Adresse ist einem anderen privaten Schlüssel zugeordnet.

Beachten Sie nun, dass all diese über 1000 Konten kein Ethereum enthalten. Um also ERC20-Token auf ein gemeinsames Konto zu übertragen, muss ich ETH zunächst auf diese über 1000 Konten für den Gaspreis für die ERC20-Token-Übertragung für jedes dieser Konten übertragen.

Das heißt, ich muss die ETH auf das Gaskonto überweisen und dann den ERC20-Token auf das Poolkonto mit der kleinen eingezahlten ETH-Menge überweisen.

Obwohl es funktionieren könnte, scheint es sehr kompliziert zu sein und viel ETH wird unnötigerweise für Benzin verschwendet, während ich immer noch die Kontrolle über all diese über 1000 Konten habe.

Gibt es einen besseren oder einfacheren Weg für mich? Wie Börsen tun? Wie kann ich intern ohne Spritpreis umsteigen? Oder gibt es einen Weg (sogar einen komplizierten Weg), dass ich ein Poolkonto mit einem einzigen privaten Schlüssel mit mehreren Adressen haben kann?

Kann jemand helfen?

Vielen Dank,

Antworten (5)

Obwohl es funktionieren könnte, scheint es sehr kompliziert zu sein und viel ETH wird unnötigerweise für Gas verschwendet, während ich immer noch die Kontrolle über all diese über 1000 Konten habe.

Ich denke, Sie haben sich da größtenteils selbst geredet. Wenn es sich um Standard-ERC20-Verträge ohne Backdoors handelt, wie ich vermute, dann führt kein Weg an der Einschränkung vorbei, dass eine Transfertransaktion vom Token-Inhaber unterschrieben werden muss.

Wenn dies nicht der Fall wäre, dann wäre es für einen cleveren Vertrag möglich, aus den Wallets anderer Leute (ETH oder Tokens) auszugeben. Das würde zu einem ziemlich schnellen und ungeordneten Zusammenbruch von fast allem führen.

Sie haben die Schlüssel, also können Sie unterschreiben. Die Tatsache, dass die Konten keine ETH haben, um Gas zu bezahlen, ist etwas, worüber man nachdenken sollte, bevor man Vermögenswerte dorthin schickt. Über die Kosten würde ich mir auch Gedanken machen. Die Gaskosten für diese Transaktionen sind skaleninvariant, sodass Sie alles 1000-mal teurer machen. Sie haben den Zweck nicht erwähnt , daher ist es schwer zu sagen, ob es einen idealeren Weg gibt, das Problem anzugehen.

Ich hoffe es hilft.

Danke Rob, für deine Antwort. Ich versuche, eine App zu erstellen, die einer Börse ähnlich ist, sodass jeder Benutzer eine Adresse erhält, an der er ERC20-Token hinterlegen / übertragen kann. Jeder Benutzer erhält die Adresse, aber ich kontrolliere die privaten Schlüssel. Jetzt kann jeder Benutzer dieselbe Adresse verwenden, die ihm gegeben wurde, um mehrere Arten von ERC20-Token zu übertragen. Beachten Sie, dass unterschiedliche Benutzer unterschiedliche Adressen erhalten. Ich muss irgendwie all diese Krypto-Assets von diesen verschiedenen Adressen in EINEM einzigen Pool-Master-Konto sammeln, um die Verwaltung weiter zu vereinfachen. Haben Sie eine Idee, wie die Börsen damit umgehen?
Ein weiteres Problem, mit dem ich konfrontiert bin, ist, dass eine einzelne Adresse mehrere ERC20-Tokentypen enthalten kann. Um also den gesamten Inhalt der Adresse zu übertragen, muss jeder ERC20-Token separat übertragen werden. Richtig? Das bedeutet, dass ich mehr Gas für jede Transaktion verwenden muss, die verschiedenen ERC20-Token entspricht, die auf dem Konto gespeichert sind. Wenn beispielsweise eine Adresse OMG und GNT enthält, benötige ich zwei verschiedene Transaktionen, um diese an den gemeinsamen Pool zu senden.
Rechts. Sie könnten dies möglicherweise mit Raghavs Vorschlag abmildern, Verträge anstelle von Konten in externem Besitz einzusetzen, in welchem ​​​​Fall die Verträge Logik enthalten könnten, um nicht nur eine Sache nach der anderen zu tun. Insgesamt würde ich mich aber eher dagegen wehren, dass so viel in die Ferne gerückt werden soll. Es gibt keinen bekannten effizienten Weg, um alles zu sammeln.
oops ... " mehr als eine Sache auf einmal ..."

Wenn Sie 1000 externe Konten verwenden, ist dies nicht möglich.

Die einzige Möglichkeit, eine separate Adresse für die Token-Übertragungskosten zu bezahlen, besteht darin, dass jede Benutzer-Brieftasche ein Vertrag ist und der Vertrag ERC20-Standards unterstützt und die Übertragungsfunktion aufrufen kann.

Dies hat jedoch die zusätzlichen Kosten für die Bereitstellung von 1000 Verträgen als Benutzeradressen zur Folge, die die Kosten für das einfache Senden und anschließende Sweeping von Ether übersteigen können.

Danke Raghav für deinen Vorschlag! Das bedeutet, dass alle Benutzer-Wallet-Adressen eigentlich Vertragsadressen sein sollten … richtig, keine reguläre ETH-Adresse gegen einen privaten Schlüssel. Und jedes Mal, wenn ich eine neue Adresse generieren muss, muss ich stattdessen einen Vertrag bereitstellen und die Vertragsadresse abrufen, anstatt eine neue Adresse mit web3.eth.accounts.create() zu generieren.

Sie müssen jede dieser über 1000 Adressen dazu bringen, ihr Token an die einzige endgültige Adresse zu übertragen, und ja, Sie müssen jeder von ihnen etwas Gas schicken, um sie vorher auszugeben.

Dies liegt daran, dass die ERC20-Übertragungsfunktion den msg.sender als versteckten Parameter verwendet, um zu verstehen, ob das Übertragungsrecht vorhanden ist.

Ich meine: Die ERC20-Übertragung ist vom Typ "transfer (_to, _value)" und geht implizit davon aus, dass das _from-Konto dasjenige ist, das msg.sender gehört.

Dieser Anruf braucht Gas!

Es könnte eine andere Situation sein, wenn im ERC20-Standard ein "Transfer (_from, _to, _value)" vorhanden wäre; aber die einzige Funktion vom Typ "_to, _from, _value" im ERC20-Standard ist die berühmte "transferFrom(_from, _to, _value)", die leider nicht funktioniert, wenn keine Genehmigung für die "_from, _to"-Übertragung erteilt wurde zuvor über die Genehmigen-Funktion.

Das heißt, Sie sollten vorher "approve(_to, _value)" aufrufen, was genau den gleichen Mechanismus der impliziten msg.sender=tokenowner-Definition implementiert.

Und das braucht auch Gas, weniger oder mehr das gleiche Gas wie der Transferanruf.

Das tut mir leid.

Ich kann Ihnen vorschlagen, https://ethersweep.com zu verwenden . Sie können das ETH-Guthaben einfach zusammen mit den Geldern aus allen umgewandelten ERC20-Token an die Ausgangsadresse überweisen. Sie haben auch die Möglichkeit, alle nicht unterstützten Token zu behalten (obwohl etwa 97 % der gängigsten Token unterstützt werden) und diese nach Abschluss in Ihr Auszahlungs-Wallet übertragen werden. Grundsätzlich eine Ein-Klick-Lösung, um ERC-20/Airdrop-Token zu erkennen und direkt in ETH umzuwandeln.

Ich habe eine Antwort mit genau dem, was der Benutzer angefordert hat. Ein einziger privater Schlüssel und damit ein einziger Gaspool für alle ERC 20-Geldbörsen.

Die Lösung: Ein Vertrag, der andere Verträge generiert, die als Empfänger fungieren.

Relevante Stackexchange-Antwort: Common Gas Wallet für ERC20-Wallets?

Relevanter Github-Link: https://github.com/Meshugah/ERC20-CommonGasWallet