Getting Started
Read Token Data
Fetch fungible token information from the Solana blockchain.
Get Token Metadata
Fetch a token's metadata using its mint address. This retrieves the on-chain token information including name, symbol, decimals, and supply.
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})
1
Parameters
| Parameter | Description |
|---|---|
mintAddress | The token mint address to fetch |
Get Token Balance
Fetch the token balance for a specific wallet using the Associated Token Account or 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 All Tokens by Owner
Retrieve all fungible tokens owned by a wallet address using the 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
Comparing Approaches
| Feature | Direct RPC | DAS API |
|---|---|---|
| Speed | Slower for bulk queries | Optimized for bulk queries |
| Data freshness | Real-time | Near real-time (indexed) |
| Search capabilities | Limited | Advanced filtering |
| Use case | Single token lookups | Portfolio views, searches |
Tips
- Use DAS for portfolio views - When displaying all tokens a user owns, DAS API is significantly faster than multiple RPC calls
- For DAS, set showFungible - Set
showFungible: trueotherwise some RPCs only return NFT Data
