Contract-Development

交易用完gas但使用的gas少於gas限制

  • May 12, 2018

我在 rinkeby 上測試的契約上有這種方法

function addMatch(string _name, uint _fixtureId, uint8 _home, uint8 away, uint _start) public onlyOwner returns (uint8) {
   require(_home < NUM_TEAMS && _away < NUM_TEAMS && _home != _away);
   require(_start >= now);
   Match memory newMatch = Match({
       home: _home,
       away: _away, 
       fixtureId: uint2str(_fixtureId),
       winner: 0, 
       start: _start, 
       name: _name
   });
   uint8 matchId = uint8(matches.push(newMatch));
   string memory url = strConcat(
       "json(https://api.basketball-matches.org/[my api key]/", 
       newMatch.fixtureId,
       ").[?(@.status=='FINISHED')].result[scoreHome,scoreAway]");
   bytes32 oraclizeId = oraclize_query(_start + QUERY_INTERVAL, "URL", url);
   oraclizeIds[oraclizeId] = matchId;
   emit MatchCreated(matchId);
   return matchId;
}

無論我為交易設置多少氣體限制仍然失敗,但是乙太掃描上顯示的 gasUsed 小於 gasLimit(我設置為網路的限制)。有誰知道問題可能是什麼。我正在使用 web3 並通過 truffle HDWallet 提供的 infura 使用。

在此處輸入圖像描述

嘗試使用 web3 估算 gas 成本只會引發錯誤。我在區塊鏈上呼叫這個方法時返回的錯誤是:

Error: Transaction ran out of gas. Please provide more gas:

檢查您的函式呼叫的參數,看起來您的要求子句之一中斷了事務。

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