> ## 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 для поиска NFT, сжатых активов и взаимозаменяемых токенов в Solana с расширенной фильтрацией, сортировкой и пагинацией.

## Обзор

`searchAssets` — наиболее гибкий метод чтения в DAS API. Он возвращает активы, соответствующие комбинации фильтров — по владельцу, группе коллекции, типу токена и атрибутам — за один вызов с пагинацией. Используйте его, когда вам нужно получить несколько активов или не только простой список активов владельца.

`tokenType` — необязательный параметр. Если его не указать, `searchAssets` возвращает только обычные и сжатые NFT, без взаимозаменяемых токенов. Чтобы включить взаимозаменяемые токены, задайте `tokenType` (например, `"fungible"` или `"all"`). Допустимые значения: `fungible`, `nonFungible`, `regularNft`, `compressedNft` и `all`.

## Когда использовать

Используйте `searchAssets` в следующих случаях:

* Фильтрация активов кошелька для получения только взаимозаменяемых токенов или только NFT
* Получение списка принадлежащих кошельку активов из определённой коллекции
* Массовый поиск сжатых NFT
* Реализация бесконечной прокрутки больших наборов результатов с курсорной пагинацией
* Фильтрация активов MPL Core по статусу агента или подписанту

Для отдельных активов используйте [`getAsset`](/docs/ru/api-reference/das/getasset), а для простого списка активов кошелька — [`getAssetsByOwner`](/docs/ru/api-reference/das/getassetsbyowner).

<Card title="API Reference" horizontal icon="code" href="/docs/ru/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` | Устаревшие NFT и pNFT (несжатые) | Листинги маркетплейсов |
| `compressedNft` | Только cNFT | Сверхдешёвый массовый выпуск |
| `all` | Всё (токены и NFT) | Универсальный поиск |

## Пагинация и сортировка

Кошельки Solana могут содержать тысячи активов, поэтому эффективное разбиение на страницы имеет большое значение:

* **Страница / лимит** — классическая пагинация (`page` начинается с **1**). Подходит для статических представлений.
* **Курсор** — передавайте значения `before` или `after` из предыдущего ответа для быстрой бесконечной прокрутки.

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

Полное описание стратегий на основе страниц/лимитов и курсоров, включая параллельные запросы по ключам, см. в [руководстве по пагинации](/docs/ru/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) |

Для поиска, специфичного для MPL Core, также можно присвоить `interface` значение `MplCoreAsset`, `MplCoreCollection` или `MplCoreGroup`.

```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` **пропускаются, если неприменимы** (например, `is_agent` пропускается при значении false). Полные схемы см. в [справочнике API searchAssets](/docs/ru/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="Search for fungible tokens with native balance and token info">
  ```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="Search for Drip NFTs owned by vibhu.sol">
  ```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="Search for compressed assets in a wallet">
  ```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="Pagination" icon="list" href="/docs/ru/das/pagination">
    Пагинация на основе страниц и ключей для больших наборов результатов.
  </Card>

  <Card title="Fungible Token Extension" icon="coins" href="/docs/ru/das/fungible-token-extension">
    Как tokenType, балансы и цены отображаются в результатах.
  </Card>

  <Card title="searchAssets reference" icon="code" href="/docs/ru/api-reference/das/searchassets">
    Полные схемы запросов и ответов.
  </Card>
</CardGroup>


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.