Helius 数字资产标准 (DAS) API 提供了强大的工具,用于读取和查询 Solana 上的 NFT 和代币数据。本指南向您展示如何有效地处理不同类型的 Solana 资产。

Jupiter 验证代币的价格数据

getAsset 返回的价格数据是缓存的,可能不是最新的。价格信息有 60 秒的缓存,这意味着数据可能最多有 60 秒的延迟。
const fetchTokenPriceData = async () => {
  const response = await fetch("https://mainnet.helius-rpc.com/?api-key=YOUR_API_KEY", {
    method: "POST",
    headers: {
      "Content-Type": "application/json",
    },
    body: JSON.stringify({
      jsonrpc: "2.0",
      id: "1",
      method: "getAsset",
      params: {
        id: "DezXAZ8z7PnrnRJjz3wXBoRgixCa6xjnB7YaB1pPB263", // Bonk token mint address
        displayOptions: {
          showFungibleTokens: true
        }
      },
    }),
  });
  
  const data = await response.json();
  
  // Calculate market cap
  if (data.result?.token_info?.price_info) {
    const { price_per_token } = data.result.token_info.price_info;
    const { supply, decimals } = data.result.token_info;
    
    // Adjust supply for decimals
    const adjustedSupply = supply / Math.pow(10, decimals);
    const marketCap = price_per_token * adjustedSupply;
    
    console.log(`Market Cap: ${marketCap.toLocaleString()}`);
  }
  
  return data;
};

API 参考

查看 getAsset 的详细文档

响应结构

价格数据在响应中可通过 token_info.price_info 获取:
{
  "token_info": {
    "symbol": "Bonk",
    "supply": 8881594973561640000,
    "decimals": 5,
    "token_program": "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA",
    "price_info": {
      "price_per_token": 0.0000192271,
      "currency": "USDC"
    }
  }
}

计算市值

要计算代币的市值,将其价格乘以调整后的供应量(考虑小数位):
const adjustedSupply = supply / Math.pow(10, decimals);
const marketCap = pricePerToken * adjustedSupply;
此计算通过正确考虑代币的小数位,给出代币的总市场估值。

处理 NFTs 和数字收藏品

DAS API 提供了多种方法来处理 NFTs 和数字收藏品。这些方法允许您检索单个资产、按所有者或创建者查询,并验证链上真实性。

获取单个NFT

检索特定NFT的综合数据:

const getNFT = async (mintAddress) => {
  const response = await fetch('https://mainnet.helius-rpc.com/?api-key=YOUR_API_KEY', {
    method: "POST",
    headers: {
      "Content-Type": "application/json",
    },
    body: JSON.stringify({
      jsonrpc: "2.0",
      id: "1",
      method: "getAsset",
      params: {
        id: mintAddress,
      },
    }),
  });
  
  const data = await response.json();
  return data;
};

// Example usage
getNFT("F9Lw3ki3hJ7PF9HQXsBzoY8GyE6sPoEZZdXJBsTTD2rk");

高级NFT查询方法

const getAssetsByCreator = async (creatorAddress) => {
  const response = await fetch("https://mainnet.helius-rpc.com/?api-key=YOUR_API_KEY", {
    method: "POST",
    headers: {
      "Content-Type": "application/json",
    },
    body: JSON.stringify({
      jsonrpc: "2.0",
      id: "1",
      method: "getAssetsByCreator",
      params: {
        creatorAddress: creatorAddress,
        page: 1,
        limit: 100,
      },
    }),
  });
  
  const data = await response.json();
  return data;
};

// Example usage
getAssetsByCreator("9uBX3ASjxWvNBAD1xjbVaKA74mWGZys3RGSF7DdeDD3F");

使用SPL代币

可以通过Helius API中的多种方法查询SPL代币。这些方法允许您检查余额、查找代币账户和获取代币元数据。

常见的SPL代币操作

const getTokenBalance = async (tokenAccountAddress) => {
  const response = await fetch("https://mainnet.helius-rpc.com/?api-key=YOUR_API_KEY", {
    method: 'POST',
    headers: { 'Content-Type': 'application/json' },
    body: JSON.stringify({
      jsonrpc: '2.0',
      id: '1',
      method: 'getTokenAccountBalance',
      params: [tokenAccountAddress]
    })
  });
  
  const data = await response.json();
  return data;
};

// Example usage
getTokenBalance("3emsAVdmGKERbHjmGfQ6oZ1e35dkf5iYcS6U4CPKFVaa");

API Reference

查看getTokenAccountBalance文档

高级 SPL 代币查询

您还可以找到持有特定代币铸造的所有账户:
const getTokenAccountsByMint = async (mintAddress) => {
  const response = await fetch("https://mainnet.helius-rpc.com/?api-key=YOUR_API_KEY", {
    method: 'POST',
    headers: { 'Content-Type': 'application/json' },
    body: JSON.stringify({
      jsonrpc: '2.0',
      id: '1',
      method: 'getTokenAccountsByOwner',
      params: [
        'CEXq1uy9y15PL2Wb4vDQwQfcJakBGjaAjeuR2nKLj8dk', // Owner address
        {
          mint: mintAddress
        },
        {
          encoding: 'jsonParsed'
        }
      ]
    })
  });
  
  const data = await response.json();
  return data;
};

// Example usage
getTokenAccountsByMint("8wXtPeU6557ETkp9WHFY1n1EcU6NxDvbAggHGsMYiHsB");

最佳实践

在使用 DAS API 时,请牢记以下最佳实践:
  1. 对于返回大量数据集的方法,使用分页
  2. 通过实现 try/catch 块,优雅地处理错误
  3. 在适当的时候,缓存响应以减少 API 调用
  4. 遵守速率限制以避免应用程序中断
  5. 在计算市值之前,验证 Jupiter 价格数据是否可用

有问题?

有关 DAS API 的常见问题,包括资产数据、价格信息和 API 使用,请访问我们全面的 DAS API FAQ