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

# Как использовать getRecentPrioritizationFees

> Узнайте о сценариях использования getRecentPrioritizationFees, примерах кода, параметрах запроса, структуре ответа и рекомендациях.

Метод RPC [`getRecentPrioritizationFees`](https://www.helius.dev/docs/api-reference/rpc/http/getrecentprioritizationfees) предоставляет сведения о приоритетных комиссиях, уплаченных в последних блоках сети Solana. Анализируя эти комиссии, разработчики могут принимать более обоснованные решения о размере дополнительной комиссии ([приоритетной комиссии](https://www.helius.dev/blog/priority-fees-understanding-solanas-transaction-fee-mechanics)), добавляемой к транзакциям для повышения вероятности их быстрой обработки, особенно в периоды высокой активности сети.

Узлы обычно кэшируют данные о приоритетных комиссиях для последних 150 блоков.

## Распространенные сценарии использования

* **Динамическая оценка комиссии:** Определите конкурентоспособную приоритетную комиссию для транзакции на основе комиссий, которые недавно обеспечивали успешную обработку.
* **Анализ перегрузки:** Оцените текущее состояние перегрузки сети по уровню уплачиваемых приоритетных комиссий.
* **Интеграция с кошельками:** Позвольте кошелькам рекомендовать пользователям подходящие приоритетные комиссии с учетом недавнего состояния сети.
* **Арбитражные боты:** Для чувствительных ко времени операций, таких как арбитраж, выбор оптимальной приоритетной комиссии критически важен для своевременного выполнения.

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

1. **`lockedWritableAccounts`** (`array` из `string`, необязательно):
   * Массив публичных ключей учетных записей в кодировке base-58, которые транзакция должна заблокировать для записи.
   * Можно указать не более 128 адресов.
   * Если параметр указан, метод возвращает приоритетные комиссии, уплаченные транзакциями, которые заблокировали **все** указанные учетные записи для записи.
   * Если параметр пропущен или передан пустой массив, метод возвращает более общие сведения о приоритетных комиссиях, наблюдавшихся в последних блоках, без привязки к конкретному набору учетных записей.

## Структура ответа

Поле `result` ответа JSON-RPC представляет собой массив объектов приоритетных комиссий. Каждый объект содержит сведения о комиссиях из конкретного недавнего слота и имеет следующую структуру:

* **`slot`** (`u64`): Номер слота, в котором были обработаны транзакции, использованные для формирования этих данных о комиссиях.
* **`prioritizationFee`** (`u64`): Минимальная приоритетная комиссия (в микролампортах на вычислительную единицу), уплаченная хотя бы одной транзакцией в этом слоте и соответствующая фильтру `lockedWritableAccounts`, если он задан. Значение `0` часто означает, что ни одна транзакция в этом слоте, соответствующая критериям, не уплатила дополнительную приоритетную комиссию сверх базовой или что узел не обнаружил таких транзакций для указанных учетных записей.

## Примеры

### 1. Получение последних глобальных приоритетных комиссий

В этом примере запрашивается общий список последних приоритетных комиссий без указания заблокированных учетных записей.

<CodeGroup>
  ```bash cURL theme={"system"}
  # Replace <api-key> with your Helius API key
  curl https://mainnet.helius-rpc.com/?api-key=<api-key> -X POST -H "Content-Type: application/json" -d \
    '{
      "jsonrpc": "2.0",
      "id": 1,
      "method": "getRecentPrioritizationFees",
      "params": [[]] # Empty array for global fees
    }'
  ```

  ```javascript JavaScript (using @solana/web3.js) theme={"system"}
  // Replace <api-key> with your Helius API key
  const { Connection } = require('@solana/web3.js');

  async function fetchGlobalPrioritizationFees() {
    const connection = new Connection('https://mainnet.helius-rpc.com/?api-key=<api-key>');
    try {
      // Pass an empty array or omit the parameter for global fees
      const fees = await connection.getRecentPrioritizationFees([]); 
      if (fees && fees.length > 0) {
        console.log(`Fetched ${fees.length} recent prioritization fee samples (global):`);
        fees.forEach((feeInfo, index) => {
          console.log(`--- Sample ${index + 1} ---`);
          console.log(`  Slot: ${feeInfo.slot}`);
          console.log(`  Prioritization Fee (micro-lamports/CU): ${feeInfo.prioritizationFee}`);
        });
        // Example: Calculate the median of non-zero fees
        const nonZeroFees = fees.filter(f => f.prioritizationFee > 0).map(f => f.prioritizationFee).sort((a,b) => a - b);
        if (nonZeroFees.length > 0) {
          const mid = Math.floor(nonZeroFees.length / 2);
          const medianFee = nonZeroFees.length % 2 !== 0 ? nonZeroFees[mid] : (nonZeroFees[mid - 1] + nonZeroFees[mid]) / 2;
          console.log(`\nMedian non-zero priority fee: ${medianFee} micro-lamports/CU`);
        }
      } else {
        console.log('No recent prioritization fee data returned.');
      }
    } catch (error) {
      console.error('Error fetching global prioritization fees:', error);
    }
  }

  fetchGlobalPrioritizationFees();
  ```
</CodeGroup>

### 2. Получение последних приоритетных комиссий для конкретных учетных записей, доступных для записи

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

<CodeGroup>
  ```bash cURL theme={"system"}
  # Replace <api-key> with your Helius API key
  # Replace with actual public keys you are interested in
  curl https://mainnet.helius-rpc.com/?api-key=<api-key> -X POST -H "Content-Type: application/json" -d \
    '{
      "jsonrpc": "2.0",
      "id": 1,
      "method": "getRecentPrioritizationFees",
      "params": [[
        "Vote111111111111111111111111111111111111111", 
        "Stake11111111111111111111111111111111111111"
      ]]
    }'
  ```

  ```javascript JavaScript (using @solana/web3.js) theme={"system"}
  // Replace <api-key> with your Helius API key
  const { Connection, PublicKey } = require('@solana/web3.js');

  async function fetchPrioritizationFeesForAccounts() {
    const connection = new Connection('https://mainnet.helius-rpc.com/?api-key=<api-key>');
    
    // Replace with actual public keys your transaction will lock
    const accountsToLock = [
      new PublicKey('Vote111111111111111111111111111111111111111'),
      new PublicKey('Stake11111111111111111111111111111111111111')
    ];

    try {
      const fees = await connection.getRecentPrioritizationFees(accountsToLock.map(pk => pk.toBase58()));
      if (fees && fees.length > 0) {
        console.log(`Fetched ${fees.length} recent prioritization fee samples for specified accounts:`);
        fees.forEach((feeInfo, index) => {
          console.log(`--- Sample ${index + 1} ---`);
          console.log(`  Slot: ${feeInfo.slot}`);
          console.log(`  Prioritization Fee (micro-lamports/CU): ${feeInfo.prioritizationFee}`);
        });
      } else {
        console.log('No recent prioritization fee data returned for the specified accounts.');
      }
    } catch (error) {
      console.error('Error fetching prioritization fees for accounts:', error);
    }
  }

  fetchPrioritizationFeesForAccounts();
  ```
</CodeGroup>

## Рекомендации разработчикам

* **Единицы комиссии:** Приоритетные комиссии выражаются в микролампортах (0,000001 лампорта) на вычислительную единицу (CU).
* **Окно кэширования:** Узлы RPC обычно кэшируют эти комиссии примерно для 150 блоков. Таким образом, данные охватывают относительно короткий период истории — примерно 1–2 минуты.
* **Нулевые комиссии:** Значение `0` в поле `prioritizationFee` не обязательно означает, что комиссии не уплачивались. Оно указывает, что для данного слота и учетной записи или записей отобранные транзакции не включали приоритетную комиссию либо ее размер был ниже порога, который узел считает значимым.
* **Стратегическое использование:** Не выбирайте просто самую высокую комиссию за последнее время. Проанализируйте распределение, например медиану или 75-й процентиль ненулевых комиссий, чтобы сделать экономически обоснованный выбор. Переплата не гарантирует более быстрое включение после определенного уровня, если блок уже заполнен транзакциями с высоким приоритетом.
* **Вычислительные единицы:** Общая приоритетная комиссия за транзакцию составит `prioritizationFee_per_CU * your_transaction_compute_units`. Также необходимо задать лимит вычислительных единиц для транзакции (`ComputeBudgetProgram.setComputeUnitLimit`) и цену (`ComputeBudgetProgram.setComputeUnitPrice`).

Эффективное использование `getRecentPrioritizationFees` может значительно повысить надежность подтверждения транзакций в условиях динамически меняющейся нагрузки на сеть.


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