@@ -151,7 +151,8 @@ impl Meta {
151
151
) -> Result < ( ) , InstructionError > {
152
152
// verify that lockup has expired or that the authorization
153
153
// is *also* signed by the custodian
154
- if self . lockup . is_in_force ( clock, signers) {
154
+ if stake_authorize == StakeAuthorize :: Withdrawer && self . lockup . is_in_force ( clock, signers)
155
+ {
155
156
return Err ( StakeError :: LockupInForce . into ( ) ) ;
156
157
}
157
158
self . authorized
@@ -948,23 +949,28 @@ mod tests {
948
949
meta. authorize( & staker, StakeAuthorize :: Staker , & signers, & clock) ,
949
950
Ok ( ( ) )
950
951
) ;
951
- // verify lockup check
952
+ // verify staker not subject to lockup, but withdrawer is
952
953
meta. lockup . epoch = 1 ;
953
954
assert_eq ! (
954
955
meta. authorize( & staker, StakeAuthorize :: Staker , & signers, & clock) ,
956
+ Ok ( ( ) )
957
+ ) ;
958
+ // verify lockup check
959
+ assert_eq ! (
960
+ meta. authorize( & staker, StakeAuthorize :: Withdrawer , & signers, & clock) ,
955
961
Err ( StakeError :: LockupInForce . into( ) )
956
962
) ;
957
963
// verify lockup check defeated by custodian
958
964
signers. insert ( custodian) ;
959
965
assert_eq ! (
960
- meta. authorize( & staker, StakeAuthorize :: Staker , & signers, & clock) ,
966
+ meta. authorize( & staker, StakeAuthorize :: Withdrawer , & signers, & clock) ,
961
967
Ok ( ( ) )
962
968
) ;
963
969
// verify lock expiry
964
970
signers. remove ( & custodian) ;
965
971
clock. epoch = 1 ;
966
972
assert_eq ! (
967
- meta. authorize( & staker, StakeAuthorize :: Staker , & signers, & clock) ,
973
+ meta. authorize( & staker, StakeAuthorize :: Withdrawer , & signers, & clock) ,
968
974
Ok ( ( ) )
969
975
) ;
970
976
}
0 commit comments