@@ -487,6 +487,12 @@ where
487487 let mut weight = Weight :: zero ( ) ;
488488 if Self :: runtime_upgraded ( ) {
489489 weight = weight. saturating_add ( Self :: execute_on_runtime_upgrade ( ) ) ;
490+
491+ frame_system:: LastRuntimeUpgrade :: < System > :: put (
492+ frame_system:: LastRuntimeUpgradeInfo :: from (
493+ <System :: Version as frame_support:: traits:: Get < _ > >:: get ( ) ,
494+ ) ,
495+ ) ;
490496 }
491497 <frame_system:: Pallet < System > >:: initialize ( block_number, parent_hash, digest) ;
492498 weight = weight. saturating_add ( <AllPalletsWithSystem as OnInitialize <
@@ -503,19 +509,12 @@ where
503509 frame_system:: Pallet :: < System > :: note_finished_initialize ( ) ;
504510 }
505511
506- /// Returns if the runtime was upgraded since the last time this function was called .
512+ /// Returns if the runtime has been upgraded, based on [`frame_system::LastRuntimeUpgrade`] .
507513 fn runtime_upgraded ( ) -> bool {
508514 let last = frame_system:: LastRuntimeUpgrade :: < System > :: get ( ) ;
509515 let current = <System :: Version as frame_support:: traits:: Get < _ > >:: get ( ) ;
510516
511- if last. map ( |v| v. was_upgraded ( & current) ) . unwrap_or ( true ) {
512- frame_system:: LastRuntimeUpgrade :: < System > :: put (
513- frame_system:: LastRuntimeUpgradeInfo :: from ( current) ,
514- ) ;
515- true
516- } else {
517- false
518- }
517+ last. map ( |v| v. was_upgraded ( & current) ) . unwrap_or ( true )
519518 }
520519
521520 fn initial_checks ( block : & Block ) {
@@ -755,7 +754,7 @@ mod tests {
755754 traits:: { fungible, ConstU32 , ConstU64 , ConstU8 , Currency } ,
756755 weights:: { ConstantMultiplier , IdentityFee , RuntimeDbWeight , Weight , WeightToFee } ,
757756 } ;
758- use frame_system:: { ChainContext , LastRuntimeUpgradeInfo } ;
757+ use frame_system:: { ChainContext , LastRuntimeUpgrade , LastRuntimeUpgradeInfo } ;
759758 use pallet_balances:: Call as BalancesCall ;
760759 use pallet_transaction_payment:: CurrencyAdapter ;
761760
@@ -994,6 +993,9 @@ mod tests {
994993 sp_io:: storage:: set ( TEST_KEY , "custom_upgrade" . as_bytes ( ) ) ;
995994 sp_io:: storage:: set ( CUSTOM_ON_RUNTIME_KEY , & true . encode ( ) ) ;
996995 System :: deposit_event ( frame_system:: Event :: CodeUpdated ) ;
996+
997+ assert_eq ! ( 0 , System :: last_runtime_upgrade_spec_version( ) ) ;
998+
997999 Weight :: from_parts ( 100 , 0 )
9981000 }
9991001 }
@@ -1356,17 +1358,13 @@ mod tests {
13561358 new_test_ext ( 1 ) . execute_with ( || {
13571359 RuntimeVersionTestValues :: mutate ( |v| * v = Default :: default ( ) ) ;
13581360 // It should be added at genesis
1359- assert ! ( frame_system :: LastRuntimeUpgrade :: <Runtime >:: exists( ) ) ;
1361+ assert ! ( LastRuntimeUpgrade :: <Runtime >:: exists( ) ) ;
13601362 assert ! ( !Executive :: runtime_upgraded( ) ) ;
13611363
13621364 RuntimeVersionTestValues :: mutate ( |v| {
13631365 * v = sp_version:: RuntimeVersion { spec_version : 1 , ..Default :: default ( ) }
13641366 } ) ;
13651367 assert ! ( Executive :: runtime_upgraded( ) ) ;
1366- assert_eq ! (
1367- Some ( LastRuntimeUpgradeInfo { spec_version: 1 . into( ) , spec_name: "" . into( ) } ) ,
1368- frame_system:: LastRuntimeUpgrade :: <Runtime >:: get( ) ,
1369- ) ;
13701368
13711369 RuntimeVersionTestValues :: mutate ( |v| {
13721370 * v = sp_version:: RuntimeVersion {
@@ -1376,27 +1374,18 @@ mod tests {
13761374 }
13771375 } ) ;
13781376 assert ! ( Executive :: runtime_upgraded( ) ) ;
1379- assert_eq ! (
1380- Some ( LastRuntimeUpgradeInfo { spec_version: 1 . into( ) , spec_name: "test" . into( ) } ) ,
1381- frame_system:: LastRuntimeUpgrade :: <Runtime >:: get( ) ,
1382- ) ;
13831377
13841378 RuntimeVersionTestValues :: mutate ( |v| {
13851379 * v = sp_version:: RuntimeVersion {
1386- spec_version : 1 ,
1387- spec_name : "test" . into ( ) ,
1380+ spec_version : 0 ,
13881381 impl_version : 2 ,
13891382 ..Default :: default ( )
13901383 }
13911384 } ) ;
13921385 assert ! ( !Executive :: runtime_upgraded( ) ) ;
13931386
1394- frame_system :: LastRuntimeUpgrade :: < Runtime > :: take ( ) ;
1387+ LastRuntimeUpgrade :: < Runtime > :: take ( ) ;
13951388 assert ! ( Executive :: runtime_upgraded( ) ) ;
1396- assert_eq ! (
1397- Some ( LastRuntimeUpgradeInfo { spec_version: 1 . into( ) , spec_name: "test" . into( ) } ) ,
1398- frame_system:: LastRuntimeUpgrade :: <Runtime >:: get( ) ,
1399- ) ;
14001389 } )
14011390 }
14021391
@@ -1444,6 +1433,10 @@ mod tests {
14441433
14451434 assert_eq ! ( & sp_io:: storage:: get( TEST_KEY ) . unwrap( ) [ ..] , * b"module" ) ;
14461435 assert_eq ! ( sp_io:: storage:: get( CUSTOM_ON_RUNTIME_KEY ) . unwrap( ) , true . encode( ) ) ;
1436+ assert_eq ! (
1437+ Some ( RuntimeVersionTestValues :: get( ) . into( ) ) ,
1438+ LastRuntimeUpgrade :: <Runtime >:: get( ) ,
1439+ )
14471440 } ) ;
14481441 }
14491442
@@ -1519,6 +1512,9 @@ mod tests {
15191512
15201513 #[ test]
15211514 fn all_weights_are_recorded_correctly ( ) {
1515+ // Reset to get the correct new genesis below.
1516+ RuntimeVersionTestValues :: take ( ) ;
1517+
15221518 new_test_ext ( 1 ) . execute_with ( || {
15231519 // Make sure `on_runtime_upgrade` is called for maximum complexity
15241520 RuntimeVersionTestValues :: mutate ( |v| {
@@ -1535,6 +1531,10 @@ mod tests {
15351531 Digest :: default ( ) ,
15361532 ) ) ;
15371533
1534+ // Reset the last runtime upgrade info, to make the second call to `on_runtime_upgrade`
1535+ // succeed.
1536+ LastRuntimeUpgrade :: < Runtime > :: take ( ) ;
1537+
15381538 // All weights that show up in the `initialize_block_impl`
15391539 let custom_runtime_upgrade_weight = CustomOnRuntimeUpgrade :: on_runtime_upgrade ( ) ;
15401540 let runtime_upgrade_weight =
0 commit comments