From 927251ef8e8d158a0f93c23f9c40d95ec719b520 Mon Sep 17 00:00:00 2001 From: "Jamil Lambert, PhD" Date: Wed, 5 Feb 2025 16:33:15 +0000 Subject: [PATCH 1/3] Expand version signalling test Add a check for max soft fork signalling bit 28 --- primitives/src/block.rs | 2 ++ 1 file changed, 2 insertions(+) diff --git a/primitives/src/block.rs b/primitives/src/block.rs index cfc322c15..12a24eae5 100644 --- a/primitives/src/block.rs +++ b/primitives/src/block.rs @@ -365,6 +365,8 @@ mod tests { fn version_is_signalling() { let version = Version::from_consensus(0b00100000000000000000000000000010); assert!(Version::is_signalling_soft_fork(&version, 1)); + let version = Version::from_consensus(0b00110000000000000000000000000000); + assert!(Version::is_signalling_soft_fork(&version, 28)); } #[test] From 0df15d5cfd1813dc7124a346dfbf34b566f152e9 Mon Sep 17 00:00:00 2001 From: "Jamil Lambert, PhD" Date: Wed, 5 Feb 2025 16:45:08 +0000 Subject: [PATCH 2/3] Add version test Mutant found in Version. Add a round trip test for version::from_consensus to kill the mutant. --- primitives/src/block.rs | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/primitives/src/block.rs b/primitives/src/block.rs index 12a24eae5..faa37f218 100644 --- a/primitives/src/block.rs +++ b/primitives/src/block.rs @@ -374,4 +374,10 @@ mod tests { let version = Version::from_consensus(0b00100000000000000000000000000010); assert!(!Version::is_signalling_soft_fork(&version, 0)); } + + #[test] + fn version_to_consensus() { + let version = Version::from_consensus(1234567890); + assert_eq!(version.to_consensus(), 1234567890); + } } From ff3b3ddb675446fd21f3f7488749fc7fb26c7ef2 Mon Sep 17 00:00:00 2001 From: "Jamil Lambert, PhD" Date: Wed, 5 Feb 2025 21:37:31 +0000 Subject: [PATCH 3/3] Add a test for Header size Calculate the header size and test it is equal to `Header::SIZE` --- primitives/src/block.rs | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/primitives/src/block.rs b/primitives/src/block.rs index faa37f218..b30a2c6c9 100644 --- a/primitives/src/block.rs +++ b/primitives/src/block.rs @@ -380,4 +380,28 @@ mod tests { let version = Version::from_consensus(1234567890); assert_eq!(version.to_consensus(), 1234567890); } + + // Check that the size of the header consensus serialization matches the const SIZE value + #[test] + fn header_size() { + let header = Header { + version: Version::ONE, + prev_blockhash: BlockHash::from_byte_array([0x99; 32]), + merkle_root: TxMerkleNode::from_byte_array([0x77; 32]), + time: 2, + bits: CompactTarget::from_consensus(3), + nonce: 4, + }; + + // Calculate the size of the block header in bytes from the sum of the serialized lengths + // it's fields: version, prev_blockhash, merkle_root, time, bits, nonce. + let header_size = header.version.to_consensus().to_le_bytes().len() + + header.prev_blockhash.as_byte_array().len() + + header.merkle_root.as_byte_array().len() + + header.time.to_le_bytes().len() + + header.bits.to_consensus().to_le_bytes().len() + + header.nonce.to_le_bytes().len(); + + assert_eq!(header_size, Header::SIZE); + } }