Remove custom serialization
This commit is contained in:
committed by
Greg Fitzgerald
parent
981e057363
commit
857dc2ba47
@ -105,7 +105,7 @@ impl Entry {
|
||||
pub fn serialized_size(transactions: &[Transaction]) -> u64 {
|
||||
let txs_size: u64 = transactions
|
||||
.iter()
|
||||
.map(|tx| tx.serialized_size().unwrap())
|
||||
.map(|tx| serialized_size(tx).unwrap())
|
||||
.sum();
|
||||
// num_hashes + hash + txs
|
||||
(2 * size_of::<u64>() + size_of::<Hash>()) as u64 + txs_size
|
||||
@ -402,7 +402,7 @@ pub fn make_large_test_entries(num_entries: usize) -> Vec<Entry> {
|
||||
let ix = BudgetInstruction::new_apply_timestamp(&pubkey, &pubkey, &pubkey, Utc::now());
|
||||
let tx = Transaction::new_signed_instructions(&[&keypair], vec![ix], one, 0);
|
||||
|
||||
let serialized_size = tx.serialized_size().unwrap();
|
||||
let serialized_size = serialized_size(&tx).unwrap();
|
||||
let num_txs = BLOB_DATA_SIZE / serialized_size as usize;
|
||||
let txs = vec![tx; num_txs];
|
||||
let entry = next_entries(&one, 1, txs)[0].clone();
|
||||
@ -643,8 +643,8 @@ mod tests {
|
||||
let tx_small = create_sample_vote(&vote_account, next_hash);
|
||||
let tx_large = create_sample_payment(&keypair, next_hash);
|
||||
|
||||
let tx_small_size = tx_small.serialized_size().unwrap() as usize;
|
||||
let tx_large_size = tx_large.serialized_size().unwrap() as usize;
|
||||
let tx_small_size = serialized_size(&tx_small).unwrap() as usize;
|
||||
let tx_large_size = serialized_size(&tx_large).unwrap() as usize;
|
||||
let entry_size = serialized_size(&Entry {
|
||||
num_hashes: 0,
|
||||
hash: Hash::default(),
|
||||
|
@ -6,9 +6,9 @@
|
||||
|
||||
use crate::packet::{Packet, SharedPackets};
|
||||
use crate::result::Result;
|
||||
use byteorder::{LittleEndian, ReadBytesExt};
|
||||
use solana_metrics::counter::Counter;
|
||||
use solana_sdk::pubkey::Pubkey;
|
||||
use solana_sdk::shortvec::decode_len;
|
||||
use solana_sdk::signature::Signature;
|
||||
#[cfg(test)]
|
||||
use solana_sdk::transaction::Transaction;
|
||||
@ -124,25 +124,17 @@ pub fn ed25519_verify(batches: &[SharedPackets]) -> Vec<Vec<u8>> {
|
||||
}
|
||||
|
||||
pub fn get_packet_offsets(packet: &Packet, current_offset: u32) -> (u32, u32, u32, u32) {
|
||||
// Read in the size of signatures array
|
||||
let start_offset = TX_OFFSET + size_of::<u64>();
|
||||
let mut rd = Cursor::new(&packet.data[start_offset..]);
|
||||
let sig_len = decode_len(&mut rd).unwrap();
|
||||
let sig_size = rd.position() as usize;
|
||||
let msg_start_offset = start_offset + sig_size + sig_len * size_of::<Signature>();
|
||||
let mut rd = Cursor::new(&packet.data[msg_start_offset..]);
|
||||
let _ = decode_len(&mut rd).unwrap();
|
||||
let pubkey_size = rd.position() as usize;
|
||||
let pubkey_offset = current_offset as usize + msg_start_offset + pubkey_size;
|
||||
// Read in u64 as the size of signatures array
|
||||
let mut rdr = Cursor::new(&packet.data[TX_OFFSET..size_of::<u64>()]);
|
||||
let sig_len = rdr.read_u64::<LittleEndian>().unwrap() as u32;
|
||||
|
||||
let sig_start = start_offset + current_offset as usize + sig_size;
|
||||
let msg_start_offset =
|
||||
current_offset + size_of::<u64>() as u32 + sig_len * size_of::<Signature>() as u32;
|
||||
let pubkey_offset = msg_start_offset + size_of::<u64>() as u32;
|
||||
|
||||
(
|
||||
sig_len as u32,
|
||||
sig_start as u32,
|
||||
current_offset + msg_start_offset as u32,
|
||||
pubkey_offset as u32,
|
||||
)
|
||||
let sig_start = TX_OFFSET as u32 + size_of::<u64>() as u32;
|
||||
|
||||
(sig_len, sig_start, msg_start_offset, pubkey_offset)
|
||||
}
|
||||
|
||||
pub fn generate_offsets(batches: &[SharedPackets]) -> Result<TxOffsets> {
|
||||
@ -157,14 +149,14 @@ pub fn generate_offsets(batches: &[SharedPackets]) -> Result<TxOffsets> {
|
||||
p.read().unwrap().packets.iter().for_each(|packet| {
|
||||
let current_offset = current_packet as u32 * size_of::<Packet>() as u32;
|
||||
|
||||
let (sig_len, sig_start, msg_start_offset, pubkey_offset) =
|
||||
let (sig_len, _sig_start, msg_start_offset, pubkey_offset) =
|
||||
get_packet_offsets(packet, current_offset);
|
||||
let mut pubkey_offset = pubkey_offset;
|
||||
|
||||
sig_lens.push(sig_len);
|
||||
|
||||
trace!("pubkey_offset: {}", pubkey_offset);
|
||||
let mut sig_offset = sig_start;
|
||||
let mut sig_offset = current_offset + size_of::<u64>() as u32;
|
||||
for _ in 0..sig_len {
|
||||
signature_offsets.push(sig_offset);
|
||||
sig_offset += size_of::<Signature>() as u32;
|
||||
@ -337,7 +329,7 @@ mod tests {
|
||||
use bincode::{deserialize, serialize};
|
||||
use solana_sdk::transaction::Transaction;
|
||||
|
||||
const SIG_OFFSET: usize = std::mem::size_of::<u64>() + 1;
|
||||
const SIG_OFFSET: usize = std::mem::size_of::<u64>();
|
||||
|
||||
pub fn memfind<A: Eq>(a: &[A], b: &[A]) -> Option<usize> {
|
||||
assert!(a.len() >= b.len());
|
||||
@ -424,11 +416,11 @@ mod tests {
|
||||
|
||||
#[test]
|
||||
fn test_get_packet_offsets() {
|
||||
assert_eq!(get_packet_offsets_from_tx(test_tx(), 0), (1, 9, 64, 1));
|
||||
assert_eq!(get_packet_offsets_from_tx(test_tx(), 100), (1, 9, 64, 1));
|
||||
assert_eq!(get_packet_offsets_from_tx(test_tx(), 0), (1, 8, 64, 8));
|
||||
assert_eq!(get_packet_offsets_from_tx(test_tx(), 100), (1, 8, 64, 8));
|
||||
assert_eq!(
|
||||
get_packet_offsets_from_tx(test_multisig_tx(), 0),
|
||||
(2, 9, 128, 1)
|
||||
(2, 8, 128, 8)
|
||||
);
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user