# Waves Data Service API
Дата-сервис Waves агрегирует данные блокчейна в реляционную базу данных PostrgreSQL и обеспечивает быстрый и удобный поиск информации по множеству фильтров.
API дата-сервиса позволяет получить следующие данные:
- Список транзакций, в том числе транзакций каждого типа.
- Данные токенов (ассетов) по ID или биржевым тикерам.
- Рыночные данные о торговле криптовалютами.
Команда Waves предоставляет инстансы дата-сервиса с общедоступными публичными методами API. Интерактивная документация в Swagger UI доступна по ссылкам:
- Mainnet: https://api.wavesplatform.com/v0/docs/
- Testnet: https://api-testnet.wavesplatform.com/v0/docs/
- Stagenet: https://api-stagenet.wavesplatform.com/v0/docs/
💡 Все запросы к API дата-сервиса можно выполнять как методом GET, так и методом POST. Параметры POST-запроса нужно указать в теле запроса в формате JSON; имена ключей такие же, как имена query-параметров в GET-запросе.
# Поиск транзакций
- Методы /transactions/{txType} предоставляют список транзакций указанного типа, с применением различных фильтров в зависимости от типа. Например, метод /transactions/transfer возвращает список транзакций перевода с отбором по отправителю, получателю, а также по идентификатору ассета.
- Метод /transactions/all предоставляет список транзакций независимо от типа, с отбором по адресу отправителя и временной метке.
Для списков транзакций доступна постраничная выборка. Вместе со списком транзакций методы возвращают поля isLastPage
и lastCursor
. Если "isLastPage": false
, то для получения следующей страницы нужно указать в запросе в параметре after
значение из lastCursor
.
# Получение рыночных данных
API дата-сервиса предоставляет рыночные данные по любой паре ассетов. Источником данных являются транзакции обмена. Источником тикеров является биржа Waves.Exchange, разработанная сторонней командой из сообщества.
Методы /pairs* предоставляют текущие рыночные данные: цену последней сделки и данные за последние 24 часа: минимальную, максимальную и среднюю цену, объем и количество сделок и др.
⚠️ Текущие рыночные данные, в том числе цена, недоступны для пары ассетов, если по ней не было ни одной сделки (транзакции обмена) за последние 24 часа.
Метод /candles предоставляет данные для графика свечей OHCLV (open-high-low-close-volume) за указанный период.
Если в ответе отсутствуют данные
Если методы возвращают по выбранной паре {amountAsset}/{priceAsset}
null или Not found, причины могут быть следующие:
Ассеты указаны в запросе в неправильном порядке. Необходимо определить, какой из ассетов является amount-ассетом (базовой валютой), а какой — price-ассетом (валютой котировки):
• Вы можете посмотреть пары ассетов в приложении Waves.Exchange (для Mainnet, Testnet или Stagenet). Первый ассет в паре — это amount-ассет, второй — price-ассет.
• Вы также можете определить пары с помощью метода
GET /matcher/settings
API матчера (для Mainnet, Testnet или Stagenet):• Если оба ассета есть в списке
priceAssets
, price-ассетом является тот, который следует первым.• Если в списке есть только один ассет из пары, он и является price-ассетом.
• Если обоих ассетов нет в списке, их ID в байтовом представлении нужно отсортировать лексикографически: первый (наименьший) является price-ассетом.
Подробнее см. раздел Matcher API документации Waves.Exchange.
Не было транзакций обмена по выбранной паре в тот период, за который метод предоставляет данные (последние 24 часа для методов
/pairs*
). Проверить это можно с помощью метода /transactions/exchange, получив, например, 10 последних транзакций обмена по этой паре.
Рыночные данные доступны по всем матчерам — отправителям транзакций обмена или по выбранному матчеру. Чтобы получить данные по выбранному матчеру, укажите в запросе адрес матчера.
💡 Адрес матчера Waves.Exchange:
- Mainnet: 3PEjHv3JGjcWNpYEEkif2w8NXV4kbhnoGgu
- Testnet: 3N8aZG6ZDfnh8YxS6aNcteobN8eXTWHaBBd
- Stagenet: 3MQkebjth2vaisUu7ENGYWEij3qWQdLxibe
# Ограничения
- Количество одновременных соединений с одного IP-адреса — не более 15. При превышении лимита возвращается HTTP-статус 418.
- Количество запросов в секунду с одного IP-адреса — не более 40. Если количество поступающих запросов превышает заданное значение, то избыточные запросы ставятся в очередь на обработку. Размер очереди (burst) — 20. Если количество избыточных запросов превысило размер очереди, новые запросы не ставятся в очередь, возвращается HTTP-статус 429.
⚠️ Проверяйте производительность запросов к API дата-сервиса, прежде чем запускать свое приложение в продакшен и давать нагрузку. Если используемая вами комбинация фильтров работает медленно (время ответа порядка секунды), обратитесь в чат разработчиков в Telegram: мы подскажем, как получить нужные вам данные другим способом, или оптимизируем обработку такого запроса в дата-сервисе.