Skip to content

Commit 0d84f8e

Browse files
feat: instant send and chain lock verification with improved quorum in lists verification (#56)
* backwards validation * backwards validation * backwards validation * rename * fix * fix * better validation * better validation * also get chain locks * also get chain locks * more work * verify is lock * verify is lock * more work * more work * working * clean up * clean up * clean up * more fixes * fmt * Update dash/src/sml/masternode_list_engine/helpers.rs Co-authored-by: Ivan Shumkov <ivan@shumkov.ru> * fixes * fixes * fixes --------- Co-authored-by: Ivan Shumkov <ivan@shumkov.ru>
1 parent a457fea commit 0d84f8e

File tree

28 files changed

+1258
-316
lines changed

28 files changed

+1258
-316
lines changed

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

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -34,11 +34,12 @@
3434
//! KeyIdVoting (renamed to voting_key_hash): This is the public key ID used for proposal voting.
3535
//! Votes signed with this key are valid while the masternode is in the registered set.
3636
37+
use std::net::SocketAddr;
38+
3739
#[cfg(feature = "bincode")]
3840
use bincode::{Decode, Encode};
3941
use hashes::Hash;
4042
use internals::hex::Case::Lower;
41-
use std::net::SocketAddr;
4243

4344
use crate::address::Payload;
4445
use crate::blockdata::transaction::special_transaction::SpecialTransactionBasePayloadEncodable;
@@ -257,10 +258,10 @@ impl Decodable for ProviderRegistrationPayload {
257258

258259
#[cfg(test)]
259260
mod tests {
260-
use hashes::Hash;
261-
use hashes::hex::FromHex;
262261
use std::net::{Ipv4Addr, SocketAddr, SocketAddrV4};
263262

263+
use hashes::Hash;
264+
264265
use crate::bls_sig_utils::BLSPublicKey;
265266
use crate::consensus::{Encodable, deserialize};
266267
use crate::hash_types::InputsHash;
@@ -272,10 +273,11 @@ mod tests {
272273

273274
#[cfg(feature = "signer")]
274275
mod signer {
276+
use internals::hex::display::DisplayHex;
277+
275278
use super::*;
276279
use crate::Network;
277280
use crate::transaction::special_transaction::SpecialTransactionBasePayloadEncodable;
278-
use internals::hex::display::DisplayHex;
279281

280282
#[test]
281283
fn test_collateral_provider_registration_transaction() {

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

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -218,7 +218,6 @@ mod tests {
218218
use crate::consensus::{Encodable, deserialize, serialize};
219219
use crate::hash_types::{QuorumHash, QuorumVVecHash};
220220
use crate::network::message::{NetworkMessage, RawNetworkMessage};
221-
use crate::network::message_sml::MnListDiff;
222221
use crate::sml::llmq_type::LLMQType;
223222
use crate::transaction::special_transaction::quorum_commitment::{
224223
QuorumCommitmentPayload, QuorumEntry,

dash/src/ephemerealdata/chain_lock.rs

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,8 +13,10 @@ use hashes::{Hash, HashEngine};
1313

1414
use crate::bls_sig_utils::BLSSignature;
1515
use crate::consensus::Encodable;
16+
use crate::hash_types::QuorumSigningSignId;
1617
use crate::internal_macros::impl_consensus_encoding;
17-
use crate::{BlockHash, QuorumSigningRequestId, VarInt, io};
18+
use crate::sml::llmq_type::LLMQType;
19+
use crate::{BlockHash, QuorumHash, QuorumSigningRequestId, VarInt, io};
1820

1921
const CL_REQUEST_ID_PREFIX: &str = "clsig";
2022

@@ -50,6 +52,22 @@ impl ChainLock {
5052

5153
Ok(QuorumSigningRequestId::from_engine(engine))
5254
}
55+
56+
pub fn sign_id(
57+
&self,
58+
quorum_type: LLMQType,
59+
quorum_hash: QuorumHash,
60+
precomputed_request_id: Option<QuorumSigningRequestId>,
61+
) -> Result<QuorumSigningSignId, io::Error> {
62+
let mut engine = QuorumSigningSignId::engine();
63+
64+
engine.input(&[quorum_type as u8]);
65+
engine.input(quorum_hash.as_byte_array());
66+
engine.input(precomputed_request_id.unwrap_or(self.request_id()?).as_byte_array());
67+
engine.input(self.block_hash.as_byte_array());
68+
69+
Ok(QuorumSigningSignId::from_engine(engine))
70+
}
5371
}
5472

5573
#[cfg(test)]

dash/src/ephemerealdata/instant_lock.rs

Lines changed: 20 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,9 +12,10 @@ use hashes::{Hash, HashEngine};
1212

1313
use crate::bls_sig_utils::BLSSignature;
1414
use crate::consensus::Encodable;
15-
use crate::hash_types::{CycleHash, QuorumSigningRequestId};
15+
use crate::hash_types::{CycleHash, QuorumSigningRequestId, QuorumSigningSignId};
1616
use crate::internal_macros::impl_consensus_encoding;
17-
use crate::{OutPoint, Txid, VarInt, io};
17+
use crate::sml::llmq_type::LLMQType;
18+
use crate::{OutPoint, QuorumHash, Txid, VarInt, io};
1819

1920
const IS_LOCK_REQUEST_ID_PREFIX: &str = "islock";
2021

@@ -71,6 +72,23 @@ impl InstantLock {
7172

7273
Ok(QuorumSigningRequestId::from_engine(engine))
7374
}
75+
76+
/// Returns the sign id
77+
pub fn sign_id(
78+
&self,
79+
quorum_type: LLMQType,
80+
quorum_hash: QuorumHash,
81+
precomputed_request_id: Option<QuorumSigningRequestId>,
82+
) -> Result<QuorumSigningSignId, io::Error> {
83+
let mut engine = QuorumSigningSignId::engine();
84+
85+
engine.input(&[quorum_type as u8]);
86+
engine.input(quorum_hash.as_byte_array());
87+
engine.input(precomputed_request_id.unwrap_or(self.request_id()?).as_byte_array());
88+
engine.input(self.txid.as_byte_array());
89+
90+
Ok(QuorumSigningSignId::from_engine(engine))
91+
}
7492
}
7593

7694
impl Debug for InstantLock {

0 commit comments

Comments
 (0)