diff --git a/crates/primitives/src/block.rs b/crates/primitives/src/block.rs index d6ed39540c..acf05fd115 100644 --- a/crates/primitives/src/block.rs +++ b/crates/primitives/src/block.rs @@ -788,7 +788,7 @@ mod tests { let bytes = hex!("f90288f90218a0fe21bb173f43067a9f90cfc59bbb6830a7a2929b5de4a61f372a9db28e87f9aea01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347940000000000000000000000000000000000000000a061effbbcca94f0d3e02e5bd22e986ad57142acabf0cb3d129a6ad8d0f8752e94a0d911c25e97e27898680d242b7780b6faef30995c355a2d5de92e6b9a7212ad3aa0056b23fbba480696b65fe5a59b8f2148a1299103c4f57df839233af2cf4ca2d2b90100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008003834c4b408252081e80a00000000000000000000000000000000000000000000000000000000000000000880000000000000000842806be9da056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421f869f86702842806be9e82520894658bdf435d810c91414ec09147daa6db624063798203e880820a95a040ce7918eeb045ebf8c8b1887ca139d076bda00fa828a07881d442a72626c42da0156576a68e456e295e4c9cf67cf9f53151f329438916e0f24fc69d6bbb7fbacfc0c0"); let bytes_buf = &mut bytes.as_ref(); let block = Block::decode(bytes_buf).unwrap(); - let mut encoded_buf = Vec::new(); + let mut encoded_buf = Vec::with_capacity(bytes.len()); block.encode(&mut encoded_buf); assert_eq!(bytes[..], encoded_buf); } diff --git a/crates/primitives/src/receipt.rs b/crates/primitives/src/receipt.rs index 6883b4f3b1..967dde4694 100644 --- a/crates/primitives/src/receipt.rs +++ b/crates/primitives/src/receipt.rs @@ -524,7 +524,7 @@ mod tests { fn encode_legacy_receipt() { let expected = hex!("f901668001b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f85ff85d940000000000000000000000000000000000000011f842a0000000000000000000000000000000000000000000000000000000000000deada0000000000000000000000000000000000000000000000000000000000000beef830100ff"); - let mut data = vec![]; + let mut data = Vec::with_capacity(expected.length()); let receipt = ReceiptWithBloom { receipt: Receipt { tx_type: TxType::Legacy, @@ -605,7 +605,7 @@ mod tests { let receipt = ReceiptWithBloom::decode(&mut &data[..]).unwrap(); assert_eq!(receipt, expected); - let mut buf = Vec::new(); + let mut buf = Vec::with_capacity(data.len()); receipt.encode_inner(&mut buf, false); assert_eq!(buf, &data[..]); } @@ -631,7 +631,7 @@ mod tests { let receipt = ReceiptWithBloom::decode(&mut &data[..]).unwrap(); assert_eq!(receipt, expected); - let mut buf = Vec::new(); + let mut buf = Vec::with_capacity(data.len()); expected.encode_inner(&mut buf, false); assert_eq!(buf, &data[..]); } diff --git a/crates/primitives/src/transaction/mod.rs b/crates/primitives/src/transaction/mod.rs index 50eba62bfc..42b590cc32 100644 --- a/crates/primitives/src/transaction/mod.rs +++ b/crates/primitives/src/transaction/mod.rs @@ -1966,13 +1966,13 @@ mod tests { // some random transactions pulled from hive tests let data = hex!("b86f02f86c0705843b9aca008506fc23ac00830124f89400000000000000000000000000000000000003160180c001a00293c713e2f1eab91c366621ff2f867e05ad7e99d4aa5d069aafeb9e1e8c9b6aa05ec6c0605ff20b57c90a6484ec3b0509e5923733d06f9b69bee9a2dabe4f1352"); let tx = TransactionSigned::decode(&mut data.as_slice()).unwrap(); - let mut b = Vec::new(); + let mut b = Vec::with_capacity(data.len()); tx.encode(&mut b); assert_eq!(data.as_slice(), b.as_slice()); let data = hex!("f865048506fc23ac00830124f8940000000000000000000000000000000000000316018032a06b8fdfdcb84790816b7af85b19305f493665fe8b4e7c51ffdd7cc144cd776a60a028a09ab55def7b8d6602ba1c97a0ebbafe64ffc9c8e89520cec97a8edfb2ebe9"); let tx = TransactionSigned::decode(&mut data.as_slice()).unwrap(); - let mut b = Vec::new(); + let mut b = Vec::with_capacity(data.len()); tx.encode(&mut b); assert_eq!(data.as_slice(), b.as_slice()); } diff --git a/crates/storage/codecs/src/lib.rs b/crates/storage/codecs/src/lib.rs index b668c759ef..a3d8070e6e 100644 --- a/crates/storage/codecs/src/lib.rs +++ b/crates/storage/codecs/src/lib.rs @@ -487,7 +487,7 @@ mod tests { fn compact_bytes() { let arr = [1, 2, 3, 4, 5]; let list = Bytes::copy_from_slice(&arr); - let mut buf = vec![]; + let mut buf = Vec::with_capacity(list.len() + 1); assert_eq!(list.to_compact(&mut buf), list.len()); // Add some noise data. @@ -512,7 +512,7 @@ mod tests { #[test] fn compact_b256() { - let mut buf = vec![]; + let mut buf = Vec::with_capacity(32 + 1); assert_eq!(B256::ZERO.to_compact(&mut buf), 32); assert_eq!(buf, vec![0; 32]); @@ -545,7 +545,7 @@ mod tests { #[test] fn compact_option() { let opt = Some(B256::ZERO); - let mut buf = vec![]; + let mut buf = Vec::with_capacity(1 + 32); assert_eq!(None::.to_compact(&mut buf), 0); assert_eq!(opt.to_compact(&mut buf), 1); @@ -556,7 +556,7 @@ mod tests { // If `None`, it returns the slice at the same cursor position. assert_eq!(Option::::from_compact(&buf, 0), (None, buf.as_slice())); - let mut buf = vec![]; + let mut buf = Vec::with_capacity(32); assert_eq!(opt.specialized_to_compact(&mut buf), 1); assert_eq!(buf.len(), 32); assert_eq!(Option::::specialized_from_compact(&buf, 1), (opt, vec![].as_slice())); @@ -605,7 +605,7 @@ mod tests { assert_eq!(buf, vec![2u8]); assert_eq!(u64::from_compact(&buf, 1), (2u64, vec![].as_slice())); - let mut buf = vec![]; + let mut buf = Vec::with_capacity(8); assert_eq!(0xffffffffffffffffu64.to_compact(&mut buf), 8); assert_eq!(&buf, &[0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff]); @@ -683,18 +683,16 @@ mod tests { #[test] fn compact_test_struct() { let test = TestStruct::default(); - let mut buf = vec![]; - assert_eq!( - test.to_compact(&mut buf), - 2 + // TestStructFlags + const EXPECTED_SIZE: usize = 2 + // TestStructFlags 1 + 1 + // 0 + 0 + 0 + 32 + 1 + 2 + 1 + - 1 + 20 * 2 - ); + 1 + 20 * 2; + let mut buf = Vec::with_capacity(EXPECTED_SIZE); + assert_eq!(test.to_compact(&mut buf), EXPECTED_SIZE); assert_eq!( TestStruct::from_compact(&buf, buf.len()), diff --git a/crates/storage/provider/src/providers/database/provider.rs b/crates/storage/provider/src/providers/database/provider.rs index b7bc0cd809..d06a06f049 100644 --- a/crates/storage/provider/src/providers/database/provider.rs +++ b/crates/storage/provider/src/providers/database/provider.rs @@ -707,6 +707,7 @@ impl DatabaseProvider { let block_requests = self.get::(range.clone())?; let block_tx = self.get_block_transaction_range(range)?; + let mut blocks = Vec::with_capacity(block_headers.len()); // merge all into block let block_header_iter = block_headers.into_iter(); @@ -721,9 +722,8 @@ impl DatabaseProvider { let mut block_withdrawals = block_withdrawals_iter.next(); let mut block_requests = block_requests_iter.next(); - let mut blocks = Vec::new(); for ((main_block_number, header), (_, header_hash), (_, tx)) in - izip!(block_header_iter.into_iter(), block_header_hashes_iter, block_tx_iter) + izip!(block_header_iter, block_header_hashes_iter, block_tx_iter) { let header = header.seal(header_hash); @@ -842,7 +842,7 @@ impl DatabaseProvider { let mut receipt_iter = self.get::(from_transaction_num..=to_transaction_num)?.into_iter(); - let mut receipts = Vec::new(); + let mut receipts = Vec::with_capacity(block_bodies.len()); // loop break if we are at the end of the blocks. for (_, block_body) in block_bodies { let mut block_receipts = Vec::with_capacity(block_body.tx_count as usize); @@ -1140,7 +1140,7 @@ impl DatabaseProvider { let mut receipt_iter = self.take::(from_transaction_num..=to_transaction_num)?.into_iter(); - let mut receipts = Vec::new(); + let mut receipts = Vec::with_capacity(block_bodies.len()); // loop break if we are at the end of the blocks. for (_, block_body) in block_bodies { let mut block_receipts = Vec::with_capacity(block_body.tx_count as usize); @@ -1407,6 +1407,8 @@ impl DatabaseProvider { let block_requests = self.take::(range.clone())?; let block_tx = self.take_block_transaction_range(range.clone())?; + let mut blocks = Vec::with_capacity(block_headers.len()); + // rm HeaderTerminalDifficulties self.remove::(range)?; @@ -1423,9 +1425,8 @@ impl DatabaseProvider { let mut block_withdrawals = block_withdrawals_iter.next(); let mut block_requests = block_requests_iter.next(); - let mut blocks = Vec::new(); for ((main_block_number, header), (_, header_hash), (_, tx)) in - izip!(block_header_iter.into_iter(), block_header_hashes_iter, block_tx_iter) + izip!(block_header_iter, block_header_hashes_iter, block_tx_iter) { let header = header.seal(header_hash);