Wie handhabe ich Ether- und Token-Zahlungen im selben Vertrag?

Wie kann ich mit einem einzigen Vertrag den Empfang von Zahlungen in Ether im Konstruktor und den Empfang/Übertrag eines ERC20-Standard-Tokens mit denselben Vertragsmethoden handhaben?

constructor = receiving msg.value in Ether
contract method 1 = receiving msg.value as ERC20 Token
contract method 2 = transfer ERC20 Token to address

Ich verstehe und habe den Zahlungseingang in Ether für den Konstrukteur implementiert, aber ich bin etwas verwirrt darüber, wie ich mit dem ERC20-Standard-Token in zwei anderen vertragszahlbaren Methoden umgehen soll.

Ich verstehe, dass ich die Beträge des ERC20-Tokens im Vertrag verfolgen könnte, aber ich frage mich, wie ich beim Empfang/Übertragen überprüfen kann, ob es sich um diese Art von Token handelt?

Muss ich eine Schnittstelle mit dem bereitgestellten ERC20-Token-Vertrag herstellen, um alle Werte zu speichern und die Transaktionen für diesen Vertrag zu verarbeiten?

Antworten (1)

Wenn ich Ihr Problem richtig verstehe, haben Sie ein erc-20-Standardtoken bereitgestellt, und jetzt möchten Sie in einem anderen Vertrag Funktionen zum Empfangen/Übertragen dieses Tokens haben.

Vertragsmethode 1 = msg.value als ERC20-Token empfangen

AFAIK, Sie können keine solche Funktion haben. msg.valueist immer der Betrag, der weizusammen mit der Transaktion gesendet wird. Sie können also keine Token als msg.value.

Sie können jedoch die Tokenmenge als Funktionsparameter haben.

Ich verstehe, dass ich die Beträge des ERC20-Tokens im Vertrag verfolgen könnte, aber ich frage mich, wie ich beim Empfang/Übertragen überprüfen kann, ob es sich um diese Art von Token handelt?

Wenn Sie nur eine bestimmte Tokenübertragung unterstützen müssen, müssen Sie den Typ des Tokens nicht überprüfen. Sie können eine Funktion wie function tokenTransfer(unit tokenAmount). contractAddressWenn Sie mehrere erc-20-Token unterstützen möchten, können Sie einen anderen Parameter als weiteren Funktionsparameter benennen .

Muss ich eine Schnittstelle mit dem bereitgestellten ERC20-Token-Vertrag herstellen, um alle Werte zu speichern und die Transaktionen für diesen Vertrag zu verarbeiten?

Ja, das ist der saubere Ansatz dafür. Ich bin mir nicht sicher, was Ihr Anwendungsfall ist, aber der beste Weg, Token zu übertragen, besteht darin, die transferFunktion dieses bestimmten Vertrags aufzurufen. Aber falls Sie die gleiche Funktion in einem anderen Vertrag haben möchten, sollten Sie die tokenContractFunktion Ihres Vertrags intern aufrufen, wenn jemand anruft. Dies ist einfacher, als die Salden in beiden Verträgen im Auge zu behalten.

Das war, was ich dachte, ich müsste es tun. Danke für die Überprüfung!