#[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>详细参数解释:
-
mint: PublicKey(必需)- 代币的铸造地址
- 用于指定哪个代币的 ATA
- 例如:如果要创建 USDC 的 ATA,这里就是 USDC 的 mint 地址
-
owner: PublicKey(必需)- ATA 的所有者地址
- 可以是钱包地址或 PDA
- 控制这个 ATA 的地址
-
allowOwnerOffCurve: boolean(可选)- 默认值:false
- 是否允许非 ed25519 曲线上的地址作为所有者
- 当 owner 是 PDA 时需要设为 true
- PDA 不是有效的 ed25519 密钥对
-
programId: PublicKey(可选)- 默认值:TOKEN_PROGRAM_ID
- SPL Token 程序的 ID
- 通常不需要修改
-
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 地址
- 这个地址是确定性的,相同参数总是生成相同地址