@@ -311,6 +311,13 @@ impl Tracker {
311311 }
312312}
313313
314+ /// Internal helper used during `process_message` aggregation for deduplication.
315+ struct StakeEntry {
316+ delta : i64 ,
317+ addresses : Vec < ShelleyAddress > ,
318+ seen : HashSet < ShelleyAddress > ,
319+ }
320+
314321/// Iterates through all address deltas in `delta`, leaves only stake addresses
315322/// (and removes all others). If the address is a pointer, tries to resolve it.
316323/// If the pointer is incorrect, then filters it out too (incorrect pointers cannot
@@ -321,8 +328,9 @@ pub fn process_message(
321328 block : & BlockInfo ,
322329 mut tracker : Option < & mut Tracker > ,
323330) -> StakeAddressDeltasMessage {
324- let mut grouped: HashMap < StakeAddress , ( i64 , Vec < ShelleyAddress > , HashSet < ShelleyAddress > ) > =
331+ let mut grouped: HashMap < StakeAddress , StakeEntry > =
325332 HashMap :: new ( ) ;
333+
326334 for d in delta. deltas . iter ( ) {
327335 // Variants to be processed:
328336 // 1. Shelley Address delegation is a stake
@@ -389,25 +397,27 @@ pub fn process_message(
389397 Address :: Stake ( stake_address) => ( stake_address. clone ( ) , None ) ,
390398 } ;
391399
392- let entry = grouped. entry ( stake_address) . or_insert ( ( 0 , Vec :: new ( ) , HashSet :: new ( ) ) ) ;
393- entry. 0 += d. value . lovelace ;
400+ let entry = grouped. entry ( stake_address) . or_insert_with ( || StakeEntry {
401+ delta : 0 ,
402+ addresses : Vec :: new ( ) ,
403+ seen : HashSet :: new ( ) ,
404+ } ) ;
405+ entry. delta += d. value . lovelace ;
394406
395407 if let Some ( shelley) = shelley_opt {
396- if entry. 2 . insert ( shelley. clone ( ) ) {
397- entry. 1 . push ( shelley. clone ( ) ) ;
408+ if entry. seen . insert ( shelley. clone ( ) ) {
409+ entry. addresses . push ( shelley. clone ( ) ) ;
398410 }
399411 }
400412 }
401413
402414 let deltas = grouped
403415 . into_iter ( )
404- . map (
405- |( stake_address, ( delta, shelley_addrs, _) ) | StakeAddressDelta {
406- stake_address,
407- addresses : shelley_addrs,
408- delta,
409- } ,
410- )
416+ . map ( |( stake_address, entry) | StakeAddressDelta {
417+ stake_address,
418+ addresses : entry. addresses ,
419+ delta : entry. delta ,
420+ } )
411421 . collect ( ) ;
412422
413423 StakeAddressDeltasMessage { deltas }
0 commit comments