From 5cf438a1ac2a5b3372cc97a2c12efdec25424bfa Mon Sep 17 00:00:00 2001 From: Cifko Date: Fri, 29 Dec 2023 09:46:37 +0100 Subject: [PATCH 1/5] feat: sign proposal --- .../tari_validator_node/src/consensus/spec.rs | 2 +- dan_layer/consensus/src/block_validations.rs | 24 +++++++++++++++++++ dan_layer/consensus/src/hotstuff/error.rs | 4 ++++ .../src/hotstuff/on_inbound_message.rs | 3 ++- .../consensus/src/hotstuff/on_propose.rs | 11 +++++++-- .../on_ready_to_vote_on_local_block.rs | 4 ++-- .../src/hotstuff/on_receive_local_proposal.rs | 2 +- .../consensus/src/hotstuff/vote_receiver.rs | 4 ++-- dan_layer/consensus/src/hotstuff/worker.rs | 5 ++-- dan_layer/consensus/src/traits/mod.rs | 2 +- dan_layer/consensus_tests/src/support/spec.rs | 2 +- .../up.sql | 1 + dan_layer/state_store_sqlite/src/schema.rs | 2 ++ .../src/sql_models/block.rs | 4 ++++ .../storage/src/consensus_models/block.rs | 19 ++++++++++++++- .../validator_node_rpc/proto/consensus.proto | 1 + .../src/conversions/common.rs | 4 ++-- .../src/conversions/consensus.rs | 4 +++- 18 files changed, 81 insertions(+), 17 deletions(-) diff --git a/applications/tari_validator_node/src/consensus/spec.rs b/applications/tari_validator_node/src/consensus/spec.rs index dda0f624f..330c7fd62 100644 --- a/applications/tari_validator_node/src/consensus/spec.rs +++ b/applications/tari_validator_node/src/consensus/spec.rs @@ -20,8 +20,8 @@ impl ConsensusSpec for TariConsensusSpec { type Addr = PeerAddress; type EpochManager = EpochManagerHandle; type LeaderStrategy = RoundRobinLeaderStrategy; + type SignatureService = TariSignatureService; type StateManager = TariStateManager; type StateStore = SqliteStateStore; type SyncManager = CommsRpcStateSyncManager; - type VoteSignatureService = TariSignatureService; } diff --git a/dan_layer/consensus/src/block_validations.rs b/dan_layer/consensus/src/block_validations.rs index 5bd33a2a5..1c8e45adb 100644 --- a/dan_layer/consensus/src/block_validations.rs +++ b/dan_layer/consensus/src/block_validations.rs @@ -42,6 +42,30 @@ pub fn check_proposed_by_leader Result<(), ProposalValidationError> { + if candidate_block.is_dummy() { + // Dummy blocks don't have signatures + return Ok(()); + } + if candidate_block.is_genesis() { + // Genesis block doesn't have signatures + return Ok(()); + } + let validator_signature = candidate_block + .get_signature() + .ok_or(ProposalValidationError::MissingSignature { + block_id: *candidate_block.id(), + height: candidate_block.height(), + })?; + if !validator_signature.verify(candidate_block.proposed_by(), candidate_block.id()) { + return Err(ProposalValidationError::InvalidSignature { + block_id: *candidate_block.id(), + height: candidate_block.height(), + }); + } + Ok(()) +} + pub fn check_quorum_certificate( _local_committee: &Committee, candidate_block: &Block, diff --git a/dan_layer/consensus/src/hotstuff/error.rs b/dan_layer/consensus/src/hotstuff/error.rs index 125efca14..8f2962d14 100644 --- a/dan_layer/consensus/src/hotstuff/error.rs +++ b/dan_layer/consensus/src/hotstuff/error.rs @@ -148,4 +148,8 @@ pub enum ProposalValidationError { }, #[error("Proposed block {block_id} {height} already has been processed")] BlockAlreadyProcessed { block_id: BlockId, height: NodeHeight }, + #[error("Proposed block {block_id} {height} doesn't have signature")] + MissingSignature { block_id: BlockId, height: NodeHeight }, + #[error("Proposed block {block_id} {height} has invalid signature")] + InvalidSignature { block_id: BlockId, height: NodeHeight }, } diff --git a/dan_layer/consensus/src/hotstuff/on_inbound_message.rs b/dan_layer/consensus/src/hotstuff/on_inbound_message.rs index a9a5123c2..b7ee7a9cf 100644 --- a/dan_layer/consensus/src/hotstuff/on_inbound_message.rs +++ b/dan_layer/consensus/src/hotstuff/on_inbound_message.rs @@ -19,7 +19,7 @@ use tari_transaction::TransactionId; use tokio::{sync::mpsc, time}; use crate::{ - block_validations::{check_hash_and_height, check_proposed_by_leader, check_quorum_certificate}, + block_validations::{check_hash_and_height, check_proposed_by_leader, check_quorum_certificate, check_signature}, hotstuff::{error::HotStuffError, pacemaker_handle::PaceMakerHandle}, messages::{HotstuffMessage, ProposalMessage, RequestMissingTransactionsMessage}, traits::ConsensusSpec, @@ -163,6 +163,7 @@ where TConsensusSpec: ConsensusSpec .get_committee_by_validator_public_key(block.epoch(), block.proposed_by()) .await?; check_proposed_by_leader(&self.leader_strategy, &committee_for_block, &block)?; + check_signature(&block)?; check_quorum_certificate(&committee_for_block, &block)?; let Some(ready_block) = self.handle_missing_transactions(block).await? else { diff --git a/dan_layer/consensus/src/hotstuff/on_propose.rs b/dan_layer/consensus/src/hotstuff/on_propose.rs index b38cd930a..f06dc2925 100644 --- a/dan_layer/consensus/src/hotstuff/on_propose.rs +++ b/dan_layer/consensus/src/hotstuff/on_propose.rs @@ -35,7 +35,7 @@ use super::common::CommitteeAndMessage; use crate::{ hotstuff::{common::EXHAUST_DIVISOR, error::HotStuffError, proposer}, messages::{HotstuffMessage, ProposalMessage}, - traits::ConsensusSpec, + traits::{ConsensusSpec, ValidatorSignatureService}, }; const LOG_TARGET: &str = "tari::dan::consensus::hotstuff::on_propose_locally"; @@ -44,6 +44,7 @@ pub struct OnPropose { store: TConsensusSpec::StateStore, epoch_manager: TConsensusSpec::EpochManager, transaction_pool: TransactionPool, + signing_service: TConsensusSpec::SignatureService, tx_broadcast: mpsc::Sender>, } @@ -54,12 +55,14 @@ where TConsensusSpec: ConsensusSpec store: TConsensusSpec::StateStore, epoch_manager: TConsensusSpec::EpochManager, transaction_pool: TransactionPool, + signing_service: TConsensusSpec::SignatureService, tx_broadcast: mpsc::Sender>, ) -> Self { Self { store, epoch_manager, transaction_pool, + signing_service, tx_broadcast, } } @@ -269,7 +272,7 @@ where TConsensusSpec: ConsensusSpec .map(|bucket| (*bucket, foreign_counters.increment_counter(*bucket))) .collect(); - let next_block = Block::new( + let mut next_block = Block::new( *parent_block.block_id(), high_qc, parent_block.height() + NodeHeight(1), @@ -278,8 +281,12 @@ where TConsensusSpec: ConsensusSpec commands, total_leader_fee, foreign_indexes, + None, ); + let signature = self.signing_service.sign(next_block.id()); + next_block.set_signature(signature); + Ok(next_block) } } diff --git a/dan_layer/consensus/src/hotstuff/on_ready_to_vote_on_local_block.rs b/dan_layer/consensus/src/hotstuff/on_ready_to_vote_on_local_block.rs index 206d6438c..e5cd0c132 100644 --- a/dan_layer/consensus/src/hotstuff/on_ready_to_vote_on_local_block.rs +++ b/dan_layer/consensus/src/hotstuff/on_ready_to_vote_on_local_block.rs @@ -52,7 +52,7 @@ pub struct OnReadyToVoteOnLocalBlock { validator_addr: TConsensusSpec::Addr, store: TConsensusSpec::StateStore, epoch_manager: TConsensusSpec::EpochManager, - vote_signing_service: TConsensusSpec::VoteSignatureService, + vote_signing_service: TConsensusSpec::SignatureService, leader_strategy: TConsensusSpec::LeaderStrategy, state_manager: TConsensusSpec::StateManager, transaction_pool: TransactionPool, @@ -68,7 +68,7 @@ where TConsensusSpec: ConsensusSpec validator_addr: TConsensusSpec::Addr, store: TConsensusSpec::StateStore, epoch_manager: TConsensusSpec::EpochManager, - vote_signing_service: TConsensusSpec::VoteSignatureService, + vote_signing_service: TConsensusSpec::SignatureService, leader_strategy: TConsensusSpec::LeaderStrategy, state_manager: TConsensusSpec::StateManager, transaction_pool: TransactionPool, diff --git a/dan_layer/consensus/src/hotstuff/on_receive_local_proposal.rs b/dan_layer/consensus/src/hotstuff/on_receive_local_proposal.rs index 571947b1d..7e6f03299 100644 --- a/dan_layer/consensus/src/hotstuff/on_receive_local_proposal.rs +++ b/dan_layer/consensus/src/hotstuff/on_receive_local_proposal.rs @@ -52,7 +52,7 @@ impl OnReceiveProposalHandler { leader_strategy: TConsensusSpec::LeaderStrategy, pacemaker: PaceMakerHandle, tx_leader: mpsc::Sender<(TConsensusSpec::Addr, HotstuffMessage)>, - vote_signing_service: TConsensusSpec::VoteSignatureService, + vote_signing_service: TConsensusSpec::SignatureService, state_manager: TConsensusSpec::StateManager, transaction_pool: TransactionPool, tx_events: broadcast::Sender, diff --git a/dan_layer/consensus/src/hotstuff/vote_receiver.rs b/dan_layer/consensus/src/hotstuff/vote_receiver.rs index 421cc1f90..b71c306e8 100644 --- a/dan_layer/consensus/src/hotstuff/vote_receiver.rs +++ b/dan_layer/consensus/src/hotstuff/vote_receiver.rs @@ -25,7 +25,7 @@ pub struct VoteReceiver { store: TConsensusSpec::StateStore, leader_strategy: TConsensusSpec::LeaderStrategy, epoch_manager: TConsensusSpec::EpochManager, - vote_signature_service: TConsensusSpec::VoteSignatureService, + vote_signature_service: TConsensusSpec::SignatureService, pacemaker: PaceMakerHandle, } @@ -36,7 +36,7 @@ where TConsensusSpec: ConsensusSpec store: TConsensusSpec::StateStore, leader_strategy: TConsensusSpec::LeaderStrategy, epoch_manager: TConsensusSpec::EpochManager, - vote_signature_service: TConsensusSpec::VoteSignatureService, + vote_signature_service: TConsensusSpec::SignatureService, pacemaker: PaceMakerHandle, ) -> Self { Self { diff --git a/dan_layer/consensus/src/hotstuff/worker.rs b/dan_layer/consensus/src/hotstuff/worker.rs index 4b46be945..42fdb4013 100644 --- a/dan_layer/consensus/src/hotstuff/worker.rs +++ b/dan_layer/consensus/src/hotstuff/worker.rs @@ -79,7 +79,7 @@ impl HotstuffWorker { state_store: TConsensusSpec::StateStore, epoch_manager: TConsensusSpec::EpochManager, leader_strategy: TConsensusSpec::LeaderStrategy, - signing_service: TConsensusSpec::VoteSignatureService, + signing_service: TConsensusSpec::SignatureService, state_manager: TConsensusSpec::StateManager, transaction_pool: TransactionPool, tx_broadcast: mpsc::Sender>, @@ -127,7 +127,7 @@ impl HotstuffWorker { leader_strategy.clone(), pacemaker.clone_handle(), tx_leader.clone(), - signing_service, + signing_service.clone(), state_manager, transaction_pool.clone(), tx_events, @@ -157,6 +157,7 @@ impl HotstuffWorker { state_store.clone(), epoch_manager.clone(), transaction_pool.clone(), + signing_service, tx_broadcast, ), diff --git a/dan_layer/consensus/src/traits/mod.rs b/dan_layer/consensus/src/traits/mod.rs index 47d3a4584..e50b10aec 100644 --- a/dan_layer/consensus/src/traits/mod.rs +++ b/dan_layer/consensus/src/traits/mod.rs @@ -21,7 +21,7 @@ pub trait ConsensusSpec: Send + Sync + Clone + 'static { type StateStore: StateStore + Send + Sync + Clone + 'static; type EpochManager: EpochManagerReader + Send + Sync + Clone + 'static; type LeaderStrategy: LeaderStrategy + Send + Sync + Clone + 'static; - type VoteSignatureService: VoteSignatureService + Send + Sync + Clone + 'static; + type SignatureService: VoteSignatureService + ValidatorSignatureService + Send + Sync + Clone + 'static; type StateManager: StateManager + Send + Sync + 'static; type SyncManager: SyncManager + Send + Sync + 'static; } diff --git a/dan_layer/consensus_tests/src/support/spec.rs b/dan_layer/consensus_tests/src/support/spec.rs index 23233e07b..e5c67f0d0 100644 --- a/dan_layer/consensus_tests/src/support/spec.rs +++ b/dan_layer/consensus_tests/src/support/spec.rs @@ -20,8 +20,8 @@ impl ConsensusSpec for TestConsensusSpec { type Addr = TestAddress; type EpochManager = TestEpochManager; type LeaderStrategy = RoundRobinLeaderStrategy; + type SignatureService = TestVoteSignatureService; type StateManager = NoopStateManager; type StateStore = SqliteStateStore; type SyncManager = AlwaysSyncedSyncManager; - type VoteSignatureService = TestVoteSignatureService; } diff --git a/dan_layer/state_store_sqlite/migrations/2023-06-08-091819_create_state_store/up.sql b/dan_layer/state_store_sqlite/migrations/2023-06-08-091819_create_state_store/up.sql index ebcd158b5..1b748ebad 100644 --- a/dan_layer/state_store_sqlite/migrations/2023-06-08-091819_create_state_store/up.sql +++ b/dan_layer/state_store_sqlite/migrations/2023-06-08-091819_create_state_store/up.sql @@ -26,6 +26,7 @@ create table blocks is_processed boolean not NULL, is_dummy boolean not NULL, foreign_indexes text not NULL, + signature text NULL, created_at timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, FOREIGN KEY (qc_id) REFERENCES quorum_certificates (qc_id) ); diff --git a/dan_layer/state_store_sqlite/src/schema.rs b/dan_layer/state_store_sqlite/src/schema.rs index 9c2018717..85be33f52 100644 --- a/dan_layer/state_store_sqlite/src/schema.rs +++ b/dan_layer/state_store_sqlite/src/schema.rs @@ -16,6 +16,7 @@ diesel::table! { is_processed -> Bool, is_dummy -> Bool, foreign_indexes -> Text, + signature -> Nullable, created_at -> Timestamp, } } @@ -149,6 +150,7 @@ diesel::table! { commands -> Text, total_leader_fee -> BigInt, foreign_indexes -> Text, + signature -> Nullable, created_at -> Timestamp, } } diff --git a/dan_layer/state_store_sqlite/src/sql_models/block.rs b/dan_layer/state_store_sqlite/src/sql_models/block.rs index 5196b5f08..477d85e16 100644 --- a/dan_layer/state_store_sqlite/src/sql_models/block.rs +++ b/dan_layer/state_store_sqlite/src/sql_models/block.rs @@ -30,6 +30,7 @@ pub struct Block { pub is_processed: bool, pub is_dummy: bool, pub foreign_indexes: String, + pub signature: Option, pub created_at: PrimitiveDateTime, } @@ -54,6 +55,7 @@ impl Block { self.is_processed, self.is_committed, deserialize_json(&self.foreign_indexes)?, + self.signature.map(|val| deserialize_json(&val)).transpose()?, self.created_at, )) } @@ -72,6 +74,7 @@ pub struct ParkedBlock { pub commands: String, pub total_leader_fee: i64, pub foreign_indexes: String, + pub signature: Option, pub created_at: PrimitiveDateTime, } @@ -98,6 +101,7 @@ impl TryFrom for consensus_models::Block { false, false, deserialize_json(&value.foreign_indexes)?, + value.signature.map(|val| deserialize_json(&val)).transpose()?, value.created_at, )) } diff --git a/dan_layer/storage/src/consensus_models/block.rs b/dan_layer/storage/src/consensus_models/block.rs index fd6ce508e..f30c4c97b 100644 --- a/dan_layer/storage/src/consensus_models/block.rs +++ b/dan_layer/storage/src/consensus_models/block.rs @@ -23,7 +23,7 @@ use tari_dan_common_types::{ use tari_transaction::TransactionId; use time::PrimitiveDateTime; -use super::{ForeignProposal, QuorumCertificate}; +use super::{ForeignProposal, QuorumCertificate, ValidatorSchnorrSignature}; use crate::{ consensus_models::{ Command, @@ -72,6 +72,8 @@ pub struct Block { foreign_indexes: HashMap, /// Timestamp when was this stored. stored_at: Option, + /// Signature of block by the proposer. + signature: Option, } impl Block { @@ -84,6 +86,7 @@ impl Block { commands: BTreeSet, total_leader_fee: u64, foreign_indexes: HashMap, + signature: Option, ) -> Self { let mut block = Self { id: BlockId::genesis(), @@ -101,6 +104,7 @@ impl Block { is_committed: false, foreign_indexes, stored_at: None, + signature, }; block.id = block.calculate_hash().into(); block @@ -119,6 +123,7 @@ impl Block { is_processed: bool, is_committed: bool, foreign_indexes: HashMap, + signature: Option, created_at: PrimitiveDateTime, ) -> Self { Self { @@ -137,6 +142,7 @@ impl Block { is_committed, foreign_indexes, stored_at: Some(created_at), + signature, } } @@ -150,6 +156,7 @@ impl Block { Default::default(), 0, HashMap::new(), + None, ) } @@ -170,6 +177,7 @@ impl Block { is_committed: true, foreign_indexes: HashMap::new(), stored_at: None, + signature: None, } } @@ -189,6 +197,7 @@ impl Block { Default::default(), 0, HashMap::new(), + None, ); block.is_dummy = true; block.is_processed = false; @@ -326,6 +335,14 @@ impl Block { pub fn get_foreign_indexes(&self) -> &HashMap { &self.foreign_indexes } + + pub fn get_signature(&self) -> Option<&ValidatorSchnorrSignature> { + self.signature.as_ref() + } + + pub fn set_signature(&mut self, signature: ValidatorSchnorrSignature) { + self.signature = Some(signature); + } } impl Block { diff --git a/dan_layer/validator_node_rpc/proto/consensus.proto b/dan_layer/validator_node_rpc/proto/consensus.proto index 4117414fb..f58384c1f 100644 --- a/dan_layer/validator_node_rpc/proto/consensus.proto +++ b/dan_layer/validator_node_rpc/proto/consensus.proto @@ -50,6 +50,7 @@ message Block { repeated Command commands = 8; uint64 total_leader_fee = 9; bytes foreign_indexes = 10; + tari.dan.common.Signature signature = 11; } message Command { diff --git a/dan_layer/validator_node_rpc/src/conversions/common.rs b/dan_layer/validator_node_rpc/src/conversions/common.rs index c7aab375a..92edce98c 100644 --- a/dan_layer/validator_node_rpc/src/conversions/common.rs +++ b/dan_layer/validator_node_rpc/src/conversions/common.rs @@ -43,8 +43,8 @@ impl TryFrom for SchnorrSignature } } -impl From> for proto::common::Signature { - fn from(sig: SchnorrSignature) -> Self { +impl From<&SchnorrSignature> for proto::common::Signature { + fn from(sig: &SchnorrSignature) -> Self { Self { public_nonce: sig.get_public_nonce().to_vec(), signature: sig.get_signature().to_vec(), diff --git a/dan_layer/validator_node_rpc/src/conversions/consensus.rs b/dan_layer/validator_node_rpc/src/conversions/consensus.rs index cbd9a8b85..3301ce757 100644 --- a/dan_layer/validator_node_rpc/src/conversions/consensus.rs +++ b/dan_layer/validator_node_rpc/src/conversions/consensus.rs @@ -259,6 +259,7 @@ impl From<&tari_dan_storage::consensus_models::Block> for proto::consensus::Bloc total_leader_fee: value.total_leader_fee(), commands: value.commands().iter().map(Into::into).collect(), foreign_indexes: encode(value.get_foreign_indexes()).unwrap(), + signature: value.get_signature().map(Into::into), } } } @@ -284,6 +285,7 @@ impl TryFrom for tari_dan_storage::consensus_models::Bl .collect::>()?, value.total_leader_fee, decode_exact(&value.foreign_indexes)?, + value.signature.map(TryInto::try_into).transpose()?, )) } } @@ -505,7 +507,7 @@ impl From for proto::consensus::ValidatorMetadata { Self { public_key: msg.public_key.to_vec(), vn_shard_key: msg.vn_shard_key.as_bytes().to_vec(), - signature: Some(msg.signature.into()), + signature: Some((&msg.signature).into()), } } } From 7e79236f8360fbef7c2bd1515cf17c5f2f2e4abd Mon Sep 17 00:00:00 2001 From: Cifko Date: Tue, 2 Jan 2024 10:09:57 +0100 Subject: [PATCH 2/5] fix --- dan_layer/state_store_sqlite/tests/tests.rs | 1 + 1 file changed, 1 insertion(+) diff --git a/dan_layer/state_store_sqlite/tests/tests.rs b/dan_layer/state_store_sqlite/tests/tests.rs index 4573adb7d..83ec4a553 100644 --- a/dan_layer/state_store_sqlite/tests/tests.rs +++ b/dan_layer/state_store_sqlite/tests/tests.rs @@ -58,6 +58,7 @@ mod confirm_all_transitions { [Command::Prepare(atom1.clone())].into_iter().collect(), Default::default(), HashMap::new(), + None, ); block1.insert(&mut tx).unwrap(); From 6eefeada60e4eba2a158fbbaa62246ee764786ff Mon Sep 17 00:00:00 2001 From: Cifko Date: Tue, 2 Jan 2024 11:48:17 +0100 Subject: [PATCH 3/5] add real private key to test signature service --- dan_layer/consensus/src/hotstuff/on_propose.rs | 2 -- .../consensus_tests/src/support/signing_service.rs | 10 +++++++--- .../consensus_tests/src/support/validator/builder.rs | 2 +- 3 files changed, 8 insertions(+), 6 deletions(-) diff --git a/dan_layer/consensus/src/hotstuff/on_propose.rs b/dan_layer/consensus/src/hotstuff/on_propose.rs index f06dc2925..b94ed3f7c 100644 --- a/dan_layer/consensus/src/hotstuff/on_propose.rs +++ b/dan_layer/consensus/src/hotstuff/on_propose.rs @@ -265,8 +265,6 @@ where TConsensusSpec: ConsensusSpec local_committee_shard.bucket(), )?; - // let mut foreign_indexes = HashMap::new(); - let foreign_indexes = non_local_buckets .iter() .map(|bucket| (*bucket, foreign_counters.increment_counter(*bucket))) diff --git a/dan_layer/consensus_tests/src/support/signing_service.rs b/dan_layer/consensus_tests/src/support/signing_service.rs index ace406f20..33f1f4849 100644 --- a/dan_layer/consensus_tests/src/support/signing_service.rs +++ b/dan_layer/consensus_tests/src/support/signing_service.rs @@ -4,9 +4,11 @@ use rand::rngs::OsRng; use tari_common_types::types::{FixedHash, PrivateKey, PublicKey}; use tari_consensus::traits::{ValidatorSignatureService, VoteSignatureService}; -use tari_crypto::keys::PublicKey as _; +use tari_crypto::keys::{PublicKey as _, SecretKey}; use tari_dan_storage::consensus_models::{BlockId, QuorumDecision, ValidatorSchnorrSignature, ValidatorSignature}; +use super::TestAddress; + #[derive(Debug, Clone)] pub struct TestVoteSignatureService { pub public_key: PublicKey, @@ -15,8 +17,10 @@ pub struct TestVoteSignatureService { } impl TestVoteSignatureService { - pub fn new(public_key: PublicKey) -> Self { - let (secret_key, _public_key) = PublicKey::random_keypair(&mut OsRng); + pub fn new(public_key: PublicKey, addr: TestAddress) -> Self { + let mut bytes = [0u8; 64]; + bytes[0..addr.0.as_bytes().len()].copy_from_slice(addr.0.as_bytes()); + let secret_key = PrivateKey::from_uniform_bytes(&bytes).unwrap(); Self { public_key, secret_key, diff --git a/dan_layer/consensus_tests/src/support/validator/builder.rs b/dan_layer/consensus_tests/src/support/validator/builder.rs index 1dfb6814f..df00bf566 100644 --- a/dan_layer/consensus_tests/src/support/validator/builder.rs +++ b/dan_layer/consensus_tests/src/support/validator/builder.rs @@ -83,7 +83,7 @@ impl ValidatorBuilder { let (tx_mempool, rx_mempool) = mpsc::unbounded_channel(); let store = SqliteStateStore::connect(&self.sql_url).unwrap(); - let signing_service = TestVoteSignatureService::new(self.public_key.clone()); + let signing_service = TestVoteSignatureService::new(self.public_key.clone(), self.address.clone()); let transaction_pool = TransactionPool::new(); let noop_state_manager = NoopStateManager::new(); let (tx_events, _) = broadcast::channel(100); From d794cbdbff5e68b34115849366d3b1f1d4afaffa Mon Sep 17 00:00:00 2001 From: Cifko Date: Tue, 2 Jan 2024 11:50:28 +0100 Subject: [PATCH 4/5] fix clippy --- dan_layer/consensus_tests/src/support/signing_service.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dan_layer/consensus_tests/src/support/signing_service.rs b/dan_layer/consensus_tests/src/support/signing_service.rs index 33f1f4849..e5df6cca2 100644 --- a/dan_layer/consensus_tests/src/support/signing_service.rs +++ b/dan_layer/consensus_tests/src/support/signing_service.rs @@ -4,7 +4,7 @@ use rand::rngs::OsRng; use tari_common_types::types::{FixedHash, PrivateKey, PublicKey}; use tari_consensus::traits::{ValidatorSignatureService, VoteSignatureService}; -use tari_crypto::keys::{PublicKey as _, SecretKey}; +use tari_crypto::keys::SecretKey; use tari_dan_storage::consensus_models::{BlockId, QuorumDecision, ValidatorSchnorrSignature, ValidatorSignature}; use super::TestAddress; From 7fbad8ef19e5b067bf3c2eadba7892264cd0e8a7 Mon Sep 17 00:00:00 2001 From: Cifko Date: Tue, 2 Jan 2024 12:36:16 +0100 Subject: [PATCH 5/5] add signature column to parked_blocks table --- .../migrations/2023-06-08-091819_create_state_store/up.sql | 1 + 1 file changed, 1 insertion(+) diff --git a/dan_layer/state_store_sqlite/migrations/2023-06-08-091819_create_state_store/up.sql b/dan_layer/state_store_sqlite/migrations/2023-06-08-091819_create_state_store/up.sql index 1b748ebad..5ad1da27c 100644 --- a/dan_layer/state_store_sqlite/migrations/2023-06-08-091819_create_state_store/up.sql +++ b/dan_layer/state_store_sqlite/migrations/2023-06-08-091819_create_state_store/up.sql @@ -47,6 +47,7 @@ create table parked_blocks commands text not NULL, total_leader_fee bigint not NULL, foreign_indexes text not NULL, + signature text NULL, created_at timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP );