Die an den Vertrag gesendeten Gelder zeigen auf der Seite des Beitragenden nicht den korrekten Wert an.?

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. Geben Sie hier die Bildbeschreibung einWarum 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?

Wohin übertragen Sie eigentlich Token in Ihrem Crowdsale-Vertrag?
Hallo, Token wurden an die Token-Belohnungsadresse übertragen.
Ich meine, wo im Vertragscode übertragen Sie Token?
Ich kann nur einen Kommentar hinzufügen, schau selbst hier; // Das verkaufte Token ParadiseToken public tokenReward; - Zeile 432 Adresse addressOfTokenUsedAsReward - Zeile 473 tokenReward = ParadiseToken(addressOfTokenUsedAsReward); -486
OK. Aber ich sehe keine Token-Transfer-Funktion im Quellcode des Crowdsale-Vertrags, daher kann das Token-Guthaben nach der Investition nicht geändert werden.
Irgendwelche Vorschläge, die mir helfen, dieses Problem zu lösen?

Antworten (1)

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_WALLETAdresse aufbewahren möchten, sollten Sie approveeinige Token von dieser Adresse zur Crowdsale-Vertragsadresse ausgeben und anstelle von call transferfunction sollten Sie transferFromfunction aufrufen.

require(tokenReward.transferFrom(ASSET_MANAGER_WALLET, msg.sender, numTokens))

Danke für die Antwort. Nach dem Hinzufügen des Codes: require(tokenReward.transfer(msg.sender, numTokens)); kann ich eth nicht an Crowdsale senden (kein Benzin). Versuchen Sie, den Test selbst zu machen, Sie werden sehen.
Ihr Crowd-Sale-Vertrag hat keine Token, deshalb kann er sie nicht versenden.