Die Frage ist nicht beantwortet deswegen frage ich nochmal. Kann mir jemand sagen und darauf hinweisen (korrigiere mich), wo das Problem liegt.
Eth wurde erfolgreich an den Crowdsale-Vertrag gesendet. BalanceOf und Amountrised wurden korrekt berechnet. Leider zeigt sich mit dem Fehler auf der Seite des Mitwirkenden. Warum passiert das? Was habe ich hier verpasst? Danke Robert.
Token-Vertrag https://ropsten.etherscan.io/address/0x6f5c43f62b4b18aa8ed37b42f2804f7049cbe0e9#code
CrowdSale-Vertrag https://ropsten.etherscan.io/address/0x9b94e1894abe2051e6e96bf1b57fe5d3adbbc5aa#code
Umgebung == Injizierte Web3 Ropsten MetaMask/Remix
Weitere Einzelheiten finden Sie hier. Warum wird eine falsche Anzahl von Token gemäß dem aktuellen Kurs an den Beitragszahler gesendet?
Sie haben keine Token-Übertragungsfunktion im Crowdsale-Vertrag, daher kann das Token-Guthaben der Investorenadresse nach der Investition nicht geändert werden. Sie sollten buy()
die Methode ändern und ihr Token-Übertragungsfunktionen hinzufügen.
function buy ()
payable public
whenNotPaused
beforeDeadline
afterStartTime
saleNotClosed
{
require(msg.value >= minContribution);
uint amount = msg.value;
// Compute the number of tokens to be rewarded to the sender
// Note: it's important for this calculation that both wei
// and PDT have the same number of decimal places (18)
uint numTokens = amount.mul(rate);
// --- NEW CODE STARTS HERE -------------------------------------------
require(tokenReward.transfer(msg.sender, numTokens));
// --- NEW CODE ENDS HERE ---------------------------------------------
// update the total amount raised
amountRaised = amountRaised.add(amount);
// update the sender's balance of wei contributed
balanceOf[msg.sender] = balanceOf[msg.sender].add(amount);
// add to the token balance of the sender
tokenBalanceOf[msg.sender] = tokenBalanceOf[msg.sender].add(numTokens);
FundTransfer(msg.sender, amount, true);
// Check if the funding goal or cap have been reached
checkFundingGoal();
checkFundingCap();
}
Um diesen Code funktionsfähig zu machen, sollten Sie außerdem einige Token-Obergrenzen an die Crowdsale-Vertragsadresse übertragen. Wenn Sie das nicht tun möchten und alle Token auf einer separaten ASSET_MANAGER_WALLET
Adresse aufbewahren möchten, sollten Sie approve
einige Token von dieser Adresse zur Crowdsale-Vertragsadresse ausgeben und anstelle von call transfer
function sollten Sie transferFrom
function aufrufen.
require(tokenReward.transferFrom(ASSET_MANAGER_WALLET, msg.sender, numTokens))
Dmytro Saresenko
Robert
Dmytro Saresenko
Robert
Dmytro Saresenko
Robert