> ## 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、代币和压缩资产

> 使用 searchAssets 端点在 Solana 上发现 NFT、压缩资产和同质化代币，可进行高级过滤、排序和分页。

## 概述

`searchAssets` 是 DAS API 中最灵活的读取方法。它返回符合所有者、集合分组、代币类型和属性等筛选条件的资产，支持单次分页调用。需要多个资产或所有者列表以外时使用。

`tokenType` 是可选的。如果省略，`searchAssets` 仅返回常规和压缩的 NFT，不包括同质化代币。要包含同质化代币，请设置 `tokenType`（例如，`"fungible"` 或 `"all"`）。接受的值有 `fungible`，`nonFungible`，`regularNft`，`compressedNft`，和 `all`。

## 何时使用

在以下情况下使用 `searchAssets`：

* 过滤钱包资产，仅限同质化代币或仅限 NFT
* 列出钱包在特定集合中拥有的资产
* 批量发现压缩的 NFT
* 使用光标分页在大型结果集上构建无限滚动
* 按代理状态或签署者过滤 MPL 核心水平的资产

对于单个资产，使用 [`getAsset`](/zh/api-reference/das/getasset)；对于普通钱包列表，使用 [`getAssetsByOwner`](/zh/api-reference/das/getassetsbyowner)。

<Card title="API 参考" horizontal icon="code" href="/zh/api-reference/das/searchassets">
  查看 searchAssets 的详细文档
</Card>

## 快速开始

```typescript theme={"system"}
// Replace YOUR_API_KEY with your Helius API key
const url = `https://mainnet.helius-rpc.com/?api-key=YOUR_API_KEY`;

async function searchAssets(params) {
  const body = {
    jsonrpc: "2.0",
    id: "search-assets-example",
    method: "searchAssets",
    params,
  };
  const res = await fetch(url, {
    method: "POST",
    headers: { "Content-Type": "application/json" },
    body: JSON.stringify(body),
  });
  if (!res.ok) {
    throw new Error(`${res.status} ${res.statusText}`);
  }
  const { result } = await res.json();
  return result;
}

// Example: fetch first 50 compressed NFTs in a wallet
searchAssets({
  ownerAddress: "86xCnPeV69n6t3DnyGvkKobf9FdN2H9oiVDdaMpo2MMY",
  tokenType: "compressedNft",
  limit: 50,
}).then(console.log);
```

## 选择 tokenType

`tokenType` 是可选的，指定响应中出现的**资产类型**。如省略，`searchAssets` 仅返回常规和压缩的 NFT，设定 `tokenType` 以包含同质化代币。

<ParamField body="tokenType" type="string">
  接受的值：`fungible`，`nonFungible`，`regularNft`，`compressedNft`，`all`。如果省略，默认为常规和压缩的 NFT。
</ParamField>

| tokenType       | 结果                    | 典型用例      |
| --------------- | --------------------- | --------- |
| `fungible`      | 仅 SPL 和 Token-2022 代币 | 钱包余额、代币门控 |
| `nonFungible`   | 所有 NFT（压缩和常规）         | 投资组合概览    |
| `regularNft`    | 传奇和 pNFTs（非压缩）        | 市场列表      |
| `compressedNft` | 仅 cNFTs               | 超便宜的批量铸造  |
| `all`           | 所有（代币和 NFT）           | 全面发现      |

## 分页和排序

Solana 钱包可以拥有数千种资产，因此高效分页很重要：

* **页 / 限制** — 经典分页（`page` 从 **1** 开始）。适用于静态视图。
* **游标** — 从上一个响应传递 `before` 或 `after` 值，用于快速无限滚动。

```json5 sortBy theme={"system"}
"sortBy": {
  "sortBy": "created",      // created | recent_action | updated | none
  "sortDirection": "desc"   // asc | desc
}
```

欲了解完整的页/限制和游标策略，包括并行键集查询，请参阅[分页指南](/zh/das/pagination)。

## 显示选项

这些标志**添加元数据**；它们从不改变返回的资产。

| 标志                       | 效果              |
| ------------------------ | --------------- |
| `showNativeBalance`      | 包括钱包的 SOL 余额    |
| `showCollectionMetadata` | 添加集合级别的 JSON 数据 |
| `showGrandTotal`         | 返回总匹配计数（较慢）     |

```json5 options theme={"system"}
"options": {
  "showNativeBalance": true,
  "showCollectionMetadata": true,
  "showGrandTotal": true
}
```

## MPL Core 代理、资产签名者和 MIP-11 组

MPL Core 资产可以暴露**代理身份**和**资产签名者**元数据，资产或集合可以包括描述组成员身份的 **`groups` 插件**（MIP-11）。在每个资产返回的 DAS 方法上都会出现相同的可选字段（`getAsset`、`getAssetBatch`、`getAssetsByOwner`、`getAssetsByGroup`、`getAssetsByCreator`、`getAssetsByAuthority` 和 `searchAssets` 中的每一项）。

使用 `searchAssets` 通过代理状态或地址进行过滤：

| 参数            | 类型      | 目的                  |
| ------------- | ------- | ------------------- |
| `isAgent`     | boolean | 仅包括具有代理身份的资产        |
| `agentToken`  | string  | 匹配代理令牌铸造（base58）    |
| `assetSigner` | string  | 匹配资产签名者 PDA（base58） |

你也可以将 `interface` 设置为 `MplCoreAsset`、`MplCoreCollection` 或 `MplCoreGroup` 以进行 MPL Core 特定的发现。

```json theme={"system"}
{
  "jsonrpc": "2.0",
  "id": "1",
  "method": "searchAssets",
  "params": {
    "ownerAddress": "86xCnPeV69n6t3DnyGvkKobf9FdN2H9oiVDdaMpo2MMY",
    "tokenType": "all",
    "isAgent": true,
    "page": 1,
    "limit": 10
  }
}
```

响应字段 `is_agent`、`agent_token` 和 `asset_signer` **在不适用时被省略**（例如，当为 false 时，`is_agent` 被省略）。查看 [searchAssets API 参考](/zh/api-reference/das/searchassets) 以获取完整架构。

## 示例

第一个示例显示了完整的`fetch` 包装器。其余示例遵循相同模式并被折叠——展开以查看请求体。

### 搜索钱包中的所有同质化代币

```typescript theme={"system"}
const url = `https://mainnet.helius-rpc.com/?api-key=YOUR_API_KEY`

const searchAssets = async () => {
  const response = await fetch(url, {
    method: 'POST',
    headers: {
      'Content-Type': 'application/json',
    },
    body: JSON.stringify({
      jsonrpc: '2.0',
      id: 'my-id',
      method: 'searchAssets',
      params: {
        ownerAddress: '86xCnPeV69n6t3DnyGvkKobf9FdN2H9oiVDdaMpo2MMY',
        tokenType: 'fungible',
      },
    }),
  });
  const { result } = await response.json();
  console.log("Search Assets: ", result);
};
searchAssets();
```

<Accordion title="搜索具有本机余额和代币信息的同质化代币">
  ```typescript theme={"system"}
  const url = `https://mainnet.helius-rpc.com/?api-key=YOUR_API_KEY`

  const searchAssetsTokenInfo = async () => {
      const response = await fetch(url, {
          method: 'POST',
          headers: {
              'Content-Type': 'application/json',
          },
          body: JSON.stringify({
              jsonrpc: '2.0',
              id: 'my-id',
              method: 'searchAssets',
              params: {
                  ownerAddress: '86xCnPeV69n6t3DnyGvkKobf9FdN2H9oiVDdaMpo2MMY',
                  tokenType: 'fungible',
                  options: {
                      showNativeBalance: true,
                  },
              },
          }),
      });

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

      result.items.forEach(item => {
        console.log(item.token_info);
      });

      console.log("Native Balance: ", result.nativeBalance);
  };

  searchAssetsTokenInfo();
  ```
</Accordion>

<Accordion title="搜索vibhu.sol拥有的滴水NFT">
  ```typescript theme={"system"}
  const url = `https://mainnet.helius-rpc.com/?api-key=YOUR_API_KEY`

  const searchAssetsDrip = async () => {
    const response = await fetch(url, {
      method: 'POST',
      headers: {
        'Content-Type': 'application/json',
      },
      body: JSON.stringify({
        jsonrpc: '2.0',
        id: 'my-id',
        method: 'searchAssets',
        params: {
          ownerAddress: 'BAVjpySHMMGDpq3whU7qaqCCRE8ksCeGwxa53Qv2i8jS',
          grouping: ["collection", "DRiP2Pn2K6fuMLKQmt5rZWyHiUZ6WK3GChEySUpHSS4x"],
          page: 1,
          limit: 1000
        },
      }),
    });
    const { result } = await response.json();
    console.log("Drip Haus Assets: ", result);
  };
  searchAssetsDrip();
  ```
</Accordion>

<Accordion title="搜索钱包中的压缩资产">
  ```typescript theme={"system"}
  const url = `https://mainnet.helius-rpc.com/?api-key=YOUR_API_KEY`

  const searchAssetsCompressed = async () => {
    const response = await fetch(url, {
      method: 'POST',
      headers: {
        'Content-Type': 'application/json',
      },
      body: JSON.stringify({
        jsonrpc: '2.0',
        id: 'my-id',
        method: 'searchAssets',
        params: {
          ownerAddress: '2k5AXX4guW9XwRQ1AKCpAuUqgWDpQpwFfpVFh3hnm2Ha',
          compressed: true,
        },
      }),
    });
    const { result } = await response.json();
    console.log("Search Assets: ", result);
  };
  searchAssetsCompressed();
  ```
</Accordion>

## 下一步

<CardGroup cols={3}>
  <Card title="分页" icon="list" href="/zh/das/pagination">
    用于大结果集的基于页面和键集的分页。
  </Card>

  <Card title="同质化代币扩展" icon="coins" href="/zh/das/fungible-token-extension">
    了解tokenType、余额和价格在结果中的显示方式。
  </Card>

  <Card title="searchAssets参考" icon="code" href="/zh/api-reference/das/searchassets">
    完整的请求和响应架构。
  </Card>
</CardGroup>
