@@ -138,12 +138,12 @@ impl Sumeragi {
138
138
} )
139
139
{
140
140
should_sleep = false ;
141
- if let Err ( error) = view_change_proof_chain. merge (
142
- msg. view_change_proofs ,
141
+ if let Err ( error) = view_change_proof_chain. insert_proof (
142
+ msg. view_change_proof ,
143
143
& self . topology ,
144
144
latest_block,
145
145
) {
146
- trace ! ( %error, "Failed to add proofs into view change proof chain" )
146
+ trace ! ( %error, "Failed to add proof into view change proof chain" )
147
147
}
148
148
} else {
149
149
break ;
@@ -1135,8 +1135,28 @@ pub(crate) fn run(
1135
1135
. unwrap_or_else ( |err| error ! ( "{err}" ) ) ;
1136
1136
}
1137
1137
1138
- let msg = ControlFlowMessage :: new ( view_change_proof_chain. clone ( ) ) ;
1139
- sumeragi. broadcast_control_flow_packet ( msg) ;
1138
+ // If exist broadcast latest verified proof in case some peers missed it.
1139
+ // Proof doesn't exist in case view_change_index == 0.
1140
+ if let Some ( latest_verified_proof) =
1141
+ view_change_index
1142
+ . checked_sub ( 1 )
1143
+ . and_then ( |view_change_index| {
1144
+ view_change_proof_chain. get_proof_for_view_change ( view_change_index)
1145
+ } )
1146
+ {
1147
+ let msg = ControlFlowMessage :: new ( latest_verified_proof) ;
1148
+ sumeragi. broadcast_control_flow_packet ( msg) ;
1149
+ }
1150
+
1151
+ // If exist broadcast proof for current view change index.
1152
+ // Proof might not exist for example when view_change_time is up,
1153
+ // but there is no transactions in the queue so there is nothing to complain about.
1154
+ if let Some ( proof_for_current_view_change_index) =
1155
+ view_change_proof_chain. get_proof_for_view_change ( view_change_index)
1156
+ {
1157
+ let msg = ControlFlowMessage :: new ( proof_for_current_view_change_index) ;
1158
+ sumeragi. broadcast_control_flow_packet ( msg) ;
1159
+ }
1140
1160
1141
1161
// NOTE: View change must be periodically suggested until it is accepted.
1142
1162
// Must be initialized to pipeline time but can increase by chosen amount
0 commit comments