Solidity
購買功能不適用於solidity 0.4.2
我不知道最新的 Solidity 版本是否有任何此類更改阻止執行此功能:
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 }
在我將 Mist 更新到 v0.8.6 之前,這段程式碼執行良好。我部署了一個我在 Mist 0.8.1 上使用的合約,除了這個函式拋出
Intrinsic gas too low
錯誤之外,一切正常。我註釋掉了所有可能的程式碼部分throw
,但我仍然無法呼叫購買功能。為什麼會這樣?我已經通過這個函式檢查了估計的氣體,它消耗了我提供的任何氣體,所以顯然會有一個 oog 錯誤。程式碼的哪一部分消耗了所有提供的氣體?
想要接收 Ether 的函式必須指定新的應付修飾符(否則它們會拋出)。
A
throw
消耗所有氣體,所以function buy() payable returns (uint amount)
。