Kann ein Smart Contract wissen, welche Adresse ihm ein ERC20-Token gesendet hat?

Ich möchte in der Lage sein, einen ERC20-Token an einen Smart Contract zu senden und nachvollziehen zu können, welche Adresse den ERC20-Token gesendet hat und für welchen Betrag. Zum Beispiel sendet eine Adresse X-Token an einen Smart Contract und sobald sie die Übertragung durchgeführt haben, kann die Adresse nun eine Funktion im Smart Contract ausführen, um einen Domainnamen zu registrieren. Ohne die Hinterlegung des ERC20-Tokens wäre diese Funktion nicht lauffähig. Beachten Sie, dass es zwei Smart-Contract-Aufrufe gibt, einen zum Übertragen der Token und einen zum Smart-Contract, der das ERC20-Token empfängt.

Wenn ich den ERC20 Solidity Smart Contract Code lese, sehe ich eine Zuordnung von Salden. Ich verstehe nicht, wie ich nachverfolgen kann, wer welche Beträge gesendet hat.

Was Sie meinen, ist, dass Sie einen Vertrag haben und möchten, dass der Vertrag Zahlungen erhält, oder? Ihr Problem ist dann, dass Ihr Vertrag es nicht wissen kann, wenn jemand Token sendet, da Ihr Vertrag keine Benachrichtigung erhält. Ist das Ihre Frage?

Antworten (1)

Bei erfolgreicher Übertragung eines ERC20-Tokens wird ein Event mit den Adressen der Parteien und dem übertragenen Wertbetrag ausgegeben. Das Transfer-Ereignis sieht folgendermaßen aus:

event Transfer(address indexed _from, address indexed _to, uint _value);

Ihr Vertrag kann den Token-Vertrag für Übertragungsereignisse abhören, bei denen Ihr Vertrag der _toParameter ist – Sie können dies außerhalb der Kette mit dem web3-API-Überwachungsereignis tun.

Möglicherweise finden Sie diese verwandten Fragen hilfreich:

Token-Transaktion zu einem Vertrag erkennen

Rufen Sie eine zahlbare Smart-Contract-Funktion auf, die das erc20-Token sendet

Danke, der erste Link, den Sie gepostet haben, hatte die Antwort, nach der ich gesucht habe. "Wenn Sie möchten, dass Ihr Solidity-Vertragscode auf eine ERC 20-Übertragung reagiert, haben Sie wahrscheinlich kein Glück." Ich frage mich jetzt, ob es eine Möglichkeit gibt, alle Transaktionen eines Tokens in der Kette als Datenstruktur zu speichern, anstatt Ereignisse zu veröffentlichen, damit andere Verträge aktuelle und vergangene Transaktionen lesen können, aber ich werde mehr darüber recherchieren, bevor ich eine weitere Frage stelle.
Hallo @Paulmullins, konntest du dafür eine Lösung finden?