Solidity

購買功能不適用於solidity 0.4.2

  • November 23, 2016

我不知道最新的 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 錯誤。程式碼的哪一部分消耗了所有提供的氣體?

Solidity 0.4 開始:

想要接收 Ether 的函式必須指定新的應付修飾符(否則它們會拋出)。

Athrow消耗所有氣體,所以function buy() payable returns (uint amount)

引用自:https://ethereum.stackexchange.com/questions/9392