> ## Documentation Index
> Fetch the complete documentation index at: https://www.helius.dev/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# 如何获取Solana NFT：资产、集合和证明

> 使用Helius DAS API检索和查询Solana NFT、压缩NFT、版本和证明。完整指南包括代码示例和最佳实践。

## 概述

本指南涵盖使用Helius数字资产标准（DAS）API读取NFT和数字藏品：获取单个资产、列出钱包的NFT、按集合或创建者查询、处理压缩NFT和Merkle证明、列出版本以及读取交易历史。

有关可替代代币——余额、供应、持有者和价格的内容，请参见[获取SPL代币指南](/docs/zh/das/get-tokens)。相同的`getAsset`和`getAssetsByOwner`方法服务于NFT和代币；此页面侧重于NFT和收藏品的工作流程。

## 何时使用

当您需要以下操作时，请使用此页面上的方法：

* 显示单个NFT的元数据、图像和属性
* 列出一个钱包拥有的每一个NFT用于投资组合或画廊
* 使用集合和创建者查询为市场或浏览器提供支持
* 验证或转移压缩NFT（需要Merkle证明）
* 显示NFT的链上交易历史
* 列出从主NFT印刷的版本

## NFT方法

首先使用`getAsset`获取单个NFT或使用`getAssetsByOwner`获取钱包的集合。每个卡片链接到完整的API参考。

<CardGroup cols={2}>
  <Card title="getAsset" icon="image" href="/docs/zh/api-reference/das/getasset">
    通过ID获取一个NFT的完整数据。
  </Card>

  <Card title="getAssetsByOwner" icon="wallet" href="/docs/zh/api-reference/das/getassetsbyowner">
    列出一个钱包持有的所有NFT。
  </Card>

  <Card title="searchAssets" icon="magnifying-glass" href="/docs/zh/das/search">
    按集合、创建者、属性等进行筛选——详见搜索资产指南。
  </Card>

  <Card title="getAssetsByCreator" icon="user" href="/docs/zh/api-reference/das/getassetsbycreator">
    获取创建者铸造的所有资产。
  </Card>

  <Card title="getAssetsByGroup" icon="layer-group" href="/docs/zh/api-reference/das/getassetsbygroup">
    获取集合中的所有资产。
  </Card>

  <Card title="getSignaturesForAsset" icon="clock-rotate-left" href="/docs/zh/api-reference/das/getsignaturesforasset">
    获取资产的交易历史。
  </Card>

  <Card title="getNftEditions" icon="copy" href="/docs/zh/api-reference/das/getnfteditions">
    获取从主NFT印刷的版本。
  </Card>

  <Card title="getAssetProof" icon="shield-check" href="/docs/zh/api-reference/das/getassetproof">
    获取压缩NFT的Merkle证明。
  </Card>
</CardGroup>

### 获取单个NFT

通过其ID检索一个NFT的完整元数据、所有权和集合数据：

```typescript theme={"system"}
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: 'F9Lw3ki3hJ7PF9HQXsBzoY8GyE6sPoEZZdXJBsTTD2rk' },
  }),
});

const { result } = await response.json();
console.log(result.content.metadata.name, result.ownership.owner);
```

### 更多NFT查询

<AccordionGroup>
  <Accordion title="列出钱包的NFT — getAssetsByOwner">
    ```typescript theme={"system"}
    const getNFTsByOwner = async (ownerAddress) => {
      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: 'getAssetsByOwner',
          params: { ownerAddress, page: 1, limit: 10 },
        }),
      });

      const { result } = await response.json();
      return result;
    };

    getNFTsByOwner('86xCnPeV69n6t3DnyGvkKobf9FdN2H9oiVDdaMpo2MMY');
    ```
  </Accordion>

  <Accordion title="按创建者 — getAssetsByCreator">
    ```typescript theme={"system"}
    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, page: 1, limit: 100 },
        }),
      });

      const { result } = await response.json();
      return result;
    };

    getAssetsByCreator('9uBX3ASjxWvNBAD1xjbVaKA74mWGZys3RGSF7DdeDD3F');
    ```
  </Accordion>

  <Accordion title="按合集 — getAssetsByGroup">
    ```typescript theme={"system"}
    const getAssetsByCollection = async (collectionAddress) => {
      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: 'getAssetsByGroup',
          params: { groupKey: 'collection', groupValue: collectionAddress, page: 1, limit: 100 },
        }),
      });

      const { result } = await response.json();
      return result;
    };

    getAssetsByCollection('J1S9H3QjnRtBbbuD4HjPV6RpRhwuk4zKbxsnCHuTgh9w');
    ```
  </Accordion>

  <Accordion title="交易历史 — getSignaturesForAsset">
    ```typescript theme={"system"}
    const getNFTTransactionHistory = 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: 'getSignaturesForAsset',
          params: { id: mintAddress, page: 1, limit: 100 },
        }),
      });

      const { result } = await response.json();
      return result;
    };

    getNFTTransactionHistory('FNt6A9Mfnqbwc1tY7uwAguKQ1JcpBrxmhczDgbdJy5AC');
    ```
  </Accordion>
</AccordionGroup>

## 压缩NFT

状态压缩NFT（cNFTs）使用与常规NFT相同的方法读取 — `getAsset`、`getAssetsByOwner`和`searchAssets`都返回它们。压缩特有的两点是：

* **Merkle证明** — 链上操作如转移和销毁需要来自`getAssetProof`的证明。
* **历史** — 使用`getSignaturesForAsset`（如上所示）获取cNFT的交易历史。

<Accordion title="获取Merkle证明 — getAssetProof">
  ```typescript theme={"system"}
  const getProof = async (id) => {
    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: 'getAssetProof',
        params: { id },
      }),
    });

    const { result } = await response.json();
    return result; // { root, proof, node_index, leaf, tree_id }
  };

  getProof('Bu1DEKeawy7txbnCEJE4BU3BKLXaNAKCYcHR4XhndGss');
  ```
</Accordion>

## 最佳实践

* 对于返回大量结果集的方法，使用[分页](/docs/zh/das/pagination)。
* 使用try/catch处理错误，并使用指数退避重试瞬时故障。
* 在适当情况下缓存响应以减少API调用。
* 当有多个ID时，使用`getAssetBatch`代替多个单独的`getAsset`调用。

## 下一步

<CardGroup cols={3}>
  <Card title="获取SPL代币" icon="coins" href="/docs/zh/das/get-tokens">
    可替代代币余额、供应、持有者和价格。
  </Card>

  <Card title="搜索资产" icon="magnifying-glass" href="/docs/zh/das/search">
    按合集、创建者和属性过滤NFT。
  </Card>

  <Card title="DAS API 常见问题" icon="book" href="/docs/zh/faqs/das-api">
    关于资产、价格数据和使用的常见问题。
  </Card>
</CardGroup>
