Skip to content

Commit 8696e80

Browse files
fix(quasar/tokens): use InterfaceAccount<Mint> for address-bound mints
Newer quasar-lang's Account<T> derive emits <T as Discriminator>::BUMP_OFFSET whenever the field carries an 'address = ...' constraint (it stores the discriminator-owned bump offset). SPL 'Mint' does not implement Discriminator, so build fails with: the trait bound `quasar_spl::Mint: quasar_lang::prelude::Discriminator` is not satisfied InterfaceAccount<T> intentionally takes the generic existing-account verifier path that doesn't require Discriminator (so it can accept both SPL Token and Token-2022 mints), which makes it the right wrapper for an address-bound SPL Mint. Affects: - tokens/pda-mint-authority/quasar (MintTokens.mint at MintPda) - tokens/token-swap/quasar (deposit_liquidity / withdraw_liquidity mint_liquidity at LiquidityMintPda)
1 parent 3f7447c commit 8696e80

3 files changed

Lines changed: 23 additions & 3 deletions

File tree

tokens/pda-mint-authority/quasar/src/lib.rs

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -90,8 +90,14 @@ pub struct MintTokens {
9090
#[account(mut)]
9191
pub payer: Signer,
9292
/// The PDA mint whose authority is itself.
93+
///
94+
/// Typed as `InterfaceAccount<Mint>` rather than `Account<Mint>` because
95+
/// newer quasar-lang requires `T: Discriminator` when combining `address =`
96+
/// with `Account<T>` (it reads `T::BUMP_OFFSET`). SPL `Mint` doesn't
97+
/// implement `Discriminator`; `InterfaceAccount` takes the generic
98+
/// existing-account verifier path that doesn't need it.
9399
#[account(mut, address = MintPda::seeds())]
94-
pub mint: Account<Mint>,
100+
pub mint: InterfaceAccount<Mint>,
95101
/// Recipient token account (must already exist).
96102
#[account(mut)]
97103
pub token_account: Account<Token>,

tokens/token-swap/quasar/src/instructions/deposit_liquidity.rs

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,8 +22,15 @@ pub struct DepositLiquidity {
2222
pub pool_authority: UncheckedAccount,
2323
/// Depositor (must be signer to authorise transfers).
2424
pub depositor: Signer,
25+
/// LP mint at the LiquidityMintPda.
26+
///
27+
/// Typed as `InterfaceAccount<Mint>` rather than `Account<Mint>` because
28+
/// newer quasar-lang requires `T: Discriminator` when combining `address =`
29+
/// with `Account<T>` (it reads `T::BUMP_OFFSET`). SPL `Mint` doesn't
30+
/// implement `Discriminator`; `InterfaceAccount` takes the generic
31+
/// existing-account verifier path that doesn't need it.
2532
#[account(mut, address = LiquidityMintPda::seeds(amm.address(), mint_a.address(), mint_b.address()))]
26-
pub mint_liquidity: Account<Mint>,
33+
pub mint_liquidity: InterfaceAccount<Mint>,
2734
pub mint_a: Account<Mint>,
2835
pub mint_b: Account<Mint>,
2936
/// Pool's token A vault.

tokens/token-swap/quasar/src/instructions/withdraw_liquidity.rs

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,8 +18,15 @@ pub struct WithdrawLiquidity {
1818
#[account(address = PoolAuthorityPda::seeds(amm.address(), mint_a.address(), mint_b.address()))]
1919
pub pool_authority: UncheckedAccount,
2020
pub depositor: Signer,
21+
/// LP mint at the LiquidityMintPda.
22+
///
23+
/// Typed as `InterfaceAccount<Mint>` rather than `Account<Mint>` because
24+
/// newer quasar-lang requires `T: Discriminator` when combining `address =`
25+
/// with `Account<T>` (it reads `T::BUMP_OFFSET`). SPL `Mint` doesn't
26+
/// implement `Discriminator`; `InterfaceAccount` takes the generic
27+
/// existing-account verifier path that doesn't need it.
2128
#[account(mut, address = LiquidityMintPda::seeds(amm.address(), mint_a.address(), mint_b.address()))]
22-
pub mint_liquidity: Account<Mint>,
29+
pub mint_liquidity: InterfaceAccount<Mint>,
2330
#[account(mut)]
2431
pub mint_a: Account<Mint>,
2532
#[account(mut)]

0 commit comments

Comments
 (0)