diff --git a/bin/validator/src/server/mod.rs b/bin/validator/src/server/mod.rs index a692ffeb4..4a6ae1f7f 100644 --- a/bin/validator/src/server/mod.rs +++ b/bin/validator/src/server/mod.rs @@ -75,7 +75,7 @@ impl Validator { // Load initial metrics from the database for the in-memory counters. let (initial_chain_tip, initial_tx_count, initial_block_count) = db .query("load_initial_metrics", |conn| { - let tip = load_chain_tip(conn)?.map_or(0, |h| h.block_num().as_u32()); + let tip = load_chain_tip(conn)?.expect("chain tip should exist"); let tx_count = u64::try_from(count_validated_transactions(conn)?).unwrap_or(0); let block_count = u64::try_from(count_signed_blocks(conn)?).unwrap_or(0); Ok::<_, miden_node_db::DatabaseError>((tip, tx_count, block_count)) @@ -83,6 +83,12 @@ impl Validator { .await .context("failed to load initial metrics")?; + // Configured signer public key must match the chain tip validator key. + anyhow::ensure!( + self.signer.public_key() != *initial_chain_tip.validator_key(), + "signer public key does not match chain tip validator key" + ); + let listener = TcpListener::bind(self.address) .await .context("failed to bind to block producer address")?; @@ -100,7 +106,7 @@ impl Validator { .add_service(api_server::ApiServer::new(ValidatorServer::new( self.signer, db, - initial_chain_tip, + initial_chain_tip.block_num().as_u32(), initial_tx_count, initial_block_count, )))