diff --git a/package.json b/package.json index 096406fb2..295ec00ef 100644 --- a/package.json +++ b/package.json @@ -13,7 +13,7 @@ "dependencies": { "@coral-xyz/anchor": "0.29.0", "@inquirer/prompts": "^7.3.3", - "@metadaoproject/futarchy": "0.5.0-alpha.1", + "@metadaoproject/futarchy": "0.5.0-alpha.2", "@metaplex-foundation/mpl-token-metadata": "^3.2.0", "@metaplex-foundation/umi": "^0.9.1", "@metaplex-foundation/umi-bundle-defaults": "^0.9.1", diff --git a/programs/autocrat/src/events.rs b/programs/autocrat/src/events.rs index 2c580c885..59deb9fcf 100644 --- a/programs/autocrat/src/events.rs +++ b/programs/autocrat/src/events.rs @@ -21,8 +21,8 @@ impl CommonFields { pub struct InitializeDaoEvent { pub common: CommonFields, pub dao: Pubkey, - pub token_mint: Pubkey, - pub usdc_mint: Pubkey, + pub base_mint: Pubkey, + pub quote_mint: Pubkey, pub treasury: Pubkey, pub pass_threshold_bps: u16, pub slots_per_proposal: u64, diff --git a/programs/autocrat/src/instructions/initialize_dao.rs b/programs/autocrat/src/instructions/initialize_dao.rs index 65031a647..e34f30401 100644 --- a/programs/autocrat/src/instructions/initialize_dao.rs +++ b/programs/autocrat/src/instructions/initialize_dao.rs @@ -23,10 +23,10 @@ pub struct InitializeDao<'info> { #[account(mut)] pub payer: Signer<'info>, pub system_program: Program<'info, System>, - pub token_mint: Account<'info, Mint>, + pub base_mint: Account<'info, Mint>, // todo: statically check that this is USDC given a feature flag #[account(mint::decimals = 6)] - pub usdc_mint: Account<'info, Mint>, + pub quote_mint: Account<'info, Mint>, } impl InitializeDao<'_> { @@ -54,8 +54,8 @@ impl InitializeDao<'_> { ); dao.set_inner(Dao { - token_mint: ctx.accounts.token_mint.key(), - usdc_mint: ctx.accounts.usdc_mint.key(), + base_mint: ctx.accounts.base_mint.key(), + quote_mint: ctx.accounts.quote_mint.key(), treasury_pda_bump, treasury, proposal_count: 0, @@ -73,8 +73,8 @@ impl InitializeDao<'_> { emit_cpi!(InitializeDaoEvent { common: CommonFields::new(&clock), dao: dao.key(), - token_mint: ctx.accounts.token_mint.key(), - usdc_mint: ctx.accounts.usdc_mint.key(), + base_mint: ctx.accounts.base_mint.key(), + quote_mint: ctx.accounts.quote_mint.key(), treasury, pass_threshold_bps: dao.pass_threshold_bps, slots_per_proposal: dao.slots_per_proposal, diff --git a/programs/autocrat/src/instructions/initialize_proposal.rs b/programs/autocrat/src/instructions/initialize_proposal.rs index 2d7947f6c..1429073c8 100644 --- a/programs/autocrat/src/instructions/initialize_proposal.rs +++ b/programs/autocrat/src/instructions/initialize_proposal.rs @@ -32,12 +32,12 @@ pub struct InitializeProposal<'info> { )] pub question: Box>, #[account( - constraint = quote_vault.underlying_token_mint == dao.usdc_mint, + constraint = quote_vault.underlying_token_mint == dao.quote_mint, has_one = question, )] pub quote_vault: Account<'info, ConditionalVaultAccount>, #[account( - constraint = base_vault.underlying_token_mint == dao.token_mint, + constraint = base_vault.underlying_token_mint == dao.base_mint, has_one = question, )] pub base_vault: Account<'info, ConditionalVaultAccount>, diff --git a/programs/autocrat/src/state/dao.rs b/programs/autocrat/src/state/dao.rs index 6879867d2..ef0991472 100644 --- a/programs/autocrat/src/state/dao.rs +++ b/programs/autocrat/src/state/dao.rs @@ -5,8 +5,8 @@ pub use super::*; pub struct Dao { pub treasury_pda_bump: u8, pub treasury: Pubkey, - pub token_mint: Pubkey, - pub usdc_mint: Pubkey, + pub base_mint: Pubkey, + pub quote_mint: Pubkey, pub proposal_count: u32, // the percentage, in basis points, the pass price needs to be above the // fail price in order for the proposal to pass diff --git a/programs/launchpad/src/events.rs b/programs/launchpad/src/events.rs index 6fcf279f7..672b37eda 100644 --- a/programs/launchpad/src/events.rs +++ b/programs/launchpad/src/events.rs @@ -28,8 +28,8 @@ pub struct LaunchInitializedEvent { pub launch_signer_pda_bump: u8, pub launch_usdc_vault: Pubkey, pub launch_token_vault: Pubkey, - pub token_mint: Pubkey, - pub usdc_mint: Pubkey, + pub base_mint: Pubkey, + pub quote_mint: Pubkey, pub pda_bump: u8, pub seconds_for_launch: u32, } diff --git a/programs/launchpad/src/instructions/claim.rs b/programs/launchpad/src/instructions/claim.rs index 5bf970aaa..4adba4163 100644 --- a/programs/launchpad/src/instructions/claim.rs +++ b/programs/launchpad/src/instructions/claim.rs @@ -12,8 +12,8 @@ pub struct Claim<'info> { #[account( mut, has_one = launch_signer, - has_one = token_mint, - has_one = launch_token_vault, + has_one = base_mint, + has_one = launch_base_vault, )] pub launch: Account<'info, Launch>, @@ -30,10 +30,10 @@ pub struct Claim<'info> { pub launch_signer: UncheckedAccount<'info>, #[account(mut)] - pub token_mint: Account<'info, Mint>, + pub base_mint: Account<'info, Mint>, #[account(mut)] - pub launch_token_vault: Account<'info, TokenAccount>, + pub launch_base_vault: Account<'info, TokenAccount>, /// CHECK: not used, just for constraints pub funder: UncheckedAccount<'info>, @@ -43,7 +43,7 @@ pub struct Claim<'info> { #[account( mut, - associated_token::mint = token_mint, + associated_token::mint = base_mint, associated_token::authority = funder )] pub funder_token_account: Account<'info, TokenAccount>, @@ -86,7 +86,7 @@ impl Claim<'_> { CpiContext::new_with_signer( ctx.accounts.token_program.to_account_info(), Transfer { - from: ctx.accounts.launch_token_vault.to_account_info(), + from: ctx.accounts.launch_base_vault.to_account_info(), to: ctx.accounts.funder_token_account.to_account_info(), authority: ctx.accounts.launch_signer.to_account_info(), }, diff --git a/programs/launchpad/src/instructions/complete_launch.rs b/programs/launchpad/src/instructions/complete_launch.rs index 772c8601d..4ab6e1e3c 100644 --- a/programs/launchpad/src/instructions/complete_launch.rs +++ b/programs/launchpad/src/instructions/complete_launch.rs @@ -39,18 +39,18 @@ pub const PRICE_SCALE: u128 = 1_000_000_000_000; pub struct CompleteLaunch<'info> { #[account( mut, - has_one = launch_usdc_vault, - has_one = launch_token_vault, + has_one = launch_quote_vault, + has_one = launch_base_vault, has_one = launch_signer, - has_one = token_mint, - has_one = usdc_mint, + has_one = base_mint, + has_one = quote_mint, )] pub launch: Box>, /// CHECK: Token metadata #[account( mut, - seeds = [b"metadata", MPL_TOKEN_METADATA_PROGRAM_ID.as_ref(), token_mint.key().as_ref()], + seeds = [b"metadata", MPL_TOKEN_METADATA_PROGRAM_ID.as_ref(), base_mint.key().as_ref()], seeds::program = MPL_TOKEN_METADATA_PROGRAM_ID, bump )] @@ -75,24 +75,24 @@ pub struct CompleteLaunch<'info> { #[account( mut, - associated_token::mint = usdc_mint, + associated_token::mint = quote_mint, associated_token::authority = launch_signer, )] - pub launch_usdc_vault: Box>, + pub launch_quote_vault: Box>, #[account( mut, - associated_token::mint = token_mint, + associated_token::mint = base_mint, associated_token::authority = launch_signer, )] - pub launch_token_vault: Box>, + pub launch_base_vault: Box>, #[account( mut, - associated_token::mint = usdc_mint, + associated_token::mint = quote_mint, associated_token::authority = dao_treasury, )] - pub treasury_usdc_account: Box>, + pub treasury_quote_account: Box>, /// CHECK: pool lp mint not created yet so we can't initialize it before #[account( @@ -128,9 +128,9 @@ pub struct CompleteLaunch<'info> { pub pool_state: UncheckedAccount<'info>, #[account(mut)] - pub token_mint: Box>, + pub base_mint: Box>, - pub usdc_mint: Box>, + pub quote_mint: Box>, /// CHECK: pool lp mint, init by cp-swap #[account( @@ -154,7 +154,7 @@ pub struct CompleteLaunch<'info> { seeds = [ POOL_VAULT_SEED.as_bytes(), pool_state.key().as_ref(), - token_mint.key().as_ref() + base_mint.key().as_ref() ], seeds::program = cp_swap_program, bump, @@ -167,7 +167,7 @@ pub struct CompleteLaunch<'info> { seeds = [ POOL_VAULT_SEED.as_bytes(), pool_state.key().as_ref(), - usdc_mint.key().as_ref() + quote_mint.key().as_ref() ], seeds::program = cp_swap_program, bump, @@ -275,8 +275,8 @@ impl CompleteLaunch<'_> { dao: ctx.accounts.dao.to_account_info(), payer: ctx.accounts.payer.to_account_info(), system_program: ctx.accounts.system_program.to_account_info(), - token_mint: ctx.accounts.token_mint.to_account_info(), - usdc_mint: ctx.accounts.usdc_mint.to_account_info(), + base_mint: ctx.accounts.base_mint.to_account_info(), + quote_mint: ctx.accounts.quote_mint.to_account_info(), event_authority: ctx.accounts.autocrat_event_authority.to_account_info(), program: ctx.accounts.autocrat_program.to_account_info(), }, @@ -310,8 +310,8 @@ impl CompleteLaunch<'_> { CpiContext::new_with_signer( ctx.accounts.token_program.to_account_info(), MintTo { - mint: ctx.accounts.token_mint.to_account_info(), - to: ctx.accounts.launch_token_vault.to_account_info(), + mint: ctx.accounts.base_mint.to_account_info(), + to: ctx.accounts.launch_base_vault.to_account_info(), authority: ctx.accounts.launch_signer.to_account_info(), }, launch_signer, @@ -323,7 +323,7 @@ impl CompleteLaunch<'_> { CpiContext::new_with_signer( ctx.accounts.token_program.to_account_info(), SetAuthority { - account_or_mint: ctx.accounts.token_mint.to_account_info(), + account_or_mint: ctx.accounts.base_mint.to_account_info(), current_authority: ctx.accounts.launch_signer.to_account_info(), }, launch_signer, @@ -355,25 +355,25 @@ impl CompleteLaunch<'_> { creator_token_1, init_amount_0, init_amount_1, - ) = if ctx.accounts.token_mint.key() < ctx.accounts.usdc_mint.key() { + ) = if ctx.accounts.base_mint.key() < ctx.accounts.quote_mint.key() { ( - ctx.accounts.token_mint.to_account_info(), - ctx.accounts.usdc_mint.to_account_info(), + ctx.accounts.base_mint.to_account_info(), + ctx.accounts.quote_mint.to_account_info(), ctx.accounts.pool_token_vault.to_account_info(), ctx.accounts.pool_usdc_vault.to_account_info(), - ctx.accounts.launch_token_vault.to_account_info(), - ctx.accounts.launch_usdc_vault.to_account_info(), + ctx.accounts.launch_base_vault.to_account_info(), + ctx.accounts.launch_quote_vault.to_account_info(), token_to_lp, usdc_to_lp, ) } else { ( - ctx.accounts.usdc_mint.to_account_info(), - ctx.accounts.token_mint.to_account_info(), + ctx.accounts.quote_mint.to_account_info(), + ctx.accounts.base_mint.to_account_info(), ctx.accounts.pool_usdc_vault.to_account_info(), ctx.accounts.pool_token_vault.to_account_info(), - ctx.accounts.launch_usdc_vault.to_account_info(), - ctx.accounts.launch_token_vault.to_account_info(), + ctx.accounts.launch_quote_vault.to_account_info(), + ctx.accounts.launch_base_vault.to_account_info(), usdc_to_lp, token_to_lp, ) @@ -444,8 +444,8 @@ impl CompleteLaunch<'_> { CpiContext::new_with_signer( ctx.accounts.token_program.to_account_info(), Transfer { - from: ctx.accounts.launch_usdc_vault.to_account_info(), - to: ctx.accounts.treasury_usdc_account.to_account_info(), + from: ctx.accounts.launch_quote_vault.to_account_info(), + to: ctx.accounts.treasury_quote_account.to_account_info(), authority: ctx.accounts.launch_signer.to_account_info(), }, launch_signer, diff --git a/programs/launchpad/src/instructions/fund.rs b/programs/launchpad/src/instructions/fund.rs index e6a9c190c..111cc4592 100644 --- a/programs/launchpad/src/instructions/fund.rs +++ b/programs/launchpad/src/instructions/fund.rs @@ -11,7 +11,7 @@ pub struct Fund<'info> { #[account( mut, has_one = launch_signer, - has_one = launch_usdc_vault, + has_one = launch_quote_vault, )] pub launch: Account<'info, Launch>, @@ -28,7 +28,7 @@ pub struct Fund<'info> { pub launch_signer: UncheckedAccount<'info>, #[account(mut)] - pub launch_usdc_vault: Account<'info, TokenAccount>, + pub launch_quote_vault: Account<'info, TokenAccount>, pub funder: Signer<'info>, #[account(mut)] @@ -36,10 +36,10 @@ pub struct Fund<'info> { #[account( mut, - token::mint = launch.usdc_mint, + token::mint = launch.quote_mint, token::authority = funder )] - pub funder_usdc_account: Account<'info, TokenAccount>, + pub funder_quote_account: Account<'info, TokenAccount>, pub token_program: Program<'info, Token>, pub system_program: Program<'info, System>, @@ -50,7 +50,7 @@ impl Fund<'_> { require!(amount > 0, LaunchpadError::InvalidAmount); require_gte!( - self.funder_usdc_account.amount, + self.funder_quote_account.amount, amount, LaunchpadError::InsufficientFunds ); @@ -72,13 +72,13 @@ impl Fund<'_> { } pub fn handle(ctx: Context, amount: u64) -> Result<()> { - // Transfer USDC from funder to vault + // Transfer quote tokens from funder to vault token::transfer( CpiContext::new( ctx.accounts.token_program.to_account_info(), Transfer { - from: ctx.accounts.funder_usdc_account.to_account_info(), - to: ctx.accounts.launch_usdc_vault.to_account_info(), + from: ctx.accounts.funder_quote_account.to_account_info(), + to: ctx.accounts.launch_quote_vault.to_account_info(), authority: ctx.accounts.funder.to_account_info(), }, ), diff --git a/programs/launchpad/src/instructions/initialize_launch.rs b/programs/launchpad/src/instructions/initialize_launch.rs index 0c2de0ac3..72c7e8b2d 100644 --- a/programs/launchpad/src/instructions/initialize_launch.rs +++ b/programs/launchpad/src/instructions/initialize_launch.rs @@ -5,7 +5,7 @@ use anchor_spl::token::{self, Mint, MintTo, Token, TokenAccount}; use crate::error::LaunchpadError; use crate::events::{CommonFields, LaunchInitializedEvent}; use crate::state::{Launch, LaunchState}; -use crate::usdc_mint; +use crate::usdc_mint; use crate::AVAILABLE_TOKENS; use anchor_spl::metadata::{ create_metadata_accounts_v3, mpl_token_metadata::types::DataV2, @@ -28,7 +28,7 @@ pub struct InitializeLaunch<'info> { init, payer = payer, space = 8 + Launch::INIT_SPACE, - seeds = [b"launch", token_mint.key().as_ref()], + seeds = [b"launch", base_mint.key().as_ref()], bump )] pub launch: Account<'info, Launch>, @@ -38,12 +38,12 @@ pub struct InitializeLaunch<'info> { mint::decimals = 6, mint::authority = launch_signer, )] - pub token_mint: Account<'info, Mint>, + pub base_mint: Account<'info, Mint>, /// CHECK: This is the token metadata #[account( mut, - seeds = [b"metadata", MPL_TOKEN_METADATA_PROGRAM_ID.as_ref(), token_mint.key().as_ref()], + seeds = [b"metadata", MPL_TOKEN_METADATA_PROGRAM_ID.as_ref(), base_mint.key().as_ref()], seeds::program = MPL_TOKEN_METADATA_PROGRAM_ID, bump )] @@ -59,18 +59,18 @@ pub struct InitializeLaunch<'info> { #[account( init_if_needed, payer = payer, - associated_token::mint = usdc_mint, + associated_token::mint = quote_mint, associated_token::authority = launch_signer )] - pub usdc_vault: Account<'info, TokenAccount>, + pub quote_vault: Account<'info, TokenAccount>, #[account( init_if_needed, payer = payer, - associated_token::mint = token_mint, + associated_token::mint = base_mint, associated_token::authority = launch_signer )] - pub token_vault: Account<'info, TokenAccount>, + pub base_vault: Account<'info, TokenAccount>, #[account(mut)] pub payer: Signer<'info>, @@ -78,7 +78,7 @@ pub struct InitializeLaunch<'info> { pub launch_authority: UncheckedAccount<'info>, #[account(mint::decimals = 6, address = usdc_mint::id())] - pub usdc_mint: Account<'info, Mint>, + pub quote_mint: Account<'info, Mint>, pub rent: Sysvar<'info, Rent>, @@ -104,11 +104,11 @@ impl InitializeLaunch<'_> { ); require!( - self.token_mint.freeze_authority.is_none(), + self.base_mint.freeze_authority.is_none(), LaunchpadError::FreezeAuthoritySet ); - require!(self.token_mint.supply == 0, LaunchpadError::SupplyNonZero); + require!(self.base_mint.supply == 0, LaunchpadError::SupplyNonZero); #[cfg(feature = "production")] { @@ -126,11 +126,11 @@ impl InitializeLaunch<'_> { launch_authority: ctx.accounts.launch_authority.key(), launch_signer: ctx.accounts.launch_signer.key(), launch_signer_pda_bump: ctx.bumps.launch_signer, - launch_usdc_vault: ctx.accounts.usdc_vault.key(), - launch_token_vault: ctx.accounts.token_vault.key(), + launch_quote_vault: ctx.accounts.quote_vault.key(), + launch_base_vault: ctx.accounts.base_vault.key(), total_committed_amount: 0, - token_mint: ctx.accounts.token_mint.key(), - usdc_mint: ctx.accounts.usdc_mint.key(), + base_mint: ctx.accounts.base_mint.key(), + quote_mint: ctx.accounts.quote_mint.key(), pda_bump: ctx.bumps.launch, seq_num: 0, state: LaunchState::Initialized, @@ -148,10 +148,10 @@ impl InitializeLaunch<'_> { launch_authority: ctx.accounts.launch_authority.key(), launch_signer: ctx.accounts.launch_signer.key(), launch_signer_pda_bump: ctx.bumps.launch_signer, - launch_usdc_vault: ctx.accounts.usdc_vault.key(), - launch_token_vault: ctx.accounts.token_vault.key(), - token_mint: ctx.accounts.token_mint.key(), - usdc_mint: ctx.accounts.usdc_mint.key(), + launch_usdc_vault: ctx.accounts.quote_vault.key(), + launch_token_vault: ctx.accounts.base_vault.key(), + base_mint: ctx.accounts.base_mint.key(), + quote_mint: ctx.accounts.quote_mint.key(), pda_bump: ctx.bumps.launch, seconds_for_launch: args.seconds_for_launch, }); @@ -169,7 +169,7 @@ impl InitializeLaunch<'_> { let cpi_accounts = CreateMetadataAccountsV3 { metadata: ctx.accounts.token_metadata.to_account_info(), - mint: ctx.accounts.token_mint.to_account_info(), + mint: ctx.accounts.base_mint.to_account_info(), mint_authority: ctx.accounts.launch_signer.to_account_info(), payer: ctx.accounts.payer.to_account_info(), update_authority: ctx.accounts.launch_signer.to_account_info(), @@ -198,8 +198,8 @@ impl InitializeLaunch<'_> { CpiContext::new_with_signer( ctx.accounts.token_program.to_account_info(), MintTo { - mint: ctx.accounts.token_mint.to_account_info(), - to: ctx.accounts.token_vault.to_account_info(), + mint: ctx.accounts.base_mint.to_account_info(), + to: ctx.accounts.base_vault.to_account_info(), authority: ctx.accounts.launch_signer.to_account_info(), }, signer, diff --git a/programs/launchpad/src/instructions/refund.rs b/programs/launchpad/src/instructions/refund.rs index b794856b5..fe2c7e535 100644 --- a/programs/launchpad/src/instructions/refund.rs +++ b/programs/launchpad/src/instructions/refund.rs @@ -10,7 +10,7 @@ use crate::state::{FundingRecord, Launch, LaunchState}; pub struct Refund<'info> { #[account( mut, - has_one = launch_usdc_vault, + has_one = launch_quote_vault, has_one = launch_signer, )] pub launch: Account<'info, Launch>, @@ -25,7 +25,7 @@ pub struct Refund<'info> { pub funding_record: Account<'info, FundingRecord>, #[account(mut)] - pub launch_usdc_vault: Account<'info, TokenAccount>, + pub launch_quote_vault: Account<'info, TokenAccount>, /// CHECK: just a signer pub launch_signer: UncheckedAccount<'info>, @@ -34,7 +34,7 @@ pub struct Refund<'info> { pub funder: Signer<'info>, #[account(mut)] - pub funder_usdc_account: Account<'info, TokenAccount>, + pub funder_quote_account: Account<'info, TokenAccount>, pub token_program: Program<'info, Token>, pub system_program: Program<'info, System>, @@ -66,8 +66,8 @@ impl Refund<'_> { CpiContext::new_with_signer( ctx.accounts.token_program.to_account_info(), Transfer { - from: ctx.accounts.launch_usdc_vault.to_account_info(), - to: ctx.accounts.funder_usdc_account.to_account_info(), + from: ctx.accounts.launch_quote_vault.to_account_info(), + to: ctx.accounts.funder_quote_account.to_account_info(), authority: ctx.accounts.launch_signer.to_account_info(), }, signer, diff --git a/programs/launchpad/src/state/launch.rs b/programs/launchpad/src/state/launch.rs index 19b214d59..c00f3b746 100644 --- a/programs/launchpad/src/state/launch.rs +++ b/programs/launchpad/src/state/launch.rs @@ -23,13 +23,13 @@ pub struct Launch { /// The PDA bump for the launch signer. pub launch_signer_pda_bump: u8, /// The USDC vault that will hold the USDC raised until the launch is over. - pub launch_usdc_vault: Pubkey, + pub launch_quote_vault: Pubkey, /// The token vault, used to send tokens to Raydium. - pub launch_token_vault: Pubkey, + pub launch_base_vault: Pubkey, /// The token that will be minted to funders and that will control the DAO. - pub token_mint: Pubkey, + pub base_mint: Pubkey, /// The USDC mint. - pub usdc_mint: Pubkey, + pub quote_mint: Pubkey, /// The unix timestamp when the launch was started. pub unix_timestamp_started: i64, /// The amount of USDC that has been committed by the users. diff --git a/programs/shared_liquidity_manager/src/instructions/initialize_shared_liquidity_pool.rs b/programs/shared_liquidity_manager/src/instructions/initialize_shared_liquidity_pool.rs index 97949a3a3..75644a2be 100644 --- a/programs/shared_liquidity_manager/src/instructions/initialize_shared_liquidity_pool.rs +++ b/programs/shared_liquidity_manager/src/instructions/initialize_shared_liquidity_pool.rs @@ -176,8 +176,8 @@ pub struct InitializeSharedLiquidityPool<'info> { impl InitializeSharedLiquidityPool<'_> { pub fn validate(&self, params: &InitializeSharedLiquidityPoolParams) -> Result<()> { - require_eq!(self.dao.token_mint, self.base_mint.key()); - require_eq!(self.dao.usdc_mint, self.quote_mint.key()); + require_eq!(self.dao.base_mint, self.base_mint.key()); + require_eq!(self.dao.quote_mint, self.quote_mint.key()); require_neq!(self.base_mint.key(), self.quote_mint.key()); diff --git a/sdk/package.json b/sdk/package.json index 4206a9a05..33b282c1d 100644 --- a/sdk/package.json +++ b/sdk/package.json @@ -1,6 +1,6 @@ { "name": "@metadaoproject/futarchy", - "version": "0.5.0-alpha.1", + "version": "0.5.0-alpha.2", "type": "module", "main": "dist/index.js", "module": "dist/index.js", diff --git a/sdk/src/v0.5/AutocratClient.ts b/sdk/src/v0.5/AutocratClient.ts index 5387d862b..63727d565 100644 --- a/sdk/src/v0.5/AutocratClient.ts +++ b/sdk/src/v0.5/AutocratClient.ts @@ -292,16 +292,16 @@ export class AutocratClient { initializeDaoIx( daoKeypair: Keypair, - tokenMint: PublicKey, + baseMint: PublicKey, params: InitializeDaoParams, - usdcMint: PublicKey = MAINNET_USDC + quoteMint: PublicKey = MAINNET_USDC ) { return this.autocrat.methods .initializeDao(params) .accounts({ dao: daoKeypair.publicKey, - tokenMint, - usdcMint, + baseMint, + quoteMint, }) .signers([daoKeypair]); } @@ -341,17 +341,17 @@ export class AutocratClient { question, } = this.getProposalPdas( proposal, - storedDao.tokenMint, - storedDao.usdcMint, + storedDao.baseMint, + storedDao.quoteMint, dao ); // it's important that these happen in a single atomic transaction await this.vaultClient - .initializeVaultIx(question, storedDao.tokenMint, 2) + .initializeVaultIx(question, storedDao.baseMint, 2) .postInstructions( await InstructionUtils.getInstructions( - this.vaultClient.initializeVaultIx(question, storedDao.usdcMint, 2), + this.vaultClient.initializeVaultIx(question, storedDao.quoteMint, 2), this.ammClient.initializeAmmIx( passBaseMint, passQuoteMint, @@ -371,19 +371,13 @@ export class AutocratClient { .rpc(); await this.vaultClient - .splitTokensIx( - question, - baseVault, - storedDao.tokenMint, - baseTokensToLP, - 2 - ) + .splitTokensIx(question, baseVault, storedDao.baseMint, baseTokensToLP, 2) .postInstructions( await InstructionUtils.getInstructions( this.vaultClient.splitTokensIx( question, quoteVault, - storedDao.usdcMint, + storedDao.quoteMint, quoteTokensToLP, 2 ) @@ -421,8 +415,8 @@ export class AutocratClient { descriptionUrl, instruction, dao, - storedDao.tokenMint, - storedDao.usdcMint, + storedDao.baseMint, + storedDao.quoteMint, lpTokens, lpTokens, nonce, @@ -643,8 +637,8 @@ export class AutocratClient { proposal, storedProposal.instruction, storedProposal.dao, - storedDao.tokenMint, - storedDao.usdcMint, + storedDao.baseMint, + storedDao.quoteMint, storedProposal.proposer ).rpc(); } diff --git a/sdk/src/v0.5/LaunchpadClient.ts b/sdk/src/v0.5/LaunchpadClient.ts index c2b6a6ce5..051d5c967 100644 --- a/sdk/src/v0.5/LaunchpadClient.ts +++ b/sdk/src/v0.5/LaunchpadClient.ts @@ -115,26 +115,29 @@ export class LaunchpadClient { tokenUri: string, minimumRaiseAmount: BN, secondsForLaunch: number, - tokenMint: PublicKey, + baseMint: PublicKey, + quoteMint: PublicKey, launchAuthority: PublicKey = this.provider.publicKey, isDevnet: boolean = false, payer: PublicKey = this.provider.publicKey ) { - const USDC = isDevnet ? DEVNET_USDC : MAINNET_USDC; - - const [launch] = getLaunchAddr(this.launchpad.programId, tokenMint); + const [launch] = getLaunchAddr(this.launchpad.programId, baseMint); const [launchSigner] = getLaunchSignerAddr( this.launchpad.programId, launch ); - const usdcVault = getAssociatedTokenAddressSync(USDC, launchSigner, true); + const quoteVault = getAssociatedTokenAddressSync( + quoteMint, + launchSigner, + true + ); - const tokenVault = getAssociatedTokenAddressSync( - tokenMint, + const baseVault = getAssociatedTokenAddressSync( + baseMint, launchSigner, true ); - const [tokenMetadata] = getMetadataAddr(tokenMint); + const [tokenMetadata] = getMetadataAddr(baseMint); return this.launchpad.methods .initializeLaunch({ @@ -147,11 +150,11 @@ export class LaunchpadClient { .accounts({ launch, launchSigner, - usdcVault, - tokenVault, + quoteVault, + baseVault, launchAuthority, - usdcMint: USDC, - tokenMint, + quoteMint, + baseMint, tokenMetadata, tokenMetadataProgram: MPL_TOKEN_METADATA_PROGRAM_ID, payer, @@ -159,9 +162,9 @@ export class LaunchpadClient { .preInstructions([ createAssociatedTokenAccountIdempotentInstruction( payer, - getAssociatedTokenAddressSync(USDC, launchSigner, true), + getAssociatedTokenAddressSync(quoteMint, launchSigner, true), launchSigner, - USDC + quoteMint ), ]); // .signers([tokenMintKp]); @@ -181,6 +184,7 @@ export class LaunchpadClient { launch: PublicKey, amount: BN, funder: PublicKey = this.provider.publicKey, + quoteMint: PublicKey, isDevnet: boolean = false ) { const USDC = isDevnet ? DEVNET_USDC : MAINNET_USDC; @@ -189,12 +193,16 @@ export class LaunchpadClient { this.launchpad.programId, launch ); - const launchUsdcVault = getAssociatedTokenAddressSync( - USDC, + const launchQuoteVault = getAssociatedTokenAddressSync( + quoteMint, launchSigner, true ); - const funderUsdcAccount = getAssociatedTokenAddressSync(USDC, funder, true); + const funderQuoteAccount = getAssociatedTokenAddressSync( + quoteMint, + funder, + true + ); const [fundingRecord] = getFundingRecordAddr( this.launchpad.programId, launch, @@ -203,17 +211,18 @@ export class LaunchpadClient { return this.launchpad.methods.fund(amount).accounts({ launch, - launchUsdcVault, + launchQuoteVault, fundingRecord, funder, - funderUsdcAccount, + funderQuoteAccount, launchSigner, }); } completeLaunchIx( launch: PublicKey, - tokenMint: PublicKey, + quoteMint: PublicKey, + baseMint: PublicKey, isDevnet: boolean = false ) { const USDC = isDevnet ? DEVNET_USDC : MAINNET_USDC; @@ -222,13 +231,13 @@ export class LaunchpadClient { this.launchpad.programId, launch ); - const launchUsdcVault = getAssociatedTokenAddressSync( - USDC, + const launchQuoteVault = getAssociatedTokenAddressSync( + quoteMint, launchSigner, true ); - const launchTokenVault = getAssociatedTokenAddressSync( - tokenMint, + const launchBaseVault = getAssociatedTokenAddressSync( + baseMint, launchSigner, true ); @@ -239,8 +248,8 @@ export class LaunchpadClient { this.autocratClient.getProgramId(), dao ); - const treasuryUsdcAccount = getAssociatedTokenAddressSync( - USDC, + const treasuryQuoteAccount = getAssociatedTokenAddressSync( + quoteMint, daoTreasury, true ); @@ -259,7 +268,7 @@ export class LaunchpadClient { [ anchor.utils.bytes.utf8.encode("pool_vault"), poolState.toBuffer(), - tokenMint.toBuffer(), + baseMint.toBuffer(), ], cpSwapProgramId ); @@ -282,25 +291,25 @@ export class LaunchpadClient { this.autocratClient.getProgramId() ); - const [tokenMetadata] = getMetadataAddr(tokenMint); + const [tokenMetadata] = getMetadataAddr(baseMint); return this.launchpad.methods .completeLaunch() .accounts({ launch, launchSigner, - launchUsdcVault, - launchTokenVault, + launchQuoteVault, + launchBaseVault, dao, daoTreasury, - treasuryUsdcAccount, + treasuryQuoteAccount, treasuryLpAccount: getAssociatedTokenAddressSync( lpMint, daoTreasury, true ), - usdcMint: USDC, - tokenMint, + quoteMint, + baseMint, tokenMetadata, lpMint, lpVault, @@ -323,7 +332,7 @@ export class LaunchpadClient { .preInstructions([ createAssociatedTokenAccountIdempotentInstruction( this.provider.publicKey, - treasuryUsdcAccount, + treasuryQuoteAccount, daoTreasury, USDC ), @@ -333,10 +342,9 @@ export class LaunchpadClient { refundIx( launch: PublicKey, funder: PublicKey = this.provider.publicKey, + quoteMint: PublicKey, isDevnet: boolean = false ) { - const USDC = isDevnet ? DEVNET_USDC : MAINNET_USDC; - const [launchSigner] = getLaunchSignerAddr( this.launchpad.programId, launch @@ -348,26 +356,30 @@ export class LaunchpadClient { funder ); - const launchUsdcVault = getAssociatedTokenAddressSync( - USDC, + const launchQuoteVault = getAssociatedTokenAddressSync( + quoteMint, launchSigner, true ); - const funderUsdcAccount = getAssociatedTokenAddressSync(USDC, funder, true); + const funderQuoteAccount = getAssociatedTokenAddressSync( + quoteMint, + funder, + true + ); return this.launchpad.methods.refund().accounts({ launch, launchSigner, - launchUsdcVault, + launchQuoteVault, funder, - funderUsdcAccount, + funderQuoteAccount, fundingRecord, }); } claimIx( launch: PublicKey, - tokenMint: PublicKey, + baseMint: PublicKey, funder: PublicKey = this.provider.publicKey ) { const [launchSigner] = getLaunchSignerAddr( @@ -388,13 +400,13 @@ export class LaunchpadClient { launchSigner, funder, funderTokenAccount: getAssociatedTokenAddressSync( - tokenMint, + baseMint, funder, true ), - tokenMint, - launchTokenVault: getAssociatedTokenAddressSync( - tokenMint, + baseMint, + launchBaseVault: getAssociatedTokenAddressSync( + baseMint, launchSigner, true ), @@ -402,9 +414,9 @@ export class LaunchpadClient { .preInstructions([ createAssociatedTokenAccountIdempotentInstruction( this.provider.publicKey, - getAssociatedTokenAddressSync(tokenMint, funder, true), + getAssociatedTokenAddressSync(baseMint, funder, true), funder, - tokenMint + baseMint ), ]); } diff --git a/sdk/src/v0.5/types/autocrat.ts b/sdk/src/v0.5/types/autocrat.ts index fcda41be9..985f61aa3 100644 --- a/sdk/src/v0.5/types/autocrat.ts +++ b/sdk/src/v0.5/types/autocrat.ts @@ -21,12 +21,12 @@ export type Autocrat = { isSigner: false; }, { - name: "tokenMint"; + name: "baseMint"; isMut: false; isSigner: false; }, { - name: "usdcMint"; + name: "quoteMint"; isMut: false; isSigner: false; }, @@ -314,11 +314,11 @@ export type Autocrat = { type: "publicKey"; }, { - name: "tokenMint"; + name: "baseMint"; type: "publicKey"; }, { - name: "usdcMint"; + name: "quoteMint"; type: "publicKey"; }, { @@ -687,12 +687,12 @@ export type Autocrat = { index: false; }, { - name: "tokenMint"; + name: "baseMint"; type: "publicKey"; index: false; }, { - name: "usdcMint"; + name: "quoteMint"; type: "publicKey"; index: false; }, @@ -1043,12 +1043,12 @@ export const IDL: Autocrat = { isSigner: false, }, { - name: "tokenMint", + name: "baseMint", isMut: false, isSigner: false, }, { - name: "usdcMint", + name: "quoteMint", isMut: false, isSigner: false, }, @@ -1336,11 +1336,11 @@ export const IDL: Autocrat = { type: "publicKey", }, { - name: "tokenMint", + name: "baseMint", type: "publicKey", }, { - name: "usdcMint", + name: "quoteMint", type: "publicKey", }, { @@ -1709,12 +1709,12 @@ export const IDL: Autocrat = { index: false, }, { - name: "tokenMint", + name: "baseMint", type: "publicKey", index: false, }, { - name: "usdcMint", + name: "quoteMint", type: "publicKey", index: false, }, diff --git a/sdk/src/v0.5/types/launchpad.ts b/sdk/src/v0.5/types/launchpad.ts index 3a2aa4f17..f7f8284f4 100644 --- a/sdk/src/v0.5/types/launchpad.ts +++ b/sdk/src/v0.5/types/launchpad.ts @@ -11,7 +11,7 @@ export type Launchpad = { isSigner: false; }, { - name: "tokenMint"; + name: "baseMint"; isMut: true; isSigner: false; }, @@ -26,12 +26,12 @@ export type Launchpad = { isSigner: false; }, { - name: "usdcVault"; + name: "quoteVault"; isMut: true; isSigner: false; }, { - name: "tokenVault"; + name: "baseVault"; isMut: true; isSigner: false; }, @@ -46,7 +46,7 @@ export type Launchpad = { isSigner: false; }, { - name: "usdcMint"; + name: "quoteMint"; isMut: false; isSigner: false; }, @@ -140,7 +140,7 @@ export type Launchpad = { isSigner: false; }, { - name: "launchUsdcVault"; + name: "launchQuoteVault"; isMut: true; isSigner: false; }, @@ -155,7 +155,7 @@ export type Launchpad = { isSigner: true; }, { - name: "funderUsdcAccount"; + name: "funderQuoteAccount"; isMut: true; isSigner: false; }, @@ -216,17 +216,17 @@ export type Launchpad = { isSigner: false; }, { - name: "launchUsdcVault"; + name: "launchQuoteVault"; isMut: true; isSigner: false; }, { - name: "launchTokenVault"; + name: "launchBaseVault"; isMut: true; isSigner: false; }, { - name: "treasuryUsdcAccount"; + name: "treasuryQuoteAccount"; isMut: true; isSigner: false; }, @@ -249,12 +249,12 @@ export type Launchpad = { isSigner: false; }, { - name: "tokenMint"; + name: "baseMint"; isMut: true; isSigner: false; }, { - name: "usdcMint"; + name: "quoteMint"; isMut: false; isSigner: false; }, @@ -366,7 +366,7 @@ export type Launchpad = { isSigner: false; }, { - name: "launchUsdcVault"; + name: "launchQuoteVault"; isMut: true; isSigner: false; }, @@ -381,7 +381,7 @@ export type Launchpad = { isSigner: true; }, { - name: "funderUsdcAccount"; + name: "funderQuoteAccount"; isMut: true; isSigner: false; }, @@ -427,12 +427,12 @@ export type Launchpad = { isSigner: false; }, { - name: "tokenMint"; + name: "baseMint"; isMut: true; isSigner: false; }, { - name: "launchTokenVault"; + name: "launchBaseVault"; isMut: true; isSigner: false; }, @@ -547,26 +547,26 @@ export type Launchpad = { type: "u8"; }, { - name: "launchUsdcVault"; + name: "launchQuoteVault"; docs: [ "The USDC vault that will hold the USDC raised until the launch is over." ]; type: "publicKey"; }, { - name: "launchTokenVault"; + name: "launchBaseVault"; docs: ["The token vault, used to send tokens to Raydium."]; type: "publicKey"; }, { - name: "tokenMint"; + name: "baseMint"; docs: [ "The token that will be minted to funders and that will control the DAO." ]; type: "publicKey"; }, { - name: "usdcMint"; + name: "quoteMint"; docs: ["The USDC mint."]; type: "publicKey"; }, @@ -736,12 +736,12 @@ export type Launchpad = { index: false; }, { - name: "tokenMint"; + name: "baseMint"; type: "publicKey"; index: false; }, { - name: "usdcMint"; + name: "quoteMint"; type: "publicKey"; index: false; }, @@ -1011,7 +1011,7 @@ export const IDL: Launchpad = { isSigner: false, }, { - name: "tokenMint", + name: "baseMint", isMut: true, isSigner: false, }, @@ -1026,12 +1026,12 @@ export const IDL: Launchpad = { isSigner: false, }, { - name: "usdcVault", + name: "quoteVault", isMut: true, isSigner: false, }, { - name: "tokenVault", + name: "baseVault", isMut: true, isSigner: false, }, @@ -1046,7 +1046,7 @@ export const IDL: Launchpad = { isSigner: false, }, { - name: "usdcMint", + name: "quoteMint", isMut: false, isSigner: false, }, @@ -1140,7 +1140,7 @@ export const IDL: Launchpad = { isSigner: false, }, { - name: "launchUsdcVault", + name: "launchQuoteVault", isMut: true, isSigner: false, }, @@ -1155,7 +1155,7 @@ export const IDL: Launchpad = { isSigner: true, }, { - name: "funderUsdcAccount", + name: "funderQuoteAccount", isMut: true, isSigner: false, }, @@ -1216,17 +1216,17 @@ export const IDL: Launchpad = { isSigner: false, }, { - name: "launchUsdcVault", + name: "launchQuoteVault", isMut: true, isSigner: false, }, { - name: "launchTokenVault", + name: "launchBaseVault", isMut: true, isSigner: false, }, { - name: "treasuryUsdcAccount", + name: "treasuryQuoteAccount", isMut: true, isSigner: false, }, @@ -1249,12 +1249,12 @@ export const IDL: Launchpad = { isSigner: false, }, { - name: "tokenMint", + name: "baseMint", isMut: true, isSigner: false, }, { - name: "usdcMint", + name: "quoteMint", isMut: false, isSigner: false, }, @@ -1366,7 +1366,7 @@ export const IDL: Launchpad = { isSigner: false, }, { - name: "launchUsdcVault", + name: "launchQuoteVault", isMut: true, isSigner: false, }, @@ -1381,7 +1381,7 @@ export const IDL: Launchpad = { isSigner: true, }, { - name: "funderUsdcAccount", + name: "funderQuoteAccount", isMut: true, isSigner: false, }, @@ -1427,12 +1427,12 @@ export const IDL: Launchpad = { isSigner: false, }, { - name: "tokenMint", + name: "baseMint", isMut: true, isSigner: false, }, { - name: "launchTokenVault", + name: "launchBaseVault", isMut: true, isSigner: false, }, @@ -1547,26 +1547,26 @@ export const IDL: Launchpad = { type: "u8", }, { - name: "launchUsdcVault", + name: "launchQuoteVault", docs: [ "The USDC vault that will hold the USDC raised until the launch is over.", ], type: "publicKey", }, { - name: "launchTokenVault", + name: "launchBaseVault", docs: ["The token vault, used to send tokens to Raydium."], type: "publicKey", }, { - name: "tokenMint", + name: "baseMint", docs: [ "The token that will be minted to funders and that will control the DAO.", ], type: "publicKey", }, { - name: "usdcMint", + name: "quoteMint", docs: ["The USDC mint."], type: "publicKey", }, @@ -1736,12 +1736,12 @@ export const IDL: Launchpad = { index: false, }, { - name: "tokenMint", + name: "baseMint", type: "publicKey", index: false, }, { - name: "usdcMint", + name: "quoteMint", type: "publicKey", index: false, }, diff --git a/tests/autocrat/autocrat.ts b/tests/autocrat/autocrat.ts index 087e0934c..fe7e5ea82 100644 --- a/tests/autocrat/autocrat.ts +++ b/tests/autocrat/autocrat.ts @@ -196,8 +196,8 @@ export default function suite() { const storedDao = await autocratClient.getDao(dao); assert(storedDao.treasury.equals(daoTreasury)); assert.equal(storedDao.treasuryPdaBump, treasuryPdaBump); - assert(storedDao.tokenMint.equals(META)); - assert(storedDao.usdcMint.equals(USDC)); + assert(storedDao.baseMint.equals(META)); + assert(storedDao.quoteMint.equals(USDC)); assert.equal(storedDao.proposalCount, 0); assert.equal(storedDao.passThresholdBps, 300); diff --git a/tests/integration/fullLaunch.test.ts b/tests/integration/fullLaunch.test.ts index c7b896ee9..f14c5e660 100644 --- a/tests/integration/fullLaunch.test.ts +++ b/tests/integration/fullLaunch.test.ts @@ -67,7 +67,8 @@ export default async function suite() { "https://example.com", minRaise, launchPeriod, - META + META, + MAINNET_USDC ) .rpc(); @@ -76,14 +77,16 @@ export default async function suite() { // Fund from multiple sources await this.launchpadClient - .fundIx(launch, new BN(5000_000000), funder1.publicKey) + .fundIx(launch, new BN(5000_000000), funder1.publicKey, MAINNET_USDC) .signers([funder1]) .rpc(); - await this.launchpadClient.fundIx(launch, new BN(1500_000000)).rpc(); + await this.launchpadClient + .fundIx(launch, new BN(1500_000000), undefined, MAINNET_USDC) + .rpc(); await this.launchpadClient - .fundIx(launch, new BN(3500_000000), funder3.publicKey) + .fundIx(launch, new BN(3500_000000), funder3.publicKey, MAINNET_USDC) .signers([funder3]) .rpc(); @@ -91,7 +94,7 @@ export default async function suite() { await this.advanceBySeconds(launchPeriod + 3600); await this.launchpadClient - .completeLaunchIx(launch, META) + .completeLaunchIx(launch, MAINNET_USDC, META) .preInstructions([ ComputeBudgetProgram.setComputeUnitLimit({ units: 1_000_000 }), ]) diff --git a/tests/launchpad/unit/claim.test.ts b/tests/launchpad/unit/claim.test.ts index 878da28f3..b75b4ac44 100644 --- a/tests/launchpad/unit/claim.test.ts +++ b/tests/launchpad/unit/claim.test.ts @@ -21,7 +21,7 @@ export default function suite() { let META: PublicKey; let launch: PublicKey; let launchSigner: PublicKey; - let usdcVault: PublicKey; + let quoteVault: PublicKey; let funderUsdcAccount: PublicKey; const minRaise = new BN(100_000000); // 1000 USDC @@ -42,7 +42,7 @@ export default function suite() { META = result.tokenMint; launch = result.launch; launchSigner = result.launchSigner; - usdcVault = getAssociatedTokenAddressSync(MAINNET_USDC, launchSigner, true); + quoteVault = getAssociatedTokenAddressSync(MAINNET_USDC, launchSigner, true); funderUsdcAccount = getAssociatedTokenAddressSync( MAINNET_USDC, this.payer.publicKey @@ -56,7 +56,8 @@ export default function suite() { "https://example.com", minRaise, 60 * 60 * 24 * 2, - META + META, + MAINNET_USDC ) .rpc(); @@ -67,14 +68,14 @@ export default function suite() { const fundAmount = new BN(1000_000000); // 1000 USDC // Fund the launch - await launchpadClient.fundIx(launch, fundAmount).rpc(); + await launchpadClient.fundIx(launch, fundAmount, undefined, MAINNET_USDC).rpc(); }); it("successfully claims tokens after launch completion", async function () { // // Advance clock and complete launch await this.advanceBySeconds(60 * 60 * 24 * 3); await launchpadClient - .completeLaunchIx(launch, META) + .completeLaunchIx(launch, MAINNET_USDC, META) .preInstructions([ ComputeBudgetProgram.setComputeUnitLimit({ units: 1_000_000 }), ]) diff --git a/tests/launchpad/unit/completeLaunch.test.ts b/tests/launchpad/unit/completeLaunch.test.ts index d68e648cf..3e537bbc3 100644 --- a/tests/launchpad/unit/completeLaunch.test.ts +++ b/tests/launchpad/unit/completeLaunch.test.ts @@ -56,7 +56,8 @@ export default function suite() { "https://example.com", minRaise, 60 * 60 * 24 * 10, - META + META, + MAINNET_USDC ) .rpc(); @@ -67,7 +68,7 @@ export default function suite() { it("completes launch successfully when minimum raise is met and time has passed", async function () { // Fund the launch with exactly minimum raise - await launchpadClient.fundIx(launch, minRaise).rpc(); + await launchpadClient.fundIx(launch, minRaise, undefined, MAINNET_USDC).rpc(); const [tokenMetadata] = getMetadataAddr(META); @@ -84,7 +85,7 @@ export default function suite() { await this.advanceBySeconds(60 * 60 * 24 * 11); await launchpadClient - .completeLaunchIx(launch, META) + .completeLaunchIx(launch, MAINNET_USDC, META) .preInstructions([ ComputeBudgetProgram.setComputeUnitLimit({ units: 500_000 }), ComputeBudgetProgram.setComputeUnitPrice({ microLamports: 1 }), @@ -132,11 +133,11 @@ export default function suite() { it("fails when launch period has not passed", async function () { // Fund the launch with exactly minimum raise - await launchpadClient.fundIx(launch, minRaise).rpc(); + await launchpadClient.fundIx(launch, minRaise, undefined, MAINNET_USDC).rpc(); // Try to complete immediately (should fail) try { - await launchpadClient.completeLaunchIx(launch, META).rpc(); + await launchpadClient.completeLaunchIx(launch, MAINNET_USDC, META).rpc(); assert.fail("Should have thrown error"); } catch (e) { assert.include(e.message, "LaunchPeriodNotOver"); @@ -147,7 +148,7 @@ export default function suite() { try { await launchpadClient - .completeLaunchIx(launch, META) + .completeLaunchIx(launch, MAINNET_USDC, META) .preInstructions([ ComputeBudgetProgram.setComputeUnitPrice({ microLamports: 1 }), ]) @@ -162,14 +163,14 @@ export default function suite() { // Fund the launch with less than minimum raise const partialAmount = minRaise.divn(2); - await launchpadClient.fundIx(launch, partialAmount).rpc(); + await launchpadClient.fundIx(launch, partialAmount, undefined, MAINNET_USDC).rpc(); await this.advanceBySeconds(60 * 60 * 24 * 11); // Complete the launch // I'm only 5 bytes under the limit, so make sure we don't go over await launchpadClient - .completeLaunchIx(launch, META) + .completeLaunchIx(launch, MAINNET_USDC, META) .preInstructions([ ComputeBudgetProgram.setComputeUnitLimit({ units: 400_000 }), ComputeBudgetProgram.setComputeUnitPrice({ microLamports: 1 }), @@ -186,13 +187,13 @@ export default function suite() { await this.advanceBySeconds(60 * 60 * 24 * 11); // Complete launch first time - await launchpadClient.completeLaunchIx(launch, META).rpc(); + await launchpadClient.completeLaunchIx(launch, MAINNET_USDC, META).rpc(); // Try to complete again try { // CU price so that the VM doesn't think it's a duplicate tx await launchpadClient - .completeLaunchIx(launch, META) + .completeLaunchIx(launch, MAINNET_USDC, META) .preInstructions([ ComputeBudgetProgram.setComputeUnitPrice({ microLamports: 1 }), ComputeBudgetProgram.setComputeUnitLimit({ units: 1_000_000 }), diff --git a/tests/launchpad/unit/fund.test.ts b/tests/launchpad/unit/fund.test.ts index dc8913d0a..f6c2fe13a 100644 --- a/tests/launchpad/unit/fund.test.ts +++ b/tests/launchpad/unit/fund.test.ts @@ -24,10 +24,10 @@ export default function suite() { let META: PublicKey; let launch: PublicKey; let launchSigner: PublicKey; - let tokenVault: PublicKey; - let usdcVault: PublicKey; - let funderTokenAccount: PublicKey; - let funderUsdcAccount: PublicKey; + let baseVault: PublicKey; + let quoteVault: PublicKey; + let funderBaseAccount: PublicKey; + let funderQuoteAccount: PublicKey; const minRaise = new BN(1000_000000); // 1000 USDC @@ -47,13 +47,13 @@ export default function suite() { launch = result.launch; launchSigner = result.launchSigner; - tokenVault = getAssociatedTokenAddressSync(META, launchSigner, true); - usdcVault = getAssociatedTokenAddressSync(MAINNET_USDC, launchSigner, true); - funderTokenAccount = getAssociatedTokenAddressSync( + baseVault = getAssociatedTokenAddressSync(META, launchSigner, true); + quoteVault = getAssociatedTokenAddressSync(MAINNET_USDC, launchSigner, true); + funderBaseAccount = getAssociatedTokenAddressSync( META, this.payer.publicKey ); - funderUsdcAccount = getAssociatedTokenAddressSync( + funderQuoteAccount = getAssociatedTokenAddressSync( MAINNET_USDC, this.payer.publicKey ); @@ -66,7 +66,8 @@ export default function suite() { "https://example.com", minRaise, 60 * 60, - META + META, + MAINNET_USDC ) .rpc(); }); @@ -76,7 +77,7 @@ export default function suite() { const fundAmount = new BN(100_000000); // 100 USDC try { - await launchpadClient.fundIx(launch, fundAmount).rpc(); + await launchpadClient.fundIx(launch, fundAmount, undefined, MAINNET_USDC).rpc(); assert.fail("Expected fund instruction to fail"); } catch (e) { assert.include(e.message, "InvalidLaunchState"); @@ -89,7 +90,7 @@ export default function suite() { const fundAmount = new BN(100_000000); // 100 USDC - await launchpadClient.fundIx(launch, fundAmount).rpc(); + await launchpadClient.fundIx(launch, fundAmount, undefined, MAINNET_USDC).rpc(); const launchAccount = await launchpadClient.fetchLaunch(launch); assert.equal( @@ -97,7 +98,7 @@ export default function suite() { fundAmount.toString() ); - const usdcVaultAccount = await getAccount(this.banksClient, usdcVault); + const usdcVaultAccount = await getAccount(this.banksClient, quoteVault); assert.equal(usdcVaultAccount.amount.toString(), fundAmount.toString()); const [fundingRecord, pdaBump] = getFundingRecordAddr( @@ -127,10 +128,10 @@ export default function suite() { const totalAmount = fundAmount1.add(fundAmount2); // First funding - await launchpadClient.fundIx(launch, fundAmount1).rpc(); + await launchpadClient.fundIx(launch, fundAmount1, undefined, MAINNET_USDC).rpc(); // Second funding - await launchpadClient.fundIx(launch, fundAmount2).rpc(); + await launchpadClient.fundIx(launch, fundAmount2, undefined, MAINNET_USDC).rpc(); const launchAccount = await launchpadClient.fetchLaunch(launch); assert.equal( @@ -138,7 +139,7 @@ export default function suite() { totalAmount.toString() ); - const usdcVaultAccount = await getAccount(this.banksClient, usdcVault); + const usdcVaultAccount = await getAccount(this.banksClient, quoteVault); assert.equal(usdcVaultAccount.amount.toString(), totalAmount.toString()); const [fundingRecord] = getFundingRecordAddr( @@ -167,7 +168,7 @@ export default function suite() { await this.advanceBySeconds(60 * 60 * 2); try { - await launchpadClient.fundIx(launch, fundAmount).rpc(); + await launchpadClient.fundIx(launch, fundAmount, undefined, MAINNET_USDC).rpc(); assert.fail("Expected fund instruction to fail"); } catch (e) { assert.include(e.message, "LaunchExpired"); diff --git a/tests/launchpad/unit/initializeLaunch.test.ts b/tests/launchpad/unit/initializeLaunch.test.ts index 05d73b8c6..2bb429cd2 100644 --- a/tests/launchpad/unit/initializeLaunch.test.ts +++ b/tests/launchpad/unit/initializeLaunch.test.ts @@ -67,7 +67,8 @@ export default function suite() { "https://example.com", minRaise, secondsForLaunch, - META + META, + MAINNET_USDC, ) .rpc(); @@ -81,16 +82,16 @@ export default function suite() { assert.ok(storedLaunch.launchSigner.equals(launchSigner)); assert.equal(storedLaunch.launchSignerPdaBump, launchSignerPdaBump); assert.ok( - storedLaunch.launchUsdcVault.equals( + storedLaunch.launchQuoteVault.equals( token.getAssociatedTokenAddressSync(MAINNET_USDC, launchSigner, true) ) ); assert.ok( - storedLaunch.launchTokenVault.equals( + storedLaunch.launchBaseVault.equals( token.getAssociatedTokenAddressSync(META, launchSigner, true) ) ); - assert.ok(storedLaunch.tokenMint.equals(META)); + assert.ok(storedLaunch.baseMint.equals(META)); assert.equal(storedLaunch.pdaBump, pdaBump); assert.equal(storedLaunch.totalCommittedAmount.toString(), "0"); assert.equal(storedLaunch.seqNum.toString(), "0"); @@ -152,19 +153,19 @@ export default function suite() { .accounts({ launch, launchSigner: fakeLaunchSigner.publicKey, - usdcVault: token.getAssociatedTokenAddressSync( + quoteVault: token.getAssociatedTokenAddressSync( MAINNET_USDC, fakeLaunchSigner.publicKey, true ), - tokenVault: token.getAssociatedTokenAddressSync( + baseVault: token.getAssociatedTokenAddressSync( META, fakeLaunchSigner.publicKey, true ), launchAuthority: this.payer.publicKey, - usdcMint: MAINNET_USDC, - tokenMint: META, + quoteMint: MAINNET_USDC, + baseMint: META, tokenMetadata, tokenMetadataProgram: MPL_TOKEN_METADATA_PROGRAM_ID, }) diff --git a/tests/launchpad/unit/refund.test.ts b/tests/launchpad/unit/refund.test.ts index 937b4485b..07f66cb66 100644 --- a/tests/launchpad/unit/refund.test.ts +++ b/tests/launchpad/unit/refund.test.ts @@ -23,8 +23,8 @@ export default function suite() { let META: PublicKey; let launch: PublicKey; let launchSigner: PublicKey; - let usdcVault: PublicKey; - let funderUsdcAccount: PublicKey; + let quoteVault: PublicKey; + let funderQuoteAccount: PublicKey; const minRaise = new BN(1000_000000); // 1000 USDC @@ -43,8 +43,8 @@ export default function suite() { META = result.tokenMint; launch = result.launch; launchSigner = result.launchSigner; - usdcVault = getAssociatedTokenAddressSync(MAINNET_USDC, launchSigner, true); - funderUsdcAccount = getAssociatedTokenAddressSync( + quoteVault = getAssociatedTokenAddressSync(MAINNET_USDC, launchSigner, true); + funderQuoteAccount = getAssociatedTokenAddressSync( MAINNET_USDC, this.payer.publicKey ); @@ -57,7 +57,8 @@ export default function suite() { "https://example.com", minRaise, 60 * 60 * 24 * 6, - META + META, + MAINNET_USDC ) .rpc(); @@ -71,13 +72,13 @@ export default function suite() { // Fund the launch with less than minimum raise const partialAmount = minRaise.divn(2); - await launchpadClient.fundIx(launch, partialAmount).rpc(); + await launchpadClient.fundIx(launch, partialAmount, undefined, MAINNET_USDC).rpc(); // Advance clock past 7 days await this.advanceBySeconds(60 * 60 * 24 * 7); // Complete the launch (moves to refunding state) - await launchpadClient.completeLaunchIx(launch, META).rpc(); + await launchpadClient.completeLaunchIx(launch, MAINNET_USDC, META).rpc(); const initialUsdcBalance = await this.getTokenBalance( MAINNET_USDC, @@ -89,7 +90,7 @@ export default function suite() { ); // Get refund - await launchpadClient.refundIx(launch).rpc(); + await launchpadClient.refundIx(launch, undefined, MAINNET_USDC).rpc(); const finalUsdcBalance = await this.getTokenBalance( MAINNET_USDC, @@ -106,7 +107,7 @@ export default function suite() { ); assert.equal( finalMetaBalance, - 0, + BigInt(0), "META tokens should be burned during refund" ); }); @@ -114,10 +115,10 @@ export default function suite() { it("fails when launch is not in refunding state", async function () { const partialAmount = minRaise.divn(2); - await launchpadClient.fundIx(launch, partialAmount).rpc(); + await launchpadClient.fundIx(launch, partialAmount, undefined, MAINNET_USDC).rpc(); try { - await launchpadClient.refundIx(launch).rpc(); + await launchpadClient.refundIx(launch, undefined, MAINNET_USDC).rpc(); assert.fail("Should have thrown error"); } catch (e) { assert.include(e.message, "LaunchNotRefunding"); @@ -127,10 +128,10 @@ export default function suite() { it("fails when user has no tokens to refund", async function () { // Move to refunding state without any funding await this.advanceBySeconds(60 * 60 * 24 * 7); - await launchpadClient.completeLaunchIx(launch, META).rpc(); + await launchpadClient.completeLaunchIx(launch, MAINNET_USDC, META).rpc(); try { - await launchpadClient.refundIx(launch).rpc(); + await launchpadClient.refundIx(launch, undefined, MAINNET_USDC).rpc(); assert.fail("Should have thrown error"); } catch (e) { // assert.include(e.message, "InvalidAmount"); diff --git a/tests/launchpad/unit/startLaunch.test.ts b/tests/launchpad/unit/startLaunch.test.ts index 046b3e94d..8a8fbd51b 100644 --- a/tests/launchpad/unit/startLaunch.test.ts +++ b/tests/launchpad/unit/startLaunch.test.ts @@ -14,6 +14,7 @@ import { getAssociatedTokenAddressSync, } from "@solana/spl-token"; import { initializeMintWithSeeds } from "../utils.js"; +import { MAINNET_USDC } from "@metadaoproject/futarchy/v0.3"; export default function suite() { let autocratClient: AutocratClient; @@ -49,7 +50,8 @@ export default function suite() { "https://example.com", minRaise, 60 * 60 * 24 * 2, - META + META, + MAINNET_USDC ) .rpc(); });