@@ -382,3 +382,86 @@ pub mod v3 {
382382 Ok ( ( ) )
383383 }
384384}
385+
386+ pub mod v4 {
387+ use super :: * ;
388+ use frame_support:: { log, traits:: Get } ;
389+ use primitives:: ParaId ;
390+ use sp_std:: { vec, vec:: Vec } ;
391+ use types:: * ;
392+
393+ pub fn pre_migrate < T : Config > ( ) -> Result < Vec < u8 > , & ' static str > {
394+ frame_support:: ensure!(
395+ StorageVersion :: <T >:: get( ) == Releases :: V3_0_0 ,
396+ "must be V3_0_0"
397+ ) ;
398+ frame_support:: ensure!( NextTrieIndex :: <T >:: get( ) == 31 , "must be 31" ) ;
399+ Ok ( Vec :: new ( ) )
400+ }
401+
402+ pub fn migrate < T : Config > ( ) -> frame_support:: weights:: Weight {
403+ if StorageVersion :: < T > :: get ( ) == Releases :: V3_0_0 {
404+ log:: info!(
405+ target: "crowdloans::migrate" ,
406+ "migrating crowdloan storage"
407+ ) ;
408+ // paraId, ctoken, contributed, cap, end_block, trie_index, lease_start, lease_end
409+ let batch: Vec < ( u32 , u32 , u128 , u128 , u32 , u32 , u32 , u32 ) > = vec ! [
410+ // 2040,8-15,3000000000000000,150000000000000000,10881401
411+ (
412+ 2040 ,
413+ 200080015 ,
414+ 3000000000000000 ,
415+ 150_000_000_000_000_000 ,
416+ 10881401 ,
417+ 25 ,
418+ 8 ,
419+ 15 ,
420+ ) ,
421+ ] ;
422+ let length = batch. len ( ) as u64 ;
423+ for ( para_id, _, raised, _, _, _, lease_start, lease_end) in batch. into_iter ( ) {
424+ match Vaults :: < T > :: get ( ( & ParaId :: from ( para_id) , & lease_start, & lease_end) ) {
425+ Some ( vault) if vault. phase == VaultPhase :: Expired => {
426+ Vaults :: < T > :: insert (
427+ ( & ParaId :: from ( para_id) , & lease_start, & lease_end) ,
428+ Vault {
429+ contributed : raised,
430+ ..vault
431+ } ,
432+ ) ;
433+ }
434+ Some ( _) => {
435+ log:: error!( "Vault for para_id {} is not in Expired phase" , para_id) ;
436+ }
437+ None => {
438+ log:: error!(
439+ "No vault found for para_id {} ({}, {})" ,
440+ para_id,
441+ lease_start,
442+ lease_end
443+ ) ;
444+ }
445+ }
446+ }
447+ log:: info!(
448+ target: "crowdloans::migrate" ,
449+ "completed crowdloans storage migration"
450+ ) ;
451+ <T as frame_system:: Config >:: DbWeight :: get ( ) . writes ( length * 3 + 1u64 )
452+ } else {
453+ T :: DbWeight :: get ( ) . reads ( 1 )
454+ }
455+ }
456+
457+ pub fn post_migrate < T : Config > ( ) -> Result < ( ) , & ' static str > {
458+ frame_support:: ensure!(
459+ StorageVersion :: <T >:: get( ) == Releases :: V3_0_0 ,
460+ "must be V3_0_0"
461+ ) ;
462+ frame_support:: ensure!( NextTrieIndex :: <T >:: get( ) == 31 , "must be 31" ) ;
463+ log:: info!( "👜 crowdloan migration passes POST migrate checks ✅" , ) ;
464+
465+ Ok ( ( ) )
466+ }
467+ }
0 commit comments