Wallet API находится на стадии бета-тестирования. Эндпоинты и форматы ответов могут измениться.
Обзор
Эндпоинт Historical Balance отвечает на вопрос: каким был баланс определённого токена (или нативного SOL) в этом кошельке в конкретный момент в прошлом? Эндпоинт Balances возвращает текущие активы, аbalance-at — активы на момент любой временной метки, даты и времени или слота.
Он находит последнюю транзакцию на запрошенный момент времени или до него, в которой участвовали кошелёк и токен, а затем считывает из неё баланс кошелька после транзакции. Баланс после транзакции сохраняется с момента этой транзакции до следующей, поэтому «баланс на момент T» — это баланс после последней соответствующей транзакции, время блока (или слот) которой не позднее T. Для типичного кошелька это точное, а не приблизительное значение.
- Токены (SPL / Token-2022): данные считываются из балансов токенов после транзакции и суммируются по счетам токенов кошелька для данного минта.
- Нативный SOL: данные считываются из балансов лампортов после транзакции. Для нативного SOL укажите псевдоминт
So11111111111111111111111111111111111111111.
Когда использовать
Используйте Historical Balance API для следующих задач:- Расчёт PnL: определение активов в начале и конце периода.
- Себестоимость и налоговые лоты: восстановление балансов на момент приобретения или выбытия.
- Разрешение споров: подтверждение активов кошелька в конкретный момент.
- Проверка снимков: проверка баланса кошелька на момент аирдропа или снимка для голосования.
- Бухгалтерский учёт и аудит: восстановление состояния кошелька на границах отчётных периодов.
Быстрый старт
Баланс токена на момент временной метки
Получите баланс USDC в кошельке на момент временной метки Unix:- JavaScript
- Python
- cURL
Баланс токена на указанную дату и время
Передайте удобочитаемые дату и время вместо временной метки. Не забудьте закодировать пробел в URL как%20:
Баланс нативного SOL на момент слота
Для нативного SOL используйте псевдоминтSo11111111111111111111111111111111111111111. Запросы по слотам точны и детерминированы:
Параметры запроса
Необходимо указать ровно один из параметров:
time, datetime или slot. Если не указать ни одного или указать несколько, возвращается ошибка 400.
Форматы даты и времени
Поддерживаемые форматы:- Только дата:
2025-01-10→ полночь по UTC - Дата и время:
2025-01-10 19:20:00или2025-01-10T19:20:00(секунды необязательны) → UTC - С явным часовым поясом:
2025-01-10T19:20:00Z,2025-01-10T19:20:00+02:00,2025-01-10T19:20:00-05:00→ учитывается как указано
01/10/2025, 2025-13-10, 2025-02-30) возвращается ошибка 400.
Формат ответа
Примечания к полям
wallet: указанный в запросе адрес кошелька.mint: указанный в запросе минт (псевдоминт SOL для нативного SOL).isNative: значениеtrue, если результат относится к нативному SOL.balance: удобочитаемая сумма в виде десятичной строки — именно строки, а не числа, чтобы большие балансы не теряли точность. Конечные нули удаляются ("1.5", а не"1.500000").balanceRaw: точная сумма в минимальных единицах (в лампортах для SOL) в виде строки.decimals: количество десятичных разрядов токена (9 для SOL).requested: данные исходного запроса. При использованииdatetimeполеtimeтакже заполняется вычисленным количеством секунд от начала эпохи, что позволяет увидеть интерпретацию по UTC.asOf: транзакция, из которой был считан баланс (slot,blockTime,signature).
asOf: null означает нулевой баланс, а не ошибку. Если на запрошенный момент времени или до него у кошелька не было подходящей транзакции, эндпоинт возвращает 200 с balance: "0" и asOf: null — к тому моменту токенов в кошельке ещё не было.
Сценарии использования
Изменение баланса за период
Сравните активы в два момента времени:Проверка соответствия условиям снимка
Убедитесь, что токен находился в кошельке на момент слота снимка:Рекомендации
- Используйте
slotдля получения детерминированных результатов. Значенияtimeиdatetimeвычисляются по времени блоков, сообщаемому валидатором, которое может отклоняться на несколько секунд. Если важна точная воспроизводимость (например, для снимков или аудитов), выполняйте запрос поslot. - Обрабатывайте балансы как строки.
balanceиbalanceRawпредставлены строками для сохранения точности. Для арифметических операций используйтеBigInt(balanceRaw)(или целые числа произвольной точности в вашем языке). Не преобразуйте значения в числа с плавающей точкой. - Считайте
asOf: nullнулём.nullasOf— это успешный ответ, означающий, что до запрошенного момента у кошелька не было активности с этим токеном. Не обрабатывайте его как ошибку. - Кешируйте исторические результаты. Баланс на момент в прошлом никогда не меняется. Кешируйте результаты без ограничения срока, чтобы избежать повторных вызовов API.
Распространённые ошибки
Ограничения
- Баланс кошельков с несколькими счетами токенов может быть занижен. Баланс считывается из одной последней подходящей транзакции. В распространённом случае, когда для каждого минта существует один связанный счёт токена, результат точен. Если один и тот же минт хранится в нескольких счетах токенов кошелька, а последняя транзакция затронула только часть из них, баланс может быть занижен.
- Точность нативного SOL при очень больших балансах. Для балансов SOL свыше примерно 9 007 199 SOL (2⁵³ лампортов) точность может быть потеряна в вышестоящем сервисе. На суммы токенов это не влияет.
- Точность
time/datetimeзависит от времени блоков, сообщаемого валидатором, которое может отклоняться на несколько секунд. Для точных и детерминированных результатов используйтеslot. - Один токен на запрос. Пакетная форма для нескольких минтов или «всех балансов на момент T» отсутствует.
Дальнейшие действия
Wallet Balances
Получите текущие токены и NFT в кошельке с их стоимостью в долларах США.
Wallet API Overview
Все эндпоинты Wallet API и общие соглашения.
API Reference
Схемы запросов и ответов для исторического баланса.