From f12b498e9dd47d3a02bd3e54a974793803415d44 Mon Sep 17 00:00:00 2001 From: Svyatoslav Nikolsky Date: Thu, 24 Nov 2016 13:38:14 +0300 Subject: [PATCH] fixed bits order in merkleblock --- sync/src/connection_filter.rs | 13 ++++++++++++- sync/src/local_node.rs | 2 +- 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/sync/src/connection_filter.rs b/sync/src/connection_filter.rs index 58d11dc4..4e959a0c 100644 --- a/sync/src/connection_filter.rs +++ b/sync/src/connection_filter.rs @@ -243,7 +243,18 @@ impl ConnectionFilter { // build partial merkle tree let (hashes, flags) = PartialMerkleTree::build(all_hashes, all_flags); result.merkleblock.hashes.extend(hashes); - result.merkleblock.flags = flags.to_bytes().into(); + // to_bytes() converts [true, false, true] to 0b10100000 + // while protocol requires [true, false, true] to be serialized as 0x00000101 + result.merkleblock.flags = flags.to_bytes().into_iter() + .map(|b| + ((b & 0b10000000) >> 7) | + ((b & 0b01000000) >> 5) | + ((b & 0b00100000) >> 3) | + ((b & 0b00010000) >> 1) | + ((b & 0b00001000) << 1) | + ((b & 0b00000100) << 3) | + ((b & 0b00000010) << 5) | + ((b & 0b00000001) << 7)).collect::>().into(); Some(result) } } diff --git a/sync/src/local_node.rs b/sync/src/local_node.rs index 69f60fff..fd2c07e4 100644 --- a/sync/src/local_node.rs +++ b/sync/src/local_node.rs @@ -346,7 +346,7 @@ mod tests { let match_tx1 = vec![(tx1_hash.clone(), tx1)]; let match_tx2 = vec![(tx2_hash.clone(), tx2)]; let no_match_bytes = Bytes::from(vec![0x00]); - let match_bytes = Bytes::from(vec![0x80]); + let match_bytes = Bytes::from(vec![0x01]); // This peer will provide blocks let peer_index1 = local_node.create_sync_session(0, DummyOutboundSyncConnection::new());