From 92fb9d28dedd4557529de4b7ae45f90f5079a0cd Mon Sep 17 00:00:00 2001 From: Maciej Hirsz <1096222+maciejhirsz@users.noreply.github.com> Date: Fri, 6 Dec 2019 13:50:30 +0100 Subject: [PATCH] Set block timestamp when reseting stale nodes (#209) * fix: Prevent stale nodes from updating chain head * Set block timestamp when reseting stale nodes --- backend/src/chain.rs | 6 ++++-- backend/src/node.rs | 4 ++++ 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/backend/src/chain.rs b/backend/src/chain.rs index aa7b4e4..40f8914 100644 --- a/backend/src/chain.rs +++ b/backend/src/chain.rs @@ -87,11 +87,13 @@ impl Chain { let mut best = Block::zero(); let mut finalized = Block::zero(); + let mut timestamp = None; for (nid, node) in self.nodes.iter_mut() { if !node.update_stale(threshold) { if node.best().height > best.height { best = *node.best(); + timestamp = Some(node.best_timestamp()); } if node.finalized().height > finalized.height { @@ -106,9 +108,9 @@ impl Chain { self.best = best; self.finalized = finalized; self.block_times.reset(); - self.timestamp = None; + self.timestamp = timestamp; - self.serializer.push(feed::BestBlock(self.best.height, now, None)); + self.serializer.push(feed::BestBlock(self.best.height, timestamp.unwrap_or_else(|| now), None)); self.serializer.push(feed::BestFinalized(finalized.height, finalized.hash)); } } diff --git a/backend/src/node.rs b/backend/src/node.rs index c8d8a39..95f0267 100644 --- a/backend/src/node.rs +++ b/backend/src/node.rs @@ -74,6 +74,10 @@ impl Node { &self.best.block } + pub fn best_timestamp(&self) -> u64 { + self.best.block_timestamp + } + pub fn finalized(&self) -> &Block { &self.finalized }