瀏覽代碼

refactor: do not derive `Copy` on `VoteMessage` (#8691)

* wip

* pr feedback

* pr feedback
Akhilesh Singhania 3 周之前
父節點
當前提交
d070b3cf4e
共有 3 個文件被更改,包括 34 次插入20 次删除
  1. 5 5
      votor-messages/src/consensus_message.rs
  2. 5 3
      votor/src/consensus_pool.rs
  3. 24 12
      votor/src/consensus_pool/vote_pool.rs

+ 5 - 5
votor-messages/src/consensus_message.rs

@@ -13,19 +13,19 @@ pub const BLS_KEYPAIR_DERIVE_SEED: &[u8; 9] = b"alpenglow";
 /// Block, a (slot, hash) tuple
 pub type Block = (Slot, Hash);
 
+/// A consensus vote.
 #[cfg_attr(
     feature = "frozen-abi",
     derive(AbiExample),
     frozen_abi(digest = "5SPmMTisBngyvNzKsXYbo1rbhefNYeGAgVJSYF5Su6N5")
 )]
-#[derive(Clone, Copy, Debug, PartialEq, Serialize, Deserialize)]
-/// BLS vote message, we need rank to look up pubkey
+#[derive(Clone, Debug, PartialEq, Serialize, Deserialize)]
 pub struct VoteMessage {
-    /// The vote
+    /// The type of the vote.
     pub vote: Vote,
-    /// The signature
+    /// The signature.
     pub signature: BLSSignature,
-    /// The rank of the validator
+    /// The rank of the validator.
     pub rank: u16,
 }
 

+ 5 - 3
votor/src/consensus_pool.rs

@@ -417,6 +417,7 @@ impl ConsensusPool {
                 validator_vote_key,
             ));
         }
+        let vote = vote_message.vote;
         match self.update_vote_pool(vote_message, validator_vote_key, validator_stake) {
             None => {
                 // No new vote pool entry was created, just return empty vec
@@ -429,7 +430,7 @@ impl ConsensusPool {
                     .entry(vote_slot)
                     .or_insert_with(|| SlotStakeCounters::new(total_stake));
                 fallback_vote_counters.add_vote(
-                    vote,
+                    &vote,
                     entry_stake,
                     my_vote_pubkey == &validator_vote_key,
                     events,
@@ -437,9 +438,10 @@ impl ConsensusPool {
                 );
             }
         }
-        self.stats.incr_ingested_vote_type(vote_type);
+        self.stats
+            .incr_ingested_vote_type(VoteType::get_type(&vote));
 
-        self.update_certificates(vote, block_id, events, total_stake)
+        self.update_certificates(&vote, block_id, events, total_stake)
     }
 
     fn add_certificate(

+ 24 - 12
votor/src/consensus_pool/vote_pool.rs

@@ -146,16 +146,25 @@ mod test {
         };
         let my_pubkey = Pubkey::new_unique();
 
-        assert_eq!(vote_pool.add_vote(my_pubkey, 10, vote_message), Some(10));
+        assert_eq!(
+            vote_pool.add_vote(my_pubkey, 10, vote_message.clone()),
+            Some(10)
+        );
         assert_eq!(vote_pool.total_stake(), 10);
 
         // Adding the same key again should fail
-        assert_eq!(vote_pool.add_vote(my_pubkey, 10, vote_message), None);
+        assert_eq!(
+            vote_pool.add_vote(my_pubkey, 10, vote_message.clone()),
+            None
+        );
         assert_eq!(vote_pool.total_stake(), 10);
 
         // Adding a different key should succeed
         let new_pubkey = Pubkey::new_unique();
-        assert_eq!(vote_pool.add_vote(new_pubkey, 60, vote_message), Some(70));
+        assert_eq!(
+            vote_pool.add_vote(new_pubkey, 60, vote_message.clone()),
+            Some(70)
+        );
         assert_eq!(vote_pool.total_stake(), 70);
     }
 
@@ -170,18 +179,18 @@ mod test {
             signature: BLSSignature::default(),
             rank: 1,
         };
-        assert_eq!(vote_pool.add_vote(my_pubkey, 10, vote), Some(10));
+        assert_eq!(vote_pool.add_vote(my_pubkey, 10, vote.clone()), Some(10));
         assert_eq!(vote_pool.total_stake_by_block_id(&block_id), 10);
 
         // Adding the same key again should fail
-        assert_eq!(vote_pool.add_vote(my_pubkey, 10, vote), None);
+        assert_eq!(vote_pool.add_vote(my_pubkey, 10, vote.clone()), None);
 
         // Adding a different bankhash should fail
-        assert_eq!(vote_pool.add_vote(my_pubkey, 10, vote), None);
+        assert_eq!(vote_pool.add_vote(my_pubkey, 10, vote.clone()), None);
 
         // Adding a different key should succeed
         let new_pubkey = Pubkey::new_unique();
-        assert_eq!(vote_pool.add_vote(new_pubkey, 60, vote), Some(70));
+        assert_eq!(vote_pool.add_vote(new_pubkey, 60, vote.clone()), Some(70));
         assert_eq!(vote_pool.total_stake_by_block_id(&block_id), 70);
     }
 
@@ -204,14 +213,14 @@ mod test {
 
         // Adding the first 3 votes should succeed, but total_stake should remain at 10
         for vote in votes.iter().take(3).cloned() {
-            assert_eq!(vote_pool.add_vote(my_pubkey, 10, vote), Some(10));
+            assert_eq!(vote_pool.add_vote(my_pubkey, 10, vote.clone()), Some(10));
             assert_eq!(
                 vote_pool.total_stake_by_block_id(vote.vote.block_id().unwrap()),
                 10
             );
         }
         // Adding the 4th vote should fail
-        assert_eq!(vote_pool.add_vote(my_pubkey, 10, votes[3]), None);
+        assert_eq!(vote_pool.add_vote(my_pubkey, 10, votes[3].clone()), None);
         assert_eq!(
             vote_pool.total_stake_by_block_id(votes[3].vote.block_id().unwrap()),
             0
@@ -220,7 +229,7 @@ mod test {
         // Adding a different key should succeed
         let new_pubkey = Pubkey::new_unique();
         for vote in votes.iter().skip(1).take(2).cloned() {
-            assert_eq!(vote_pool.add_vote(new_pubkey, 60, vote), Some(70));
+            assert_eq!(vote_pool.add_vote(new_pubkey, 60, vote.clone()), Some(70));
             assert_eq!(
                 vote_pool.total_stake_by_block_id(vote.vote.block_id().unwrap()),
                 70
@@ -228,13 +237,16 @@ mod test {
         }
 
         // The new key only added 2 votes, so adding block_ids[3] should succeed
-        assert_eq!(vote_pool.add_vote(new_pubkey, 60, votes[3]), Some(60));
+        assert_eq!(
+            vote_pool.add_vote(new_pubkey, 60, votes[3].clone()),
+            Some(60)
+        );
         assert_eq!(
             vote_pool.total_stake_by_block_id(votes[3].vote.block_id().unwrap()),
             60
         );
 
         // Now if adding the same key again, it should fail
-        assert_eq!(vote_pool.add_vote(new_pubkey, 60, votes[0]), None);
+        assert_eq!(vote_pool.add_vote(new_pubkey, 60, votes[0].clone()), None);
     }
 }