Skip to content

Commit d59fac4

Browse files
bincode serialization
1 parent 5c4b87e commit d59fac4

File tree

3 files changed

+56
-19
lines changed

3 files changed

+56
-19
lines changed

dash/src/sml/masternode_list_engine/mod.rs

Lines changed: 32 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -196,19 +196,47 @@ mod tests {
196196
}
197197

198198
#[test]
199-
fn deserialize_mn_list_engine_and_validate_single_quorum() {
199+
fn deserialize_mn_list_engine_and_validate_single_quorum_all_signed_all_members_valid() {
200200
let block_hex = include_str!("../../../tests/data/test_DML_diffs/masternode_list_engine.hex");
201201
let data = hex::decode(block_hex).expect("decode hex");
202202
let mn_list_engine: MasternodeListEngine = bincode::decode_from_slice(&data, bincode::config::standard()).expect("expected to decode").0;
203203

204-
assert_eq!(mn_list_engine.masternode_lists.len(), 27);
205-
206204
let last_masternode_list_height = *mn_list_engine.masternode_lists.last_key_value().unwrap().0;
207205

208206
let last_masternode_list = mn_list_engine.masternode_lists.last_key_value().unwrap().1;
209207

210208
let quorum = last_masternode_list.quorum_entry_of_type_for_quorum_hash(Llmqtype100_67, QuorumHash::from_str("000000000000001d4ebc43dbf9b25d2af6421641a84a1e04dd58f65d07b7ecf7").expect("expected to get quorum hash")).expect("expected to find quorum");
211209

212-
println!("using {:?}", mn_list_engine.validate_quorum(quorum))
210+
assert_eq!(mn_list_engine.validate_quorum(quorum), Ok(()));
211+
}
212+
213+
#[test]
214+
fn deserialize_mn_list_engine_and_validate_single_quorum_one_didnt_sign_all_members_valid() {
215+
let block_hex = include_str!("../../../tests/data/test_DML_diffs/masternode_list_engine.hex");
216+
let data = hex::decode(block_hex).expect("decode hex");
217+
let mn_list_engine: MasternodeListEngine = bincode::decode_from_slice(&data, bincode::config::standard()).expect("expected to decode").0;
218+
219+
let last_masternode_list_height = *mn_list_engine.masternode_lists.last_key_value().unwrap().0;
220+
221+
let last_masternode_list = mn_list_engine.masternode_lists.last_key_value().unwrap().1;
222+
223+
let quorum = last_masternode_list.quorum_entry_of_type_for_quorum_hash(Llmqtype100_67, QuorumHash::from_str("0000000000000003e463cb405c672f2daaacf461fe733c33d5de8298ae6040a2").expect("expected to get quorum hash")).expect("expected to find quorum");
224+
225+
assert_eq!(mn_list_engine.validate_quorum(quorum), Ok(()));
226+
}
227+
228+
#[test]
229+
fn deserialize_mn_list_engine_and_validate_single_quorum_one_didnt_sign_one_member_not_valid_valid() {
230+
let block_hex = include_str!("../../../tests/data/test_DML_diffs/masternode_list_engine.hex");
231+
let data = hex::decode(block_hex).expect("decode hex");
232+
let mn_list_engine: MasternodeListEngine = bincode::decode_from_slice(&data, bincode::config::standard()).expect("expected to decode").0;
233+
234+
let last_masternode_list_height = *mn_list_engine.masternode_lists.last_key_value().unwrap().0;
235+
236+
let last_masternode_list = mn_list_engine.masternode_lists.last_key_value().unwrap().1;
237+
238+
let quorum = last_masternode_list.quorum_entry_of_type_for_quorum_hash(Llmqtype100_67, QuorumHash::from_str("0000000000000009d64e57a20b56af7fe8cf8cdff1eea78fdf30ef8429c35d43").expect("expected to get quorum hash")).expect("expected to find quorum");
239+
240+
assert_eq!(mn_list_engine.validate_quorum(quorum), Ok(()));
213241
}
214242
}

dash/src/sml/masternode_list_engine/validation.rs

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,18 @@ impl MasternodeListEngine {
6363
let (masternode_list, known_block_height) = self.masternode_list_and_height_for_block_hash_8_blocks_ago(&llmq_block_hash)?;
6464
let quorum_modifier_type = LLMQModifierType::new_quorum_modifier_type(quorum.quorum_entry.llmq_type, masternode_list.block_hash, known_block_height, &self.known_chain_locks, self.network)?;
6565
let masternodes : Vec<_> = masternode_list.valid_masternodes_for_quorum(quorum, quorum_modifier_type, self.network);
66-
quorum.validate(masternodes.iter().map(|qualified_masternode_list_entry| &qualified_masternode_list_entry.masternode_list_entry))
66+
quorum.validate(masternodes.iter().enumerate().filter_map(|(i, qualified_masternode_list_entry)| {
67+
if *quorum.quorum_entry.signers.get(i)? {
68+
if *quorum.quorum_entry.valid_members.get(i)? {
69+
Some(&qualified_masternode_list_entry.masternode_list_entry)
70+
} else {
71+
println!("{} ({}) isn't a valid member", qualified_masternode_list_entry.masternode_list_entry.pro_reg_tx_hash, qualified_masternode_list_entry.masternode_list_entry.pro_reg_tx_hash.reverse());
72+
None
73+
}
74+
} else {
75+
println!("{} ({}) didn't sign", qualified_masternode_list_entry.masternode_list_entry.pro_reg_tx_hash, qualified_masternode_list_entry.masternode_list_entry.pro_reg_tx_hash.reverse());
76+
None
77+
}
78+
}))
6779
}
6880
}

dash/src/sml/quorum_entry/validation.rs

Lines changed: 11 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
use std::collections::{BTreeMap, BTreeSet};
12
use bls_signatures::{BasicSchemeMPL, G1Element, G2Element, Scheme};
23
use blsful::{Bls12381G2Impl, MultiPublicKey, MultiSignature};
34
use hashes::Hash;
@@ -15,13 +16,6 @@ impl QualifiedQuorumEntry {
1516
// println!("quorum {}", self.quorum_entry.quorum_hash);
1617
println!("using message {}", hex::encode(message));
1718
let message = message.as_slice();
18-
// let public_keys : Vec<(blsful::PublicKey<Bls12381G2Impl>)> = operator_keys
19-
// .into_iter().enumerate()
20-
// .map(|(i, key)| {
21-
// println!("using operator key {}. {}", i, key);
22-
// key.try_into()
23-
// })
24-
// .collect::<Result<Vec<(blsful::PublicKey<Bls12381G2Impl>)>, QuorumValidationError>>()?;
2519
let public_keys2 = operator_keys
2620
.into_iter()
2721
.filter_map(|key| G1Element::from_bytes(key.as_ref()).ok())
@@ -33,8 +27,17 @@ impl QualifiedQuorumEntry {
3327
} else {
3428
Err(QuorumValidationError::AllCommitmentAggregatedSignatureNotValid("signature is not valid for keys and message".to_string()))
3529
}
30+
// let public_keys : Vec<(blsful::PublicKey<Bls12381G2Impl>)> = operator_keys
31+
// .into_iter().enumerate()
32+
// .map(|(i, key)| {
33+
// println!("{},", key);
34+
// key.try_into()
35+
// })
36+
// .collect::<Result<Vec<(blsful::PublicKey<Bls12381G2Impl>)>, QuorumValidationError>>()?;
3637
// let signature: MultiSignature<Bls12381G2Impl> = self.quorum_entry.all_commitment_aggregated_signature.try_into()?;
3738
// let multi_public_key = MultiPublicKey::<Bls12381G2Impl>::from_public_keys(public_keys);
39+
//
40+
// println!("{} serialized {}", multi_public_key.0, hex::encode(multi_public_key.0.to_compressed()));
3841
// signature.verify(multi_public_key, message).map_err(|e| QuorumValidationError::AllCommitmentAggregatedSignatureNotValid(e.to_string()))
3942
}
4043

@@ -51,13 +54,7 @@ impl QualifiedQuorumEntry {
5154
{
5255
let operator_keys = valid_masternodes
5356
.into_iter()
54-
.filter_map(|node| {
55-
if !node.is_valid {
56-
None
57-
} else {
58-
Some(&node.operator_public_key)
59-
}
60-
});
57+
.map(|node| &node.operator_public_key);
6158

6259
self.verify_aggregated_commitment_signature(operator_keys)?;
6360
self.verify_quorum_signature()?;

0 commit comments

Comments
 (0)