Was ist der "richtige" Weg, Ether an mehrere Adressen zu senden?

Ich habe gesehen, dass dies hier diskutiert wurde, aber keine zufriedenstellende Antwort erhalten. Was ist der empfohlene Weg, um Ether an mehrere Empfänger zu senden?

Ein Weg, an den ich gedacht habe, ist folgender:

Stellen Sie einen intelligenten Vertrag bereit, der Ether von jedem Konto akzeptiert, zusammen mit einer Liste von Empfängeradressen und Beträgen.

Der Vertrag teilt die Gelder auf die verschiedenen Konten auf. Allerdings habe ich einige Bedenken:

Was ist, wenn der Empfänger ein Vertrag ist, der einen seltsamen Code in seiner Fallback-Funktion hat? Es kann auch andere Sicherheitsprobleme geben.

Was ist der beste Weg, dies zu tun? Gibt es einen gut getesteten Smart Contract, der sich um die Grenzfälle kümmert, die ich wiederverwenden kann?

Wenn es hilft, verwende ich Web3j und Ethereumj, um mit der Blockchain zu interagieren.

BEARBEITEN: Eine alternative Möglichkeit besteht darin, mehrere Transaktionen zu senden und überhaupt keinen Vertrag zu verwenden. Hat der Vertrag einen wirtschaftlichen Nutzen? Es scheint, dass selbst über einen Vertrag Ether an mehrere Adressen gesendet werden und linear steigende Kosten verursachen würden. Ist das richtig? Sind die Kosten ähnlich?

Antworten (3)

Sie können testen, ob es sich bei einer Adresse um ein reguläres Konto und nicht um ein Vertragskonto handelt, indem Sie eth.getCode(address)(was auch immer das Äquivalent in Ihrer API ist) verwenden. Wenn es keinen Code gibt, ist es nur ein normales Konto und Sie können nach Herzenslust Ether senden! Wenn es Code gibt, werden die Dinge etwas kniffliger.

Ich kann Ihnen nicht wirklich eine Antwort auf „Grenzfälle“ geben, bis ich den Zweck kenne, warum Sie Ether aus einem Vertrag an mehrere Konten senden.

Sie könnten einfach eine Off-Chain-Funktion schreiben, die einfach Ether an jedes Konto sendet, ohne einen Vertrag bereitstellen zu müssen.

Wenn Sie möchten, dass dieser Vertrag vorhanden ist, weil er neue Konten aktualisiert, die dem Vertragsspeicher hinzugefügt werden, kann ich keine anderen Randfälle sehen. Unabhängig davon, welche Funktion im Vertrag neue Konten zum Speicher hinzufügt, muss nur überprüft werden, ob an der Kontoadresse ein Code vorhanden ist, bevor er hinzugefügt wird.

Ich möchte eine Ether-Wallet erstellen, die das Senden an mehrere Empfänger ermöglicht. Nur eine normale Brieftasche zum Aufbewahren von Ethern. Nichts Besonderes. Allerdings möchte ich auch das Versenden an Vertragsadressen erlauben, sonst ist das Wallet nicht sehr sinnvoll.
K Nun, dann suchen Sie einfach nach dem Vertragscode und es sollte einfach zu implementieren sein. Speichern Sie einfach einige Ether im Kontrakt und fügen Sie dann eine Funktion hinzu, die den Ether aufteilt und versendet. Wenn es sich um einen Vertrag handelt, denke ich nicht, dass es Ihre Verantwortung ist, dies zu überprüfen. Wer auch immer den Vertrag bereitgestellt hat, an den Sie senden, sollte über eine ordnungsgemäße Fallback-Funktion verfügen, damit Ether nicht weggeworfen werden.
Aber hat niemand einen wiederverwendbaren Vertrag dafür gemacht? Scheint eine ziemlich häufige Anforderung zu sein.
Habe keinen gesehen

Sie können dieses Open-Source-Tool verwenden - http://bulktokensending.online Es ermöglicht auch das Generieren von ETH-Adressen. Die Quelle ist hier https://github.com/bulktokensending/bulktokensending

Viele Projekte verwenden heute https://disperse.app/ für Airdrops und dergleichen. Vertragscode hier: https://etherscan.io/address/0xd152f549545093347a162dce210e7293f1452150#code

Wenn ich mir den Code anschaue, glaube ich nicht, dass dies Grenzfälle behandelt, wie z. B. Empfänger, die Verträge ohne Fallback-Funktion sind. Dies dient hauptsächlich der Verteilung von ETH/Token an EOAs.