|
1 | 1 | use crate::errors::DripError; |
2 | | -use crate::instruction_accounts::{InitializeVaultAccountsBumps, WithdrawAAccounts}; |
| 2 | +use crate::instruction_accounts::{ |
| 3 | + ClosePositionAccountAccounts, InitializeVaultAccountsBumps, WithdrawAAccounts, |
| 4 | +}; |
3 | 5 | use crate::interactions::executor::CpiExecutor; |
4 | 6 | use crate::interactions::transfer_token::TransferToken; |
5 | 7 | use crate::state::{ |
@@ -29,6 +31,9 @@ pub enum Admin<'a, 'info> { |
29 | 31 | WithdrawA { |
30 | 32 | accounts: &'a mut WithdrawAAccounts<'info>, |
31 | 33 | }, |
| 34 | + ClosePositionAccount { |
| 35 | + accounts: &'a mut ClosePositionAccountAccounts<'info>, |
| 36 | + }, |
32 | 37 | } |
33 | 38 |
|
34 | 39 | impl<'a, 'info> Validatable for Admin<'a, 'info> { |
@@ -122,6 +127,24 @@ impl<'a, 'info> Validatable for Admin<'a, 'info> { |
122 | 127 | DripError::VaultTokenAAccountIsEmpty |
123 | 128 | ); |
124 | 129 | } |
| 130 | + Admin::ClosePositionAccount { accounts } => { |
| 131 | + validate!( |
| 132 | + accounts.admin.key() == accounts.vault_proto_config.admin, |
| 133 | + DripError::SignerIsNotAdmin |
| 134 | + ); |
| 135 | + |
| 136 | + validate!( |
| 137 | + accounts.vault_proto_config.key() == accounts.vault.proto_config, |
| 138 | + DripError::InvalidVaultProtoConfigReference |
| 139 | + ); |
| 140 | + |
| 141 | + validate!( |
| 142 | + accounts.vault.key() == accounts.position.vault.key(), |
| 143 | + DripError::InvalidVaultReference |
| 144 | + ); |
| 145 | + |
| 146 | + validate!(accounts.position.is_closed, DripError::PositionIsNotClosed); |
| 147 | + } |
125 | 148 | } |
126 | 149 |
|
127 | 150 | Ok(()) |
@@ -168,6 +191,11 @@ impl<'a, 'info> Executable for Admin<'a, 'info> { |
168 | 191 | let signer: &Vault = &accounts.vault; |
169 | 192 | cpi_executor.execute_all(vec![&Some(&transfer_a_to_admin)], signer)?; |
170 | 193 | } |
| 194 | + Admin::ClosePositionAccount { accounts } => { |
| 195 | + accounts |
| 196 | + .position |
| 197 | + .close(accounts.sol_destination.to_account_info())?; |
| 198 | + } |
171 | 199 | } |
172 | 200 |
|
173 | 201 | Ok(()) |
|
0 commit comments