Skip to content

Commit 9e16c5f

Browse files
fixes for encoding
1 parent 128ecc7 commit 9e16c5f

File tree

4 files changed

+55
-6
lines changed

4 files changed

+55
-6
lines changed

dash/src/blockdata/transaction/mod.rs

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -913,6 +913,8 @@ mod tests {
913913
use crate::blockdata::constants::WITNESS_SCALE_FACTOR;
914914
use crate::consensus::encode::{deserialize, serialize};
915915
use crate::internal_macros::hex;
916+
use crate::network::message::{NetworkMessage, RawNetworkMessage};
917+
use crate::network::message_sml::MnListDiff;
916918

917919
#[test]
918920
fn test_is_coinbase() {
@@ -1255,6 +1257,18 @@ mod tests {
12551257
assert_eq!(data.len(), 20);
12561258
assert_eq!(&data, &pk_data.as_slice());
12571259
}
1260+
1261+
#[test]
1262+
fn deserialize_serialize_coinbase_transaction_in_dml() {
1263+
let block_hex = include_str!("../../../tests/data/test_DML_diffs/DML_0_2221605.hex");
1264+
let data = hex::decode(block_hex).expect("decode hex");
1265+
let mn_list_diff: RawNetworkMessage = deserialize(&data).expect("deserialize MnListDiff");
1266+
if let NetworkMessage::MnListDiff(diff) = mn_list_diff.payload {
1267+
let serialized = serialize(&diff.coinbase_tx);
1268+
let deserialized: Transaction =
1269+
deserialize(serialized.as_slice()).expect("expected to deserialize");
1270+
}
1271+
}
12581272
}
12591273

12601274
#[cfg(all(test, feature = "unstable"))]

dash/src/blockdata/transaction/special_transaction/quorum_commitment.rs

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -217,8 +217,10 @@ mod tests {
217217
use hashes::Hash;
218218

219219
use crate::bls_sig_utils::{BLSPublicKey, BLSSignature};
220-
use crate::consensus::Encodable;
220+
use crate::consensus::{Encodable, deserialize, serialize};
221221
use crate::hash_types::{QuorumHash, QuorumVVecHash};
222+
use crate::network::message::{NetworkMessage, RawNetworkMessage};
223+
use crate::network::message_sml::MnListDiff;
222224
use crate::sml::llmq_type::LLMQType;
223225
use crate::transaction::special_transaction::quorum_commitment::{
224226
QuorumCommitmentPayload, QuorumEntry,
@@ -271,4 +273,18 @@ mod tests {
271273
assert_eq!(actual, want);
272274
}
273275
}
276+
277+
#[test]
278+
fn deserialize_serialize_mn_list_diff() {
279+
let block_hex = include_str!("../../../../tests/data/test_DML_diffs/DML_0_2221605.hex");
280+
let data = hex::decode(block_hex).expect("decode hex");
281+
let mn_list_diff: RawNetworkMessage = deserialize(&data).expect("deserialize MnListDiff");
282+
if let NetworkMessage::MnListDiff(diff) = mn_list_diff.payload {
283+
let quorum = diff.new_quorums.first().expect("expected a quorum");
284+
let serialized = serialize(&quorum);
285+
let deserialized: QuorumEntry =
286+
deserialize(serialized.as_slice()).expect("expected to deserialize");
287+
assert_eq!(quorum, &deserialized);
288+
}
289+
}
274290
}

dash/src/network/message_sml.rs

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -145,8 +145,9 @@ mod tests {
145145

146146
use assert_matches::assert_matches;
147147

148-
use crate::consensus::deserialize;
148+
use crate::consensus::{deserialize, serialize};
149149
use crate::network::message::{NetworkMessage, RawNetworkMessage};
150+
use crate::network::message_sml::MnListDiff;
150151

151152
fn read_binary_file(filename: &str) -> io::Result<Vec<u8>> {
152153
let mut file = File::open(filename)?;
@@ -163,4 +164,16 @@ mod tests {
163164

164165
assert_matches!(mn_list_diff, RawNetworkMessage { magic, payload: NetworkMessage::MnListDiff(_) } if magic == 3177909439);
165166
}
167+
168+
#[test]
169+
fn deserialize_serialize_mn_list_diff() {
170+
let block_hex = include_str!("../../tests/data/test_DML_diffs/DML_0_2221605.hex");
171+
let data = hex::decode(block_hex).expect("decode hex");
172+
let mn_list_diff: RawNetworkMessage = deserialize(&data).expect("deserialize MnListDiff");
173+
if let NetworkMessage::MnListDiff(diff) = mn_list_diff.payload {
174+
let serialized = serialize(&diff);
175+
let deserialized: MnListDiff =
176+
deserialize(serialized.as_slice()).expect("expected to deserialize");
177+
}
178+
}
166179
}

dash/src/sml/masternode_list_entry/mod.rs

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -28,12 +28,12 @@ impl Encodable for MasternodeType {
2828
match self {
2929
MasternodeType::Regular => {
3030
// Write variant tag 0 for Regular
31-
len += 0u8.consensus_encode(writer)?;
31+
len += 0u16.consensus_encode(writer)?;
3232
}
3333
MasternodeType::HighPerformance { platform_http_port, platform_node_id } => {
3434
// Write variant tag 1 for HighPerformance,
3535
// then the u16 port and the PubkeyHash
36-
len += 1u8.consensus_encode(writer)?;
36+
len += 1u16.consensus_encode(writer)?;
3737
len += platform_http_port.consensus_encode(writer)?;
3838
len += platform_node_id.consensus_encode(writer)?;
3939
}
@@ -105,12 +105,18 @@ impl Encodable for MasternodeListEntry {
105105
let mut len = 0;
106106
len += self.version.consensus_encode(writer)?;
107107
len += self.pro_reg_tx_hash.consensus_encode(writer)?;
108-
len += self.confirmed_hash.unwrap_or_default().consensus_encode(writer)?;
108+
if let Some(confirmed_hash) = self.confirmed_hash {
109+
len += confirmed_hash.consensus_encode(writer)?;
110+
} else {
111+
len += [0; 32].consensus_encode(writer)?;
112+
}
109113
len += self.service_address.consensus_encode(writer)?;
110114
len += self.operator_public_key.consensus_encode(writer)?;
111115
len += self.key_id_voting.consensus_encode(writer)?;
112116
len += self.is_valid.consensus_encode(writer)?;
113-
len += self.mn_type.consensus_encode(writer)?;
117+
if self.version >= 2 {
118+
len += self.mn_type.consensus_encode(writer)?;
119+
}
114120
Ok(len)
115121
}
116122
}

0 commit comments

Comments
 (0)