Los fondos enviados al contrato no muestran el valor correcto por parte del contribuyente.?

La pregunta no tiene respuesta por eso vuelvo a preguntar. ¿Alguien puede decirme y señalarme (corregirme) dónde está el problema?

Eth ha sido enviado al contrato de crowdsale con éxito. BalanceOf y la cantidad se calcularon correctamente. Desafortunadamente, se muestra con el error del lado del contribuyente. ingrese la descripción de la imagen aquí¿Por qué está pasando esto? ¿Qué me perdí aquí? Gracias Roberto.

Contrato de token https://ropsten.etherscan.io/address/0x6f5c43f62b4b18aa8ed37b42f2804f7049cbe0e9#code

Contrato de CrowdSale https://ropsten.etherscan.io/address/0x9b94e1894abe2051e6e96bf1b57fe5d3adbbc5aa#code

Entorno == Inyectado Web3 Ropsten MetaMask/Remix

Más detalles están aquí. ¿Por qué se envía una cantidad incorrecta de tokens de acuerdo con la tarifa actual al contribuyente?

¿Dónde transfiere realmente tokens en su contrato de venta colectiva?
Hola, los tokens se transfirieron a la dirección de recompensa del token.
Quiero decir, ¿en qué parte del código del contrato transfiere tokens?
Solo puedo agregar Comentar, Mírate aquí; // El token que se vende ParadiseToken public tokenReward; - línea 432 dirección addressOfTokenUsedAsReward -línea 473 tokenReward = ParadiseToken(addressOfTokenUsedAsReward); -486
De acuerdo. Pero no veo ninguna funcionalidad de transferencia de tokens en el código fuente del contrato de venta colectiva, por lo que el saldo del token no se puede cambiar después de la inversión.
¿Alguna sugerencia que me ayude a solucionar este problema?

Respuestas (1)

No tiene la función de transferencia de tokens en el contrato de venta colectiva, por lo que el saldo de tokens de la dirección del inversor no se puede cambiar después de la inversión. Debe modificar buy()el método y agregarle la funcionalidad de transferencia de tokens.

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();
    }

Además de hacer que este código funcione, debe transferir algunos tokens a la dirección del contrato de venta colectiva. Si no desea hacer eso y desea mantener todos los tokens en una ASSET_MANAGER_WALLETdirección separada, entonces debe approveagregar algunos tokens desde esta dirección a la dirección del contrato de venta colectiva y, en lugar de llamar a transferla función, debe llamar a transferFromla función.

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

Gracias por la respuesta. Después de agregar el código: require(tokenReward.transfer(msg.sender, numTokens)); no puedo enviar eth a crowdsale (sin gasolina). Prueba a hacer tú mismo la prueba ya verás.
Su contrato de venta colectiva no tiene tokens, por eso no puede enviarlos.