@@ -32,8 +32,8 @@ use crate::committee_provider::{
3232 ExecutionContext ,
3333 Staker ,
3434} ;
35- use crate :: contract_types:: RetdataDeserializationError ;
36- use crate :: staking_manager:: { StakerSet , StakingManager , StakingManagerConfig } ;
35+ use crate :: contract_types:: { ContractStaker , RetdataDeserializationError } ;
36+ use crate :: staking_manager:: { StakingManager , StakingManagerConfig } ;
3737use crate :: utils:: MockBlockRandomGenerator ;
3838
3939const STAKING_CONTRACT : FeatureContract =
@@ -93,7 +93,10 @@ fn default_config() -> StakingManagerConfig {
9393}
9494
9595fn set_stakers ( state : & mut State , block_context : & Context , stakers : & [ Staker ] ) {
96- let mut stakers_as_felts: Vec < Felt > = stakers. iter ( ) . flat_map ( <Vec < Felt > >:: from) . collect ( ) ;
96+ let mut stakers_as_felts: Vec < Felt > = stakers
97+ . iter ( )
98+ . flat_map ( |staker| <Vec < Felt > >:: from ( & ContractStaker :: from ( staker) ) )
99+ . collect ( ) ;
97100 stakers_as_felts. insert ( 0 , Felt :: from ( stakers. len ( ) ) ) ;
98101
99102 // Invoke the set_stakers function on the mock staking contract.
@@ -123,7 +126,7 @@ fn get_committee_success(
123126 default_config : StakingManagerConfig ,
124127 mut state : State ,
125128 block_context : Context ,
126- #[ case] stakers : StakerSet ,
129+ #[ case] stakers : Vec < Staker > ,
127130 #[ case] expected_committee : Committee ,
128131) {
129132 set_stakers ( & mut state, & block_context, & stakers) ;
@@ -276,25 +279,39 @@ async fn get_proposer_random_value_exceeds_total_weight(
276279 let _ = committee_manager. get_proposer ( BlockNumber ( 1 ) , 0 , context) . await ;
277280}
278281
279- // --- TryFrom tests for Staker and ArrayRetdata ---
282+ // --- TryFrom tests for ContractStaker and ArrayRetdata ---
280283
281284#[ rstest]
282285fn staker_try_from_valid ( ) {
283- let staker = Staker :: try_from ( [ Felt :: ONE , Felt :: TWO , Felt :: THREE ] ) . unwrap ( ) ;
284- assert_eq ! ( staker. address, contract_address!( "0x1" ) ) ;
285- assert_eq ! ( staker. weight, StakingWeight ( 2 ) ) ;
286- assert_eq ! ( staker. public_key, Felt :: THREE ) ;
286+ let staker = ContractStaker :: try_from ( [ Felt :: ONE , Felt :: TWO , Felt :: ZERO , Felt :: THREE ] ) . unwrap ( ) ;
287+ assert_eq ! ( staker. contract_address, contract_address!( "0x1" ) ) ;
288+ assert_eq ! ( staker. staking_power, StakingWeight ( 2 ) ) ;
289+ assert_eq ! ( staker. public_key, Some ( Felt :: THREE ) ) ;
290+
291+ // A valid staker with no public key.
292+ let staker = ContractStaker :: try_from ( [ Felt :: ONE , Felt :: TWO , Felt :: ONE , Felt :: THREE ] ) . unwrap ( ) ;
293+ assert_eq ! ( staker. contract_address, contract_address!( "0x1" ) ) ;
294+ assert_eq ! ( staker. staking_power, StakingWeight ( 2 ) ) ;
295+ assert_eq ! ( staker. public_key, None ) ;
287296}
288297
289298#[ rstest]
290299fn staker_try_from_invalid_address ( ) {
291- let err = Staker :: try_from ( [ CONTRACT_ADDRESS_DOMAIN_SIZE , Felt :: ONE , Felt :: ONE ] ) . unwrap_err ( ) ;
300+ let err =
301+ ContractStaker :: try_from ( [ CONTRACT_ADDRESS_DOMAIN_SIZE , Felt :: ONE , Felt :: ZERO , Felt :: ONE ] )
302+ . unwrap_err ( ) ;
292303 assert_matches ! ( err, RetdataDeserializationError :: ContractAddressConversionError { .. } ) ;
293304}
294305
306+ #[ rstest]
307+ fn staker_try_from_invalid_public_key ( ) {
308+ let err = ContractStaker :: try_from ( [ Felt :: ONE , Felt :: TWO , Felt :: TWO , Felt :: THREE ] ) . unwrap_err ( ) ;
309+ assert_matches ! ( err, RetdataDeserializationError :: UnexpectedEnumVariant { .. } ) ;
310+ }
311+
295312#[ rstest]
296313fn staker_try_from_invalid_staked_amount ( ) {
297- let err = Staker :: try_from ( [ Felt :: ONE , Felt :: MAX , Felt :: ONE ] ) . unwrap_err ( ) ; // Felt::MAX is too big for u128
314+ let err = ContractStaker :: try_from ( [ Felt :: ONE , Felt :: MAX , Felt :: ZERO , Felt :: ONE ] ) . unwrap_err ( ) ; // Felt::MAX is too big for u128
298315 assert_matches ! ( err, RetdataDeserializationError :: U128ConversionError { .. } ) ;
299316}
300317
@@ -304,19 +321,19 @@ fn staker_try_from_invalid_staked_amount() {
304321fn staker_array_retdata_try_from_valid ( #[ case] num_structs : usize ) {
305322 let valid_retdata = [
306323 [ Felt :: from ( num_structs) ] . as_slice ( ) ,
307- vec ! [ Felt :: ONE ; Staker :: CAIRO_OBJECT_NUM_FELTS * num_structs] . as_slice ( ) ,
324+ vec ! [ Felt :: ONE ; ContractStaker :: CAIRO_OBJECT_NUM_FELTS * num_structs] . as_slice ( ) ,
308325 ]
309326 . concat ( ) ;
310327
311- let result = Staker :: from_retdata_many ( Retdata ( valid_retdata) ) . unwrap ( ) ;
328+ let result = ContractStaker :: from_retdata_many ( Retdata ( valid_retdata) ) . unwrap ( ) ;
312329 assert_eq ! ( result. len( ) , num_structs) ;
313330}
314331
315332#[ rstest]
316333#[ case:: empty_retdata( vec![ ] ) ]
317- #[ case:: missing_num_structs( vec![ Felt :: ONE ; Staker :: CAIRO_OBJECT_NUM_FELTS * 2 ] ) ]
318- #[ case:: invalid_staker_length( vec![ Felt :: ONE ; Staker :: CAIRO_OBJECT_NUM_FELTS - 1 ] ) ]
334+ #[ case:: missing_num_structs( vec![ Felt :: ONE ; ContractStaker :: CAIRO_OBJECT_NUM_FELTS * 2 ] ) ]
335+ #[ case:: invalid_staker_length( vec![ Felt :: ONE ; ContractStaker :: CAIRO_OBJECT_NUM_FELTS - 1 ] ) ]
319336fn staker_array_retdata_try_from_invalid_length ( #[ case] retdata : Vec < Felt > ) {
320- let err = Staker :: from_retdata_many ( Retdata ( retdata) ) . unwrap_err ( ) ;
337+ let err = ContractStaker :: from_retdata_many ( Retdata ( retdata) ) . unwrap_err ( ) ;
321338 assert_matches ! ( err, RetdataDeserializationError :: InvalidArrayLength { .. } ) ;
322339}
0 commit comments