Wie unterscheidet sich das Ausnehmen von Ether von einem Smart Contract von einer regulären Adresse?

Wir implementieren eine Ethereum-Zahlung für unsere Kunden und müssen uns zwischen Einzahlungen auf einen Smart Contract oder einzelne Kundenadressen entscheiden. Was sind Vor- und Nachteile? Ist es möglich, das Guthaben unseres Smart Contracts zu verbergen, wenn wir es für alle Zahlungen verwenden? Warum akzeptieren einige Börsen keine Zahlungen aus Smart Contracts – liegt es an fehlenden Kunden-Tracking-Informationen?

Antworten (1)

Es ist anders, aber nur etwas komplizierter. Transaktionen von EOA (extern besessene Konten, z. B. privater Schlüssel signiert eine Transaktion) haben ein Ziel und einen Betrag. Die Börse oder der Dienst kann den Mempool überwachen und sehen, dass die Transaktion an ihre Adresse geht, und Sie wissen lassen: „Hey, wir sehen Ihre Transaktion, wir warten darauf, dass sie abgebaut wird, und x Bestätigungen, um sie zu bestätigen!“.

Transaktionen aus Verträgen sind jedoch anders. Transaktionen aus Verträgen sind nicht einmal Transaktionen, sondern "Nachrichtenanrufe". Da alle Transaktionen von Verträgen von EOA-Konten gestartet werden, werden Nachrichtenaufrufe von Verträgen nicht im Mempool angezeigt und sie sind nicht einmal in Blöcken enthalten, nur die ursprüngliche Transaktion, die die Vertragstransaktion verursacht hat, ist im Block. So würden Zahlungen aus Verträgen in der Praxis funktionieren:

  1. Ich sende eine Nachricht an meinen Multisig-Vertrag mit der Aufschrift „1 ETH an diese Adresse senden“.

  2. Die Multisig sendet in derselben Transaktion einen Nachrichtenanruf an die Adresse, die ich ihr mitgeteilt habe, mit dem ETH-Betrag, den ich ihr zum Senden mitgeteilt habe.

Da die Transaktion, die bewirkt, dass die ETH an den Dienst geht, nicht wirklich an den Dienst geht, sondern an Multisig, kann der Dienst/die Börse nicht nur Transaktionen an ihre Adresse überwachen. Sie müssten jede Transaktion, die sie sehen, ausführen und sehen, ob sie an ihre Adresse gesendet wird. Darüber hinaus ist es möglich, dass sich das Transaktionsergebnis in einem zukünftigen Block ändert. Angenommen, mein Multisig sagt: "Wenn die aktuelle Blocknummer ungerade ist, senden Sie niemals die ETH", aber die Börse hat die Transaktion auf einem geraden Block getestet, sie würden sich irren, wenn sie die ETH erhalten würden, wenn sie in einem ungeraden Block abgebaut würde.

Am Ende des Tages kann der Dienst/die Börse einfach nach Änderungen in ihrem Wallet-Guthaben pingen, anstatt zu versuchen, Transaktionen an ihre Adresse abzuhören, aber viele wollen das einfach nicht tun.

Danke, könnten Sie bitte genauere Informationen geben, wie Sie feststellen können, welche Zahlung von welchem ​​Kunden stammt? Wenn ich nur die Änderungen meines Kontostands überwache – wie gehe ich vor, um herauszufinden, was passiert ist?
Es gibt ein paar Möglichkeiten. Der übliche Weg für den Austausch besteht darin, für jeden Benutzer separate Adressen zu haben, und sie generieren einfach eine neue für jeden Benutzer. Sie wissen dann, wer an den Dienst sendet. Eine weitere Option ist, dass Ihre Empfangsadresse ein Vertrag ist, der erfordert, dass eine Art von Kennung an die Zahlungsfunktion übergeben wird, die für jede Person eindeutig ist.
Danke - das habe ich bisher herausgefunden. Was sind im Falle eines Smart Contracts die Probleme, wenn sie von einem anderen Smart Contract senden? Ist es wahrscheinlich, dass die Brieftasche des Benutzers das Hinzufügen der Kennung zu den Transaktionsdaten nicht unterstützt, oder falls sie von einer anderen Börse senden?
Wenn Sie sich für die Kennung in Ihrer Smart-Contract-Methode entscheiden würden, könnten die Leute nicht direkt von einer Börse senden, da die Börse keine Ahnung von dieser Kennung hat. Wenn Sie vollständige Interoperabilität wünschen, müssen Sie die 1-Adresse pro Benutzer ausführen und Übertragungen sowohl von EOA als auch von Verträgen verarbeiten.
Im Falle einzelner Adressen müsste ich also Gelder auf ein kumulatives Konto verschieben, da es im Gegensatz zu Bitcoin unpraktisch ist, mit all diesen Konten umzugehen. Gibt es dafür eine Best Practice?