@@ -605,30 +605,57 @@ pub async fn query_all_votes(
605605 client : & HttpClient ,
606606 proposals_ids : Vec < u64 > ,
607607) -> anyhow:: Result < HashSet < GovernanceVote > > {
608- let votes: Vec < HashSet < GovernanceVote > > =
609- futures:: stream:: iter ( proposals_ids)
610- . filter_map ( |proposal_id| async move {
611- let votes = rpc:: query_proposal_votes ( client, proposal_id)
612- . await
613- . ok ( ) ?;
608+ let votes = futures:: stream:: iter ( proposals_ids)
609+ . filter_map ( |proposal_id| async move {
610+ let votes =
611+ rpc:: query_proposal_votes ( client, proposal_id) . await . ok ( ) ?;
612+
613+ let votes = votes
614+ . into_iter ( )
615+ . map ( |vote| GovernanceVote {
616+ proposal_id,
617+ vote : ProposalVoteKind :: from ( vote. data ) ,
618+ address : Id :: from ( vote. delegator ) ,
619+ } )
620+ . collect :: < HashSet < _ > > ( ) ;
621+
622+ Some ( votes)
623+ } )
624+ . map ( futures:: future:: ready)
625+ . buffer_unordered ( 32 )
626+ . collect :: < Vec < _ > > ( )
627+ . await ;
614628
615- let votes = votes
616- . into_iter ( )
617- . map ( |vote| GovernanceVote {
618- proposal_id,
619- vote : ProposalVoteKind :: from ( vote. data ) ,
620- address : Id :: from ( vote. delegator ) ,
621- } )
622- . collect :: < HashSet < _ > > ( ) ;
629+ let mut voter_count: HashMap < ( Id , u64 ) , u64 > = HashMap :: new ( ) ;
630+ for vote in votes. iter ( ) . flatten ( ) {
631+ * voter_count
632+ . entry ( ( vote. address . clone ( ) , vote. proposal_id ) )
633+ . or_insert ( 0 ) += 1 ;
634+ }
623635
624- Some ( votes)
636+ let mut seen_voters = HashSet :: new ( ) ;
637+ anyhow:: Ok (
638+ votes
639+ . iter ( )
640+ . flatten ( )
641+ . filter ( |& vote| {
642+ seen_voters. insert ( ( vote. address . clone ( ) , vote. proposal_id ) )
625643 } )
626- . map ( futures:: future:: ready)
627- . buffer_unordered ( 32 )
628- . collect :: < Vec < _ > > ( )
629- . await ;
630-
631- anyhow:: Ok ( votes. iter ( ) . flatten ( ) . cloned ( ) . collect ( ) )
644+ . cloned ( )
645+ . map ( |mut vote| {
646+ if let Some ( count) =
647+ voter_count. get ( & ( vote. address . clone ( ) , vote. proposal_id ) )
648+ {
649+ if * count > 1_u64 {
650+ vote. vote = ProposalVoteKind :: Unknown ;
651+ }
652+ vote
653+ } else {
654+ vote
655+ }
656+ } )
657+ . collect ( ) ,
658+ )
632659}
633660
634661pub async fn get_validator_set_at_epoch (
0 commit comments