获取Solana账户的Token账户

And*_*tev 2 solana

我有以下帐户Solana Explorer 帐户

我可以看到有一个 Mint 帐户(存储我的代币的帐户)我如何才能获得具有我的公钥的 Mint 帐户是否有任何关系或者这个东西一般是如何工作的

Jon*_*n C 6

一些术语可以确保我们达成共识:

  • “钱包”是拥有其他帐户的系统帐户,您链接的“Solana Explorer 帐户”CGP6sKHyrZGPJRoUAy8XbyzmX7YD4tVBQG9SEe9ekZM6
  • 铸币账户定义了代币,并且不持有任何代币,是Gh9ZwEmdLJ8DscKNTkTqPbNwLNNBjuSzaG9Vp2KGtKJr
  • 持有您代币的帐户实际上是G6ogFW6YzBpYKhwZrckZJa4yejcjNTfHLE2mUAQFv3ichttps://explorer.solana.com/address/G6ogFW6YzBpYKhwZrckZJa4yejcjNTfHLE2mUAQFv3ic ?cluster=devnet - 这是一个“关联代币帐户”,其地址来自您的钱包。工具和资源管理器在处理令牌时默认使用该帐户Gh9ZwEmdLJ8DscKNTkTqPbNwLNNBjuSzaG9Vp2KGtKJr。要获得此帐户,您可以使用getAssociatedTokenAccount,归结为:
import { PublicKey } from '@solana/web3.js';

const TOKEN_PROGRAM_ID = new PublicKey('TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA');
const ASSOCIATED_TOKEN_PROGRAM_ID = new PublicKey('ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL');
const owner = new PublicKey('CGP6sKHyrZGPJRoUAy8XbyzmX7YD4tVBQG9SEe9ekZM6');
const mint = new PublicKey('Gh9ZwEmdLJ8DscKNTkTqPbNwLNNBjuSzaG9Vp2KGtKJr');

const [address] = await PublicKey.findProgramAddress(
    [owner.toBuffer(), TOKEN_PROGRAM_ID.toBuffer(), mint.toBuffer()],
    ASSOCIATED_TOKEN_PROGRAM_ID
);
Run Code Online (Sandbox Code Playgroud)

真正的代码位于:https://github.com/solana-labs/solana-program-library/blob/5611ad8bd595d9e3666f8b115cd28f8116038645/token/js/src/state/mint.ts#L146