From 18c2a599d7f298607204f382fd8157f08cbbb91e Mon Sep 17 00:00:00 2001 From: Robert Habermeier Date: Sun, 11 Dec 2016 12:50:48 +0100 Subject: [PATCH] block: enforce gas limit falls within engine bounds Former-commit-id: 488cde417f32cca0fd24db93174fa120f184921d --- ethcore/src/block.rs | 3 ++- ethcore/src/engines/mod.rs | 5 +++-- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/ethcore/src/block.rs b/ethcore/src/block.rs index 54c2a7a02..bf8d06df8 100644 --- a/ethcore/src/block.rs +++ b/ethcore/src/block.rs @@ -266,7 +266,8 @@ impl<'x> OpenBlock<'x> { r.block.base.header.set_extra_data(extra_data); r.block.base.header.note_dirty(); - engine.populate_from_parent(&mut r.block.base.header, parent, gas_range_target.0, gas_range_target.1); + let gas_floor_target = ::std::cmp::max(gas_range_target.0, engine.params().min_gas_limit); + engine.populate_from_parent(&mut r.block.base.header, parent, gas_floor_target, gas_range_target.1); engine.on_new_block(&mut r.block); Ok(r) } diff --git a/ethcore/src/engines/mod.rs b/ethcore/src/engines/mod.rs index 52812f45e..b90c08bb8 100644 --- a/ethcore/src/engines/mod.rs +++ b/ethcore/src/engines/mod.rs @@ -118,8 +118,9 @@ pub trait Engine : Sync + Send { self.verify_block_basic(header, None).and_then(|_| self.verify_block_unordered(header, None)) } - /// Don't forget to call Super::populate_from_parent when subclassing & overriding. - // TODO: consider including State in the params. + /// Populate a header's fields based on its parent's header. + /// Takes gas floor and ceiling targets. + /// The gas floor target must not be lower than the engine's minimum gas limit. fn populate_from_parent(&self, header: &mut Header, parent: &Header, _gas_floor_target: U256, _gas_ceil_target: U256) { header.set_difficulty(parent.difficulty().clone()); header.set_gas_limit(parent.gas_limit().clone());