Die Anzahl der Crowdsale-Token verringert sich nicht, selbst wenn der Benutzer die Token auf sein Konto erhält

Ich hatte 100 Millionen Token erstellt und einen Vertrag für Crowdsale im Testnetzwerk erstellt

Wenn der Benutzer einen 1 Ether unter Verwendung der Vertragsadresse sendet, kann ich 1 Ether empfangen und 1000 Token an Benutzer senden, die über Metamask senden.

https://ropsten.etherscan.io/address/0x44db21d5cc6a773ec7ec68d5059e88325cc2a5a6

Wenn der Benutzer 1 Ether sendet, erhalte ich 1 Ether auf meinem Konto und kann 1000 Token an den Benutzer senden, aber in meinem Kontostand wurden 1000 Token nicht auf meinem Konto reduziert

Welche Funktion muss ich verwenden, um das Crowdsale-Token-Guthaben in Admin in Metamask zu aktualisieren

Ohne den Quellcode des Vertrags ist es unmöglich zu sagen, aber normalerweise, wenn die Token an die Crowdsale-Adresse geprägt werden, token.transfer(msg.sender, token_amount);ist die Ausführung der Weg.
Manchmal hilft mir das Ändern des MetaMask-Netzwerks in ein beliebiges und dann das Zurückändern, den relevanten Token-Saldo zu sehen.

Antworten (3)

MetaMask aktualisiert die Token-Salden für jeden Block. Wenn die Salden also nicht aktualisiert werden, liegt wahrscheinlich ein Problem mit Ihrem Smart Contract vor, nicht mit MetaMask.

Die Token-Übertragungsfunktion ist dafür verantwortlich, das Guthaben des Senders zu verringern und das Guthaben des Empfängers zu erhöhen. Überprüfen Sie den Code dieser Funktion oder teilen Sie ihn uns mit Ihrer Frage mit.

Falls Ihr Code einen Fehler enthält, sieht eine typische ERC20-Token-Übertragungsfunktion, die die SafeMath-Bibliothek verwendet, folgendermaßen aus:

function transfer(address _to, uint256 _value) public returns (bool success) {
    require(balances[msg.sender] >= _value && _to != 0x0);
    balances[_to] = balances[_to].add(_value);
    balances[msg.sender] = balances[msg.sender].sub(_value);
    Transfer(msg.sender, _to, _value);
    return true;
}