Contract-Development
交易用完gas但使用的gas少於gas限制
我在 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:
檢查您的函式呼叫的參數,看起來您的要求子句之一中斷了事務。