Solana/Anchor 中的“ATA”是什么意思?

nat*_*ire 2 solana anchor-solana

在 Anchor 测试中注意到以下代码注释:

在此输入图像描述

ATA 代表什么?为什么它对于 DAO 控制的机构很重要?

Jac*_*ech 5

ATA 是关联的令牌地址。

关联的令牌地址可以使用另一个公钥派生出来findProgramAddress

function getAssociatedTokenAddress(
    mint: PublicKey,
    owner: PublicKey,
    allowOwnerOffCurve = false,
    programId = TOKEN_PROGRAM_ID,
    associatedTokenProgramId = ASSOCIATED_TOKEN_PROGRAM_ID
): Promise<PublicKey> {
    if (!allowOwnerOffCurve && !PublicKey.isOnCurve(owner.toBuffer())) throw new TokenOwnerOffCurveError();

    const [address] = await PublicKey.findProgramAddress(
        [owner.toBuffer(), programId.toBuffer(), mint.toBuffer()],
        associatedTokenProgramId
    );

    return address;
}
Run Code Online (Sandbox Code Playgroud)

还有另一种类型的令牌帐户早于关联的令牌帐户,即辅助令牌帐户。这些旧帐户仍然存在并且现在可以创建。

代码之所以说它可以是 ATA 或其他东西,是因为它正在验证该帐户是否是它期望的令牌帐户。