@@ -48,7 +48,11 @@ pub mod benchmarking;
48
48
49
49
use codec:: { Decode , Encode } ;
50
50
use core:: { iter, mem} ;
51
- use frame_support:: { decl_error, decl_module, decl_storage, dispatch:: DispatchResult , ensure} ;
51
+ use frame_support:: {
52
+ decl_error, decl_module, decl_storage,
53
+ dispatch:: { DispatchResult , Weight } ,
54
+ ensure,
55
+ } ;
52
56
use pallet_identity:: { self as identity, PermissionedCallOriginData } ;
53
57
use polymesh_common_utilities:: traits:: balances:: Memo ;
54
58
use polymesh_common_utilities:: traits:: portfolio:: PortfolioSubTrait ;
@@ -117,11 +121,11 @@ decl_storage! {
117
121
double_map hasher( identity) IdentityId , hasher( twox_64_concat) PortfolioId => bool ;
118
122
119
123
/// Storage version.
120
- StorageVersion get( fn storage_version) build( |_| Version :: new( 0 ) . unwrap( ) ) : Version ;
124
+ StorageVersion get( fn storage_version) build( |_| Version :: new( 1 ) . unwrap( ) ) : Version ;
121
125
}
122
126
}
123
127
124
- storage_migration_ver ! ( 0 ) ;
128
+ storage_migration_ver ! ( 1 ) ;
125
129
126
130
decl_error ! {
127
131
pub enum Error for Module <T : Config > {
@@ -191,7 +195,9 @@ decl_module! {
191
195
Self :: ensure_portfolio_custody_and_permission( pid, primary_did, secondary_key. as_ref( ) ) ?;
192
196
193
197
// Delete from storage.
198
+ let portfolio = Portfolios :: get( & primary_did, & num) ;
194
199
Portfolios :: remove( & primary_did, & num) ;
200
+ NameToNumber :: remove( & primary_did, & portfolio) ;
195
201
PortfolioAssetCount :: remove( & pid) ;
196
202
PortfolioAssetBalances :: remove_prefix( & pid) ;
197
203
PortfolioLockedAssets :: remove_prefix( & pid) ;
@@ -330,6 +336,23 @@ decl_module! {
330
336
pub fn accept_portfolio_custody( origin, auth_id: u64 ) -> DispatchResult {
331
337
Self :: base_accept_portfolio_custody( origin, auth_id)
332
338
}
339
+
340
+ fn on_runtime_upgrade( ) -> Weight {
341
+ use polymesh_primitives:: storage_migrate_on;
342
+
343
+ // Remove old name to number mappings.
344
+ // In version 4.0.0 (first mainnet deployment) when a portfolio was removed
345
+ // the NameToNumber mapping was left out of date, this upgrade removes dangling
346
+ // NameToNumber mappings.
347
+ // https://github.com/PolymathNetwork/Polymesh/pull/1200
348
+ storage_migrate_on!( StorageVersion :: get( ) , 1 , {
349
+ NameToNumber :: iter( )
350
+ . filter( |( identity, _, number) | !Portfolios :: contains_key( identity, number) )
351
+ . for_each( |( identity, name, _) | NameToNumber :: remove( identity, name) ) ;
352
+ } ) ;
353
+
354
+ 0
355
+ }
333
356
}
334
357
}
335
358
0 commit comments