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 low
un 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?
Desde Solidity 0.4 en adelante:
Las funciones que quieran recibir Ether deben especificar el nuevo modificador pagadero (de lo contrario, arrojan).
A throw
consume todo el gas , entonces function buy() payable returns (uint amount)
.