読了時間:8分
概要
Whether you are querying a token account balance or constructing a token transfer instruction, knowing how to find a user's token account address is a fundamental skill for any Solana developer. In this guide, we ensure you know the basics of Solana Token Accounts, and walk through five easy ways to fetch the address of a Solana associated token account:
コマンドラインを使用して...
JavaScript/TypeScriptの使用
- Solana の使用方法
- Solana従来のweb3.jsライブラリの使用
Rustの使用
必要なもの
- Solana に関する基本的な理解
- 照会対象のSolana アドレス
Solanaにおけるトークンアカウントの理解
ここで少し時間を取って、トークンアカウントとは何か、そしてそれがSolana のウォレットアドレスとどう異なるのかについておさらいしておきましょう。
Phantom や Solflare といったSolana トークンの残高を確認する場合、通常は関連するトークンアカウントとその残高が表示されています:

このデータがどこから来ているのか、見てみましょう。まず、ウォレットのアドレスを用意してください。Phantomやその他のウォレットから直接コピーすることができます:

Solana アクセスし、ウォレットアドレスを貼り付けてください。Scroll 「Tokens」タブをクリックすると、トークンアカウントの一覧とその残高が表示されます。ここには、代替可能なトークン(USDCやBONKなどの通貨のようなトークン)だけでなく、代替不可能なトークン(NFT)も表示されます。「Detailed」ボタンをクリックすると、各トークンアカウントに関する詳細情報を確認できます:

Explorerに表示されるトークンアカウントと残高は、Solana アプリに表示されている内容と一致していることがお分かりいただけるでしょう。
USDC、PyUSD、BONKなど、各トークンにはそれぞれ個別のトークンアカウントアドレスが割り当てられていることがわかります。これにより、別々のトークンアカウントを扱う複数のトランザクションを並行して実行することが可能になります。USDCとPyUSDは別々のトークンアカウントに保管されているため、USDCを送金しながら同時にPyUSDを受け取るといったことが可能です。これが、Solana 理由の一つです。
ミントアドレス
各トークンアカウントには、トークンの発行アドレスが設定されていることがわかります。
トークンのミントアドレスは、そのトークンを一意に特定するものです。トークンの作成者は、自身のウェブサイトやソーシャルメディア上でそのミントアドレスを公開します:
USDC is created by Circle, and the USDC mint address (EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v) は Circleのウェブサイトに掲載された.

PyUSD is created by PayPal, and the PyUSD mint address (2b1kV6DkPAnxd5ixfnxCpjxmKwqjjaYmCZfHsFu24GXo) は PayPalのウェブサイトに掲載された.

ボンク is created by the community, and the BONK mint address (DezXAZ8z7PnrnRJjz3wXBoRgixCa6xjnB7YaB1pPB263) は @bonk_inuのXプロフィールに掲載されました.

Someone could make a new token that looks like USDC or PyUSD, but if the mint address is different, it is a completely different token. Many apps like Solana Explorer display a warning when showing tokens that aren't well known for this reason:

Solana では、USDC、BONK、PyUSD などのよく知られたトークンを検索し、正しいミントアドレスを確認することもできます。
アソシエイト・トークン・アカウント・プログラム
エクスプローラーでウォレットを表示した際に表示されるトークンアカウントは、そのほとんどが関連付けられたトークンアカウントです。これらは、特定のウォレットアドレスおよび トークン発行アドレスに関連付けられたトークンアカウントです。
トークンを別々のアカウントに保管するのは迅速ですが、その一方で、特定のウォレットアドレスが与えられた場合に、各トークンアカウントのアドレスをどのように特定するかを検討する必要もあります。
- もしUSDCを
bob.sol, 以下のトークンアカウントを知りたいのですが、bob.solUSDCを保管しています。 - もし、~かどうかを知りたい場合は
alice.solBONKを持っている人がいたら、アリスがBONKを保管しているトークンアカウントを教えてほしい。
そこで 関連するトークンアカウントが が役立ちます。
「アソシエイテッド・トークン・プログラム」とは、ウォレットアドレスとトークンの鋳造情報に基づいて、特定のウォレットアカウントがどの種類のトークンをどこに保管しているかを確定的に特定する方法です。例えば:
- の関連するトークンアカウントを見つけるには、
bob.solのUSDCについては、そのユーザーのウォレットアドレスとUSDCの発行アドレスを照合します。 - の関連するトークンアカウントを見つけるには、
alice.solBONKの場合、ウォレットアドレスとBONKのミントアドレスが必要です。
These accounts are owned by the Token Program (TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA) または、より新しい「トークン拡張プログラム」(TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb) and controlled by a user's wallet address. This guide will show you how to fetch the address of an associated token account for a given wallet and mint.
注意:関連付けられたトークンアカウントとは、ウォレットのアドレスとトークンのミントから生成されたアドレスを使用するトークンアカウントのことです。
方法 1 - SPL-Token CLI を使用したコマンドライン
| 依存関係 | バージョン |
|---|---|
| spl-token-cli | 5.1.0 |
ウォレットの残高を確認する最初の方法は、Solana CLI を使用することです。まだインストールしていない場合は、spl.solana.com/token にアクセスし、お使いのOSに応じた手順に従ってください。インストールが正常に完了したかどうかを確認するには、新しいターミナルを開き、次のように入力してください:
spl-token --version
次のような画面が表示されるはずです:

さあ、準備は万端です!
In your terminal, fetch your token account by entering:
spl-token address \
--owner WALLET_WALLET_ADDRESS \
--token TOKEN_MINT_ADDRESS \
--verbose \
--url mainnet-beta
単に --所有者 クエリを実行したいウォレットアドレスを指定して、 --token クエリ対象のトークンのミントアドレスを指定したフラグ、および --verbose より詳細な回答を得るには、フラグを指定してください(このクエリでは必須です)。 -うーん flag tells the CLI to use the Solana mainnet cluster (though our search is deterministic and should not require a specified cluster, the CLI tool verifies that our mint address is actually a valid mint address on that cluster).
次のような画面が表示されるはずです:

よくやった!
方法 2 - cURL を使用したコマンドライン
| 依存関係 | バージョン |
|---|---|
| curl | 8.7.1 |
cURL is a command line tool and library for transferring data with URLs. Most *nix-based systems have cURL support out of the box. Check if you have it by running the following:
curl -V
まだインストールしていない場合は、curl.seにアクセスしてセットアップを行ってください。
準備ができたら、次のような名前のファイルを作成してください。 get-associated-token-account.bash 内容は以下の通りです:
WALLET_ADDRESS="YOUR WALLET ADDRESS"
MINT_ADDRESS="YOUR MINT ADDRESS"
curl https://api.mainnet-beta.solana.com -X POST -H "Content-Type: application/json" -d '
{
"jsonrpc": "2.0",
"id": 1,
"method": "getTokenAccountsByOwner",
"params": [
"'$WALLET_ADDRESS'",
{
"mint": "'$MINT_ADDRESS'"
},
{
"encoding": "jsonParsed"
}
]
}
' | jq;
echo "✅ Completed successfully. Check the output above."
なお、ここでは jsonParsed デフォルトの(バイナリ)エンコーディングの代わりにこのエンコーディングを使用するのは、構造化されたアカウントデータが返され、生のバイトデータを逆シリアル化する必要がないためです。
ターミナルで、次のコマンドを実行してください:
bash get-associated-token-account.bash
次のような画面が表示されるはずです:

同じアドレスが result.value[0].pubkey フィールド 🙌。ぜひ当社の Solana の詳細については、 getTokenAccountsByOwner メソッド。
方法 3 -Solana を使用した TypeScript
| 依存関係 | バージョン |
|---|---|
| node.js | 22.14.0 |
| @solana/kit | 2.1.1 |
| @solana-program/token | 0.5.1 |
| esrun | 3.2.26 |
ターミナルで、以下のコマンドを実行して新しいプロジェクトディレクターを作成してください:
mkdirsolana&& cdsolana
Solana の依存関係をインストールします:
npm init -y
npm install --save @solana/kit @solana-program/token esrun
次に、次のような名前の新しいファイルを作成します。 get-associated-token-account.ts. 内容は以下の通りです:
import { address } from "@solana/kit";
import { findAssociatedTokenPda } from "@solana-program/token";
const WALLET = address("YOUR_WALLET_ADDRESS"); // e.g., dDCQNnDmNbFVi8cQhKAgXhyhXeJ625tvwsunRyRc7c8
const MINT = address("YOUR_MINT_ACCOUNT"); // e.g., EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v
const TOKEN_PROGRAM_ADDRESS = address(
"TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA"
);
const [associatedTokenAddress] = await findAssociatedTokenPda({
mint: MINT,
owner: WALLET,
tokenProgram: TOKEN_PROGRAM_ADDRESS,
});
console.log(
"✅ Got associated token account address using Solana Kit: ",
associatedTokenAddress
);
コードを実行してください。ターミナルで次のように入力してください。
npx esrun address.ts
ターミナルに、関連するトークンのアドレスが表示されるはずです。

よくやったね!
あるいは、代わりに rpc クラスから送信する getTokenAccountsByOwner Solana リクエスト。これにはネットワークリクエストが必要となるため処理に時間がかかりますが、関連するトークンプログラムの外で作成されたトークンアカウントも検出できるため、一部の(まれな)ケースでは役立つ可能性があります!
方法 4 -Solana .js を使用した TypeScript
| 依存関係 | バージョン |
|---|---|
| node.js | 22.14.0 |
| @solana/web3.js | 1.98.2 |
| esrun | 3.2.26 |
ターミナルで、以下のコマンドを実行して新しいプロジェクトディレクトリを作成してください:
mkdir token-address-legacy-web3 && cd token-address-legacy-web3
Solana .jsの依存関係をインストールします:
npm init -y
npm install --save @solana/web3.js@1
「」という名前の新しいファイルを作成します。 get-associated-token-account-legacy-web3.js 内容は以下の通りです:
開く address.js お好みのコードエディタで、1行目に `require` を記述します。 @solana/web3.js. 以下のものをインポートします。 公開鍵 このパッケージのクラス。
import { PublicKey } from '@solana/web3.js';
const WALLET = new PublicKey('YOUR_WALLET_ADDRESS'); // e.g., E645TckHQnDcavVv92Etc6xSWQaq8zzPtPRGBheviRAk
const MINT = new PublicKey('YOUR_MINT_ADDRESS'); // e.g., EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v
const TOKEN_PROGRAM_ID = new PublicKey('TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA');
const ASSOCIATED_TOKEN_PROGRAM_ID = new PublicKey('ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL');
const [address] = PublicKey.findProgramAddressSync(
[WALLET.toBuffer(), TOKEN_PROGRAM_ID.toBuffer(), MINT.toBuffer()],
ASSOCIATED_TOKEN_PROGRAM_ID
);
console.log(
"✅ Got associated token account address using Solana web3.js: ",
address.toBase58()
);
その findProgramAddressSync このメソッドは、シードとプログラムIDが与えられると、確定的にプログラムアドレスを特定します。この場合、ウォレットアドレス、トークンプログラムID、およびミントアドレスをシードとして渡し、関連するトークンプログラムIDをプログラムIDとして渡します(これらのシードとその順序は defined by the associated token program).
コードを実行してください。ターミナルで次のように入力してください。
npx esrun get-associated-token-account-legacy-web3.js
次のような画面が表示されるはずです:

よくやったね!
なお、以下の getAssociatedTokenAddressSync 関数 from solana - 使い方が少しだけ簡単です。ただ、 solana パッケージ:
npm install --savesolana
そして、次のように使います:
import { PublicKey } from "@solana/web3.js";
import { getAssociatedTokenAddressSync } from "@solana/spl-token";
const WALLET = new PublicKey("YOUR_WALLET_ADDRESS"); // e.g., E645TckHQnDcavVv92Etc6xSWQaq8zzPtPRGBheviRAk
const MINT = new PublicKey("YOUR_MINT_ADDRESS"); // e.g., EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v
const address = getAssociatedTokenAddressSync(WALLET, MINT);
console.log(
"✅ Got associated token account address using Solana web3.js: ",
address.toBase58()
);
方法 5 - Rust
| 依存関係 | バージョン |
|---|---|
| さび | 1.86.0 |
| solanasdk | 2.2.22 |
| spl-関連トークン-アカウント | 7.0.0 |
Rust開発者の方は、Solana SDK利用できます。プロジェクトフォルダ内で新しいプロジェクトを作成し、そのフォルダに移動してください:
cargo new get-associated-token-address-rust; cd get-associated-token-address-rust
必要な依存関係を追加します:
貨物 追加sdk
src/main.rs を開き、1行目で必要なパッケージをインポートします:
use solana_sdk::pubkey::Pubkey;
use spl_associated_token_account::get_associated_token_address;
use std::str::FromStr;
次に、あなたの メイン function that will fetch your address by passing the public keys of your owner and mint into the get_associated_token_address メソッド:
fn main() {
let wallet = Pubkey::from_str("YOUR_WALLET_ADDRESS").unwrap();
let mint = Pubkey::from_str("YOUR_TOKEN_MINT_ADDRESS").unwrap();
let associated_token_address = get_associated_token_address(&wallet, &mint);
println!(
"✅ Got associated token account address using Rust: {}",
associated_token_address
);
}
コードをコンパイルして実行してください。ターミナルで次のように入力してください。
貨物 運行
すると、同じトークンアドレスが返されるはずです:

よくやったね!
まとめ
よくできました!これで、Solana トークンアカウントのアドレスを取得するための便利なツールが5つ揃いました。Solana を始めたばかりの方には、以下のリソースが役立つかもしれません:
皆さんが開発中のプロジェクトについて、ぜひ詳しくお聞かせください。Discordでメッセージを送っていただくか、X/Twitterをフォローして、最新情報をチェックしてください!

