@@ -6,7 +6,7 @@ use crate::storage::{
66use crate :: types:: { RewardRate , UserReward } ;
77use crate :: validation:: RewardsValidator ;
88
9- use soroban_sdk:: { symbol_short, vec, Address , Env , IntoVal , Map , String } ;
9+ use soroban_sdk:: { symbol_short, vec, Address , Env , IntoVal , String } ;
1010
1111pub struct Rewards ;
1212
@@ -36,12 +36,6 @@ impl Rewards {
3636 env. storage ( ) . instance ( ) . set ( & REWARD_POOL , & 0i128 ) ;
3737 env. storage ( ) . instance ( ) . set ( & TOTAL_REWARDS_ISSUED , & 0i128 ) ;
3838
39- let reward_rates: Map < String , RewardRate > = Map :: new ( env) ;
40- env. storage ( ) . instance ( ) . set ( & REWARD_RATES , & reward_rates) ;
41-
42- let user_rewards: Map < Address , UserReward > = Map :: new ( env) ;
43- env. storage ( ) . instance ( ) . set ( & USER_REWARDS , & user_rewards) ;
44-
4539 Ok ( ( ) )
4640 }
4741
@@ -124,25 +118,24 @@ impl Rewards {
124118 return Err ( RewardsError :: InsufficientRewardPoolBalance ) ;
125119 }
126120
127- let mut user_rewards : Map < Address , UserReward > = env
121+ let mut user_reward : UserReward = env
128122 . storage ( )
129- . instance ( )
130- . get ( & USER_REWARDS )
131- . unwrap_or_else ( || Map :: new ( env) ) ;
132-
133- let mut user_reward = user_rewards. get ( recipient. clone ( ) ) . unwrap_or ( UserReward {
134- user : recipient. clone ( ) ,
135- total_earned : 0 ,
136- claimed : 0 ,
137- pending : 0 ,
138- last_claim_timestamp : 0 ,
139- } ) ;
123+ . persistent ( )
124+ . get ( & ( USER_REWARDS , recipient. clone ( ) ) )
125+ . unwrap_or ( UserReward {
126+ user : recipient. clone ( ) ,
127+ total_earned : 0 ,
128+ claimed : 0 ,
129+ pending : 0 ,
130+ last_claim_timestamp : 0 ,
131+ } ) ;
140132
141133 user_reward. total_earned += amount;
142134 user_reward. pending += amount;
143135
144- user_rewards. set ( recipient. clone ( ) , user_reward) ;
145- env. storage ( ) . instance ( ) . set ( & USER_REWARDS , & user_rewards) ;
136+ env. storage ( )
137+ . persistent ( )
138+ . set ( & ( USER_REWARDS , recipient. clone ( ) ) , & user_reward) ;
146139
147140 let mut total_issued: i128 = env
148141 . storage ( )
@@ -188,14 +181,10 @@ impl Rewards {
188181 pub fn claim_rewards ( env : & Env , user : Address ) -> Result < ( ) , RewardsError > {
189182 user. require_auth ( ) ;
190183
191- let mut user_rewards : Map < Address , UserReward > = env
184+ let mut user_reward : UserReward = env
192185 . storage ( )
193- . instance ( )
194- . get ( & USER_REWARDS )
195- . unwrap_or_else ( || Map :: new ( env) ) ;
196-
197- let mut user_reward = user_rewards
198- . get ( user. clone ( ) )
186+ . persistent ( )
187+ . get ( & ( USER_REWARDS , user. clone ( ) ) )
199188 . ok_or ( RewardsError :: NoRewardsAvailable ) ?;
200189
201190 if user_reward. pending <= 0 {
@@ -226,8 +215,9 @@ impl Rewards {
226215 user_reward. pending = 0 ;
227216 user_reward. last_claim_timestamp = env. ledger ( ) . timestamp ( ) ;
228217
229- user_rewards. set ( user. clone ( ) , user_reward) ;
230- env. storage ( ) . instance ( ) . set ( & USER_REWARDS , & user_rewards) ;
218+ env. storage ( )
219+ . persistent ( )
220+ . set ( & ( USER_REWARDS , user. clone ( ) ) , & user_reward) ;
231221
232222 let new_pool_balance = pool_balance - amount_to_claim;
233223 env. storage ( )
@@ -272,23 +262,15 @@ impl Rewards {
272262 return Err ( RewardsError :: RateCannotBeNegative ) ;
273263 }
274264
275- let mut reward_rates: Map < String , RewardRate > = env
276- . storage ( )
277- . instance ( )
278- . get ( & REWARD_RATES )
279- . unwrap_or_else ( || Map :: new ( env) ) ;
280-
281- reward_rates. set (
282- reward_type. clone ( ) ,
283- RewardRate {
265+ env. storage ( ) . persistent ( ) . set (
266+ & ( REWARD_RATES , reward_type. clone ( ) ) ,
267+ & RewardRate {
284268 reward_type,
285269 rate,
286270 enabled,
287271 } ,
288272 ) ;
289273
290- env. storage ( ) . instance ( ) . set ( & REWARD_RATES , & reward_rates) ;
291-
292274 Ok ( ( ) )
293275 }
294276
@@ -332,12 +314,7 @@ impl Rewards {
332314 /// // get_user_rewards(...);
333315 /// ```
334316 pub fn get_user_rewards ( env : & Env , user : Address ) -> Option < UserReward > {
335- let user_rewards: Map < Address , UserReward > = env
336- . storage ( )
337- . instance ( )
338- . get ( & USER_REWARDS )
339- . unwrap_or_else ( || Map :: new ( env) ) ;
340- user_rewards. get ( user)
317+ env. storage ( ) . persistent ( ) . get ( & ( USER_REWARDS , user) )
341318 }
342319
343320 /// Standard API for get_reward_pool_balance
@@ -400,12 +377,9 @@ impl Rewards {
400377 /// // get_reward_rate(...);
401378 /// ```
402379 pub fn get_reward_rate ( env : & Env , reward_type : String ) -> Option < RewardRate > {
403- let reward_rates: Map < String , RewardRate > = env
404- . storage ( )
405- . instance ( )
406- . get ( & REWARD_RATES )
407- . unwrap_or_else ( || Map :: new ( env) ) ;
408- reward_rates. get ( reward_type)
380+ env. storage ( )
381+ . persistent ( )
382+ . get ( & ( REWARD_RATES , reward_type) )
409383 }
410384
411385 /// Standard API for get_rewards_admin
0 commit comments