Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
72 changes: 72 additions & 0 deletions idl/drip.ts
Original file line number Diff line number Diff line change
Expand Up @@ -839,6 +839,37 @@ export type Drip = {
}
],
"args": []
},
{
"name": "adminClosePositionAccount",
"accounts": [
{
"name": "admin",
"isMut": false,
"isSigner": true
},
{
"name": "vaultProtoConfig",
"isMut": false,
"isSigner": false
},
{
"name": "vault",
"isMut": false,
"isSigner": false
},
{
"name": "position",
"isMut": true,
"isSigner": false
},
{
"name": "solDestination",
"isMut": true,
"isSigner": false
}
],
"args": []
}
],
"accounts": [
Expand Down Expand Up @@ -1286,6 +1317,11 @@ export type Drip = {
"code": 6028,
"name": "InvalidSolDestination",
"msg": "Invalid sol_destination"
},
{
"code": 6029,
"name": "PositionIsNotClosed",
"msg": "Position is not closed"
}
]
};
Expand Down Expand Up @@ -2131,6 +2167,37 @@ export const IDL: Drip = {
}
],
"args": []
},
{
"name": "adminClosePositionAccount",
"accounts": [
{
"name": "admin",
"isMut": false,
"isSigner": true
},
{
"name": "vaultProtoConfig",
"isMut": false,
"isSigner": false
},
{
"name": "vault",
"isMut": false,
"isSigner": false
},
{
"name": "position",
"isMut": true,
"isSigner": false
},
{
"name": "solDestination",
"isMut": true,
"isSigner": false
}
],
"args": []
}
],
"accounts": [
Expand Down Expand Up @@ -2578,6 +2645,11 @@ export const IDL: Drip = {
"code": 6028,
"name": "InvalidSolDestination",
"msg": "Invalid sol_destination"
},
{
"code": 6029,
"name": "PositionIsNotClosed",
"msg": "Position is not closed"
}
]
};
36 changes: 36 additions & 0 deletions idl/idl.json
Original file line number Diff line number Diff line change
Expand Up @@ -839,6 +839,37 @@
}
],
"args": []
},
{
"name": "adminClosePositionAccount",
"accounts": [
{
"name": "admin",
"isMut": false,
"isSigner": true
},
{
"name": "vaultProtoConfig",
"isMut": false,
"isSigner": false
},
{
"name": "vault",
"isMut": false,
"isSigner": false
},
{
"name": "position",
"isMut": true,
"isSigner": false
},
{
"name": "solDestination",
"isMut": true,
"isSigner": false
}
],
"args": []
}
],
"accounts": [
Expand Down Expand Up @@ -1286,6 +1317,11 @@
"code": 6028,
"name": "InvalidSolDestination",
"msg": "Invalid sol_destination"
},
{
"code": 6029,
"name": "PositionIsNotClosed",
"msg": "Position is not closed"
}
]
}
30 changes: 29 additions & 1 deletion programs/drip/src/actions/admin.rs
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
use crate::errors::DripError;
use crate::instruction_accounts::{InitializeVaultAccountsBumps, WithdrawAAccounts};
use crate::instruction_accounts::{
ClosePositionAccountAccounts, InitializeVaultAccountsBumps, WithdrawAAccounts,
};
use crate::interactions::executor::CpiExecutor;
use crate::interactions::transfer_token::TransferToken;
use crate::state::{
Expand Down Expand Up @@ -29,6 +31,9 @@ pub enum Admin<'a, 'info> {
WithdrawA {
accounts: &'a mut WithdrawAAccounts<'info>,
},
ClosePositionAccount {
accounts: &'a mut ClosePositionAccountAccounts<'info>,
},
}

impl<'a, 'info> Validatable for Admin<'a, 'info> {
Expand Down Expand Up @@ -122,6 +127,24 @@ impl<'a, 'info> Validatable for Admin<'a, 'info> {
DripError::VaultTokenAAccountIsEmpty
);
}
Admin::ClosePositionAccount { accounts } => {
validate!(
accounts.admin.key() == accounts.vault_proto_config.admin,
DripError::SignerIsNotAdmin
);

validate!(
accounts.vault_proto_config.key() == accounts.vault.proto_config,
DripError::InvalidVaultProtoConfigReference
);

validate!(
accounts.vault.key() == accounts.position.vault.key(),
DripError::InvalidVaultReference
);

validate!(accounts.position.is_closed, DripError::PositionIsNotClosed);
}
}

Ok(())
Expand Down Expand Up @@ -168,6 +191,11 @@ impl<'a, 'info> Executable for Admin<'a, 'info> {
let signer: &Vault = &accounts.vault;
cpi_executor.execute_all(vec![&Some(&transfer_a_to_admin)], signer)?;
}
Admin::ClosePositionAccount { accounts } => {
accounts
.position
.close(accounts.sol_destination.to_account_info())?;
}
}

Ok(())
Expand Down
2 changes: 2 additions & 0 deletions programs/drip/src/errors/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -61,4 +61,6 @@ pub enum DripError {
VaultTokenAAccountIsEmpty,
#[msg("Invalid sol_destination")]
InvalidSolDestination,
#[msg("Position is not closed")]
PositionIsNotClosed,
}
18 changes: 17 additions & 1 deletion programs/drip/src/instruction_accounts/admin.rs
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
use crate::state::{Vault, VaultProtoConfig};
use crate::state::{Position, Vault, VaultProtoConfig};
use anchor_lang::prelude::*;
use anchor_spl::associated_token::AssociatedToken;
use anchor_spl::token::{Mint, Token, TokenAccount};
Expand Down Expand Up @@ -104,3 +104,19 @@ pub struct WithdrawAAccounts<'info> {

pub token_program: Program<'info, Token>,
}

#[derive(Accounts)]
pub struct ClosePositionAccountAccounts<'info> {
pub admin: Signer<'info>,

pub vault_proto_config: Account<'info, VaultProtoConfig>,

pub vault: Account<'info, Vault>,

#[account(mut)]
pub position: Account<'info, Position>,

#[account(mut)]
/// CHECK: We don't care what this account is
pub sol_destination: AccountInfo<'info>,
}
6 changes: 6 additions & 0 deletions programs/drip/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -113,6 +113,12 @@ pub mod drip {
accounts: ctx.accounts,
})
}

pub fn admin_close_position_account(ctx: Context<ClosePositionAccountAccounts>) -> Result<()> {
handle_action(Admin::ClosePositionAccount {
accounts: ctx.accounts,
})
}
}

fn handle_action(action: impl Validatable + Executable) -> Result<()> {
Expand Down
9 changes: 3 additions & 6 deletions programs/drip/src/state/position.rs
Original file line number Diff line number Diff line change
Expand Up @@ -21,8 +21,9 @@ pub struct Position {
pub number_of_swaps: u64, // 8
// deposit_amount_token_a / number_of_swaps
pub periodic_drip_amount: u64, // 8
pub is_closed: bool, // 1
pub bump: u8, // 1
// DEPRECATED FIELD: Position accounts are closed now instead of being marked closed
pub is_closed: bool, // 1
pub bump: u8, // 1
}

impl Position {
Expand Down Expand Up @@ -63,10 +64,6 @@ impl Position {
pub fn increase_withdrawn_amount(&mut self, amount: u64) {
self.withdrawn_token_b_amount = self.withdrawn_token_b_amount.checked_add(amount).unwrap();
}

pub fn close(&mut self) {
self.is_closed = true;
}
}

test_account_size!(Position);
6 changes: 3 additions & 3 deletions yarn.lock
Original file line number Diff line number Diff line change
Expand Up @@ -2971,9 +2971,9 @@ __metadata:
linkType: hard

"ip@npm:^2.0.0":
version: 2.0.0
resolution: "ip@npm:2.0.0"
checksum: cfcfac6b873b701996d71ec82a7dd27ba92450afdb421e356f44044ed688df04567344c36cbacea7d01b1c39a4c732dc012570ebe9bebfb06f27314bca625349
version: 2.0.1
resolution: "ip@npm:2.0.1"
checksum: d765c9fd212b8a99023a4cde6a558a054c298d640fec1020567494d257afd78ca77e37126b1a3ef0e053646ced79a816bf50621d38d5e768cdde0431fa3b0d35
languageName: node
linkType: hard

Expand Down