Also ich habe folgende Funktionen
kaufenTokens
function buyTokens(address beneficiary) public payable {
require(beneficiary != address(0));
require(validPurchase());
uint256 weiAmount = msg.value;
uint256 tokens = weiAmount.mul(getRate());
weiRaised = weiRaised.add(weiAmount);
token.issue(address(vault), tokens);
vault.deposit.value(msg.value)(beneficiary, tokens);
emit TokenPurchase(msg.sender, beneficiary, weiAmount, tokens);
forwardFunds();
}
forwardFunds
function forwardFunds() internal {
wallet.transfer(msg.value);
}
Kaution (in einem anderen Smart Contract)
function deposit(address supporter, uint256 tokensAmount) onlyOwner public payable{
depositedETH[supporter] = depositedETH[supporter].add(msg.value);
depositedToken[supporter] = depositedToken[supporter].add(tokensAmount);
emit Deposit(supporter, msg.value, tokensAmount);
}
BuyTokens funktionieren also nicht, es sei denn, ich kommentiere ENTWEDER den Einzahlungsaufruf oder den ForwardFunds-Aufruf. Nachdem ich etwas gelesen hatte, dachte ich, dass es etwas mit Benzin zu tun hatte?
Wenn ich die Deposit-Funktion aufrufe, indem ich den Wert als Parameter übergebe, anstatt ihn über das msg-Objekt in der anderen Funktion zu erhalten (ohne die .value() -Methode zu verwenden), funktioniert es einwandfrei.
vault.deposit(beneficiary, tokens, msg.value)
Gibt es ein Problem bei der Verwendung eines .value()-Aufrufs und der Weiterleitung an eine interne Funktion, die .transfer() verwendet?
Danke!
Dies leitet den an den Tresorvertrag gesendeten Ether weiter
vault.deposit.value(msg.value)(beneficiary, tokens);
Und dies leitet den an den Wallet-Vertrag gesendeten Ether weiter
wallet.transfer(msg.value);
Offensichtlich können Sie nicht denselben Ether an zwei verschiedene Kontrakte weiterleiten.
Utgarda
buyTokens
geht nicht", aber auf welche Weise? Teilen Sie bitte mit, welche Nachricht Sie darüber informiert, dass ein Problem vorliegt. Wie ein Anruf mit Argumenten und was man dann sieht.