はじめに
トークンデータを読み取る
Last updated November 28, 2025
Solanaブロックチェーンからファンジブルトークン情報を取得します。
トークンメタデータを取得する
ミントアドレスを使用してトークンのメタデータを取得します。これにより、名前、シンボル、小数点以下桁数、供給量を含むオンチェーントークン情報が取得されます。
1// npm install @metaplex-foundation/mpl-token-metadata @metaplex-foundation/umi @metaplex-foundation/umi-bundle-defaults
2import { publicKey } from '@metaplex-foundation/umi'
3import { createUmi } from '@metaplex-foundation/umi-bundle-defaults'
4import {
5 fetchDigitalAsset,
6 mplTokenMetadata
7} from '@metaplex-foundation/mpl-token-metadata'
8
9// Initialize Umi with your RPC endpoint
10const umi = createUmi('https://api.devnet.solana.com').use(mplTokenMetadata())
11
12// The mint address of the token you want to fetch
13const mintAddress = publicKey('YOUR_TOKEN_MINT_ADDRESS')
14
15// Fetch the token's metadata from the blockchain
16const asset = await fetchDigitalAsset(umi, mintAddress)
17
18console.log('Token Name:', asset.metadata.name)
19console.log('Token Symbol:', asset.metadata.symbol)
20console.log('Token URI:', asset.metadata.uri)
21console.log('Decimals:', asset.mint.decimals)
22console.log('Supply:', asset.mint.supply)
1// npm install @metaplex-foundation/umi @metaplex-foundation/umi-bundle-defaults @metaplex-foundation/digital-asset-standard-api
2import { dasApi } from '@metaplex-foundation/digital-asset-standard-api';
3import { publicKey } from '@metaplex-foundation/umi';
4import { createUmi } from '@metaplex-foundation/umi-bundle-defaults';
5
6// Initialize Umi with a DAS-enabled RPC endpoint
7const umi = createUmi('https://api.devnet.solana.com').use(dasApi())
8
9// The mint address of the token you want to fetch
10const mintAddress = publicKey('YOUR_TOKEN_MINT_ADDRESS')
11
12// Fetch the asset using DAS API
13const asset = await umi.rpc.getAsset(mintAddress, {
14 displayOptions: {
15 showFungible: true
16 }
17})
1curl -X POST \
2 -H "Content-Type: application/json" \
3 -d '{
4 "jsonrpc": "2.0",
5 "id": 1,
6 "method": "getAsset",
7 "params": {
8 "id": "<Mint Address>"
9 }
10 }' \
11 https://api.devnet.solana.com
パラメータ
| パラメータ | 説明 |
|---|---|
mintAddress | 取得するトークンミントアドレス |
トークン残高を取得する
Associated Token AccountまたはDAS APIを使用して、特定のウォレットのトークン残高を取得します。
1// npm install @metaplex-foundation/umi @metaplex-foundation/umi-bundle-defaults @metaplex-foundation/mpl-toolbox
2import { publicKey } from '@metaplex-foundation/umi'
3import { createUmi } from '@metaplex-foundation/umi-bundle-defaults'
4import {
5 findAssociatedTokenPda,
6 fetchToken
7} from '@metaplex-foundation/mpl-toolbox'
8
9const umi = createUmi('https://api.devnet.solana.com')
10
11const mintAddress = publicKey('YOUR_TOKEN_MINT_ADDRESS')
12const walletAddress = publicKey('WALLET_ADDRESS')
13
14// Find the Associated Token Account
15const tokenAccount = findAssociatedTokenPda(umi, {
16 mint: mintAddress,
17 owner: walletAddress,
18})
19
20// Fetch the token account data
21const tokenData = await fetchToken(umi, tokenAccount)
22
23console.log('Token Balance:', tokenData.amount)
24console.log('Mint:', tokenData.mint)
25console.log('Owner:', tokenData.owner)
1// npm install @metaplex-foundation/umi @metaplex-foundation/umi-bundle-defaults @metaplex-foundation/digital-asset-standard-api
2import { publicKey } from '@metaplex-foundation/umi'
3import { createUmi } from '@metaplex-foundation/umi-bundle-defaults'
4import { dasApi } from '@metaplex-foundation/digital-asset-standard-api'
5
6const umi = createUmi('https://api.devnet.solana.com').use(dasApi())
7
8const mintAddress = publicKey('YOUR_TOKEN_MINT_ADDRESS')
9const walletAddress = publicKey('WALLET_ADDRESS')
10
11// Use searchAssets to find the token with balance for a specific wallet
12const result = await umi.rpc.searchAssets({
13 owner: walletAddress,
14 interface: 'FungibleToken',
15 limit: 1000,
16 displayOptions: {
17 showFungible: true
18 }
19})
20
21// Find the specific token by mint address
22const token = result.items.find(
23 (asset) => asset.id === mintAddress
24)
25
26if (token) {
27 console.log('Token:', token.content.metadata?.name)
28 console.log('Balance (raw):', token.token_info?.balance)
29 console.log('Decimals:', token.token_info?.decimals)
30
31 // Calculate human-readable balance
32 const decimals = token.token_info?.decimals || 0
33 const balance = Number(token.token_info?.balance) / Math.pow(10, decimals)
34 console.log('Balance:', balance)
35} else {
36 console.log('Token not found in wallet')
37}
1# Get token balance for a wallet using DAS searchAssets
2# Returns all fungible tokens - filter by mint address in response
3curl -X POST \
4 -H "Content-Type: application/json" \
5 -d '{
6 "jsonrpc": "2.0",
7 "id": 1,
8 "method": "searchAssets",
9 "params": {
10 "ownerAddress": "<Wallet Address>",
11 "interface": "FungibleToken",
12 "options": {
13 "showFungible": true
14 }
15 }
16 }' \
17 https://api.devnet.solana.com
所有者別の全トークンを取得する
DAS APIを使用して、ウォレットアドレスが所有するすべてのファンジブルトークンを取得します。
1// npm install @metaplex-foundation/umi @metaplex-foundation/umi-bundle-defaults @metaplex-foundation/digital-asset-standard-api
2import { dasApi } from '@metaplex-foundation/digital-asset-standard-api';
3import { publicKey } from '@metaplex-foundation/umi';
4import { createUmi } from '@metaplex-foundation/umi-bundle-defaults';
5
6const umi = createUmi('https://api.devnet.solana.com').use(dasApi())
7
8const walletAddress = publicKey('WALLET_ADDRESS')
9
10// Get all fungible assets owned by the wallet using searchAssets
11// Using interface: 'FungibleToken' filters server-side (more efficient)
12const result = await umi.rpc.searchAssets({
13 owner: walletAddress,
14 interface: 'FungibleToken',
15 limit: 1000,
16 displayOptions: {
17 showFungible: true
18 }
19})
20
21const fungibleTokens = result.items
22
23console.log(`Found ${fungibleTokens.length} fungible tokens\n`)
24
25fungibleTokens.forEach(token => {
26 const decimals = token.token_info?.decimals || 0
27 const rawBalance = token.token_info?.balance || 0
28 const balance = Number(rawBalance) / Math.pow(10, decimals)
29
30 console.log(`${token.content.metadata?.name} (${token.content.metadata?.symbol})`)
31 console.log(` Mint: ${token.id}`)
32 console.log(` Balance: ${balance.toLocaleString()}`)
33})
1# Get all fungible tokens owned by a wallet using searchAssets
2# Using interface: "FungibleToken" filters server-side (more efficient)
3curl -X POST \
4 -H "Content-Type: application/json" \
5 -d '{
6 "jsonrpc": "2.0",
7 "id": 1,
8 "method": "searchAssets",
9 "params": {
10 "ownerAddress": "GfK2Xz6pzQp1sC1FvxePKnikZA7iyaCSVXZykixLjem5",
11 "interface": "FungibleToken",
12 "options": {
13 "showFungible": true
14 }
15 }
16 }' \
17 https://api.devnet.solana.com
アプローチの比較
| 機能 | 直接RPC | DAS API |
|---|---|---|
| 速度 | バルククエリでは遅い | バルククエリに最適化 |
| データの鮮度 | リアルタイム | ほぼリアルタイム(インデックス化) |
| 検索機能 | 限定的 | 高度なフィルタリング |
| ユースケース | 単一トークンの検索 | ポートフォリオビュー、検索 |
ヒント
- ポートフォリオビューにはDASを使用 - ユーザーが所有するすべてのトークンを表示する場合、DAS APIは複数のRPCコールよりも大幅に高速です
- DASではshowFungibleを設定 -
showFungible: trueを設定してください。そうしないと、一部のRPCはNFTデータのみを返します
