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.
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
Elisa Drion
Elisa Drion
sellPrice
.1000000000000000 * sellPrice
dem Gleichgewicht überlegen sein.