@@ -25,7 +25,7 @@ use ckey::{public_to_address, Address};
2525use cnetwork:: NetworkService ;
2626use crossbeam_channel as crossbeam;
2727use cstate:: { ActionHandler , TopStateView } ;
28- use ctypes:: { BlockHash , BlockNumber , CommonParams , Header } ;
28+ use ctypes:: { BlockHash , CommonParams , Header } ;
2929use num_rational:: Ratio ;
3030
3131use super :: super :: stake;
@@ -141,10 +141,11 @@ impl ConsensusEngine for Tendermint {
141141 parent_common_params : & CommonParams ,
142142 term_common_params : Option < & CommonParams > ,
143143 ) -> Result < ( ) , Error > {
144+ let block_number = block. header ( ) . number ( ) ;
144145 let author = * block. header ( ) . author ( ) ;
145146 let ( total_reward, total_min_fee) = {
146147 let transactions = block. transactions ( ) ;
147- let block_reward = self . block_reward ( block . header ( ) . number ( ) ) ;
148+ let block_reward = self . block_reward ( block_number ) ;
148149 let total_min_fee: u64 = transactions. iter ( ) . map ( |tx| tx. fee ) . sum ( ) ;
149150 let min_fee =
150151 transactions. iter ( ) . map ( |tx| CodeChainMachine :: min_cost ( & parent_common_params, & tx. action ) ) . sum ( ) ;
@@ -164,9 +165,7 @@ impl ConsensusEngine for Tendermint {
164165 if metadata. current_term_id ( ) == 0 {
165166 self . machine . add_balance ( block, & author, block_author_reward) ?;
166167
167- if let Some ( block_number) =
168- block_number_if_term_changed ( block. header ( ) , parent_header, parent_common_params)
169- {
168+ if is_term_changed ( block. header ( ) , parent_header, parent_common_params) {
170169 // First term change
171170 stake:: on_term_close ( block. state_mut ( ) , block_number, & [ ] ) ?;
172171 }
@@ -178,13 +177,9 @@ impl ConsensusEngine for Tendermint {
178177 stake:: add_intermediate_rewards ( block. state_mut ( ) , author, block_author_reward) ?;
179178
180179 let term_common_params = term_common_params. expect ( "TermCommonParams should exist" ) ;
181- let last_term_finished_block_num = if let Some ( block_number) =
182- block_number_if_term_changed ( block. header ( ) , parent_header, term_common_params)
183- {
184- block_number
185- } else {
180+ if !is_term_changed ( block. header ( ) , parent_header, term_common_params) {
186181 return Ok ( ( ) )
187- } ;
182+ }
188183 let rewards = stake:: drain_previous_rewards ( & mut block. state_mut ( ) ) ?;
189184
190185 let start_of_the_current_term = metadata. last_term_finished_block_num ( ) + 1 ;
@@ -213,7 +208,7 @@ impl ConsensusEngine for Tendermint {
213208 } ;
214209
215210 let banned = stake:: Banned :: load_from_state ( block. state ( ) ) ?;
216- let start_of_the_current_term_header = if block . header ( ) . number ( ) == start_of_the_current_term {
211+ let start_of_the_current_term_header = if block_number == start_of_the_current_term {
217212 encoded:: Header :: new ( block. header ( ) . clone ( ) . rlp_bytes ( ) . to_vec ( ) )
218213 } else {
219214 client. block_header ( & start_of_the_current_term. into ( ) ) . unwrap ( )
@@ -241,7 +236,7 @@ impl ConsensusEngine for Tendermint {
241236 } ;
242237
243238 stake:: move_current_to_previous_intermediate_rewards ( & mut block. state_mut ( ) ) ?;
244- stake:: on_term_close ( block. state_mut ( ) , last_term_finished_block_num , & inactive_validators) ?;
239+ stake:: on_term_close ( block. state_mut ( ) , block_number , & inactive_validators) ?;
245240
246241 Ok ( ( ) )
247242 }
@@ -342,22 +337,16 @@ impl ConsensusEngine for Tendermint {
342337 }
343338}
344339
345- fn block_number_if_term_changed (
346- header : & Header ,
347- parent_header : & Header ,
348- common_params : & CommonParams ,
349- ) -> Option < BlockNumber > {
340+ fn is_term_changed ( header : & Header , parent : & Header , common_params : & CommonParams ) -> bool {
350341 let term_seconds = common_params. term_seconds ( ) ;
351342 if term_seconds == 0 {
352- return None
343+ return false
353344 }
354345
355346 let current_term_period = header. timestamp ( ) / term_seconds;
356- let parent_term_period = parent_header. timestamp ( ) / term_seconds;
357- if current_term_period == parent_term_period {
358- return None
359- }
360- Some ( header. number ( ) )
347+ let parent_term_period = parent. timestamp ( ) / term_seconds;
348+
349+ current_term_period != parent_term_period
361350}
362351
363352fn inactive_validators (
0 commit comments