@@ -52,7 +52,7 @@ use casper_types::{
5252 } ,
5353 system:: {
5454 self ,
55- auction:: { self , DelegatorKind , EraInfo } ,
55+ auction:: { self , DelegatorKind , EraInfo , MINIMUM_DELEGATION_RATE_KEY } ,
5656 handle_payment,
5757 mint:: { self , MINT_SUSTAIN_PURSE_KEY } ,
5858 CallStackElement , Caller , CallerInfo , SystemEntityType , AUCTION , HANDLE_PAYMENT , MINT ,
@@ -1084,7 +1084,7 @@ where
10841084
10851085 let max_delegators_per_validator =
10861086 self . context . engine_config ( ) . max_delegators_per_validator ( ) ;
1087-
1087+ let minimum_delegation_rate = self . get_minimum_delegation_rate ( ) ? ;
10881088 let minimum_bid_amount = self . context ( ) . engine_config ( ) . minimum_bid_amount ( ) ;
10891089
10901090 let result = runtime
@@ -1099,6 +1099,7 @@ where
10991099 reserved_slots,
11001100 global_minimum_delegation_amount,
11011101 global_maximum_delegation_amount,
1102+ minimum_delegation_rate,
11021103 )
11031104 . map_err ( Self :: reverter) ?;
11041105
@@ -1325,8 +1326,9 @@ where
13251326 let reservations =
13261327 Self :: get_named_argument ( runtime_args, auction:: ARG_RESERVATIONS ) ?;
13271328
1329+ let minimum_delegation_rate = self . get_minimum_delegation_rate ( ) ?;
13281330 runtime
1329- . add_reservations ( reservations)
1331+ . add_reservations ( reservations, minimum_delegation_rate )
13301332 . map_err ( Self :: reverter) ?;
13311333
13321334 CLValue :: from_t ( ( ) ) . map_err ( Self :: reverter)
@@ -4665,6 +4667,31 @@ where
46654667 ) ?;
46664668 Ok ( Ok ( ( ) ) )
46674669 }
4670+
4671+ fn get_minimum_delegation_rate ( & self ) -> Result < u8 , ExecError > {
4672+ let auction_contract_hash = self . context . get_system_contract ( AUCTION ) ?;
4673+ let auction_named_keys = self
4674+ . context
4675+ . state ( )
4676+ . borrow_mut ( )
4677+ . get_named_keys ( EntityAddr :: System ( auction_contract_hash. value ( ) ) ) ?;
4678+ let minimum_delegation_rate_key =
4679+ auction_named_keys. get ( MINIMUM_DELEGATION_RATE_KEY ) . ok_or (
4680+ ExecError :: NamedKeyNotFound ( MINIMUM_DELEGATION_RATE_KEY . to_string ( ) ) ,
4681+ ) ?;
4682+ let stored_value = self
4683+ . context
4684+ . state ( )
4685+ . borrow_mut ( )
4686+ . read ( minimum_delegation_rate_key) ?
4687+ . ok_or_else ( || ExecError :: KeyNotFound ( * minimum_delegation_rate_key) ) ?;
4688+ if let StoredValue :: CLValue ( cl_value) = stored_value {
4689+ let minimum_delegation_rate: u8 = cl_value. into_t ( ) . map_err ( ExecError :: CLValue ) ?;
4690+ Ok ( minimum_delegation_rate)
4691+ } else {
4692+ Err ( ExecError :: UnexpectedStoredValueVariant )
4693+ }
4694+ }
46684695}
46694696
46704697#[ cfg( feature = "test-support" ) ]
0 commit comments