@@ -370,6 +370,10 @@ impl Processor {
370
370
371
371
account. delegate = COption :: None ;
372
372
account. delegated_amount = 0 ;
373
+
374
+ if account. is_native ( ) {
375
+ account. close_authority = COption :: None ;
376
+ }
373
377
}
374
378
AuthorityType :: CloseAccount => {
375
379
let authority = account. close_authority . unwrap_or ( account. owner ) ;
@@ -5066,6 +5070,9 @@ mod tests {
5066
5070
let mut account3_account = SolanaAccount :: new ( account_minimum_balance ( ) , 0 , & program_id) ;
5067
5071
let owner_key = Pubkey :: new_unique ( ) ;
5068
5072
let mut owner_account = SolanaAccount :: default ( ) ;
5073
+ let owner2_key = Pubkey :: new_unique ( ) ;
5074
+ let mut owner2_account = SolanaAccount :: default ( ) ;
5075
+ let owner3_key = Pubkey :: new_unique ( ) ;
5069
5076
let mut rent_sysvar = rent_sysvar ( ) ;
5070
5077
5071
5078
// initialize native account
@@ -5205,13 +5212,49 @@ mod tests {
5205
5212
assert ! ( account. is_native( ) ) ;
5206
5213
assert_eq ! ( account. amount, 40 ) ;
5207
5214
5215
+ // set close authority
5216
+ do_process_instruction (
5217
+ set_authority (
5218
+ & program_id,
5219
+ & account_key,
5220
+ Some ( & owner3_key) ,
5221
+ AuthorityType :: CloseAccount ,
5222
+ & owner_key,
5223
+ & [ ] ,
5224
+ )
5225
+ . unwrap ( ) ,
5226
+ vec ! [ & mut account_account, & mut owner_account] ,
5227
+ )
5228
+ . unwrap ( ) ;
5229
+ let account = Account :: unpack_unchecked ( & account_account. data ) . unwrap ( ) ;
5230
+ assert_eq ! ( account. close_authority, COption :: Some ( owner3_key) ) ;
5231
+
5232
+ // set new account owner
5233
+ do_process_instruction (
5234
+ set_authority (
5235
+ & program_id,
5236
+ & account_key,
5237
+ Some ( & owner2_key) ,
5238
+ AuthorityType :: AccountOwner ,
5239
+ & owner_key,
5240
+ & [ ] ,
5241
+ )
5242
+ . unwrap ( ) ,
5243
+ vec ! [ & mut account_account, & mut owner_account] ,
5244
+ )
5245
+ . unwrap ( ) ;
5246
+
5247
+ // close authority cleared
5248
+ let account = Account :: unpack_unchecked ( & account_account. data ) . unwrap ( ) ;
5249
+ assert_eq ! ( account. close_authority, COption :: None ) ;
5250
+
5208
5251
// close native account
5209
5252
do_process_instruction (
5210
- close_account ( & program_id, & account_key, & account3_key, & owner_key , & [ ] ) . unwrap ( ) ,
5253
+ close_account ( & program_id, & account_key, & account3_key, & owner2_key , & [ ] ) . unwrap ( ) ,
5211
5254
vec ! [
5212
5255
& mut account_account,
5213
5256
& mut account3_account,
5214
- & mut owner_account ,
5257
+ & mut owner2_account ,
5215
5258
] ,
5216
5259
)
5217
5260
. unwrap ( ) ;
0 commit comments