upper limit is gas limit * 10 in estimate gas

This commit is contained in:
Takehiro Miyao 2017-12-01 11:12:11 +00:00
parent 3c82a0d162
commit ad01f99c44

View File

@ -1231,12 +1231,12 @@ impl BlockChainClient for Client {
} }
fn estimate_gas(&self, t: &SignedTransaction, block: BlockId) -> Result<U256, CallError> { fn estimate_gas(&self, t: &SignedTransaction, block: BlockId) -> Result<U256, CallError> {
const UPPER_CEILING: u64 = 1_000_000_000_000u64; let (mut upper, max_upper, env_info) = {
let (mut upper, env_info) = {
let mut env_info = self.env_info(block).ok_or(CallError::StatePruned)?; let mut env_info = self.env_info(block).ok_or(CallError::StatePruned)?;
let initial_upper = env_info.gas_limit; let init = env_info.gas_limit;
env_info.gas_limit = UPPER_CEILING.into(); let max = init * U256::from(10);
(initial_upper, env_info) env_info.gas_limit = max;
(init, max, env_info)
}; };
// that's just a copy of the state. // that's just a copy of the state.
@ -1257,9 +1257,7 @@ impl BlockChainClient for Client {
}; };
if !cond(upper)? { if !cond(upper)? {
// impossible at block gas limit - try `UPPER_CEILING` instead. upper = max_upper;
// TODO: consider raising limit by powers of two.
upper = UPPER_CEILING.into();
if !cond(upper)? { if !cond(upper)? {
trace!(target: "estimate_gas", "estimate_gas failed with {}", upper); trace!(target: "estimate_gas", "estimate_gas failed with {}", upper);
let err = ExecutionError::Internal(format!("Requires higher than upper limit of {}", upper)); let err = ExecutionError::Internal(format!("Requires higher than upper limit of {}", upper));