Skip to content

Latest commit

 

History

History
97 lines (75 loc) · 2.3 KB

File metadata and controls

97 lines (75 loc) · 2.3 KB
#[account]
pub struct BondingCurveAccount {
    // 账户标识符
    pub discriminator: u64,

    // 虚拟储备
    pub virtual_token_reserves: u64,
    pub virtual_sol_reserves: u64,

    // 实际储备
    pub real_token_reserves: u64,
    pub real_sol_reserves: u64,

    // 代币总供应量
    pub token_total_supply: u64,

    // 完成状态
    pub complete: bool,
}

getAssociatedTokenAddress 函数来自 @solana/spl-token 库,让我详细解析其参数:

getAssociatedTokenAddress(
    mint: PublicKey,          // 必需参数
    owner: PublicKey,         // 必需参数
    allowOwnerOffCurve = false,  // 可选参数
    programId = TOKEN_PROGRAM_ID, // 可选参数
    associatedTokenProgramId = ASSOCIATED_TOKEN_PROGRAM_ID // 可选参数
): Promise<PublicKey>

详细参数解释:

  1. mint: PublicKey(必需)

    • 代币的铸造地址
    • 用于指定哪个代币的 ATA
    • 例如:如果要创建 USDC 的 ATA,这里就是 USDC 的 mint 地址
  2. owner: PublicKey(必需)

    • ATA 的所有者地址
    • 可以是钱包地址或 PDA
    • 控制这个 ATA 的地址
  3. allowOwnerOffCurve: boolean(可选)

    • 默认值:false
    • 是否允许非 ed25519 曲线上的地址作为所有者
    • 当 owner 是 PDA 时需要设为 true
    • PDA 不是有效的 ed25519 密钥对
  4. programId: PublicKey(可选)

    • 默认值:TOKEN_PROGRAM_ID
    • SPL Token 程序的 ID
    • 通常不需要修改
  5. associatedTokenProgramId: PublicKey(可选)

    • 默认值:ASSOCIATED_TOKEN_PROGRAM_ID
    • Associated Token 程序的 ID
    • 通常不需要修改

使用示例:

// 基础用法 - 为钱包创建 ATA
const walletATA = await getAssociatedTokenAddress(
  tokenMint, // 代币铸造地址
  walletAddress // 钱包地址
);

// 为 PDA 创建 ATA
const pdaATA = await getAssociatedTokenAddress(
  tokenMint, // 代币铸造地址
  pda, // PDA 地址
  true // 允许 PDA 作为所有者
);

// 完整参数用法
const customATA = await getAssociatedTokenAddress(
  tokenMint,
  owner,
  true,
  TOKEN_PROGRAM_ID,
  ASSOCIATED_TOKEN_PROGRAM_ID
);

返回值:

  • 返回一个 Promise
  • 这个 PublicKey 就是生成的 ATA 地址
  • 这个地址是确定性的,相同参数总是生成相同地址