Rework shred headers to fix position of signature (#6451)
* Rework shred headers to fix position of signature * fix clippy
This commit is contained in:
@ -153,7 +153,7 @@ mod tests {
|
||||
hasher.hash(&buf[..size]);
|
||||
|
||||
// golden needs to be updated if blob stuff changes....
|
||||
let golden: Hash = "CGL4L6Q2QwiZQDCMwzshqj3S9riroUQuDjx8bS7ra2PU"
|
||||
let golden: Hash = "F3Grk43JpRUPeCuB8CbYovjxq2Bh77bh4uLB2UXKBFN8"
|
||||
.parse()
|
||||
.unwrap();
|
||||
|
||||
|
@ -1788,7 +1788,9 @@ mod tests {
|
||||
use solana_ledger::blocktree::get_tmp_ledger_path;
|
||||
use solana_ledger::blocktree::make_many_slot_entries;
|
||||
use solana_ledger::blocktree::Blocktree;
|
||||
use solana_ledger::shred::{max_ticks_per_n_shreds, Shred, ShredHeader};
|
||||
use solana_ledger::shred::{
|
||||
max_ticks_per_n_shreds, CodingShredHeader, DataShredHeader, Shred, ShredCommonHeader,
|
||||
};
|
||||
use solana_sdk::hash::Hash;
|
||||
use solana_sdk::signature::{Keypair, KeypairUtil};
|
||||
use std::collections::HashSet;
|
||||
@ -1946,11 +1948,16 @@ mod tests {
|
||||
0,
|
||||
);
|
||||
assert!(rv.is_empty());
|
||||
let mut data_shred = ShredHeader::default();
|
||||
data_shred.data_header.common_header.slot = 2;
|
||||
data_shred.data_header.parent_offset = 1;
|
||||
data_shred.data_header.common_header.index = 1;
|
||||
let shred_info = Shred::new_empty_from_header(data_shred);
|
||||
let mut common_header = ShredCommonHeader::default();
|
||||
common_header.slot = 2;
|
||||
common_header.index = 1;
|
||||
let mut data_header = DataShredHeader::default();
|
||||
data_header.parent_offset = 1;
|
||||
let shred_info = Shred::new_empty_from_header(
|
||||
common_header,
|
||||
data_header,
|
||||
CodingShredHeader::default(),
|
||||
);
|
||||
|
||||
blocktree
|
||||
.insert_shreds(vec![shred_info], None)
|
||||
|
@ -874,7 +874,10 @@ mod test {
|
||||
use solana_ledger::blocktree::make_slot_entries;
|
||||
use solana_ledger::blocktree::{entries_to_test_shreds, get_tmp_ledger_path, BlocktreeError};
|
||||
use solana_ledger::entry;
|
||||
use solana_ledger::shred::{Shred, ShredHeader, DATA_COMPLETE_SHRED, SIZE_OF_SHRED_HEADER};
|
||||
use solana_ledger::shred::{
|
||||
CodingShredHeader, DataShredHeader, Shred, ShredCommonHeader, DATA_COMPLETE_SHRED,
|
||||
SIZE_OF_COMMON_SHRED_HEADER, SIZE_OF_DATA_SHRED_HEADER, SIZE_OF_DATA_SHRED_PAYLOAD,
|
||||
};
|
||||
use solana_runtime::genesis_utils::GenesisBlockInfo;
|
||||
use solana_sdk::hash::{hash, Hash};
|
||||
use solana_sdk::packet::PACKET_DATA_SIZE;
|
||||
@ -999,15 +1002,20 @@ mod test {
|
||||
fn test_dead_fork_entry_deserialize_failure() {
|
||||
// Insert entry that causes deserialization failure
|
||||
let res = check_dead_fork(|_, _| {
|
||||
let payload_len = PACKET_DATA_SIZE - *SIZE_OF_SHRED_HEADER;
|
||||
let payload_len = *SIZE_OF_DATA_SHRED_PAYLOAD;
|
||||
let gibberish = [0xa5u8; PACKET_DATA_SIZE];
|
||||
let mut header = ShredHeader::default();
|
||||
header.data_header.flags = DATA_COMPLETE_SHRED;
|
||||
let mut shred = Shred::new_empty_from_header(header);
|
||||
let _ = bincode::serialize_into(
|
||||
&mut shred.payload[*SIZE_OF_SHRED_HEADER..],
|
||||
&gibberish[..payload_len],
|
||||
let mut data_header = DataShredHeader::default();
|
||||
data_header.flags = DATA_COMPLETE_SHRED;
|
||||
let mut shred = Shred::new_empty_from_header(
|
||||
ShredCommonHeader::default(),
|
||||
data_header,
|
||||
CodingShredHeader::default(),
|
||||
);
|
||||
bincode::serialize_into(
|
||||
&mut shred.payload[*SIZE_OF_COMMON_SHRED_HEADER + *SIZE_OF_DATA_SHRED_HEADER..],
|
||||
&gibberish[..payload_len],
|
||||
)
|
||||
.unwrap();
|
||||
vec![shred]
|
||||
});
|
||||
|
||||
|
@ -275,10 +275,11 @@ mod test {
|
||||
service::Service,
|
||||
};
|
||||
use rand::{seq::SliceRandom, thread_rng};
|
||||
use solana_ledger::shred::DataShredHeader;
|
||||
use solana_ledger::{
|
||||
blocktree::{get_tmp_ledger_path, make_many_slot_entries, Blocktree},
|
||||
entry::{create_ticks, Entry},
|
||||
shred::{Shredder, SIZE_OF_SHRED_TYPE},
|
||||
shred::Shredder,
|
||||
};
|
||||
use solana_sdk::{
|
||||
epoch_schedule::MINIMUM_SLOTS_PER_EPOCH,
|
||||
@ -345,9 +346,10 @@ mod test {
|
||||
);
|
||||
|
||||
// If it's a coding shred, test that slot >= root
|
||||
let (common, coding) = Shredder::new_coding_shred_header(5, 5, 6, 6, 0);
|
||||
let mut coding_shred =
|
||||
Shred::new_empty_from_header(Shredder::new_coding_shred_header(5, 5, 6, 6, 0));
|
||||
Shredder::sign_shred(&leader_keypair, &mut coding_shred, *SIZE_OF_SHRED_TYPE);
|
||||
Shred::new_empty_from_header(common, DataShredHeader::default(), coding);
|
||||
Shredder::sign_shred(&leader_keypair, &mut coding_shred);
|
||||
assert_eq!(
|
||||
should_retransmit_and_persist(&coding_shred, Some(bank.clone()), &cache, &me_id, 0),
|
||||
true
|
||||
|
Reference in New Issue
Block a user