From 8dad7b9568fb88be14514e69bcdc2490e8beb2fc Mon Sep 17 00:00:00 2001 From: Niklas Adolfsson Date: Thu, 21 Mar 2019 08:20:58 +0100 Subject: [PATCH 1/2] grumble(on_seal_block): make `&mut` to avoid clone --- ethcore/src/block.rs | 7 ++----- ethcore/src/engines/clique/mod.rs | 6 +++--- ethcore/src/engines/mod.rs | 2 +- 3 files changed, 6 insertions(+), 9 deletions(-) diff --git a/ethcore/src/block.rs b/ethcore/src/block.rs index 50adeb47bef..2f14d8d0ad0 100644 --- a/ethcore/src/block.rs +++ b/ethcore/src/block.rs @@ -415,12 +415,9 @@ impl LockedBlock { } s.block.header.set_seal(seal); - - if let Some(new_header) = engine.on_seal_block(&s.block)? { - s.block.header = new_header; - } - + engine.on_seal_block(&mut s.block)?; s.block.header.compute_hash(); + Ok(SealedBlock { block: s.block }) diff --git a/ethcore/src/engines/clique/mod.rs b/ethcore/src/engines/clique/mod.rs index 3b5b95ccd0f..c19b200e09b 100644 --- a/ethcore/src/engines/clique/mod.rs +++ b/ethcore/src/engines/clique/mod.rs @@ -366,10 +366,10 @@ impl Engine for Clique { Ok(()) } - fn on_seal_block(&self, block: &ExecutedBlock) -> Result, Error> { + fn on_seal_block(&self, block: &mut ExecutedBlock) -> Result<(), Error> { trace!(target: "engine", "on_seal_block"); - let mut header = block.header.clone(); + let header = &mut block.header; let state = self.state_no_backfill(header.parent_hash()) .ok_or_else(|| BlockError::UnknownParent(*header.parent_hash()))?; @@ -440,7 +440,7 @@ impl Engine for Clique { trace!(target: "engine", "on_seal_block: finished, final header: {:?}", header); - Ok(Some(header)) + Ok(()) } /// Clique doesn't require external work to seal, so we always return true here. diff --git a/ethcore/src/engines/mod.rs b/ethcore/src/engines/mod.rs index 7ec3b6fab71..29a8521caa0 100644 --- a/ethcore/src/engines/mod.rs +++ b/ethcore/src/engines/mod.rs @@ -300,7 +300,7 @@ pub trait Engine: Sync + Send { } /// Allow returning new block header after seal generation. Currently only used by Clique. - fn on_seal_block(&self, _block: &ExecutedBlock) -> Result, Error> { Ok(None) } + fn on_seal_block(&self, _block: &mut ExecutedBlock) -> Result<(), Error> { Ok(()) } /// None means that it requires external input (e.g. PoW) to seal a block. /// Some(true) means the engine is currently prime for seal generation (i.e. node is the current validator). From b27dabb2daba606d7c6b3077869f8728334e4663 Mon Sep 17 00:00:00 2001 From: Niklas Adolfsson Date: Fri, 22 Mar 2019 08:24:30 +0100 Subject: [PATCH 2/2] docs(on_seal_block): fix faulty documentation --- ethcore/src/engines/mod.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ethcore/src/engines/mod.rs b/ethcore/src/engines/mod.rs index 29a8521caa0..fb8b53f38a9 100644 --- a/ethcore/src/engines/mod.rs +++ b/ethcore/src/engines/mod.rs @@ -299,7 +299,7 @@ pub trait Engine: Sync + Send { Ok(()) } - /// Allow returning new block header after seal generation. Currently only used by Clique. + /// Allow mutating the header during seal generation. Currently only used by Clique. fn on_seal_block(&self, _block: &mut ExecutedBlock) -> Result<(), Error> { Ok(()) } /// None means that it requires external input (e.g. PoW) to seal a block.