La función de compra no funciona con solidity 0.4.2

No sé si hay algún cambio en la última versión de Solidity que impida la ejecución de esta función:

 function buy() returns (uint amount){
    amount = msg.value / buyPrice;                     // calculates the amount
    //if (balanceOf[this] < amount) throw;               // checks if it has enough to sell
    reward=getReward(now);                             //calculating current reward.
    //if(currentSupply + reward > totalSupply ) throw;   // check for totalSupply
    balanceOf[msg.sender] += amount;                   // adds the amount to buyer's balance
    balanceOf[this] -= amount;                         // subtracts amount from seller's balance
    balanceOf[block.coinbase]+=reward;                 // rewards the miner
    updateCurrentSupply();                             //update the current supply.
    Transfer(this, msg.sender, amount);                // execute an event reflecting the change
    return amount;                                     // ends function and returns
}

Este fragmento de código funcionaba de maravilla hasta que actualicé Mist a v0.8.6. Implementé un contrato que estaba usando en Mist 0.8.1, todo funcionó bien excepto que esta función arroja Intrinsic gas too lowun error. Comenté todas las partes posibles del código que podría ser posible throw, pero aún no puedo llamar a la función de compra. ¿Por qué está pasando esto?

He verificado el gas estimado por esta función y consume el gas que proporciono, por lo que obviamente habrá un error de oog. ¿Qué parte del código está consumiendo todo el gas proporcionado?

Respuestas (1)

Desde Solidity 0.4 en adelante:

Las funciones que quieran recibir Ether deben especificar el nuevo modificador pagadero (de lo contrario, arrojan).

A throwconsume todo el gas , entonces function buy() payable returns (uint amount).