Skip to content

Commit

Permalink
anchor: program migration
Browse files Browse the repository at this point in the history
  • Loading branch information
yurushao committed Jan 24, 2025
1 parent 0ca0f2c commit 8b8d58c
Show file tree
Hide file tree
Showing 17 changed files with 2,641 additions and 5,136 deletions.
18 changes: 9 additions & 9 deletions anchor/programs/glam/src/constants.rs
Original file line number Diff line number Diff line change
Expand Up @@ -2,24 +2,24 @@ use anchor_lang::prelude::*;
use solana_program::pubkey;

#[constant]
pub const SEED_STATE: &str = "fund";
pub const SEED_STATE: &str = "state";
#[constant]
pub const SEED_VAULT: &str = "treasury";
pub const SEED_VAULT: &str = "vault";
#[constant]
pub const SEED_METADATA: &str = "openfunds";
pub const SEED_METADATA: &str = "metadata";
#[constant]
pub const SEED_MINT: &str = "share";
pub const SEED_MINT: &str = "mint";

pub const DEFAULT_DRIFT_USER_NAME: [u8; 32] = [
b'G', b'L', b'A', b'M', b' ', b'*', b'.', b'+', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
];

pub const MAX_ASSETS: usize = 5;
pub const MAX_SHARE_CLASSES: usize = 3;
pub const MAX_SIZE_NAME: usize = 50;
pub const MAX_SIZE_SYMBOL: usize = 20;
pub const MAX_SIZE_URI: usize = 100;
pub const MAX_ASSETS: usize = 100;
pub const MAX_MINTS: usize = 1;
pub const MAX_SIZE_SYMBOL: usize = 32;
pub const MAX_SIZE_NAME: usize = 64;
pub const MAX_SIZE_URI: usize = 128;

pub const WSOL: Pubkey = pubkey!("So11111111111111111111111111111111111111112");
pub const MSOL: Pubkey = pubkey!("mSoLzYCxHdYgdzU16g5QSh3i5K3z3KZK7ytfqcJm7So");
Expand Down
12 changes: 9 additions & 3 deletions anchor/programs/glam/src/error.rs
Original file line number Diff line number Diff line change
Expand Up @@ -7,17 +7,23 @@ pub enum AccessError {

#[msg("Integration is disabled")]
IntegrationDisabled,

#[msg("Wrong state account type")]
WrongStateType,
}

#[error_code]
pub enum StateError {
#[msg("Name too long: max 50 chars")]
#[msg("Invalid account type")]
InvalidAccountType,

#[msg("Name too long: max 64 chars")]
InvalidName,

#[msg("Symbol too long: max 50 chars")]
#[msg("Symbol too long: max 32 chars")]
InvalidSymbol,

#[msg("Uri too long: max 20")]
#[msg("Uri too long: max 128 chars")]
InvalidUri,

#[msg("Too many assets: max 100")]
Expand Down
18 changes: 9 additions & 9 deletions anchor/programs/glam/src/instructions/drift.rs
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,7 @@ pub struct DriftInitialize<'info> {
}

#[access_control(acl::check_access(&ctx.accounts.state, &ctx.accounts.signer.key, Permission::DriftInitialize))]
#[access_control(acl::check_integration(&ctx.accounts.state, IntegrationName::Drift))]
#[access_control(acl::check_integration(&ctx.accounts.state, Integration::Drift))]
#[vault_signer_seeds]
pub fn initialize_handler(ctx: Context<DriftInitialize>) -> Result<()> {
initialize_user_stats(CpiContext::new_with_signer(
Expand Down Expand Up @@ -102,7 +102,7 @@ pub struct DriftUpdate<'info> {
}

#[access_control(acl::check_access(&ctx.accounts.state, &ctx.accounts.signer.key, Permission::DriftUpdateUser))]
#[access_control(acl::check_integration(&ctx.accounts.state, IntegrationName::Drift))]
#[access_control(acl::check_integration(&ctx.accounts.state, Integration::Drift))]
#[vault_signer_seeds]
pub fn update_user_custom_margin_ratio_handler(
ctx: Context<DriftUpdate>,
Expand All @@ -126,7 +126,7 @@ pub fn update_user_custom_margin_ratio_handler(
}

#[access_control(acl::check_access(&ctx.accounts.state, &ctx.accounts.signer.key, Permission::DriftUpdateUser))]
#[access_control(acl::check_integration(&ctx.accounts.state, IntegrationName::Drift))]
#[access_control(acl::check_integration(&ctx.accounts.state, Integration::Drift))]
#[vault_signer_seeds]
pub fn update_user_margin_trading_enabled_handler(
ctx: Context<DriftUpdate>,
Expand All @@ -150,7 +150,7 @@ pub fn update_user_margin_trading_enabled_handler(
}

#[access_control(acl::check_access(&ctx.accounts.state, &ctx.accounts.signer.key, Permission::DriftUpdateUser))]
#[access_control(acl::check_integration(&ctx.accounts.state, IntegrationName::Drift))]
#[access_control(acl::check_integration(&ctx.accounts.state, Integration::Drift))]
#[vault_signer_seeds]
pub fn update_user_delegate_handler(
ctx: Context<DriftUpdate>,
Expand Down Expand Up @@ -204,7 +204,7 @@ pub struct DriftDeposit<'info> {
}

#[access_control(acl::check_access(&ctx.accounts.state, &ctx.accounts.signer.key, Permission::DriftDeposit))]
#[access_control(acl::check_integration(&ctx.accounts.state, IntegrationName::Drift))]
#[access_control(acl::check_integration(&ctx.accounts.state, Integration::Drift))]
#[vault_signer_seeds]
pub fn deposit_handler<'c: 'info, 'info>(
ctx: Context<'_, '_, 'c, 'info, DriftDeposit<'info>>,
Expand Down Expand Up @@ -267,7 +267,7 @@ pub struct DriftWithdraw<'info> {
}

#[access_control(acl::check_access(&ctx.accounts.state, &ctx.accounts.signer.key, Permission::DriftWithdraw))]
#[access_control(acl::check_integration(&ctx.accounts.state, IntegrationName::Drift))]
#[access_control(acl::check_integration(&ctx.accounts.state, Integration::Drift))]
#[vault_signer_seeds]
pub fn withdraw_handler<'c: 'info, 'info>(
ctx: Context<'_, '_, 'c, 'info, DriftWithdraw<'info>>,
Expand Down Expand Up @@ -324,7 +324,7 @@ pub struct DriftDeleteUser<'info> {
}

#[access_control(acl::check_access(&ctx.accounts.state, &ctx.accounts.signer.key, Permission::DriftDeleteUser))]
#[access_control(acl::check_integration(&ctx.accounts.state, IntegrationName::Drift))]
#[access_control(acl::check_integration(&ctx.accounts.state, Integration::Drift))]
#[vault_signer_seeds]
pub fn delete_user_handler(ctx: Context<DriftDeleteUser>) -> Result<()> {
delete_user(CpiContext::new_with_signer(
Expand Down Expand Up @@ -365,7 +365,7 @@ pub struct DriftPlaceOrders<'info> {
}

#[access_control(acl::check_access(&ctx.accounts.state, &ctx.accounts.signer.key, Permission::DriftPlaceOrders))]
#[access_control(acl::check_integration(&ctx.accounts.state, IntegrationName::Drift))]
#[access_control(acl::check_integration(&ctx.accounts.state, Integration::Drift))]
#[vault_signer_seeds]
pub fn place_orders_handler<'c: 'info, 'info>(
ctx: Context<'_, '_, 'c, 'info, DriftPlaceOrders<'info>>,
Expand Down Expand Up @@ -452,7 +452,7 @@ pub struct DriftCancelOrders<'info> {
}

#[access_control(acl::check_access(&ctx.accounts.state, &ctx.accounts.signer.key, Permission::DriftCancelOrders))]
#[access_control(acl::check_integration(&ctx.accounts.state, IntegrationName::Drift))]
#[access_control(acl::check_integration(&ctx.accounts.state, Integration::Drift))]
#[vault_signer_seeds]
pub fn cancel_orders_handler<'c: 'info, 'info>(
ctx: Context<'_, '_, 'c, 'info, DriftCancelOrders<'info>>,
Expand Down
12 changes: 6 additions & 6 deletions anchor/programs/glam/src/instructions/investor.rs
Original file line number Diff line number Diff line change
Expand Up @@ -90,7 +90,7 @@ pub fn subscribe_handler<'c: 'info, 'info>(
skip_state: bool,
) -> Result<()> {
let state = &ctx.accounts.state;
require!(state.is_enabled(), StateError::Disabled);
require!(state.enabled, StateError::Disabled);

let external_vault_accounts =
state.get_pubkeys_from_engine_field(EngineFieldName::ExternalVaultAccounts);
Expand Down Expand Up @@ -154,7 +154,7 @@ pub fn subscribe_handler<'c: 'info, 'info>(
}
}

let state_assets = state.assets().unwrap();
let state_assets = &state.assets;
let asset_idx = state_assets
.iter()
.position(|&asset| asset == ctx.accounts.asset.key());
Expand All @@ -175,7 +175,7 @@ pub fn subscribe_handler<'c: 'info, 'info>(

let aum_components = get_aum_components(
Action::Subscribe,
state_assets,
&state_assets,
ctx.remaining_accounts,
&ctx.accounts.vault,
&external_vault_accounts,
Expand Down Expand Up @@ -325,7 +325,7 @@ pub fn redeem_handler<'c: 'info, 'info>(
skip_state: bool,
) -> Result<()> {
let state = &ctx.accounts.state;
require!(state.is_enabled(), StateError::Disabled);
require!(state.enabled, StateError::Disabled);

let external_vault_accounts =
state.get_pubkeys_from_engine_field(EngineFieldName::ExternalVaultAccounts);
Expand Down Expand Up @@ -397,11 +397,11 @@ pub fn redeem_handler<'c: 'info, 'info>(
share_expo,
);

let assets = state.assets().unwrap();
let assets = &state.assets;
let skip_prices = should_transfer_everything || in_kind;
let aum_components = get_aum_components(
Action::Redeem,
assets,
&assets,
ctx.remaining_accounts,
&ctx.accounts.vault,
&external_vault_accounts,
Expand Down
31 changes: 15 additions & 16 deletions anchor/programs/glam/src/instructions/jupiter.rs
Original file line number Diff line number Diff line change
Expand Up @@ -189,20 +189,19 @@ fn is_lst<'info>(mint: &Pubkey, stake_pool_account: Option<&AccountInfo<'info>>)
}

#[access_control(
acl::check_integration(&ctx.accounts.state, IntegrationName::JupiterSwap)
acl::check_integration(&ctx.accounts.state, Integration::JupiterSwap)
)]
#[vault_signer_seeds]
pub fn swap_handler<'c: 'info, 'info>(
ctx: Context<'_, '_, 'c, 'info, JupiterSwap<'info>>,
amount: u64,
data: Vec<u8>,
) -> Result<()> {
let state = ctx.accounts.state.clone();
let assets = ctx.accounts.state.assets_mut().unwrap();
let state = &mut ctx.accounts.state;

// Check if input and output mints are in the assets allowlist
let input_in_assets = assets.contains(&ctx.accounts.input_mint.key());
let output_in_assets = assets.contains(&ctx.accounts.output_mint.key());
let input_in_assets = state.assets.contains(&ctx.accounts.input_mint.key());
let output_in_assets = state.assets.contains(&ctx.accounts.output_mint.key());

let input_is_lst = is_lst(
&ctx.accounts.input_mint.key(),
Expand All @@ -228,10 +227,10 @@ pub fn swap_handler<'c: 'info, 'info>(
// TODO: should we add missing assets to the list after permission check?
// This will gradually expand the assets allowlist and auto escalate JupiterSwapAllowlisted privilege over time
if !input_in_assets {
assets.push(ctx.accounts.input_mint.key());
state.assets.push(ctx.accounts.input_mint.key());
}
if !output_in_assets {
assets.push(ctx.accounts.output_mint.key());
state.assets.push(ctx.accounts.output_mint.key());
}

// Parse Jupiter Swap accounts
Expand Down Expand Up @@ -332,7 +331,7 @@ pub struct InitLockedVoterEscrow<'info> {
acl::check_access(&ctx.accounts.state, &ctx.accounts.signer.key, Permission::StakeJup)
)]
#[access_control(
acl::check_integration(&ctx.accounts.state, IntegrationName::JupiterVote)
acl::check_integration(&ctx.accounts.state, Integration::JupiterVote)
)]
#[vault_signer_seeds]
pub fn init_locked_voter_escrow_handler<'info>(ctx: Context<InitLockedVoterEscrow>) -> Result<()> {
Expand Down Expand Up @@ -379,7 +378,7 @@ pub struct ToogleMaxLock<'info> {
vec![Permission::StakeJup, Permission::UnstakeJup])
)]
#[access_control(
acl::check_integration(&ctx.accounts.state, IntegrationName::JupiterVote)
acl::check_integration(&ctx.accounts.state, Integration::JupiterVote)
)]
#[vault_signer_seeds]
pub fn toggle_max_lock_handler<'info>(ctx: Context<ToogleMaxLock>, value: bool) -> Result<()> {
Expand Down Expand Up @@ -430,7 +429,7 @@ pub struct IncreaseLockedAmount<'info> {
acl::check_access(&ctx.accounts.state, &ctx.accounts.signer.key, Permission::StakeJup)
)]
#[access_control(
acl::check_integration(&ctx.accounts.state, IntegrationName::JupiterVote)
acl::check_integration(&ctx.accounts.state, Integration::JupiterVote)
)]
#[vault_signer_seeds]
pub fn increase_locked_amount_handler<'info>(
Expand Down Expand Up @@ -485,7 +484,7 @@ pub struct PartialUnstaking<'info> {
acl::check_access(&ctx.accounts.state, &ctx.accounts.signer.key, Permission::UnstakeJup)
)]
#[access_control(
acl::check_integration(&ctx.accounts.state, IntegrationName::JupiterVote)
acl::check_integration(&ctx.accounts.state, Integration::JupiterVote)
)]
#[vault_signer_seeds]
pub fn open_partial_unstaking_handler<'info>(
Expand Down Expand Up @@ -515,7 +514,7 @@ pub fn open_partial_unstaking_handler<'info>(
acl::check_access(&ctx.accounts.state, &ctx.accounts.signer.key, Permission::UnstakeJup)
)]
#[access_control(
acl::check_integration(&ctx.accounts.state, IntegrationName::JupiterVote)
acl::check_integration(&ctx.accounts.state, Integration::JupiterVote)
)]
#[vault_signer_seeds]
pub fn merge_partial_unstaking_handler<'info>(ctx: Context<PartialUnstaking>) -> Result<()> {
Expand Down Expand Up @@ -563,7 +562,7 @@ pub struct WithdrawAllStakedJup<'info> {
acl::check_access(&ctx.accounts.state, &ctx.accounts.signer.key, Permission::UnstakeJup)
)]
#[access_control(
acl::check_integration(&ctx.accounts.state, IntegrationName::JupiterVote)
acl::check_integration(&ctx.accounts.state, Integration::JupiterVote)
)]
#[vault_signer_seeds]
pub fn withdraw_all_staked_jup_handler<'info>(ctx: Context<WithdrawAllStakedJup>) -> Result<()> {
Expand Down Expand Up @@ -618,7 +617,7 @@ pub struct WithdrawPartialUnstaking<'info> {
acl::check_access(&ctx.accounts.state, &ctx.accounts.signer.key, Permission::UnstakeJup)
)]
#[access_control(
acl::check_integration(&ctx.accounts.state, IntegrationName::JupiterVote)
acl::check_integration(&ctx.accounts.state, Integration::JupiterVote)
)]
#[vault_signer_seeds]
pub fn withdraw_partial_unstaking_handler<'info>(
Expand Down Expand Up @@ -668,7 +667,7 @@ pub struct NewVote<'info> {
acl::check_access(&ctx.accounts.state, &ctx.accounts.signer.key, Permission::VoteOnProposal)
)]
#[access_control(
acl::check_integration(&ctx.accounts.state, IntegrationName::JupiterVote)
acl::check_integration(&ctx.accounts.state, Integration::JupiterVote)
)]
#[vault_signer_seeds]
pub fn new_vote_handler<'info>(ctx: Context<NewVote>) -> Result<()> {
Expand Down Expand Up @@ -723,7 +722,7 @@ pub struct CastVote<'info> {
acl::check_access(&ctx.accounts.state, &ctx.accounts.signer.key, Permission::VoteOnProposal)
)]
#[access_control(
acl::check_integration(&ctx.accounts.state, IntegrationName::JupiterVote)
acl::check_integration(&ctx.accounts.state, Integration::JupiterVote)
)]
#[vault_signer_seeds]
pub fn cast_vote_handler<'info>(ctx: Context<CastVote>, side: u8) -> Result<()> {
Expand Down
10 changes: 5 additions & 5 deletions anchor/programs/glam/src/instructions/marinade.rs
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ use marinade::state::delayed_unstake_ticket::TicketAccountData;
#[access_control(
acl::check_access(&ctx.accounts.state, &ctx.accounts.signer.key, Permission::Stake)
)]
#[access_control(acl::check_integration(&ctx.accounts.state, IntegrationName::Marinade))]
#[access_control(acl::check_integration(&ctx.accounts.state, Integration::Marinade))]
#[vault_signer_seeds]
pub fn marinade_deposit_sol_handler<'c: 'info, 'info>(
ctx: Context<MarinadeDepositSol>,
Expand Down Expand Up @@ -45,7 +45,7 @@ pub fn marinade_deposit_sol_handler<'c: 'info, 'info>(
#[access_control(
acl::check_access(&ctx.accounts.state, &ctx.accounts.signer.key, Permission::Stake)
)]
#[access_control(acl::check_integration(&ctx.accounts.state, IntegrationName::Marinade))]
#[access_control(acl::check_integration(&ctx.accounts.state, Integration::Marinade))]
#[vault_signer_seeds]
pub fn marinade_deposit_stake_handler<'c: 'info, 'info>(
ctx: Context<MarinadeDepositStake>,
Expand Down Expand Up @@ -78,7 +78,7 @@ pub fn marinade_deposit_stake_handler<'c: 'info, 'info>(
#[access_control(
acl::check_access(&ctx.accounts.state, &ctx.accounts.signer.key, Permission::Unstake)
)]
#[access_control(acl::check_integration(&ctx.accounts.state, IntegrationName::Marinade))]
#[access_control(acl::check_integration(&ctx.accounts.state, Integration::Marinade))]
#[vault_signer_seeds]
pub fn delayed_unstake_handler<'c: 'info, 'info>(
ctx: Context<MarinadeDelayedUnstake>,
Expand Down Expand Up @@ -142,7 +142,7 @@ pub fn delayed_unstake_handler<'c: 'info, 'info>(
#[access_control(
acl::check_access(&ctx.accounts.state, &ctx.accounts.signer.key, Permission::Unstake)
)]
#[access_control(acl::check_integration(&ctx.accounts.state, IntegrationName::Marinade))]
#[access_control(acl::check_integration(&ctx.accounts.state, Integration::Marinade))]
#[vault_signer_seeds]
pub fn claim_tickets_handler<'info>(
ctx: Context<'_, '_, '_, 'info, MarinadeClaimTickets<'info>>,
Expand Down Expand Up @@ -180,7 +180,7 @@ pub fn claim_tickets_handler<'info>(
#[access_control(
acl::check_access(&ctx.accounts.state, &ctx.accounts.signer.key, Permission::LiquidUnstake)
)]
#[access_control(acl::check_integration(&ctx.accounts.state, IntegrationName::Marinade))]
#[access_control(acl::check_integration(&ctx.accounts.state, Integration::Marinade))]
#[vault_signer_seeds]
pub fn liquid_unstake_handler<'c: 'info, 'info>(
ctx: Context<MarinadeLiquidUnstake>,
Expand Down
Loading

0 comments on commit 8b8d58c

Please sign in to comment.