diff --git a/node/src/block_producer/block_producer_reducer.rs b/node/src/block_producer/block_producer_reducer.rs index a402599339..b493b02131 100644 --- a/node/src/block_producer/block_producer_reducer.rs +++ b/node/src/block_producer/block_producer_reducer.rs @@ -379,21 +379,16 @@ impl BlockProducerEnabled { consensus_state, }, }; - let body_hash = protocol_state.body.hash(); - let hash = StateHash::from_hashes(&protocol_state.previous_state_hash, &body_hash); - // TODO(binier): test let chain_proof_len = pred_block.constants().delta.as_u32() as usize; let delta_block_chain_proof = match chain_proof_len { - 0 => (hash.clone(), List::new()), + 0 => (pred_block.hash().clone(), List::new()), chain_proof_len => { - let mut iter = chain.iter().rev().take(chain_proof_len).rev(); - let first_hash = iter - .next() - .map_or_else(|| hash.clone(), |b| b.hash().clone()); + // TODO(binier): test + let mut iter = chain.iter().rev().take(chain_proof_len + 1).rev(); + let first_hash = iter.next().unwrap().hash().clone(); let body_hashes = iter .map(|b| b.header().protocol_state.body.hash()) - .chain(std::iter::once(body_hash)) .map(StateBodyHash::from) .collect(); (first_hash, body_hashes) @@ -409,6 +404,7 @@ impl BlockProducerEnabled { staged_ledger_diff: diff.clone(), }, }; + let block_hash = block.protocol_state.hash(); self.current = BlockProducerCurrentState::BlockUnprovenBuilt { time: meta.time(), @@ -419,7 +415,7 @@ impl BlockProducerEnabled { pending_coinbase_witness, stake_proof_sparse_ledger, block, - block_hash: hash, + block_hash, } } BlockProducerAction::BlockProveInit => {} diff --git a/node/src/consensus/consensus_effects.rs b/node/src/consensus/consensus_effects.rs index 046b1eef10..ede3e5328c 100644 --- a/node/src/consensus/consensus_effects.rs +++ b/node/src/consensus/consensus_effects.rs @@ -68,7 +68,9 @@ fn transition_frontier_new_best_tip(store: &mut Store) { let old_best_tip = state.transition_frontier.best_tip()?; let mut iter = state.transition_frontier.best_chain.iter(); if old_best_tip.hash() == pred_hash { - iter.next(); + if old_best_tip.height() > old_best_tip.constants().k.as_u32() { + iter.next(); + } let root_block = iter.next()?.clone(); let hashes = iter.map(|b| b.hash.clone()).collect(); Some((hashes, root_block)) diff --git a/p2p/src/connection/outgoing/p2p_connection_outgoing_effects.rs b/p2p/src/connection/outgoing/p2p_connection_outgoing_effects.rs index efe0ad9fd9..02c2fafe0f 100644 --- a/p2p/src/connection/outgoing/p2p_connection_outgoing_effects.rs +++ b/p2p/src/connection/outgoing/p2p_connection_outgoing_effects.rs @@ -48,6 +48,7 @@ impl P2pConnectionOutgoingAction { } store.dispatch(P2pConnectionOutgoingAction::FinalizePending { peer_id }); } else { + store.service().outgoing_init(opts); store.dispatch(P2pConnectionOutgoingAction::OfferSdpCreatePending { peer_id }); } }