Skip to content
This repository has been archived by the owner on Nov 6, 2020. It is now read-only.

Commit

Permalink
Merge pull request #7075 from miyao-gmo/feature/estimate_gas_limit
Browse files Browse the repository at this point in the history
escape inifinite loop in estimte_gas
  • Loading branch information
rphmeier authored Dec 4, 2017
2 parents e76cec4 + ad01f99 commit e85c98e
Showing 1 changed file with 6 additions and 8 deletions.
14 changes: 6 additions & 8 deletions ethcore/src/client/client.rs
Original file line number Diff line number Diff line change
Expand Up @@ -1231,12 +1231,12 @@ impl BlockChainClient for Client {
}

fn estimate_gas(&self, t: &SignedTransaction, block: BlockId) -> Result<U256, CallError> {
const UPPER_CEILING: u64 = 1_000_000_000_000u64;
let (mut upper, env_info) = {
let (mut upper, max_upper, env_info) = {
let mut env_info = self.env_info(block).ok_or(CallError::StatePruned)?;
let initial_upper = env_info.gas_limit;
env_info.gas_limit = UPPER_CEILING.into();
(initial_upper, env_info)
let init = env_info.gas_limit;
let max = init * U256::from(10);
env_info.gas_limit = max;
(init, max, env_info)
};

// that's just a copy of the state.
Expand All @@ -1257,9 +1257,7 @@ impl BlockChainClient for Client {
};

if !cond(upper)? {
// impossible at block gas limit - try `UPPER_CEILING` instead.
// TODO: consider raising limit by powers of two.
upper = UPPER_CEILING.into();
upper = max_upper;
if !cond(upper)? {
trace!(target: "estimate_gas", "estimate_gas failed with {}", upper);
let err = ExecutionError::Internal(format!("Requires higher than upper limit of {}", upper));
Expand Down

0 comments on commit e85c98e

Please sign in to comment.