getInflationReward позволяет запрашивать инфляционные вознаграждения (обычно называемые вознаграждениями за стейкинг), начисленные на один или несколько адресов за определённую эпоху.
Это полезно для проверки вознаграждений, полученных стейк-аккаунтами или любыми другими аккаунтами, на которые могли быть начислены инфляционные вознаграждения.
Распространённые сценарии использования
- Проверка вознаграждений за стейкинг: Проверьте, получил ли стейк-аккаунт ожидаемые вознаграждения за прошедшую эпоху.
- Отслеживание истории вознаграждений: Запрашивайте вознаграждения за несколько эпох, чтобы сформировать историю для адреса.
- Аудит выплат валидатора: Валидаторы могут использовать этот метод для проверки распределения вознаграждений (хотя вознаграждения выплачиваются стейк-аккаунтам, а не напрямую идентификаторам валидаторов).
Параметры запроса
Метод принимает два основных параметра:addresses(массив строк): список публичных ключей аккаунтов в кодировке base-58, которые необходимо запросить. Максимально допустимое количество адресов может зависеть от поставщика RPC (например, Helius позволяет передавать до 1005 адресов на платных тарифах).config(объект, необязательно): объект конфигурации со следующими необязательными полями:commitment(строка, необязательно): задаёт уровень подтверждения. Если значение не указано, по умолчанию используетсяfinalized.epoch(целое число, необязательно): номер эпохи, за которую необходимо получить вознаграждения. Если параметр опущен, узел RPC обычно использует последнюю завершённую эпоху, за которую уже были распределены вознаграждения.minContextSlot(целое число, необязательно): минимальный слот, в котором можно обработать запрос. Это гарантирует, что запрос выполняется к состоянию реестра, обработавшему данные как минимум до этого слота.
Структура ответа
Полеresult ответа JSON-RPC представляет собой массив, соответствующий входному массиву addresses. Каждый элемент массива результатов будет содержать одно из следующих значений:
- Объект со сведениями об инфляционном вознаграждении, если адрес получил вознаграждение за указанную эпоху.
null, если адрес не получил инфляционное вознаграждение за эту эпоху или аккаунт не существовал.
epoch(u64): эпоха, за которую было начислено вознаграждение.effectiveSlot(u64): слот, в котором вознаграждение было применено и вступило в силу.amount(u64): сумма вознаграждения в лампортах.postBalance(u64): баланс аккаунта в лампортах после начисления вознаграждения.commission(u8 | undefined): для голосующих аккаунтов — процент комиссии (0–100), удержанный валидатором на момент начисления вознаграждения. Для неголосующих аккаунтов значением будетundefined.
Примеры
1. Получение инфляционного вознаграждения для одного адреса за предыдущую эпоху
В этом примере выполняется получение инфляционного вознаграждения для определённого адреса за последнюю завершённую эпоху.2. Получение инфляционных вознаграждений для нескольких адресов за определённую эпоху
Рекомендации разработчикам
- Выбор эпохи: Вознаграждения начисляются один раз за эпоху. Убедитесь, что запрашиваете правильный номер эпохи.
- Время начисления вознаграждений: Инфляционные вознаграждения рассчитываются в конце эпохи и применяются в начале следующей. Поле
effectiveSlotуказывает, когда это происходит. - Результаты null: Значение
nullдля адреса означает, что для этого адреса не найдено вознаграждение за указанную эпоху. Это может произойти, если аккаунт не соответствовал требованиям (например, на стейк-аккаунте было недостаточно средств в стейкинге), вознаграждение было нулевым или аккаунт в тот момент не существовал. - Ограничения частоты запросов: Учитывайте ограничения частоты запросов поставщика RPC, особенно при запросе большого количества адресов.
getInflationReward для точного получения и проверки вознаграждений за стейкинг в сети Solana.