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?
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.
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.
Jus12
jojeyh
Jus12
jojeyh