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?
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:
Ich sende eine Nachricht an meinen Multisig-Vertrag mit der Aufschrift „1 ETH an diese Adresse senden“.
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.
Jeff
natewelch_
Jeff
natewelch_
Jeff