#[derive(Accounts)]
#[instruction(liquidity_provider: Pubkey)]
pub struct InitPair<'info> {
#[account(mut)]
pub admin: Signer<'info>,
#[account(
init,
payer = admin,
space = 8 + Pair::INIT_SPACE,
seeds = [PAIR_PREFIX, liquidity_provider.as_ref(), stable_coin_mint_address.key().as_ref(), asset_token_mint_address.key().as_ref()],
bump,
)]
pub pair: Account<'info, Pair>,
pub stable_coin_mint_address: InterfaceAccount<'info, Mint>,
pub asset_token_mint_address: InterfaceAccount<'info, Mint>,
#[account(
seeds = [VAULT_AUTHORITY_PREFIX, liquidity_provider.as_ref()],
bump,
)]
pub lp_vault_authority: UncheckedAccount<'info>,
#[account(
init_if_needed,
payer = admin,
associated_token::mint = stable_coin_mint_address,
associated_token::authority = lp_vault_authority,
associated_token::token_program = token_program_stable,
)]
pub stable_coin_vault_token_account: InterfaceAccount<'info, TokenAccount>,
#[account(
init_if_needed,
payer = admin,
associated_token::mint = asset_token_mint_address,
associated_token::authority = lp_vault_authority,
associated_token::token_program = token_program_asset,
)]
pub asset_token_vault_token_account: InterfaceAccount<'info, TokenAccount>,
#[account(
init_if_needed,
payer = admin,
space = 8 + UserVaultInfo::INIT_SPACE,
seeds = [USER_VAULT_PREFIX, stable_coin_mint_address.key().as_ref(), liquidity_provider.as_ref()],
bump,
)]
pub lp_vault_stable_pda: Account<'info, UserVaultInfo>,
#[account(
init_if_needed,
payer = admin,
space = 8 + UserVaultInfo::INIT_SPACE,
seeds = [USER_VAULT_PREFIX, asset_token_mint_address.key().as_ref(), liquidity_provider.as_ref()],
bump,
)]
pub lp_vault_asset_pda: Account<'info, UserVaultInfo>,
#[account(
seeds = [GLOBAL_CONFIG_PREFIX],
bump = global_config.bump,
has_one = admin
)]
pub global_config: Account<'info, GlobalConfig>,
#[account(
init_if_needed,
payer = admin,
space = 8 + LpStableConfig::INIT_SPACE,
seeds = [LP_STABLE_CONFIG_PREFIX, stable_coin_mint_address.key().as_ref(), liquidity_provider.as_ref()],
bump,
)]
pub lp_stable_config: Account<'info, LpStableConfig>,
#[account(
mut,
seeds = [ASSET_CONFIG_PREFIX, stable_coin_mint_address.key().as_ref()],
bump = asset_config_stable.bump,
)]
pub asset_config_stable: Account<'info, AssetConfig>,
#[account(
mut,
seeds = [ASSET_CONFIG_PREFIX, asset_token_mint_address.key().as_ref()],
bump = asset_config_rwa.bump,
)]
pub asset_config_rwa: Account<'info, AssetConfig>,
pub token_program_stable: Interface<'info, TokenInterface>,
pub token_program_asset: Interface<'info, TokenInterface>,
pub associated_token_program: Program<'info, AssociatedToken>,
pub system_program: Program<'info, System>,
}