> ## 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.

# Сканирование истории транзакций

> Выполняйте на стороне сервера поиск в истории адреса транзакций, которые вызывают инструкции программ или затрагивают минты токенов, и возвращайте разобранные совпадения, их подписи или количество.

Тело запроса, схема ответа и примеры на этой странице создаются на основе определения OpenAPI.

Scan обходит историю одного адреса, сохраняет транзакции, соответствующие критериям `match`, и разбирает только их. Используйте его вместо постраничного обхода [разобранной истории транзакций](https://www.helius.dev/docs/ru/api-reference/parsed-events/transaction-history.md) и фильтрации на стороне клиента.

По умолчанию каждый элемент в `data` имеет ту же структуру `TransactionResult`, которую возвращает [разбор транзакций](https://www.helius.dev/docs/ru/api-reference/parsed-events/transactions.md). Задайте `returnShape`, чтобы получить только подписи совпадений или только их количество. Ответ также содержит сводку `scan`, в которой указано, насколько далеко продвинулось сканирование и почему оно остановилось.

## Как работает Scan

1. Scan получает историю адреса страницами до 1 000 транзакций в порядке `sortOrder` с учетом заданных границ `slot`, `time` и подписей.
2. Он сохраняет транзакции, соответствующие всем критериям, заданным в `match`.
3. Он останавливается при наступлении первого из следующих событий: найдено `limit` совпадений (только для структуры `transactions` по умолчанию), просканировано `budget.maxScannedTransactions`, достигнут конец истории или окна либо истекло ограничение времени запроса.

Сканирование, остановившееся досрочно, по-прежнему является `200`. Пока в ответе присутствует `paginationToken`, повторите вызов с его значением, даже если `data` пуст.

## Критерии совпадения

Поле `match` обязательно. Задайте `programs`, `mints` или оба поля. Если заданы оба поля, транзакция должна соответствовать обоим.

### Совпадение по программе

`programs` содержит до 20 программ, каждая из которых указывается не более одного раза. Транзакция считается совпадением, если она содержит инструкцию любой из этих программ — верхнего уровня или внутреннюю (CPI) — в пределах `scope` программы.

Для каждой программы можно сузить условия совпадения:

* `instructions`: имена инструкций из любой версии IDL программы в написании из IDL или в snake\_case. Если имя отсутствует в IDL программы, возвращается `400`.
* `discriminators`: префиксы данных инструкций, каждый длиной от 1 до 8 байт в шестнадцатеричной кодировке и с необязательным префиксом `0x`. Используйте их для программ без IDL.
* Задайте один или оба списка. Если заданы оба, инструкция считается совпадением, когда она входит в список именованных инструкций или ее данные начинаются с одного из дискриминаторов. Не указывайте оба списка, чтобы сопоставлять любую инструкцию программы.
* Каждый список принимает не более 50 элементов на программу.

Чтобы проверить декодированные имена инструкций программы, используйте метод Parsed Streams [`describeProgram`](https://www.helius.dev/docs/ru/parsed-streams/quickstart#обнаружение).

### Совпадение по минту

`mints` содержит до 20 объектов вида `{ "mint": "...", "scope": "address" }`, при этом каждый минт указывается не более одного раза. Транзакция считается совпадением, если один из ее балансов токенов до или после транзакции относится к одному из этих минтов в пределах `scope` минта.

При сканировании кошелька по минту задайте для `tokenAccounts` значение `balanceChanged`. По умолчанию из истории исключаются транзакции, которые затрагивают только счета токенов кошелька, но не сам кошелек. К ним относится множество входящих переводов токенов.

### Совпадение с нативным SOL

У нативного SOL нет балансов токенов, поэтому Scan сопоставляет его по лампортам. Используйте минт нативного SOL `So11111111111111111111111111111111111111111` (обернутый SOL — `So11111111111111111111111111111111111111112`):

* При области `address` транзакция считается совпадением, если изменилось количество лампортов сканируемого адреса.
* При области `transaction` она считается совпадением, если изменилось количество лампортов любого счета.

Комиссия, взимаемая с плательщика комиссии, не учитывается. Каждый счет сравнивается отдельно, поэтому лампорты, которые покидают счет и возвращаются на него в той же транзакции, не учитываются. Сопоставление с нативным SOL обнаруживает SOL, выплаченный программой без инструкции перевода, например при продаже на Pump.fun. Оно также обнаруживает сопутствующие перемещения средств, например чаевые Jito и арендную плату, уплаченную за счета или возвращенную с них.

### Область совпадения

Для каждой программы и каждого минта задается `scope`:

| `scope` | Инструкция программы учитывается, когда | Баланс токена минта учитывается, когда |
| - | - | - |
| `address` (по умолчанию) | Один из ее счетов — `address`, счет токена принадлежит `address`, минтом счета токена является `address` или сам `address` является программой. | Его счет токена — `address` или принадлежит `address` либо его минт — `address`. |
| `transaction` | Она находится в любом месте транзакции. | Он находится в любом месте транзакции. |

Используйте область `transaction`, когда сканируемый адрес присутствует в транзакции, но отсутствует в сопоставляемой инструкции или балансе. Например, адрес только оплачивает комиссию, выполняет транзакцию с мультиподписью или отсутствует в CPI события Anchor. Для сканирования минта токена в поиске транзакций, которые также содержат USDC, требуется область `transaction` для записи USDC.

Владелец счета токена определяется по `owner`, записанному для каждого баланса токена. Более старые транзакции, в которых он не записан, соответствуют области `address` только непосредственно для `address`.

## Форматы возвращаемых данных

`returnShape` определяет, какие данные о совпадениях содержит ответ:

| `returnShape` | `data` | Используйте, чтобы |
| - | - | - |
| `transactions` (по умолчанию) | Разобранные совпадения, не более `limit`. | Читать декодированные инструкции, переводы и сводки. |
| `signatures` | Один объект `{ signature, slot, transactionIndex, blockTime }` на совпадение. | Получать подписи совпадений без их разбора. |
| `count` | Отсутствует. `scan.matchedTransactions` содержит количество совпадений. | Подсчитывать совпадения в диапазоне. |

`signatures` и `count` игнорируют `limit` и `rawTransaction`. Они возвращают все совпадения в просканированном запросом диапазоне, поэтому останавливаются только при `windowEnd`, `budget` или `deadline`. Чтобы подсчитать совпадения во всей истории, продолжайте вызывать метод с `paginationToken` и суммируйте `scan.matchedTransactions`.

Каждый элемент в `data` с `returnShape: "signatures"` выглядит так:

```json theme={"system"}
{
  "signature": "5zmGhmd3JZxXzz8MnA8MM1K7PXRwA1z35n3xT6ZJGRz3sAi25p8jaZuPWFCB4nEPx7DUke9y3pwrd4V7xAFozQBy",
  "slot": 460869102,
  "transactionIndex": 203,
  "blockTime": 1792848886
}
```

Все три формата имеют одинаковую стоимость, поскольку количество кредитов зависит от числа просканированных страниц истории, а не от возвращаемых данных.

## Примеры запросов

### Покупки и продажи Pump.fun

Просканируйте историю программы Pump.fun в поиске инструкций `buy` и `sell`:

```json theme={"system"}
{
  "address": "6EF8rrecthR5Dkzon8Nwu78hRvfCKubJ14M5uBEwF6P",
  "match": {
    "programs": [
      {
        "programId": "6EF8rrecthR5Dkzon8Nwu78hRvfCKubJ14M5uBEwF6P",
        "instructions": ["buy", "sell"]
      }
    ]
  },
  "limit": 100
}
```

У Pump.fun также есть варианты, например `buy_exact_sol_in`, `buy_v2` и `sell_v2`. Укажите все имена инструкций, которые требуется сопоставлять.

### Покупки и продажи одного токена

Чтобы получить сделки Pump.fun с одним токеном, сканируйте адрес минта токена вместо программы. История минта содержит активность только этого токена, а каждая инструкция покупки или продажи указывает минт как счет, поэтому она совпадает при области `address` по умолчанию:

```json theme={"system"}
{
  "address": "<MINT_ADDRESS>",
  "match": {
    "programs": [
      {
        "programId": "6EF8rrecthR5Dkzon8Nwu78hRvfCKubJ14M5uBEwF6P",
        "instructions": ["buy", "sell"]
      }
    ]
  }
}
```

Чтобы сохранить только транзакции токена, в которых также участвует счет токена USDC, добавьте USDC с областью `transaction`. При области `address` по умолчанию баланс USDC должен был бы принадлежать адресу минта, поэтому совпадений не было бы:

```json theme={"system"}
{
  "address": "<MINT_ADDRESS>",
  "match": {
    "mints": [
      { "mint": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v", "scope": "transaction" }
    ]
  }
}
```

### Сделки кошелька в двух программах

Укажите несколько программ, чтобы сопоставлять вызов любой из них. Этот запрос возвращает только подписи сделок кошелька в Pump.fun и PumpSwap:

```json theme={"system"}
{
  "address": "<WALLET_ADDRESS>",
  "match": {
    "programs": [
      {
        "programId": "6EF8rrecthR5Dkzon8Nwu78hRvfCKubJ14M5uBEwF6P",
        "instructions": ["buy", "sell"]
      },
      {
        "programId": "pAMMBay6oceH9fJKBRHGP5D4bD4sWpmSwMn52FMfXEA",
        "instructions": ["buy", "sell"]
      }
    ]
  },
  "returnShape": "signatures"
}
```

### Активность USDC кошелька за период времени

Просканируйте историю кошелька в поиске транзакций, затрагивавших USDC в течение 2025 года. `tokenAccounts: "balanceChanged"` включает переводы, которые затрагивали только счет токена USDC кошелька:

```json theme={"system"}
{
  "address": "GV6UUmNxz2RpKxmNAPadYKb7uQpszwqQAu3qLJxVdC52",
  "match": {
    "mints": [{ "mint": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v" }]
  },
  "tokenAccounts": "balanceChanged",
  "time": { "gte": 1735689600, "lte": 1767225599 }
}
```

Чтобы получить только количество совпавших транзакций, добавьте `"returnShape": "count"`.

### Перемещения SOL в кошельке

Просканируйте кошелек в поиске транзакций, которые изменили его баланс SOL в течение 2025 года, не считая уплаченной им комиссии. Сюда входит SOL, выплаченный программой без инструкции перевода:

```json theme={"system"}
{
  "address": "GV6UUmNxz2RpKxmNAPadYKb7uQpszwqQAu3qLJxVdC52",
  "match": {
    "mints": [{ "mint": "So11111111111111111111111111111111111111111" }]
  },
  "time": { "gte": 1735689600, "lte": 1767225599 }
}
```

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

`scan.stoppedOn` указывает, почему запрос завершился:

| `stoppedOn` | Значение | `paginationToken` |
| - | - | - |
| `windowEnd` | Достигнут конец истории или запрошенного окна. | Отсутствует. Сканирование завершено. |
| `limit` | Возвращено `limit` совпадений. Только для структуры `transactions` по умолчанию. | Возобновляет сканирование сразу после последнего возвращенного совпадения, поэтому ни одно совпадение не пропускается. |
| `budget` | Просканировано `budget.maxScannedTransactions` транзакций. | Возобновляет сканирование со следующей страницы истории. |
| `deadline` | Достигнуто ограничение времени запроса. | Возобновляет сканирование со следующей страницы истории. Страница, обработка которой прервана по истечении срока, загружается повторно при следующем вызове. |

`scan.scannedThrough` содержит слот и время блока последней просканированной транзакции, что позволяет сообщать о ходе обработки длинных историй.

При поиске редкой инструкции Scan может израсходовать весь бюджет, не найдя совпадений. В этом случае ответ содержит пустой массив `data`, но все равно возвращает `paginationToken`, поэтому продолжайте сканирование:

```json theme={"system"}
{
  "data": [],
  "paginationToken": "460903064:422",
  "scan": {
    "stoppedOn": "budget",
    "scannedTransactions": 2000,
    "matchedTransactions": 0,
    "scannedThrough": { "slot": 460903064, "blockTime": 1792856105 },
    "creditsCharged": 12
  }
}
```

Этот цикл продолжает сканирование до исчерпания истории:

```javascript scan-pumpfun-trades.js theme={"system"}
const API_KEY = process.env.HELIUS_API_KEY;

if (!API_KEY) {
  console.error("Missing HELIUS_API_KEY.");
  process.exit(1);
}

const URL = `https://mainnet.helius-rpc.com/v1/parsed-events/scan?api-key=${API_KEY}`;
const PUMP_PROGRAM = "6EF8rrecthR5Dkzon8Nwu78hRvfCKubJ14M5uBEwF6P";

async function scan(paginationToken) {
  const response = await fetch(URL, {
    method: "POST",
    headers: { "Content-Type": "application/json" },
    body: JSON.stringify({
      address: PUMP_PROGRAM,
      match: {
        programs: [{ programId: PUMP_PROGRAM, instructions: ["buy", "sell"] }],
      },
      limit: 100,
      ...(paginationToken && { paginationToken }),
    }),
  });

  if (!response.ok) {
    throw new Error(`HTTP ${response.status}: ${await response.text()}`);
  }

  return response.json();
}

let paginationToken;

do {
  const page = await scan(paginationToken);

  for (const result of page.data) {
    console.log(result.signature, result.parsed?.slot);
  }

  console.log(
    `stopped on ${page.scan.stoppedOn}: scanned ${page.scan.scannedTransactions}, ` +
      `matched ${page.scan.matchedTransactions}, charged ${page.scan.creditsCharged} credits`
  );

  // Keep going while a token is returned, even when this page had no matches.
  paginationToken = page.paginationToken;
} while (paginationToken);
```

> [!TIP]
>
> Сканируйте наиболее узкий из возможных адресов. Каждая транзакция в истории адреса учитывается в бюджете, поэтому чем меньше у адреса несвязанных транзакций, тем больше совпадений находит каждый запрос.

## Кредиты

Каждое сканирование стоит **10 кредитов плюс 1 кредит за каждую просканированную страницу истории**. Страница содержит до 1 000 транзакций, поэтому сканирование с бюджетом по умолчанию в 10 000 транзакций стоит не более 20 кредитов. Страница, обработка которой прервана по истечении срока, не считается просканированной и не тарифицируется.

В каждом ответе стоимость указывается в `scan.creditsCharged`. Стоимость тарифных планов приведена в разделе [Кредиты](https://www.helius.dev/docs/ru/billing/credits.md).

## Ошибки

| Статус | Условие |
| - | - |
| `400` | Тело недопустимо или содержит неизвестные поля; `match` не задает ни `programs`, ни `mints`; программа или минт указаны несколько раз; адрес или минт недопустимы; имя инструкции отсутствует в IDL программы; список превышает допустимый размер; `scope`, `returnShape`, `rawTransaction` или `tokenAccounts` имеет неизвестное значение; `limit` находится вне диапазона от 1 до 100 для структуры `transactions`; либо `budget.maxScannedTransactions` находится вне диапазона от 1 до 10 000. |
| `500` | Запрос завершился ошибкой на сервере, например потому, что сохраненную транзакцию в сканируемом диапазоне не удалось декодировать. Частичные результаты не возвращаются. |
| `503` | Сервис достиг предельной нагрузки или обработка первой страницы истории не завершилась до истечения ограничения времени запроса. Повторите запрос. |

При ошибках на уровне запроса возвращается тело JSON с сообщением `error`, например `{"error": "limit must be between 1 and 100"}`. Для тела с неизвестным полем, например `includeRawTransaction` (используйте `rawTransaction`), или с простыми строками в `mints` вместо объектов `{ "mint": "..." }` возвращается `{"error": "invalid request payload"}`.

## Параметры запроса

**address** `string` *required*

Адрес, история которого сканируется.

**match** `object` *required*

Условия, которым должна соответствовать транзакция. Задайте `programs`, `mints` или оба поля. Если заданы оба поля, транзакция должна соответствовать обоим.

**match.programs** `array`

Программы для сопоставления — не более 20, каждая не более одного раза. Транзакция считается совпадением, если она содержит инструкцию любой из этих программ — верхнего уровня или внутреннюю (CPI) — в пределах `scope` программы.

**match.programs\[].programId** `string` *required*

Адрес программы.

**match.programs\[].instructions** `array`

Имена инструкций из любой версии IDL программы в написании из IDL или в snake\_case. Не более 50. Можно использовать вместе с `discriminators`.

**match.programs\[].discriminators** `array`

Префиксы данных инструкций, каждый длиной от 1 до 8 байт в шестнадцатеричной кодировке и с необязательным префиксом `0x`. Не более 50. Можно использовать вместе с `instructions`.

**match.programs\[].scope** `string` (default: address)

Какие инструкции программы учитывать. `address` учитывает только инструкции со счетом `address`, счетом токена, принадлежащим `address`, или счетом токена, минтом которого является `address`, либо все инструкции, когда `address` является программой. `transaction` учитывает любую инструкцию программы в транзакции.

* `address`
* `transaction`

**match.mints** `array`

Минты для сопоставления — не более 20, каждый не более одного раза. Транзакция считается совпадением, если один из ее балансов токенов до или после транзакции относится к одному из этих минтов в пределах `scope` минта.

**match.mints\[].mint** `string` *required*

Адрес минта токена. Минт нативного SOL `So11111111111111111111111111111111111111111` сопоставляется по изменениям количества лампортов вместо балансов токенов, без учета комиссии.

**match.mints\[].scope** `string` (default: address)

Какие балансы токенов минта учитывать. `address` учитывает только балансы, для которых счет токена равен `address` или принадлежит ему либо минт равен `address`. Для нативного SOL учитываются только изменения количества лампортов `address`. `transaction` учитывает любой баланс минта в транзакции. Для нативного SOL учитывается изменение количества лампортов любого счета.

* `address`
* `transaction`

**returnShape** `string` (default: transactions)

Данные, которые ответ содержит для совпадений: `transactions` (разобранные совпадения в `data`, не более `limit`), `signatures` (`signature`, `slot`, `transactionIndex` и `blockTime` для каждого совпадения в `data`) или `count` (без `data`; `scan.matchedTransactions` содержит количество совпадений). `signatures` и `count` игнорируют `limit` и `rawTransaction`.

* `transactions`
* `signatures`
* `count`

**limit** `number` (default: 100)

Максимальное количество совпадений, возвращаемых со структурой `transactions`, — от 1 до 100.

**budget** `object`

Ограничения на объем истории, сканируемый одним запросом.

**budget.maxScannedTransactions** `number` (default: 10000)

Максимальное количество транзакций, сканируемых в этом запросе, — от 1 до 10 000.

**beforeSignature** `string`

Сканировать транзакции до этой подписи.

**afterSignature** `string`

Сканировать транзакции после этой подписи.

**paginationToken** `string`

Курсор, возвращенный предыдущим сканированием. Имеет структуру `slot:transactionIndex`.

**sortOrder** `string` (default: desc)

Порядок сканирования истории и возврата совпадений.

* `asc`
* `desc`

**commitment** `string` (default: confirmed)

Уровень подтверждения, используемый при получении истории. `processed` не поддерживается.

* `confirmed`
* `finalized`

**status** `string` (default: succeeded)

Результат выполнения, который требуется включить. Фильтрация выполняется до сопоставления, поэтому исключенные транзакции не учитываются в бюджете.

* `succeeded`
* `failed`
* `any`

**tokenAccounts** `string` (default: none)

Включать ли транзакции, которые ссылаются только на счет токена, принадлежащий `address`, но не на сам `address`: `none` исключает их, `balanceChanged` включает транзакции, изменяющие баланс счета токена, а `all` включает их все. Используйте `balanceChanged` при сканировании кошелька по минту.

* `none`
* `balanceChanged`
* `all`

**minContextSlot** `number`

Минимальный слот, в котором может быть обработан запрос.

**rawTransaction** `string` (default: none)

Кодировка исходной транзакции Solana, возвращаемой как `rawTransaction` для каждого успешного результата в структуре `getTransaction`. Применяется только к структуре `transactions`.

* `none`
* `json`
* `jsonParsed`
* `base64`

**slot** `object`

Границы сравнения слотов. Каждая граница необязательна.

**slot.gt** `number`

Сопоставлять значения, превышающие это значение.

**slot.gte** `number`

Сопоставлять значения, превышающие это значение или равные ему.

**slot.lt** `number`

Сопоставлять значения меньше этого значения.

**slot.lte** `number`

Сопоставлять значения меньше этого значения или равные ему.

**time** `object`

Границы сравнения времени блока в секундах Unix. Каждая граница необязательна.

**time.gt** `number`

Сопоставлять значения, превышающие это значение.

**time.gte** `number`

Сопоставлять значения, превышающие это значение или равные ему.

**time.lt** `number`

Сопоставлять значения меньше этого значения.

**time.lte** `number`

Сопоставлять значения меньше этого значения или равные ему.


## OpenAPI

````yaml ru/openapi/parsed-events.yaml POST /v1/parsed-events/scan
openapi: 3.0.3
info:
  title: Разобранные события
  version: 0.1.0
  description: Разбирайте транзакции Solana и историю транзакций с помощью Parsed Events.
servers:
  - url: https://mainnet.helius-rpc.com
security:
  - ApiKeyQuery: []
paths:
  /v1/parsed-events/scan:
    post:
      tags:
        - Разобранные события
      summary: Сканирование истории транзакций
      description: >-
        Найдите в истории адреса транзакции, которые вызывают одну из заданных
        программ, затрагивают один из заданных минтов токенов или соответствуют
        обоим условиям, и верните разобранные совпадения, их подписи или
        количество.
      operationId: scanParsedTransactionHistory
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ScanRequest'
            examples:
              Pump.fun buys and sells:
                value:
                  address: 6EF8rrecthR5Dkzon8Nwu78hRvfCKubJ14M5uBEwF6P
                  match:
                    programs:
                      - programId: 6EF8rrecthR5Dkzon8Nwu78hRvfCKubJ14M5uBEwF6P
                        instructions:
                          - buy
                          - sell
                  limit: 1
              Rare instruction, budget stop:
                value:
                  address: 6EF8rrecthR5Dkzon8Nwu78hRvfCKubJ14M5uBEwF6P
                  match:
                    programs:
                      - programId: 6EF8rrecthR5Dkzon8Nwu78hRvfCKubJ14M5uBEwF6P
                        instructions:
                          - set_params
                  budget:
                    maxScannedTransactions: 2000
              Count matches:
                value:
                  address: 6EF8rrecthR5Dkzon8Nwu78hRvfCKubJ14M5uBEwF6P
                  match:
                    programs:
                      - programId: 6EF8rrecthR5Dkzon8Nwu78hRvfCKubJ14M5uBEwF6P
                        instructions:
                          - set_params
                  returnShape: count
                  budget:
                    maxScannedTransactions: 2000
              Token transactions with a USDC account:
                value:
                  address: <MINT_ADDRESS>
                  match:
                    mints:
                      - mint: EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v
                        scope: transaction
                  returnShape: signatures
      responses:
        '200':
          description: >-
            Совпадения в запрошенном формате `returnShape` и сводка
            сканирования. Частичный результат также возвращается с кодом 200.
            Продолжайте с `paginationToken`, пока он возвращается.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ScanPage'
              examples:
                Stopped on limit:
                  value:
                    data:
                      - signature: >-
                          5zmGhmd3JZxXzz8MnA8MM1K7PXRwA1z35n3xT6ZJGRz3sAi25p8jaZuPWFCB4nEPx7DUke9y3pwrd4V7xAFozQBy
                        parserStatus: OK
                        parsed:
                          slot: 460869102
                          blockTime: 1792848886
                          fee: 45000
                          feePayer: Gygj9QQby4j2jryqyqBHvLP7ctv2SaANgh4sCb69BUpA
                          transactionStatus: OK
                          error: null
                          decodedError: null
                          nativeTransfers:
                            - fromUserAccount: BwWK17cbHxwWBKZkUYvzxLcNQ1YVyaFezduWbtm2de6s
                              toUserAccount: 2meTvySZ7iVXzif1m3BAUj2RgwiDCpSMEW7yN3EAAY98
                              amount: 4207183
                          tokenTransfers:
                            - fromUserAccount: 2meTvySZ7iVXzif1m3BAUj2RgwiDCpSMEW7yN3EAAY98
                              toUserAccount: BwWK17cbHxwWBKZkUYvzxLcNQ1YVyaFezduWbtm2de6s
                              fromTokenAccount: 7Rx6mmZ3jEWv94MZ5JtEqqw8PZTmVt2aFDxL678faSER
                              toTokenAccount: 7Y7x62ZQkzCLjuxw8iG5M2QZsayYeysRhfcY8pB5kbxQ
                              rawTokenAmount: 612181177082
                              decimals: 6
                              tokenStandard: Fungible
                              mint: 3Wdb9NjzsMWFqnQZd21oQMyAc24ZgYZjqpF6NZdLpump
                          summary:
                            type: swap
                            description: >-
                              BwWK17cbHxwWBKZkUYvzxLcNQ1YVyaFezduWbtm2de6s
                              обменял 0.004207183 SOL на 612181.177082
                              3Wdb9NjzsMWFqnQZd21oQMyAc24ZgYZjqpF6NZdLpump через
                              Pump.fun
                            parsedData:
                              type: swap
                              protocol: pump_fun
                              kind: buy
                              in_amount: '4207183'
                              actual_out_amount: '612181177082'
                              input_mint: So11111111111111111111111111111111111111112
                              output_mint: 3Wdb9NjzsMWFqnQZd21oQMyAc24ZgYZjqpF6NZdLpump
                              inner_swaps: []
                          instructions:
                            - instructionIndex: 0
                              innerInstructionIndex: null
                              stackHeight: 1
                              programId: ComputeBudget111111111111111111111111111111
                              rawAccounts: []
                              rawData: HMypLP
                              summary: null
                              programName: compute_budget
                              instructionName: set_compute_unit_limit
                              decoded:
                                args:
                                  units: '400000'
                                accounts: []
                            - instructionIndex: 1
                              innerInstructionIndex: null
                              stackHeight: 1
                              programId: ComputeBudget111111111111111111111111111111
                              rawAccounts: []
                              rawData: 3gJqkocMWaMm
                              summary: null
                              programName: compute_budget
                              instructionName: set_compute_unit_price
                              decoded:
                                args:
                                  micro_lamports: '100000'
                                accounts: []
                            - instructionIndex: 2
                              innerInstructionIndex: null
                              stackHeight: 1
                              programId: MAyhSmzXzV1pTf7LsNkrNwkWKTo4ougAJ1PPg47MD4e
                              rawAccounts:
                                - Gygj9QQby4j2jryqyqBHvLP7ctv2SaANgh4sCb69BUpA
                                - 13ec7XdrjF3h3YcqBTFDSReRcUFwbCnJaAQspM4j6DDJ
                                - CNtxytSi1JNJgmBM444pGXK5eUEy5B2Q3haBHw2fzdoG
                                - 3Wdb9NjzsMWFqnQZd21oQMyAc24ZgYZjqpF6NZdLpump
                                - 7Y7x62ZQkzCLjuxw8iG5M2QZsayYeysRhfcY8pB5kbxQ
                                - BwWK17cbHxwWBKZkUYvzxLcNQ1YVyaFezduWbtm2de6s
                                - '11111111111111111111111111111111'
                                - TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb
                                - 4wTV1YmiEkRvAtNtsSGPtUrqRYQMe5SKy2uB4Jjaxnjf
                                - 2meTvySZ7iVXzif1m3BAUj2RgwiDCpSMEW7yN3EAAY98
                                - GesfTA3X2arioaHp8bbKdjG9vJtskViWACZoYvxp4twS
                                - 7Rx6mmZ3jEWv94MZ5JtEqqw8PZTmVt2aFDxL678faSER
                                - HTGkqssCRhyE6rCBDDKQVqTM5LcFPwH8r7rmoMuvtKCD
                                - Ce6TQqeHC9p8KetsN6JsjHK7UTZk7nasjjnr7XxXp9F1
                                - 6EF8rrecthR5Dkzon8Nwu78hRvfCKubJ14M5uBEwF6P
                                - Hq2wp8uJ9jCPsYgNHex8RtqdvMPfVGoYwjvF1ATiwn2Y
                                - FGFrX2q1iAjyAojjeyFDxXqdmvegjPpSWsrPmrJjeQ2f
                                - 8Wf5TiAheLUqBrKXeYg2JtAFFMWtKdG2BSFgqUcPVwTt
                                - pfeeUxB6jkeY1Hxd7CsFCAjcbHA9rWtchMGdZ6VojVZ
                                - 8FoNgzmjuSmiy86EPCWxvv1q7oJSu2WGA7wPymwki2LJ
                                - MAyhSmzXzV1pTf7LsNkrNwkWKTo4ougAJ1PPg47MD4e
                                - 6MneqwSEV63Ujx1KZX8ZDs5freLUyo61DoSdEeQCjNjk
                                - 5YxQFdt3Tr9zJLvkFccqXVUwhdTWJQc1fFg2YPbxvxeD
                              rawData: 23s1EunhJwrvzz8YSBTPv5WDZGm8uym8KQXhF3u
                              summary: null
                              programName: null
                              instructionName: null
                              decoded: null
                            - instructionIndex: 2
                              innerInstructionIndex: 0
                              stackHeight: 2
                              programId: 6EF8rrecthR5Dkzon8Nwu78hRvfCKubJ14M5uBEwF6P
                              rawAccounts:
                                - 4wTV1YmiEkRvAtNtsSGPtUrqRYQMe5SKy2uB4Jjaxnjf
                                - GesfTA3X2arioaHp8bbKdjG9vJtskViWACZoYvxp4twS
                                - 3Wdb9NjzsMWFqnQZd21oQMyAc24ZgYZjqpF6NZdLpump
                                - 2meTvySZ7iVXzif1m3BAUj2RgwiDCpSMEW7yN3EAAY98
                                - 7Rx6mmZ3jEWv94MZ5JtEqqw8PZTmVt2aFDxL678faSER
                                - 7Y7x62ZQkzCLjuxw8iG5M2QZsayYeysRhfcY8pB5kbxQ
                                - BwWK17cbHxwWBKZkUYvzxLcNQ1YVyaFezduWbtm2de6s
                                - '11111111111111111111111111111111'
                                - TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb
                                - HTGkqssCRhyE6rCBDDKQVqTM5LcFPwH8r7rmoMuvtKCD
                                - Ce6TQqeHC9p8KetsN6JsjHK7UTZk7nasjjnr7XxXp9F1
                                - 6EF8rrecthR5Dkzon8Nwu78hRvfCKubJ14M5uBEwF6P
                                - Hq2wp8uJ9jCPsYgNHex8RtqdvMPfVGoYwjvF1ATiwn2Y
                                - FGFrX2q1iAjyAojjeyFDxXqdmvegjPpSWsrPmrJjeQ2f
                                - 8Wf5TiAheLUqBrKXeYg2JtAFFMWtKdG2BSFgqUcPVwTt
                                - pfeeUxB6jkeY1Hxd7CsFCAjcbHA9rWtchMGdZ6VojVZ
                                - 6MneqwSEV63Ujx1KZX8ZDs5freLUyo61DoSdEeQCjNjk
                                - 5YxQFdt3Tr9zJLvkFccqXVUwhdTWJQc1fFg2YPbxvxeD
                              rawData: i43WeUBGKA8F2B6dwt5RBzavSKrhGu93LB
                              summary:
                                type: swap
                                description: >-
                                  BwWK17cbHxwWBKZkUYvzxLcNQ1YVyaFezduWbtm2de6s
                                  обменял 0.004207183 SOL на 612181.177082
                                  3Wdb9NjzsMWFqnQZd21oQMyAc24ZgYZjqpF6NZdLpump
                                  через Pump.fun
                                parsedData:
                                  type: swap
                                  protocol: pump_fun
                                  kind: buy
                                  in_amount: '4207183'
                                  actual_out_amount: '612181177082'
                                  input_mint: So11111111111111111111111111111111111111112
                                  output_mint: 3Wdb9NjzsMWFqnQZd21oQMyAc24ZgYZjqpF6NZdLpump
                                  inner_swaps: []
                              programName: pump
                              instructionName: buy
                              decoded:
                                args:
                                  amount: '612181177082'
                                  max_sol_cost: '4207183'
                                  track_volume:
                                    - false
                                accounts:
                                  - name: global
                                    pubkey: >-
                                      4wTV1YmiEkRvAtNtsSGPtUrqRYQMe5SKy2uB4Jjaxnjf
                                    isSigner: false
                                    isWritable: false
                                  - name: fee_recipient
                                    pubkey: >-
                                      GesfTA3X2arioaHp8bbKdjG9vJtskViWACZoYvxp4twS
                                    isSigner: false
                                    isWritable: true
                                  - name: mint
                                    pubkey: >-
                                      3Wdb9NjzsMWFqnQZd21oQMyAc24ZgYZjqpF6NZdLpump
                                    isSigner: false
                                    isWritable: false
                                  - name: bonding_curve
                                    pubkey: >-
                                      2meTvySZ7iVXzif1m3BAUj2RgwiDCpSMEW7yN3EAAY98
                                    isSigner: false
                                    isWritable: true
                                  - name: associated_bonding_curve
                                    pubkey: >-
                                      7Rx6mmZ3jEWv94MZ5JtEqqw8PZTmVt2aFDxL678faSER
                                    isSigner: false
                                    isWritable: true
                                  - name: associated_user
                                    pubkey: >-
                                      7Y7x62ZQkzCLjuxw8iG5M2QZsayYeysRhfcY8pB5kbxQ
                                    isSigner: false
                                    isWritable: true
                                  - name: user
                                    pubkey: >-
                                      BwWK17cbHxwWBKZkUYvzxLcNQ1YVyaFezduWbtm2de6s
                                    isSigner: true
                                    isWritable: true
                                  - name: system_program
                                    pubkey: '11111111111111111111111111111111'
                                    isSigner: false
                                    isWritable: false
                                  - name: token_program
                                    pubkey: >-
                                      TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb
                                    isSigner: false
                                    isWritable: false
                                  - name: creator_vault
                                    pubkey: >-
                                      HTGkqssCRhyE6rCBDDKQVqTM5LcFPwH8r7rmoMuvtKCD
                                    isSigner: false
                                    isWritable: true
                                  - name: event_authority
                                    pubkey: >-
                                      Ce6TQqeHC9p8KetsN6JsjHK7UTZk7nasjjnr7XxXp9F1
                                    isSigner: false
                                    isWritable: false
                                  - name: program
                                    pubkey: >-
                                      6EF8rrecthR5Dkzon8Nwu78hRvfCKubJ14M5uBEwF6P
                                    isSigner: false
                                    isWritable: false
                                  - name: global_volume_accumulator
                                    pubkey: >-
                                      Hq2wp8uJ9jCPsYgNHex8RtqdvMPfVGoYwjvF1ATiwn2Y
                                    isSigner: false
                                    isWritable: false
                                  - name: user_volume_accumulator
                                    pubkey: >-
                                      FGFrX2q1iAjyAojjeyFDxXqdmvegjPpSWsrPmrJjeQ2f
                                    isSigner: false
                                    isWritable: true
                                  - name: fee_config
                                    pubkey: >-
                                      8Wf5TiAheLUqBrKXeYg2JtAFFMWtKdG2BSFgqUcPVwTt
                                    isSigner: false
                                    isWritable: false
                                  - name: fee_program
                                    pubkey: >-
                                      pfeeUxB6jkeY1Hxd7CsFCAjcbHA9rWtchMGdZ6VojVZ
                                    isSigner: false
                                    isWritable: false
                                  - name: remainingAccount1
                                    pubkey: >-
                                      6MneqwSEV63Ujx1KZX8ZDs5freLUyo61DoSdEeQCjNjk
                                    isSigner: false
                                    isWritable: false
                                  - name: remainingAccount2
                                    pubkey: >-
                                      5YxQFdt3Tr9zJLvkFccqXVUwhdTWJQc1fFg2YPbxvxeD
                                    isSigner: false
                                    isWritable: false
                            - instructionIndex: 2
                              innerInstructionIndex: 1
                              stackHeight: 3
                              programId: pfeeUxB6jkeY1Hxd7CsFCAjcbHA9rWtchMGdZ6VojVZ
                              rawAccounts:
                                - 8Wf5TiAheLUqBrKXeYg2JtAFFMWtKdG2BSFgqUcPVwTt
                                - 6EF8rrecthR5Dkzon8Nwu78hRvfCKubJ14M5uBEwF6P
                              rawData: >-
                                KX69VKtJ7u4E7dVvicNyuayxqa9Hr4EfndWiJBCjUyq1hDLtgcYW6pEh1tPqbHSkqHTQ8uiASv1QK1
                              summary: null
                              programName: pump_fees
                              instructionName: null
                              decoded: null
                            - instructionIndex: 2
                              innerInstructionIndex: 2
                              stackHeight: 3
                              programId: TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb
                              rawAccounts:
                                - 7Rx6mmZ3jEWv94MZ5JtEqqw8PZTmVt2aFDxL678faSER
                                - 3Wdb9NjzsMWFqnQZd21oQMyAc24ZgYZjqpF6NZdLpump
                                - 7Y7x62ZQkzCLjuxw8iG5M2QZsayYeysRhfcY8pB5kbxQ
                                - 2meTvySZ7iVXzif1m3BAUj2RgwiDCpSMEW7yN3EAAY98
                              rawData: jHqzogtBj1ey3
                              summary:
                                type: transfer
                                description: >-
                                  2meTvySZ7iVXzif1m3BAUj2RgwiDCpSMEW7yN3EAAY98
                                  перевел 612181.177082
                                  3Wdb9NjzsMWFqnQZd21oQMyAc24ZgYZjqpF6NZdLpump с
                                  2meTvySZ7iVXzif1m3BAUj2RgwiDCpSMEW7yN3EAAY98
                                  на
                                  BwWK17cbHxwWBKZkUYvzxLcNQ1YVyaFezduWbtm2de6s
                                parsedData: null
                              programName: token_2022
                              instructionName: transfer_checked
                              decoded:
                                args:
                                  amount: '612181177082'
                                  decimals: 6
                                accounts:
                                  - name: source_account
                                    pubkey: >-
                                      7Rx6mmZ3jEWv94MZ5JtEqqw8PZTmVt2aFDxL678faSER
                                    isSigner: false
                                    isWritable: true
                                  - name: mint
                                    pubkey: >-
                                      3Wdb9NjzsMWFqnQZd21oQMyAc24ZgYZjqpF6NZdLpump
                                    isSigner: false
                                    isWritable: false
                                  - name: destination_account
                                    pubkey: >-
                                      7Y7x62ZQkzCLjuxw8iG5M2QZsayYeysRhfcY8pB5kbxQ
                                    isSigner: false
                                    isWritable: true
                                  - name: owner_or_delegate
                                    pubkey: >-
                                      2meTvySZ7iVXzif1m3BAUj2RgwiDCpSMEW7yN3EAAY98
                                    isSigner: true
                                    isWritable: false
                            - instructionIndex: 2
                              innerInstructionIndex: 3
                              stackHeight: 3
                              programId: '11111111111111111111111111111111'
                              rawAccounts:
                                - BwWK17cbHxwWBKZkUYvzxLcNQ1YVyaFezduWbtm2de6s
                                - 2meTvySZ7iVXzif1m3BAUj2RgwiDCpSMEW7yN3EAAY98
                              rawData: 3Bxs4E6xqUKPTjRy
                              summary:
                                type: transfer
                                description: >-
                                  BwWK17cbHxwWBKZkUYvzxLcNQ1YVyaFezduWbtm2de6s
                                  перевел 0.004207183 SOL на
                                  2meTvySZ7iVXzif1m3BAUj2RgwiDCpSMEW7yN3EAAY98
                                parsedData: null
                              programName: system
                              instructionName: transfer
                              decoded:
                                args:
                                  lamports: '4207183'
                                accounts:
                                  - name: funding_account
                                    pubkey: >-
                                      BwWK17cbHxwWBKZkUYvzxLcNQ1YVyaFezduWbtm2de6s
                                    isSigner: true
                                    isWritable: true
                                  - name: recipient_account
                                    pubkey: >-
                                      2meTvySZ7iVXzif1m3BAUj2RgwiDCpSMEW7yN3EAAY98
                                    isSigner: false
                                    isWritable: true
                            - instructionIndex: 2
                              innerInstructionIndex: 4
                              stackHeight: 3
                              programId: 6EF8rrecthR5Dkzon8Nwu78hRvfCKubJ14M5uBEwF6P
                              rawAccounts:
                                - Ce6TQqeHC9p8KetsN6JsjHK7UTZk7nasjjnr7XxXp9F1
                              rawData: >-
                                8jV3ThAnvn3jwQVVxYoxU8MvQQneX8ryEqnGqWTeKGi8UcTcTFd5VQ8KLpzRZhN2g6qpShcNYKQ6aEiZojgETaWrW1Mn92Drm2irNbjBdHGCTkuK3SBZb4HSn6KPZiJehmZL1aPNtVSRmGh2ojKXZLFtokDPK31XJJJZYBMowkVME4yWDsiA81AKAyJYq3afuYidCUgWsSfzSo8tZZRtCpSaeUd3M5JeyiE9V45vsDuPYsyBxmVFWf3qKWEcQuCDYu5HctwzvAeqU6Hmr1st5Kd62GrbHxua73RLuXpHotAjm3wYD6BkKEtKDpSnq47ewySqeUgF8MrTc121NwjKhedGJfp1VWv4TULoKaNTuA9KRzYVsTNgjYuwSgiXxQF2F1ePSHexBQdTiMbL1STcahdzuLvZoRkEUQX1WE9ayykQ1uiJ1FPFNCitKm6YwpLLLVwDDi8Rf2J5aeHxtLorKV5UWn1CnRukDpSJxAC91mmc6qNcJ6XQW5VxJMdhJcSSmSr1hi4dUt1vW6gspsMxEMUzGtiyBZeo
                              summary: null
                              programName: pump
                              instructionName: TradeEvent
                              decoded:
                                args:
                                  buyback_fee: '0'
                                  buyback_fee_basis_points: '0'
                                  cashback: '0'
                                  cashback_fee_basis_points: '0'
                                  creator: 2G5ZssGjViBdr4DdwYaQ23JQeNG8TRsrnHKs9pabUoCz
                                  creator_fee: '0'
                                  creator_fee_basis_points: '0'
                                  current_sol_volume: '0'
                                  fee: '0'
                                  fee_basis_points: '0'
                                  fee_recipient: GesfTA3X2arioaHp8bbKdjG9vJtskViWACZoYvxp4twS
                                  holder_rewards: '0'
                                  holder_rewards_bps: '0'
                                  is_buy: true
                                  ix_name: buy
                                  last_update_timestamp: '0'
                                  mayhem_mode: true
                                  mint: 3Wdb9NjzsMWFqnQZd21oQMyAc24ZgYZjqpF6NZdLpump
                                  quote_amount: '4207183'
                                  quote_mint: '11111111111111111111111111111111'
                                  real_quote_reserves: '27976582'
                                  real_sol_reserves: '27976582'
                                  real_token_reserves: '793353696151809'
                                  shareholders: []
                                  sol_amount: '4207183'
                                  timestamp: '1792848886'
                                  token_amount: '612181177082'
                                  total_claimed_tokens: '0'
                                  total_unclaimed_tokens: '0'
                                  track_volume: false
                                  user: BwWK17cbHxwWBKZkUYvzxLcNQ1YVyaFezduWbtm2de6s
                                  virtual_quote_reserves: '8676477109'
                                  virtual_sol_reserves: '8676477109'
                                  virtual_token_reserves: '1073253696151809'
                                accounts: []
                            - instructionIndex: 2
                              innerInstructionIndex: 5
                              stackHeight: 2
                              programId: MAyhSmzXzV1pTf7LsNkrNwkWKTo4ougAJ1PPg47MD4e
                              rawAccounts:
                                - 8FoNgzmjuSmiy86EPCWxvv1q7oJSu2WGA7wPymwki2LJ
                              rawData: >-
                                HaAvdxyruSvtMDoMtGvePmYV4dda7tWKCLFHadQoSjYsbWWixs1eN1wCF27wUxZao1NfTPQGxhVs9GXmaVGUZ5mgBAEUUWKK4se3JtE5oKMHzxp6GRbR7wagdMtwKQEaJbXuMb9c75n3gPnTTFrxTjJrtBCejTAEQpd6mv9HUaxpt2u83Cts4WgXdvWqiHqk7xXkXQwV6M1VXmAfwZYg4CSjzAmooqqAdzbHuf243dbws8uDS4GrteXQiAYow3395wuNqLWzrcHropQTzvaDtpfAupYXEt2AZHPEuUsVhtt5n8xAieU5d4oHSjAvgBczW9cktco7Wto3kEo53QaJfbdEz4V9Jnx6ib2fdvW2EpLXUprJLcP9voTKAuuCZCTbQKSbwJWRG9UCPTssTDR3m9eE38WcqtK1v2jeRtbtK
                              summary: null
                              programName: null
                              instructionName: null
                              decoded: null
                    paginationToken: '460869102:203'
                    scan:
                      stoppedOn: limit
                      scannedTransactions: 1
                      matchedTransactions: 1
                      scannedThrough:
                        slot: 460869102
                        blockTime: 1792848886
                      creditsCharged: 11
                Stopped on budget, no matches:
                  value:
                    data: []
                    paginationToken: '460903064:422'
                    scan:
                      stoppedOn: budget
                      scannedTransactions: 2000
                      matchedTransactions: 0
                      scannedThrough:
                        slot: 460903064
                        blockTime: 1792856105
                      creditsCharged: 12
                Count shape:
                  value:
                    paginationToken: '460903064:422'
                    scan:
                      stoppedOn: budget
                      scannedTransactions: 2000
                      matchedTransactions: 0
                      scannedThrough:
                        slot: 460903064
                        blockTime: 1792856105
                      creditsCharged: 12
        '400':
          description: Недопустимый запрос. В сообщении `error` указана проблема.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
              examples:
                default:
                  value:
                    error: >-
                      инструкции match.programs не найдены в IDL программы
                      6EF8rrecthR5Dkzon8Nwu78hRvfCKubJ14M5uBEwF6P: not_a_real_ix
        '500':
          $ref: '#/components/responses/InternalError'
        '503':
          description: >-
            Сервис достиг предела нагрузки или первая страница истории не была
            обработана до истечения срока выполнения запроса. Повторите запрос.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
              examples:
                default:
                  value:
                    error: сервис недоступен
components:
  schemas:
    ScanRequest:
      type: object
      description: Тело запроса для поиска совпадающих транзакций в истории адреса.
      required:
        - address
        - match
      additionalProperties: false
      properties:
        address:
          type: string
          description: Адрес, история которого сканируется.
        match:
          $ref: '#/components/schemas/ScanMatch'
        returnShape:
          type: string
          description: >-
            Содержимое ответа для совпадений: `transactions` (разобранные
            совпадения в `data`, не более `limit`), `signatures` (`signature`,
            `slot`, `transactionIndex` и `blockTime` для каждого совпадения в
            `data`) или `count` (без `data`; `scan.matchedTransactions` содержит
            количество совпадений). `signatures` и `count` игнорируют `limit` и
            `rawTransaction`.
          enum:
            - transactions
            - signatures
            - count
          default: transactions
        limit:
          type: integer
          description: >-
            Максимальное количество совпадений, возвращаемых в формате
            `transactions`: от 1 до 100.
          minimum: 1
          maximum: 100
          default: 100
        budget:
          $ref: '#/components/schemas/ScanBudget'
        beforeSignature:
          type: string
          description: Сканировать транзакции до этой подписи.
        afterSignature:
          type: string
          description: Сканировать транзакции после этой подписи.
        paginationToken:
          type: string
          description: >-
            Курсор, возвращенный предыдущим сканированием. Формат:
            `slot:transactionIndex`.
        sortOrder:
          type: string
          description: Порядок сканирования истории и возврата совпадений.
          enum:
            - asc
            - desc
          default: desc
        commitment:
          type: string
          description: >-
            Уровень подтверждения, используемый при получении истории.
            `processed` не поддерживается.
          enum:
            - confirmed
            - finalized
          default: confirmed
        status:
          type: string
          description: >-
            Результат выполнения, который следует включить. Фильтрация
            выполняется до сопоставления, поэтому исключенные транзакции не
            учитываются в бюджете.
          enum:
            - succeeded
            - failed
            - any
          default: succeeded
        tokenAccounts:
          allOf:
            - $ref: '#/components/schemas/TokenAccountsFilter'
          description: >-
            Следует ли включать транзакции, которые ссылаются только на счет
            токена, принадлежащий `address`, но не на сам `address`: `none`
            исключает их, `balanceChanged` включает транзакции, изменяющие
            баланс счета токена, а `all` включает их все. Используйте
            `balanceChanged` при сканировании кошелька по минту.
        minContextSlot:
          type: integer
          description: Минимальный слот, в котором можно обработать запрос.
        rawTransaction:
          allOf:
            - $ref: '#/components/schemas/RawTransactionEncoding'
          description: >-
            Кодировка исходной транзакции Solana, возвращаемой как
            `rawTransaction` для каждого успешного результата в формате
            `getTransaction`. Применяется только к формату `transactions`.
        slot:
          allOf:
            - $ref: '#/components/schemas/ComparisonBounds'
          description: Границы сравнения слотов. Каждая граница необязательна.
        time:
          allOf:
            - $ref: '#/components/schemas/ComparisonBounds'
          description: >-
            Границы сравнения времени блока в секундах Unix. Каждая граница
            необязательна.
    ScanPage:
      type: object
      description: Совпадения в запрошенном формате `returnShape` и сводка сканирования.
      properties:
        data:
          description: >-
            Совпадения в порядке `sortOrder`. При `transactions` каждый элемент
            имеет тот же формат `TransactionResult`, который возвращает
            `/v1/parsed-events/transactions`; при `signatures` каждый элемент
            представляет собой `ScanSignature`. Отсутствует при `count`. Может
            быть пустым при наличии `paginationToken`.
          oneOf:
            - type: array
              title: Транзакции
              items:
                $ref: '#/components/schemas/TransactionResult'
            - type: array
              title: Подписи
              items:
                $ref: '#/components/schemas/ScanSignature'
        paginationToken:
          type: string
          description: >-
            Курсор, с которого продолжается следующее сканирование. Отсутствует,
            если сканирование достигло конца истории или окна.
        scan:
          $ref: '#/components/schemas/ScanSummary'
    ErrorResponse:
      type: object
      description: Ответ с ошибкой на уровне запроса.
      properties:
        error:
          type: string
          description: Сообщение об ошибке.
    ScanMatch:
      type: object
      description: >-
        Условия, которым должна соответствовать транзакция. Задайте `programs`,
        `mints` или оба поля. Если заданы оба поля, транзакция должна
        соответствовать обоим условиям.
      additionalProperties: false
      properties:
        programs:
          type: array
          description: >-
            Программы для сопоставления: не более 20, каждая не более одного
            раза. Транзакция считается совпавшей, если содержит инструкцию любой
            из них — верхнего уровня или внутреннюю (CPI) — в пределах `scope`
            программы.
          maxItems: 20
          items:
            $ref: '#/components/schemas/ScanProgramMatch'
        mints:
          type: array
          description: >-
            Минты для сопоставления: не более 20, каждый не более одного раза.
            Транзакция считается совпавшей, если один из ее балансов токенов до
            или после выполнения относится к одному из этих минтов в пределах
            `scope` минта.
          maxItems: 20
          items:
            $ref: '#/components/schemas/ScanMintMatch'
    ScanBudget:
      type: object
      description: Ограничения на объем истории, сканируемый одним запросом.
      additionalProperties: false
      properties:
        maxScannedTransactions:
          type: integer
          description: >-
            Максимальное количество транзакций, сканируемых в этом запросе: от 1
            до 10 000.
          minimum: 1
          maximum: 10000
          default: 10000
    TokenAccountsFilter:
      type: string
      description: >-
        Следует ли включать транзакции, которые ссылаются только на счет токена,
        принадлежащий `address`, но не на сам `address`: `none` исключает их,
        `balanceChanged` включает транзакции, изменяющие баланс счета токена, а
        `all` включает их все.
      enum:
        - none
        - balanceChanged
        - all
      default: none
    RawTransactionEncoding:
      type: string
      description: >-
        Кодировка исходной транзакции Solana, возвращаемой как `rawTransaction`
        для каждого успешного результата в формате `getTransaction`. При
        значении `none` исходная транзакция не возвращается.
      enum:
        - none
        - json
        - jsonParsed
        - base64
      default: none
    ComparisonBounds:
      type: object
      description: Числовые границы сравнения. Каждое поле необязательно.
      additionalProperties: false
      properties:
        gt:
          type: integer
          description: Соответствует значениям, превышающим указанное.
        gte:
          type: integer
          description: Соответствует значениям, превышающим указанное или равным ему.
        lt:
          type: integer
          description: Соответствует значениям меньше указанного.
        lte:
          type: integer
          description: Соответствует значениям меньше указанного или равным ему.
    TransactionResult:
      type: object
      description: Результат работы парсера для отдельной подписи.
      properties:
        signature:
          type: string
          description: Подпись транзакции для этого элемента.
        parserStatus:
          type: string
          description: >-
            `OK`, если разбор выполнен успешно, или `ERROR`, если получить или
            разобрать элемент не удалось.
          enum:
            - OK
            - ERROR
        parsed:
          allOf:
            - $ref: '#/components/schemas/ParsedTransaction'
          description: >-
            Объект разобранной транзакции. Присутствует, если `parserStatus`
            имеет значение `OK`.
        parserError:
          allOf:
            - $ref: '#/components/schemas/ParserError'
          description: >-
            Ошибка на уровне элемента. Присутствует, если `parserStatus` имеет
            значение `ERROR`.
        rawTransaction:
          type: object
          description: >-
            Исходная транзакция Solana в формате `getTransaction` для
            запрошенной кодировки `rawTransaction`. При `base64` поле
            `transaction` имеет вид `[data, "base64"]`. Присутствует только при
            запросе исходной транзакции.
          additionalProperties: true
    ScanSignature:
      type: object
      description: >-
        Совпадение, возвращаемое при значении `signatures` параметра
        `returnShape`.
      properties:
        signature:
          type: string
          description: Подпись транзакции.
        slot:
          type: integer
          description: Слот, содержащий транзакцию.
        transactionIndex:
          type: integer
          description: Позиция транзакции в ее слоте.
        blockTime:
          type: integer
          nullable: true
          description: Время блока в секундах Unix, если доступно.
    ScanSummary:
      type: object
      description: Насколько далеко продвинулось сканирование и почему оно остановилось.
      properties:
        stoppedOn:
          type: string
          description: >-
            Причина остановки сканирования: `windowEnd` (конец истории или
            окна), `limit` (возвращено `limit` совпадений), `budget`
            (просканировано `maxScannedTransactions`) или `deadline` (достигнут
            предел времени запроса).
          enum:
            - windowEnd
            - limit
            - budget
            - deadline
        scannedTransactions:
          type: integer
          description: Количество транзакций, просканированных в этом запросе.
        matchedTransactions:
          type: integer
          description: >-
            Количество совпадений, найденных в этом запросе. Если `returnShape`
            имеет значение `count`, это и есть результат.
        scannedThrough:
          allOf:
            - $ref: '#/components/schemas/ScannedThrough'
          description: >-
            Последняя просканированная транзакция. Отсутствует, если ничего не
            было просканировано.
        creditsCharged:
          type: integer
          description: >-
            Списанные кредиты: 10 за запрос плюс 1 за каждую просканированную
            страницу истории (до 1 000 транзакций на странице).
    ScanProgramMatch:
      type: object
      description: >-
        Находит транзакции с инструкцией `programId` верхнего уровня или
        внутренней инструкцией (CPI). Задайте `instructions`, `discriminators`
        или оба поля, чтобы сузить поиск. Не задавайте ни одно из них, чтобы
        искать любую инструкцию программы.
      required:
        - programId
      additionalProperties: false
      properties:
        programId:
          type: string
          description: Адрес программы.
        instructions:
          type: array
          description: >-
            Имена инструкций из любой версии IDL программы в написании IDL или в
            формате snake_case. Не более 50. Можно сочетать с `discriminators`.
          maxItems: 50
          items:
            type: string
        discriminators:
          type: array
          description: >-
            Префиксы данных инструкций длиной от 1 до 8 байт в шестнадцатеричной
            кодировке с необязательным префиксом `0x`. Не более 50. Можно
            сочетать с `instructions`.
          maxItems: 50
          items:
            type: string
        scope:
          allOf:
            - $ref: '#/components/schemas/MatchScope'
          description: >-
            Какие инструкции программы учитывать. `address` учитывает только
            инструкции со счетом, который совпадает с `address`, является счетом
            токена, принадлежащим `address`, либо счетом токена, минт которого
            совпадает с `address`; если `address` является программой,
            учитываются все инструкции. `transaction` учитывает любую инструкцию
            программы в транзакции.
    ScanMintMatch:
      type: object
      description: >-
        Находит транзакции с балансом токена до или после выполнения для `mint`
        в пределах `scope`. Нативный минт SOL
        `So11111111111111111111111111111111111111111` вместо этого
        сопоставляется по изменениям лампортов без учета комиссии, списанной с
        плательщика.
      required:
        - mint
      additionalProperties: false
      properties:
        mint:
          type: string
          description: >-
            Адрес минта токена. Нативный минт SOL
            `So11111111111111111111111111111111111111111` сопоставляется по
            изменениям лампортов, а не балансов токенов, без учета комиссии.
        scope:
          allOf:
            - $ref: '#/components/schemas/MatchScope'
          description: >-
            Какие балансы токенов минта учитывать. `address` учитывает только
            балансы, для которых счет токена совпадает с `address`, принадлежит
            ему либо минт совпадает с `address`. Для нативного SOL учитываются
            только изменения лампортов `address`. `transaction` учитывает любой
            баланс минта в транзакции. Для нативного SOL учитывается изменение
            лампортов любого счета.
    ParsedTransaction:
      type: object
      description: Модель транзакции parser-v2.
      properties:
        slot:
          type: integer
          description: Слот, содержащий транзакцию.
        blockTime:
          type: integer
          description: Временная метка Unix для блока, если она доступна.
          nullable: true
        fee:
          type: integer
          description: Комиссия за транзакцию в лампортах.
        feePayer:
          type: string
          description: Аккаунт плательщика комиссии, если он доступен.
          nullable: true
        transactionStatus:
          type: string
          description: >-
            `OK`, если транзакция выполнена успешно, или `ERROR`, если при
            выполнении произошла ошибка.
          enum:
            - OK
            - ERROR
        nativeTransfers:
          type: array
          description: Переводы SOL на уровне транзакции в лампортах.
          items:
            $ref: '#/components/schemas/NativeTransfer'
        tokenTransfers:
          type: array
          description: Переводы SPL Token и Token-2022 на уровне транзакции.
          items:
            $ref: '#/components/schemas/TokenTransfer'
        summary:
          allOf:
            - $ref: '#/components/schemas/ParsedSummary'
          description: Наиболее подходящая сводка на уровне транзакции, если она доступна.
          nullable: true
        instructions:
          type: array
          description: >-
            Разобранные инструкции верхнего уровня и внутренние инструкции в
            порядке выполнения.
          items:
            $ref: '#/components/schemas/ParsedInstruction'
    ParserError:
      type: object
      description: Ошибка парсера на уровне элемента.
      properties:
        code:
          type: string
          description: Машиночитаемый код ошибки парсера.
        message:
          type: string
          description: Удобочитаемое сообщение об ошибке парсера.
    ScannedThrough:
      type: object
      description: Позиция последней просканированной транзакции.
      properties:
        slot:
          type: integer
          description: Слот последней просканированной транзакции.
        blockTime:
          type: integer
          nullable: true
          description: Время блока последней просканированной транзакции в секундах Unix.
    MatchScope:
      type: string
      description: >-
        Где должны находиться инструкции программы или балансы токенов минта,
        чтобы они учитывались.
      enum:
        - address
        - transaction
      default: address
    NativeTransfer:
      type: object
      description: Перемещение SOL, обнаруженное на уровне транзакции.
      properties:
        fromUserAccount:
          type: string
          description: Аккаунт, отправляющий лампорты.
          nullable: true
        toUserAccount:
          type: string
          description: Аккаунт, получающий лампорты.
          nullable: true
        amount:
          type: integer
          description: Сумма в лампортах.
    TokenTransfer:
      type: object
      description: Перемещение SPL Token или Token-2022, обнаруженное на уровне транзакции.
      properties:
        fromUserAccount:
          type: string
          description: Владелец или уполномоченный субъект исходной стороны, если известен.
          nullable: true
        toUserAccount:
          type: string
          description: Владелец принимающей стороны, если известен.
          nullable: true
        fromTokenAccount:
          type: string
          description: Исходный токен-аккаунт.
          nullable: true
        toTokenAccount:
          type: string
          description: Токен-аккаунт назначения.
          nullable: true
        rawTokenAmount:
          type: integer
          description: Необработанное целочисленное количество токенов.
        decimals:
          type: integer
          description: >-
            Количество десятичных разрядов выпуска токена, используемое для
            интерпретации необработанного значения.
        tokenStandard:
          type: string
          description: >-
            Стандарт токена, если он известен, например `Fungible` или
            `UnknownStandard`.
        mint:
          type: string
          description: Адрес выпуска токена.
    ParsedSummary:
      type: object
      description: Удобочитаемая сводка по транзакции или инструкции.
      properties:
        type:
          type: string
          description: Тип сводки, например `swap`, `transfer` или `create_account`.
        description:
          type: string
          description: Удобочитаемый текст сводки.
        parsedData:
          type: object
          description: >-
            Структурированное содержимое, на основе которого сформирована
            сводка, если оно доступно. Например, метаданные обмена с полями
            `protocol`, `kind`, суммами и выпусками токенов. Структура зависит
            от типа сводки и протокола.
          nullable: true
          additionalProperties: true
    ParsedInstruction:
      type: object
      description: Разобранная инструкция верхнего уровня или внутренняя инструкция.
      properties:
        instructionIndex:
          type: integer
          description: Индекс инструкции верхнего уровня.
        innerInstructionIndex:
          type: integer
          description: >-
            Индекс внутренней инструкции внутри инструкции верхнего уровня, если
            применимо.
          nullable: true
        stackHeight:
          type: integer
          description: Высота стека, если она доступна.
          nullable: true
        programId:
          type: string
          description: Идентификатор программы, выполнившей инструкцию.
        rawAccounts:
          type: array
          description: >-
            Необработанные открытые ключи аккаунтов, определенные по индексам
            аккаунтов инструкции.
          items:
            type: string
        rawData:
          type: string
          description: Необработанные данные инструкции.
        summary:
          allOf:
            - $ref: '#/components/schemas/ParsedSummary'
          description: Сводка на уровне инструкции, если она доступна.
          nullable: true
        programName:
          type: string
          description: Известное парсеру имя программы, если оно доступно.
          nullable: true
        instructionName:
          type: string
          description: Декодированное имя инструкции, если оно доступно.
          nullable: true
        decoded:
          allOf:
            - $ref: '#/components/schemas/DecodedInstruction'
          description: >-
            Декодированные аргументы и аккаунты, если декодирование выполнено
            успешно.
          nullable: true
    DecodedInstruction:
      type: object
      description: Декодированные аргументы инструкции и именованные аккаунты.
      properties:
        args:
          type: object
          description: >-
            Декодированные аргументы инструкции. Имена и структура аргументов
            зависят от инструкции.
          additionalProperties: true
        accounts:
          type: array
          description: Аккаунты декодированной инструкции с именами, известными парсеру.
          items:
            $ref: '#/components/schemas/DecodedAccount'
    DecodedAccount:
      type: object
      description: Именованный аккаунт, используемый декодированной инструкцией.
      properties:
        name:
          type: string
          description: Имя аккаунта, известное парсеру.
        pubkey:
          type: string
          description: Открытый ключ аккаунта.
        isSigner:
          type: boolean
          description: Указывает, подписал ли аккаунт транзакцию.
        isWritable:
          type: boolean
          description: >-
            Указывает, был ли аккаунт доступен для записи при выполнении
            инструкции.
  responses:
    InternalError:
      description: >-
        Не удалось обработать запрос на сервере, например потому, что
        сохраненную транзакцию в запрошенном диапазоне не удалось декодировать.
        Весь запрос завершается ошибкой; частичные результаты не возвращаются.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponse'
          examples:
            default:
              value:
                error: внутренняя ошибка сервера
  securitySchemes:
    ApiKeyQuery:
      type: apiKey
      in: query
      name: api-key

````

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