@@ -31,6 +31,8 @@ use crate::tracing_targets;
31
31
use crate :: types:: { BlockCandidate , CollationSessionInfo , CollatorConfig , McData , ShardHashesExt } ;
32
32
use crate :: utils:: block:: detect_top_processed_to_anchor;
33
33
34
+ pub const LOGARITHM_DELIMITER : u64 = 1000 ;
35
+
34
36
pub struct FinalizeState {
35
37
pub execute_result : ExecuteResult ,
36
38
}
@@ -218,7 +220,8 @@ impl Phase<FinalizeState> {
218
220
histogram_build_account_blocks_and_messages. finish ( ) ;
219
221
220
222
let processed_accounts = processed_accounts_res?;
221
- self . state . collation_data . accounts_count = processed_accounts. accounts_len as u64 ;
223
+ self . state . collation_data . updated_accounts_count =
224
+ processed_accounts. updated_accounts_count as u64 ;
222
225
let in_msgs = in_msgs_res?;
223
226
let out_msgs = out_msgs_res?;
224
227
@@ -343,21 +346,29 @@ impl Phase<FinalizeState> {
343
346
labels,
344
347
) ;
345
348
346
- let accounts_count = self . state . collation_data . accounts_count ;
349
+ let updated_accounts_count = self . state . collation_data . updated_accounts_count ;
350
+ let old_accounts_count = self
351
+ . state
352
+ . prev_shard_data
353
+ . observable_accounts ( )
354
+ . root_extra ( )
355
+ . count as u64 ;
347
356
let in_msgs_len = self . state . collation_data . in_msgs . len ( ) as u64 ;
348
357
let out_msgs_len = self . state . collation_data . out_msgs . len ( ) as u64 ;
349
358
350
359
finalize_wu_total = Self :: calc_finalize_wu_total (
351
- accounts_count,
360
+ old_accounts_count,
361
+ updated_accounts_count,
352
362
in_msgs_len,
353
363
out_msgs_len,
354
364
wu_params_finalize,
355
365
) ;
356
366
357
367
tracing:: debug!( target: tracing_targets:: COLLATOR ,
358
- "finalize_wu_total: {}, accounts_count : {}, in_msgs: {}, out_msgs: {} " ,
368
+ "finalize_wu_total: {}, old_state_accounts_count: {}, updated_accounts_count : {}, in_msgs: {}, out_msgs: {} " ,
359
369
finalize_wu_total,
360
- accounts_count,
370
+ old_accounts_count,
371
+ updated_accounts_count,
361
372
in_msgs_len,
362
373
out_msgs_len,
363
374
) ;
@@ -640,7 +651,8 @@ impl Phase<FinalizeState> {
640
651
}
641
652
642
653
fn calc_finalize_wu_total (
643
- accounts_count : u64 ,
654
+ old_accounts_count : u64 ,
655
+ updated_accounts_count : u64 ,
644
656
in_msgs_len : u64 ,
645
657
out_msgs_len : u64 ,
646
658
wu_params_finalize : WorkUnitsParamsFinalize ,
@@ -655,13 +667,15 @@ impl Phase<FinalizeState> {
655
667
serialize_msg,
656
668
state_update_min,
657
669
state_update_accounts,
658
- state_update_msg,
659
670
} = wu_params_finalize;
660
671
661
- let accounts_count_logarithm = accounts_count. checked_ilog2 ( ) . unwrap_or_default ( ) as u64 ;
662
- let build = accounts_count
663
- . saturating_mul ( accounts_count_logarithm)
664
- . saturating_mul ( build_accounts as u64 ) ;
672
+ let old_accounts_count_logarithm =
673
+ ( ( old_accounts_count as f64 ) . log2 ( ) * LOGARITHM_DELIMITER as f64 ) as u64 ;
674
+
675
+ let build = updated_accounts_count
676
+ . saturating_mul ( build_accounts as u64 )
677
+ . saturating_mul ( old_accounts_count_logarithm)
678
+ . saturating_div ( LOGARITHM_DELIMITER ) ;
665
679
let build_in_msg = in_msgs_len
666
680
. saturating_mul ( in_msgs_len. checked_ilog2 ( ) . unwrap_or_default ( ) as u64 )
667
681
. saturating_mul ( build_in_msg as u64 ) ;
@@ -676,15 +690,15 @@ impl Phase<FinalizeState> {
676
690
677
691
let merkle_calc = std:: cmp:: max (
678
692
state_update_min as u64 ,
679
- accounts_count
680
- . saturating_mul ( accounts_count_logarithm)
693
+ updated_accounts_count
681
694
. saturating_mul ( state_update_accounts as u64 )
682
- . saturating_add ( out_msgs_len. saturating_mul ( state_update_msg as u64 ) ) ,
695
+ . saturating_mul ( old_accounts_count_logarithm)
696
+ . saturating_div ( LOGARITHM_DELIMITER ) ,
683
697
) ;
684
698
685
699
let serialize = std:: cmp:: max (
686
700
serialize_min as u64 ,
687
- accounts_count . saturating_mul ( serialize_accounts as u64 ) ,
701
+ updated_accounts_count . saturating_mul ( serialize_accounts as u64 ) ,
688
702
)
689
703
. saturating_add ( ( in_msgs_len + out_msgs_len) . saturating_mul ( serialize_msg as u64 ) ) ;
690
704
@@ -937,7 +951,7 @@ impl Phase<FinalizeState> {
937
951
shard_accounts. set_any (
938
952
& updated_account. account_addr ,
939
953
& DepthBalanceInfo {
940
- split_depth : 0 , // NOTE: will need to set when we implement accounts split/merge logic
954
+ count : 1 ,
941
955
balance : updated_account. balance . clone ( ) ,
942
956
} ,
943
957
& updated_account. shard_account ,
@@ -972,7 +986,7 @@ impl Phase<FinalizeState> {
972
986
account_blocks. insert ( updated_account. account_addr , account_block) ;
973
987
}
974
988
975
- let accounts_len = account_blocks. len ( ) ;
989
+ let updated_accounts_count = account_blocks. len ( ) ;
976
990
977
991
// TODO: Somehow consume accounts inside an iterator
978
992
let account_blocks = RelaxedAugDict :: try_from_sorted_iter_any (
@@ -985,7 +999,7 @@ impl Phase<FinalizeState> {
985
999
account_blocks : account_blocks. build ( ) ?,
986
1000
shard_accounts : shard_accounts. build ( ) ?,
987
1001
new_config_params,
988
- accounts_len ,
1002
+ updated_accounts_count ,
989
1003
} )
990
1004
}
991
1005
@@ -1227,7 +1241,7 @@ struct ProcessedAccounts {
1227
1241
account_blocks : AccountBlocks ,
1228
1242
shard_accounts : ShardAccounts ,
1229
1243
new_config_params : Option < BlockchainConfigParams > ,
1230
- accounts_len : usize ,
1244
+ updated_accounts_count : usize ,
1231
1245
}
1232
1246
1233
1247
fn create_merkle_update (
0 commit comments