Remove custom serialization

This commit is contained in:
Sathish Ambley
2019-03-24 22:51:56 -07:00
committed by Greg Fitzgerald
parent 981e057363
commit 857dc2ba47
8 changed files with 52 additions and 620 deletions

View File

@ -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(),

View File

@ -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)
);
}