getRecentPrioritizationFees предоставляет сведения о приоритетных комиссиях, уплаченных в последних блоках сети Solana. Анализируя эти комиссии, разработчики могут принимать более обоснованные решения о размере дополнительной комиссии (приоритетной комиссии), добавляемой к транзакциям для повышения вероятности их быстрой обработки, особенно в периоды высокой активности сети.
Узлы обычно кэшируют данные о приоритетных комиссиях для последних 150 блоков.
Распространенные сценарии использования
- Динамическая оценка комиссии: Определите конкурентоспособную приоритетную комиссию для транзакции на основе комиссий, которые недавно обеспечивали успешную обработку.
- Анализ перегрузки: Оцените текущее состояние перегрузки сети по уровню уплачиваемых приоритетных комиссий.
- Интеграция с кошельками: Позвольте кошелькам рекомендовать пользователям подходящие приоритетные комиссии с учетом недавнего состояния сети.
- Арбитражные боты: Для чувствительных ко времени операций, таких как арбитраж, выбор оптимальной приоритетной комиссии критически важен для своевременного выполнения.
Параметры запроса
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 может значительно повысить надежность подтверждения транзакций в условиях динамически меняющейся нагрузки на сеть.