Skip to main content
Метод RPC getRecentPrioritizationFees предоставляет сведения о приоритетных комиссиях, уплаченных в последних блоках сети Solana. Анализируя эти комиссии, разработчики могут принимать более обоснованные решения о размере дополнительной комиссии (приоритетной комиссии), добавляемой к транзакциям для повышения вероятности их быстрой обработки, особенно в периоды высокой активности сети. Узлы обычно кэшируют данные о приоритетных комиссиях для последних 150 блоков.

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

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

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

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

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

Поле result ответа JSON-RPC представляет собой массив объектов приоритетных комиссий. Каждый объект содержит сведения о комиссиях из конкретного недавнего слота и имеет следующую структуру:
  • slot (u64): Номер слота, в котором были обработаны транзакции, использованные для формирования этих данных о комиссиях.
  • prioritizationFee (u64): Минимальная приоритетная комиссия (в микролампортах на вычислительную единицу), уплаченная хотя бы одной транзакцией в этом слоте и соответствующая фильтру lockedWritableAccounts, если он задан. Значение 0 часто означает, что ни одна транзакция в этом слоте, соответствующая критериям, не уплатила дополнительную приоритетную комиссию сверх базовой или что узел не обнаружил таких транзакций для указанных учетных записей.

Примеры

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

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

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

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

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

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