Solidity - Verkaufsfunktion funktioniert nicht

Ich habe meinen Vertrag und die Leute können meine Token über web3 und MetaMask kaufen. Wenn ich jetzt versuche, die Funktion sell () auszuführen, wird eine Ausnahme ausgelöst, und Etherscan sagt immer Failed.

Ich lege in meinem Vertrag Verkaufs- und Kaufpreise fest.

Hier ist meine Verkaufsfunktion:

/// @notice Sell `amount` tokens to contract
/// @param amount amount of tokens to be sold
function sell(uint256 amount) public {
    require(address(this).balance >= amount * sellPrice);      // checks if the contract has enough ether to buy
    _transfer(msg.sender, this, amount);              // makes the transfers
    msg.sender.transfer(amount * sellPrice);          // sends ether to the seller. It's important to do this last to avoid recursion attacks
}

Ich weiß nicht, was ich noch tun muss. Hat jemand eine Idee, mir zu helfen?

UPDATE: Vollständiger Code: https://pastebin.com/eBYC77GV .

UPDATE2: Etherscan-Bericht: https://etherscan.io/tx/0x1213ca9540b8b7c0bd34f09dac906906772416a31e3b01559d0c0a3c05582a19

Danke.

Was ist der Wert von sellPrice?
Mit den wenigen Informationen, die wir haben, schätze ich, dass Sie vielleicht einen Fehler gemacht haben sellPrice. 1000000000000000 * sellPricedem Gleichgewicht überlegen sein.

Antworten (1)

Wenn Ihr Verkaufspreiswert hochskaliert wird, amount * (sellPrice * (10**18))haben Sie also einen enorm großen Wert, also müssen Sie das Ergebnis durch dividieren 10**18. Angenommen, der Verkaufspreis soll 100 Token in Wei-Einheiten betragen, das wäre 100 * (10**18). Wenn Sie einen Wert für den Betrag eingeben, der ebenfalls in Wei-Einheiten angegeben ist, erhalten Sie eine noch größere Zahl:

(amount * (10**18)) * (sellPrice * (10**18))

Sie haben hier einige Optionen, Sie können entweder den Verkaufspreis so einstellen, dass er nicht auf Einheiten von wei hochskaliert wird 100, nicht 100 * (10**18). Oder wenn Sie es vorziehen, alles in Wei-Einheiten zu halten, können Sie Ihr Endergebnis einfach durch teilen 10**18. Alternativ können Sie sellPrice in wei-Einheiten halten und das, was Sie übergeben amount, nicht in u-Einheiten umwandeln

Sie sagen so etwas?: Betrag * (sellPrice * 10 ** 18) / 10 ** 18
Ja, du hast es!
Es funktioniert! Danke schön! Aber ich habe einen Fehler, wenn ich 1 auf den Betrag des Vertragsrabatts von meinem Konto setze 0,001 und nicht 1 Token. Irgendeine Idee?
Kein Problem! Versuchen Sie, 100 zu übergeben. Ich vermute, das würde das Problem beheben. Es hört sich jedoch so an, als würden Sie möglicherweise eine zusätzliche Zeit dividieren, da Sie am Ende 0,001 anstelle von 1 erhalten