@@ -141,6 +141,7 @@ impl<T: Config> Pallet<T> {
141141 image,
142142 address,
143143 status : ProjectStatus :: default ( ) ,
144+ inflation_rate : None ,
144145 registration_date : timestamp,
145146 creation_date,
146147 completion_date,
@@ -840,7 +841,7 @@ impl<T: Config> Pallet<T> {
840841 project_id : [ u8 ; 32 ] ,
841842 drawdown_id : [ u8 ; 32 ] ,
842843 ) -> DispatchResult {
843- //TODO: Ensure builder permissions
844+ //TODO: Ensure builder & admin permissions
844845
845846 // Ensure project exists & is not completed
846847 Self :: is_project_completed ( project_id) ?;
@@ -1245,6 +1246,51 @@ impl<T: Config> Pallet<T> {
12451246 Ok ( ( ) )
12461247 }
12471248
1249+ // I N F L A T I O N A D J U S T M E N T
1250+ // --------------------------------------------------------------------------------------------
1251+ pub fn do_execute_inflation_adjustment (
1252+ admin : T :: AccountId ,
1253+ projects : BoundedVec < ( [ u8 ; 32 ] , Option < u32 > , CUDAction ) , T :: MaxRegistrationsAtTime > ,
1254+ ) -> DispatchResult {
1255+ // Ensure admin permissions
1256+ Self :: is_superuser ( admin. clone ( ) , & Self :: get_global_scope ( ) , ProxyRole :: Administrator . id ( ) ) ?;
1257+
1258+ // Ensure projects is not empty
1259+ ensure ! ( !projects. is_empty( ) , Error :: <T >:: ProjectsIsEmpty ) ;
1260+
1261+ // Match each CUD action
1262+ for project in projects {
1263+ // Ensure project exists
1264+ ensure ! ( ProjectsInfo :: <T >:: contains_key( project. 0 ) , Error :: <T >:: ProjectNotFound ) ;
1265+ match project. 2 {
1266+ // Delete need: project_id
1267+ CUDAction :: Delete => {
1268+ // Mutate project data
1269+ <ProjectsInfo < T > >:: try_mutate :: < _ , _ , DispatchError , _ > ( project. 0 , |project_info| {
1270+ let mod_project_data = project_info. as_mut ( ) . ok_or ( Error :: < T > :: ProjectNotFound ) ?;
1271+ mod_project_data. inflation_rate = None ;
1272+ Ok ( ( ) )
1273+ } ) ?;
1274+ } ,
1275+ // Creation & Update need: project_id, inflation_rate
1276+ _ => {
1277+ // Mutate project data
1278+
1279+ // Ensure inflation rate is provided
1280+ let inflation_rate = project. 1 . ok_or ( Error :: < T > :: InflationRateRequired ) ?;
1281+
1282+ <ProjectsInfo < T > >:: try_mutate :: < _ , _ , DispatchError , _ > ( project. 0 , |project_info| {
1283+ let mod_project_data = project_info. as_mut ( ) . ok_or ( Error :: < T > :: ProjectNotFound ) ?;
1284+ mod_project_data. inflation_rate = Some ( inflation_rate) ;
1285+ Ok ( ( ) )
1286+ } ) ?;
1287+ } ,
1288+ }
1289+ }
1290+
1291+ Ok ( ( ) )
1292+ }
1293+
12481294 // H E L P E R S
12491295 // --------------------------------------------------------------------------------------------
12501296
0 commit comments