Skip to content

Commit b421f80

Browse files
bincode serialization
1 parent 7d56b83 commit b421f80

File tree

3 files changed

+26
-8
lines changed

3 files changed

+26
-8
lines changed
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
use crate::sml::masternode_list_entry::MasternodeListEntry;
2+
3+
impl MasternodeListEntry {
4+
pub fn use_legacy_bls_keys(&self) -> bool {
5+
// Only version 1 used legacy bls keys
6+
self.version == 1
7+
}
8+
}

dash/src/sml/masternode_list_entry/mod.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
mod hash;
22
pub mod qualified_masternode_list_entry;
33
mod score;
4+
mod helpers;
45

56
use std::collections::BTreeMap;
67
use std::io::{Read, Write};

dash/src/sml/quorum_entry/validation.rs

Lines changed: 17 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
use std::collections::{BTreeMap, BTreeSet};
2-
use bls_signatures::{BasicSchemeMPL, G1Element, G2Element, Scheme};
2+
use bls_signatures::{BasicSchemeMPL, BlsError, G1Element, G2Element, Scheme};
33
use blsful::{Bls12381G2Impl, MultiPublicKey, MultiSignature};
44
use hashes::Hash;
55
use crate::bls_sig_utils::BLSPublicKey;
@@ -10,15 +10,28 @@ use crate::sml::quorum_validation_error::QuorumValidationError;
1010
impl QualifiedQuorumEntry {
1111
pub fn verify_aggregated_commitment_signature<'a, I>(&self, operator_keys: I) -> Result<(), QuorumValidationError>
1212
where
13-
I: IntoIterator<Item = &'a BLSPublicKey>,
13+
I: IntoIterator<Item = &'a MasternodeListEntry>,
1414
{
1515
let mut message = self.commitment_hash.to_byte_array();
1616
// println!("quorum {}", self.quorum_entry.quorum_hash);
1717
println!("using message {}", hex::encode(message));
1818
let message = message.as_slice();
1919
let public_keys2 = operator_keys
2020
.into_iter()
21-
.filter_map(|key| G1Element::from_bytes(key.as_ref()).ok())
21+
.filter_map(|masternode_list_entry| {
22+
let result = if masternode_list_entry.use_legacy_bls_keys() {
23+
G1Element::from_bytes_legacy(masternode_list_entry.operator_public_key.as_ref())
24+
} else {
25+
G1Element::from_bytes(masternode_list_entry.operator_public_key.as_ref())
26+
};
27+
match result {
28+
Ok(public_key) => Some(public_key),
29+
Err(e) => {
30+
println!("error {} with key for masternode {}", e, masternode_list_entry.pro_reg_tx_hash);
31+
None
32+
}
33+
}
34+
})
2235
.collect::<Vec<_>>();
2336
let sig = G2Element::from_bytes(self.quorum_entry.all_commitment_aggregated_signature.as_bytes()).expect("expected sig");
2437
let verified = BasicSchemeMPL::new().verify_secure(public_keys2.iter(), message, &sig);
@@ -52,11 +65,7 @@ impl QualifiedQuorumEntry {
5265
where
5366
I: IntoIterator<Item = &'a MasternodeListEntry>,
5467
{
55-
let operator_keys = valid_masternodes
56-
.into_iter()
57-
.map(|node| &node.operator_public_key);
58-
59-
self.verify_aggregated_commitment_signature(operator_keys)?;
68+
self.verify_aggregated_commitment_signature(valid_masternodes)?;
6069
self.verify_quorum_signature()?;
6170

6271
Ok(())

0 commit comments

Comments
 (0)