diff --git a/ledger-tool/src/main.rs b/ledger-tool/src/main.rs index 0220fda8e05065..40b87e8915ebac 100644 --- a/ledger-tool/src/main.rs +++ b/ledger-tool/src/main.rs @@ -499,6 +499,17 @@ fn analyze_storage(database: &Database) -> Result<(), String> { "TransactionStatus", TransactionStatus::key_size(), )?; + analyze_column::<TransactionStatus>( + database, + "TransactionStatusIndex", + TransactionStatusIndex::key_size(), + )?; + analyze_column::<AddressSignatures>( + database, + "AddressSignatures", + AddressSignatures::key_size(), + )?; + analyze_column::<Rewards>(database, "Rewards", Rewards::key_size())?; Ok(()) } diff --git a/ledger/src/blockstore_db.rs b/ledger/src/blockstore_db.rs index 9f6519d4ba1fb7..9614ebdb1d2cef 100644 --- a/ledger/src/blockstore_db.rs +++ b/ledger/src/blockstore_db.rs @@ -368,11 +368,15 @@ impl Column for columns::AddressSignatures { } fn index(key: &[u8]) -> (u64, Pubkey, Slot, Signature) { - let index = BigEndian::read_u64(&key[0..8]); - let pubkey = Pubkey::new(&key[8..40]); - let slot = BigEndian::read_u64(&key[40..48]); - let signature = Signature::new(&key[48..112]); - (index, pubkey, slot, signature) + if key.len() != 112 { + (0, Pubkey::default(), 0, Signature::default()) + } else { + let index = BigEndian::read_u64(&key[0..8]); + let pubkey = Pubkey::new(&key[8..40]); + let slot = BigEndian::read_u64(&key[40..48]); + let signature = Signature::new(&key[48..112]); + (index, pubkey, slot, signature) + } } fn primary_index(index: Self::Index) -> u64 {