From b1bc901a669269d8682bf08a48e3b4b8ce2a219c Mon Sep 17 00:00:00 2001 From: Tyera Eulberg Date: Wed, 19 Aug 2020 17:19:24 -0600 Subject: [PATCH] Allow votes to timestamp subsequent slots with the same timestamp (#11715) --- programs/vote/src/vote_state/mod.rs | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/programs/vote/src/vote_state/mod.rs b/programs/vote/src/vote_state/mod.rs index 383c71b001..2b783d2dec 100644 --- a/programs/vote/src/vote_state/mod.rs +++ b/programs/vote/src/vote_state/mod.rs @@ -556,7 +556,7 @@ impl VoteState { timestamp: UnixTimestamp, ) -> Result<(), VoteError> { if (slot < self.last_timestamp.slot || timestamp < self.last_timestamp.timestamp) - || ((slot == self.last_timestamp.slot || timestamp == self.last_timestamp.timestamp) + || (slot == self.last_timestamp.slot && BlockTimestamp { slot, timestamp } != self.last_timestamp && self.last_timestamp.slot != 0) { @@ -1742,10 +1742,6 @@ mod tests { vote_state.process_timestamp(slot + 1, timestamp - 1), Err(VoteError::TimestampTooOld) ); - assert_eq!( - vote_state.process_timestamp(slot + 1, timestamp), - Err(VoteError::TimestampTooOld) - ); assert_eq!( vote_state.process_timestamp(slot, timestamp + 1), Err(VoteError::TimestampTooOld) @@ -1755,14 +1751,22 @@ mod tests { vote_state.last_timestamp, BlockTimestamp { slot, timestamp } ); + assert_eq!(vote_state.process_timestamp(slot + 1, timestamp), Ok(())); assert_eq!( - vote_state.process_timestamp(slot + 1, timestamp + 1), + vote_state.last_timestamp, + BlockTimestamp { + slot: slot + 1, + timestamp + } + ); + assert_eq!( + vote_state.process_timestamp(slot + 2, timestamp + 1), Ok(()) ); assert_eq!( vote_state.last_timestamp, BlockTimestamp { - slot: slot + 1, + slot: slot + 2, timestamp: timestamp + 1 } );