Gibt es eine Möglichkeit für einen Vertrag zu wissen, wann er ein Token erhält?

Gibt es eine Möglichkeit für einen Vertrag zu wissen, wann er ein Token erhält? Hilft es, wenn es die Adresse des Tokens kennt? Ich schließe einen Vertrag ab, der Tokens unter einer Gruppe von Leuten aufteilen soll, wenn sie hereinkommen, und ich frage mich, ob das möglich ist oder ob es etwas ist, das aus der Ferne ausgelöst werden muss.

Antworten (1)

Herkömmlicherweise ist ein Aufruf eines Tokens, der der Token-API folgt, ein Aufruf gegen den Token-Vertrag und nicht gegen den Token-Eigentumsvertrag, sodass Sie eine Funktion nicht so einbinden können, wie Sie es können, wenn Ihr Vertrag ETH erhält. Wenn Sie die Kontrolle über den Token-Code haben, können Sie einen zusätzlichen Rückruf einfügen, aber das ist natürlich keine Option, wenn es sich um den Token einer anderen Person handelt und Ihre Benutzer die Adresse des ursprünglichen Tokens verwenden möchten. (Wenn sie gerne die von Ihnen angegebene Adresse bezahlen, können Sie möglicherweise das ursprüngliche Token in ein Proxy-Token einpacken, aber siehe unten, warum dies möglicherweise immer noch nicht die beste Strategie ist).

Die Token-API fordert jedoch ein TransferEreignis, das die Adresse Ihres Vertrags enthält, wenn Ihrem Vertrag Geld gutgeschrieben wird, sodass Sie einen Daemon-Prozess außerhalb von Ethereum durchführen und ihn auf das Ereignis lauschen lassen und eine Transaktion zu Ihrem Vertrag auslösen können. Dies kann manchmal auch der richtige Weg sein, um mit ETH-Einnahmen umzugehen, da insbesondere seit dem DAO-Debakel, "jemandem Geld zu schicken, jemand seinen willkürlichen Code auf Ihrem Ausführungsstapel ausführt", wie ein Sicherheits-Antimuster aussieht, und die Leute versuchen es zu vermeiden es durch die Weiterleitung von zu wenig Gas, um irgendetwas zu tun, außer ein Ereignis zu protokollieren.

Wenn das Ziel darin besteht, das durch einen Vertrag erhaltene Geld auf mehrere Personen aufzuteilen, ist es aus ähnlichen Gründen möglicherweise besser, dem Auszahlungsmuster zu folgen, bei dem Sie einfach verfolgen, wie viel des Guthabens jedes Tokens, das im Vertrag enthalten ist, geschuldet ist an jede Person, und sie rufen jeweils ihre eigenen Transaktionen gegen Ihren Vertrag auf, um die Token abzuheben, die sie in ihrem Namen kontrolliert. Siehe dieses Beispiel in der Solidity -Dokumentation für ein Beispiel des Auszahlungsmusters.