Skip to content

Commit

Permalink
Revert "Refactor code to get block signatures in get_confirmed_signat…
Browse files Browse the repository at this point in the history
…ures_for_address2 (solana-labs#20575)"

This reverts commit 0fb94da.
  • Loading branch information
frits-metalogix authored Nov 24, 2021
1 parent 3560eef commit 1f03539
Show file tree
Hide file tree
Showing 4 changed files with 55 additions and 34 deletions.
3 changes: 3 additions & 0 deletions core/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -84,6 +84,9 @@ rustc_version = "0.4"
[[bench]]
name = "banking_stage"

[[bench]]
name = "blockstore"

[[bench]]
name = "cluster_info"

Expand Down
File renamed without changes.
3 changes: 0 additions & 3 deletions ledger/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -80,8 +80,5 @@ name = "solana_ledger"
[[bench]]
name = "sigverify_shreds"

[[bench]]
name = "blockstore"

[package.metadata.docs.rs]
targets = ["x86_64-unknown-linux-gnu"]
83 changes: 52 additions & 31 deletions ledger/src/blockstore.rs
Original file line number Diff line number Diff line change
Expand Up @@ -2396,35 +2396,6 @@ impl Blockstore {
.map(|signatures| signatures.iter().map(|(_, signature)| *signature).collect())
}

fn get_sorted_block_signatures(&self, slot: Slot) -> Result<Vec<Signature>> {
let block = self.get_complete_block(slot, false).map_err(|err| {
BlockstoreError::Io(IoError::new(
ErrorKind::Other,
format!("Unable to get block: {}", err),
))
})?;

// Load all signatures for the block
let mut slot_signatures: Vec<_> = block
.transactions
.into_iter()
.filter_map(|transaction_with_meta| {
transaction_with_meta
.transaction
.signatures
.into_iter()
.next()
})
.collect();

// Reverse sort signatures as a way to entire a stable ordering within a slot, as
// the AddressSignatures column is ordered by signatures within a slot,
// not by block ordering
slot_signatures.sort_unstable_by(|a, b| b.cmp(a));

Ok(slot_signatures)
}

pub fn get_confirmed_signatures_for_address2(
&self,
address: Pubkey,
Expand Down Expand Up @@ -2458,7 +2429,32 @@ impl Blockstore {
match transaction_status {
None => return Ok(vec![]),
Some((slot, _)) => {
let mut slot_signatures = self.get_sorted_block_signatures(slot)?;
let block = self.get_complete_block(slot, false).map_err(|err| {
BlockstoreError::Io(IoError::new(
ErrorKind::Other,
format!("Unable to get block: {}", err),
))
})?;

// Load all signatures for the block
let mut slot_signatures: Vec<_> = block
.transactions
.into_iter()
.filter_map(|transaction_with_meta| {
transaction_with_meta
.transaction
.signatures
.into_iter()
.next()
})
.collect();

// Sort signatures as a way to entire a stable ordering within a slot, as
// the AddressSignatures column is ordered by signatures within a slot,
// not by block ordering
slot_signatures.sort();
slot_signatures.reverse();

if let Some(pos) = slot_signatures.iter().position(|&x| x == before) {
slot_signatures.truncate(pos + 1);
}
Expand All @@ -2484,7 +2480,32 @@ impl Blockstore {
match transaction_status {
None => (0, HashSet::new()),
Some((slot, _)) => {
let mut slot_signatures = self.get_sorted_block_signatures(slot)?;
let block = self.get_complete_block(slot, false).map_err(|err| {
BlockstoreError::Io(IoError::new(
ErrorKind::Other,
format!("Unable to get block: {}", err),
))
})?;

// Load all signatures for the block
let mut slot_signatures: Vec<_> = block
.transactions
.into_iter()
.filter_map(|transaction_with_meta| {
transaction_with_meta
.transaction
.signatures
.into_iter()
.next()
})
.collect();

// Sort signatures as a way to entire a stable ordering within a slot, as
// the AddressSignatures column is ordered by signatures within a slot,
// not by block ordering
slot_signatures.sort();
slot_signatures.reverse();

if let Some(pos) = slot_signatures.iter().position(|&x| x == until) {
slot_signatures = slot_signatures.split_off(pos);
}
Expand Down

0 comments on commit 1f03539

Please sign in to comment.