Skip to content

Commit d364c32

Browse files
committed
refactor: account addresses getter to remove duplicates
Signed-off-by: William Hankins <[email protected]>
1 parent 448e7e5 commit d364c32

File tree

5 files changed

+34
-24
lines changed

5 files changed

+34
-24
lines changed

modules/historical_accounts_state/src/immutable_historical_account_store.rs

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -269,20 +269,27 @@ impl ImmutableHistoricalAccountStore {
269269
pub async fn get_addresses(
270270
&self,
271271
account: &StakeAddress,
272-
) -> Result<Option<HashSet<ShelleyAddress>>> {
272+
) -> Result<Option<Vec<ShelleyAddress>>> {
273273
let prefix = account.to_binary();
274-
let mut addresses: HashSet<ShelleyAddress> = HashSet::new();
274+
let mut addresses = Vec::new();
275+
let mut seen = HashSet::new();
275276

276277
for result in self.addresses.prefix(&prefix) {
277278
let (key, _) = result?;
278-
let shelley = ShelleyAddress::from_bytes_key(&key[prefix.len()..])?;
279-
addresses.insert(shelley);
279+
let shelley = ShelleyAddress::from_bytes_key(&key[prefix.len() + 8..])?;
280+
if seen.insert(shelley.clone()) {
281+
addresses.push(shelley);
282+
}
280283
}
281284

282285
for block_map in self.pending.lock().await.iter() {
283286
if let Some(entry) = block_map.get(account) {
284287
if let Some(addrs) = &entry.addresses {
285-
addresses.extend(addrs.iter().cloned());
288+
for addr in addrs {
289+
if seen.insert(addr.clone()) {
290+
addresses.push(addr.clone());
291+
}
292+
}
286293
}
287294
}
288295
}

modules/historical_accounts_state/src/state.rs

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -358,25 +358,25 @@ impl State {
358358
&self,
359359
account: &StakeAddress,
360360
) -> Result<Option<Vec<ShelleyAddress>>> {
361-
let immutable = self.immutable.get_addresses(account).await?;
361+
let mut addresses = match self.immutable.get_addresses(account).await? {
362+
Some(list) => list,
363+
None => Vec::new(),
364+
};
362365

363-
let mut volatile = HashSet::new();
366+
let mut seen: HashSet<ShelleyAddress> = addresses.iter().cloned().collect();
364367
for block_map in self.volatile.window.iter() {
365368
if let Some(entry) = block_map.get(account) {
366369
if let Some(pending) = &entry.addresses {
367-
volatile.extend(pending.iter().cloned());
370+
for addr in pending {
371+
if seen.insert(addr.clone()) {
372+
addresses.push(addr.clone());
373+
}
374+
}
368375
}
369376
}
370377
}
371378

372-
match immutable {
373-
Some(mut addresses) => {
374-
addresses.extend(volatile);
375-
Ok(Some(addresses.into_iter().collect()))
376-
}
377-
None if volatile.is_empty() => Ok(None),
378-
None => Ok(Some(volatile.into_iter().collect())),
379-
}
379+
Ok((!addresses.is_empty()).then_some(addresses))
380380
}
381381

382382
fn handle_stake_registration_change(

modules/stake_delta_filter/src/utils.rs

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -321,7 +321,8 @@ pub fn process_message(
321321
block: &BlockInfo,
322322
mut tracker: Option<&mut Tracker>,
323323
) -> StakeAddressDeltasMessage {
324-
let mut grouped: HashMap<StakeAddress, (i64, HashSet<ShelleyAddress>)> = HashMap::new();
324+
let mut grouped: HashMap<StakeAddress, (i64, Vec<ShelleyAddress>, HashSet<ShelleyAddress>)> =
325+
HashMap::new();
325326
for d in delta.deltas.iter() {
326327
// Variants to be processed:
327328
// 1. Shelley Address delegation is a stake
@@ -388,24 +389,26 @@ pub fn process_message(
388389
Address::Stake(stake_address) => (stake_address.clone(), None),
389390
};
390391

391-
let entry = grouped.entry(stake_address).or_insert((0, HashSet::new()));
392+
let entry = grouped.entry(stake_address).or_insert((0, Vec::new(), HashSet::new()));
392393
entry.0 += d.value.lovelace;
393394

394395
if let Some(shelley) = shelley_opt {
395-
entry.1.insert(shelley.clone());
396+
if entry.2.insert(shelley.clone()) {
397+
entry.1.push(shelley.clone());
398+
}
396399
}
397400
}
398401

399402
let deltas = grouped
400403
.into_iter()
401404
.map(
402-
|(stake_address, (delta, shelley_addrs))| StakeAddressDelta {
405+
|(stake_address, (delta, shelley_addrs, _))| StakeAddressDelta {
403406
stake_address,
404-
addresses: shelley_addrs.into_iter().collect(),
407+
addresses: shelley_addrs,
405408
delta,
406409
},
407410
)
408-
.collect::<Vec<_>>();
411+
.collect();
409412

410413
StakeAddressDeltasMessage { deltas }
411414
}

processes/omnibus/omnibus.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,7 @@ store-registration-history = false
7171
store-delegation-history = false
7272
store-mir-history = false
7373
store-withdrawal-history = false
74-
store-addresses = false
74+
store-addresses = true
7575

7676
[module.drep-state]
7777
# Enables /governance/dreps/{drep_id} endpoint (Requires store-delegators to be enabled)

processes/omnibus/src/main.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -118,7 +118,7 @@ pub async fn main() -> Result<()> {
118118
SPDDState::register(&mut process);
119119
DRDDState::register(&mut process);
120120
Consensus::register(&mut process);
121-
ChainStore::register(&mut process);
121+
//ChainStore::register(&mut process);
122122

123123
Clock::<Message>::register(&mut process);
124124
RESTServer::<Message>::register(&mut process);

0 commit comments

Comments
 (0)